161 lines
4.3 KiB
Go
161 lines
4.3 KiB
Go
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
|
|
}
|