123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package pay
- import (
- "context"
- "go-common/app/interface/main/creative/conf"
- "go-common/app/interface/main/creative/dao/faq"
- "go-common/app/interface/main/creative/dao/pay"
- "go-common/app/interface/main/creative/dao/up"
- faqMdl "go-common/app/interface/main/creative/model/faq"
- "go-common/app/interface/main/creative/service"
- "go-common/library/log"
- "go-common/library/sync/pipeline/fanout"
- "time"
- )
- //Service struct
- type Service struct {
- c *conf.Config
- faq *faq.Dao
- cache *fanout.Fanout
- pay *pay.Dao
- up *up.Dao
- exemptUgcPayUps map[int64]int64
- }
- //New get service
- func New(c *conf.Config, rpcdaos *service.RPCDaos) *Service {
- s := &Service{
- c: c,
- faq: faq.New(c),
- pay: pay.New(c),
- up: rpcdaos.Up,
- cache: fanout.New("service_ugcpay", fanout.Worker(1), fanout.Buffer(10240)),
- }
- s.loadExemptUgcPayUps()
- go s.loadproc()
- return s
- }
- // loadExemptUgcPayUps
- func (s *Service) loadExemptUgcPayUps() {
- ups, err := s.up.UpSpecial(context.TODO(), 17)
- if err != nil {
- return
- }
- s.exemptUgcPayUps = ups
- }
- // loadproc
- func (s *Service) loadproc() {
- for {
- time.Sleep(5 * time.Minute)
- s.loadExemptUgcPayUps()
- }
- }
- // Pre fn
- func (s *Service) Pre(c context.Context, mid int64) (PrePay map[string]interface{}, err error) {
- PrePay = map[string]interface{}{
- "protocol_id": s.c.UgcPay.ProtocolID,
- "protocol_need_read": false,
- "white": false,
- }
- log.Warn("s.exemptUgcPayUps (%+v)", s.exemptUgcPayUps)
- if _, ok := s.exemptUgcPayUps[mid]; ok {
- PrePay["protocol_need_read"] = true
- PrePay["white"] = true
- if accept, _ := s.pay.UserAcceptProtocol(c, s.c.UgcPay.ProtocolID, mid); accept {
- PrePay["protocol_need_read"] = false
- }
- }
- return
- }
- // Protocol fn
- func (s *Service) Protocol(c context.Context, protocolID string) (pd *faqMdl.Detail, err error) {
- resD := make([]*faqMdl.Detail, 0)
- var (
- total int
- protocolLimitLength = int(1000)
- )
- if resD, total, err = s.faq.DetailCache(c, faqMdl.FaqUgcProtocolQuesTypeID, 1, 1, protocolLimitLength); err != nil || len(resD) == 0 {
- if resD, total, err = s.faq.Detail(context.Background(), faqMdl.FaqUgcProtocolQuesTypeID, 1, 1, protocolLimitLength); err != nil {
- log.Error("s.faq.Detail(%s,%d,%d,%d) error(%v)", faqMdl.FaqUgcProtocolQuesTypeID, 1, 1, protocolLimitLength, err)
- return
- }
- }
- if len(resD) > 0 {
- s.cache.Do(c, func(c context.Context) {
- s.faq.SetDetailCache(context.Background(), faqMdl.FaqUgcProtocolQuesTypeID, 1, 1, protocolLimitLength, total, resD)
- })
- for _, v := range resD {
- if v.AnswerID == protocolID {
- pd = v
- return
- }
- }
- }
- return
- }
- // White fn
- func (s *Service) White(c context.Context, mid int64) (white bool, err error) {
- if _, ok := s.exemptUgcPayUps[mid]; ok {
- white = true
- }
- return
- }
|