You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
2.8 KiB
108 lines
2.8 KiB
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 |
|
}
|
|
|