123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- package service
- import (
- "context"
- "strconv"
- "time"
- "go-common/app/job/main/sms/dao/chuanglan"
- "go-common/app/job/main/sms/dao/mengwang"
- smsmdl "go-common/app/service/main/sms/model"
- "go-common/library/log"
- "go-common/library/sync/errgroup"
- )
- const (
- _callbackSize = 100
- )
- func (s *Service) dispatchCallback(provider int32) {
- switch provider {
- case smsmdl.ProviderChuangLan:
- s.waiter.Add(1)
- go s.callbackChuangLanproc()
- case smsmdl.ProviderMengWang:
- s.waiter.Add(1)
- go s.callbackMengWangproc()
- }
- }
- func (s *Service) callbackChuangLanproc() {
- defer s.waiter.Done()
- log.Info("callbackChuangLanproc start")
- group := errgroup.Group{}
- cli := chuanglan.NewClient(s.c)
- for {
- if s.closed {
- log.Info("callbackChuangLanproc exit")
- return
- }
- group.Go(func() error {
- callbacks, err := cli.Callback(context.Background(), s.c.Provider.ChuangLanSmsUser, s.c.Provider.ChuangLanSmsPwd, s.c.Provider.ChuangLanSmsCallbackURL, _callbackSize)
- if err != nil {
- time.Sleep(time.Second)
- return nil
- }
- s.sendChuangLanCallbacks(smsmdl.TypeSms, callbacks)
- return nil
- })
- group.Go(func() error {
- callbacks, err := cli.Callback(context.Background(), s.c.Provider.ChuangLanActUser, s.c.Provider.ChuangLanActPwd, s.c.Provider.ChuangLanActCallbackURL, _callbackSize)
- if err != nil {
- time.Sleep(time.Second)
- return nil
- }
- s.sendChuangLanCallbacks(smsmdl.TypeActSms, callbacks)
- return nil
- })
- group.Go(func() error {
- callbacks, err := cli.CallbackInternational(context.Background(), _callbackSize)
- if err != nil {
- time.Sleep(time.Second)
- return nil
- }
- s.sendChuangLanCallbacks(smsmdl.TypeSms, callbacks)
- return nil
- })
- group.Wait()
- time.Sleep(time.Second)
- }
- }
- func (s *Service) sendChuangLanCallbacks(typ int32, cbs []*chuanglan.Callback) (err error) {
- ts := time.Now().Unix()
- for _, cb := range cbs {
- if cb.NotifyTime != "" {
- if t, e := time.ParseInLocation("060102150405", cb.NotifyTime, time.Local); e != nil {
- log.Warn("sendChuangLanCallbacks(%+v) parse time error(%v)", cb, e)
- } else {
- ts = t.Unix()
- }
- }
- s.sendUserActionLog(&smsmdl.ModelUserActionLog{
- MsgID: cb.MsgID,
- Mobile: cb.Mobile,
- Status: cb.Status,
- Desc: cb.Desc,
- Provider: smsmdl.ProviderChuangLan,
- Type: typ,
- Action: smsmdl.UserActionCallback,
- Ts: ts,
- })
- }
- return
- }
- func (s *Service) callbackMengWangproc() {
- defer s.waiter.Done()
- log.Info("callbackMengWangproc start")
- group := errgroup.Group{}
- cli := mengwang.NewClient(s.c)
- for {
- if s.closed {
- log.Info("callbackMengWangproc exit")
- return
- }
- group.Go(func() error {
- callbacks, err := cli.Callback(context.Background(), s.c.Provider.MengWangSmsUser, s.c.Provider.MengWangSmsPwd, s.c.Provider.MengWangSmsCallbackURL, _callbackSize)
- if err != nil {
- time.Sleep(time.Second)
- return nil
- }
- s.sendMengWangCallbacks(smsmdl.TypeSms, callbacks)
- return nil
- })
- group.Go(func() error {
- callbacks, err := cli.Callback(context.Background(), s.c.Provider.MengWangActUser, s.c.Provider.MengWangActPwd, s.c.Provider.MengWangActCallbackURL, _callbackSize)
- if err != nil {
- time.Sleep(time.Second)
- return nil
- }
- s.sendMengWangCallbacks(smsmdl.TypeActSms, callbacks)
- return nil
- })
- group.Go(func() error {
- callbacks, err := cli.Callback(context.Background(), s.c.Provider.MengWangInternationUser, s.c.Provider.MengWangInternationPwd, s.c.Provider.MengWangInternationalCallbackURL, _callbackSize)
- if err != nil {
- time.Sleep(time.Second)
- return nil
- }
- s.sendMengWangCallbacks(smsmdl.TypeSms, callbacks)
- return nil
- })
- group.Wait()
- time.Sleep(time.Second)
- }
- }
- func (s *Service) sendMengWangCallbacks(typ int32, cbs []*mengwang.Callback) (err error) {
- ts := time.Now().Unix()
- for _, cb := range cbs {
- if cb.ReportTime != "" {
- if t, e := time.ParseInLocation("2006-01-02 15:04:05", cb.ReportTime, time.Local); e != nil {
- log.Warn("sendMengWangCallbacks(%+v) parse time error(%v)", cb, e)
- } else {
- ts = t.Unix()
- }
- }
- s.sendUserActionLog(&smsmdl.ModelUserActionLog{
- MsgID: strconv.FormatInt(cb.MsgID, 10),
- Mobile: cb.Mobile,
- Status: cb.Status,
- Desc: cb.Desc,
- Provider: smsmdl.ProviderMengWang,
- Type: typ,
- Action: smsmdl.UserActionCallback,
- Ts: ts,
- })
- }
- return
- }
|