- 新订单时,发送短信消息
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/netprinter"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/smsmsg"
|
||||
"git.rosy.net.cn/jx-callback/business/msghub"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -184,10 +185,7 @@ func init() {
|
||||
}
|
||||
}
|
||||
if isAcceptIt {
|
||||
utils.CallFuncAsync(func() {
|
||||
netprinter.PrintOrderByOrder(jxcontext.AdminCtx, order)
|
||||
weixinmsg.NotifyNewOrder(order)
|
||||
})
|
||||
sch.notifyNewOrder(order)
|
||||
msghub.OnNewOrder(order)
|
||||
} else {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "黑名单拒单", "")
|
||||
@@ -307,10 +305,7 @@ func (s *DefScheduler) OnOrderNew(order *model.GoodsOrder, isPending bool) (err
|
||||
if order.Status >= model.OrderStatusNew {
|
||||
s.resetTimer(savedOrderInfo, nil, isPending)
|
||||
if !isPending && order.Status >= model.OrderStatusAccepted { // 有订单消息错序,先收到接单消息,再收到新订单消息,导致接单TIMER不动作,这里补一下
|
||||
utils.CallFuncAsync(func() {
|
||||
netprinter.PrintOrderByOrder(jxcontext.AdminCtx, order)
|
||||
weixinmsg.NotifyNewOrder(order)
|
||||
})
|
||||
s.notifyNewOrder(order)
|
||||
msghub.OnNewOrder(order)
|
||||
}
|
||||
}
|
||||
@@ -329,13 +324,6 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
|
||||
savedOrderInfo := s.loadSavedOrderFromMap(status, false)
|
||||
savedOrderInfo.SetOrder(order)
|
||||
|
||||
// if status.Status == model.OrderStatusNew {
|
||||
// if !isPending {
|
||||
// utils.CallFuncAsync(func() {
|
||||
// weixinmsg.NotifyNewOrder(savedOrderInfo.order)
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
if (model.IsOrderUnlockStatus(status.Status)) ||
|
||||
(order.LockStatus == model.OrderStatusUnknown && (status.Status > model.OrderStatusUnknown || status.Status == model.OrderStatusRefuseFailedGetGoods)) { // 只处理状态转换,一般消息不处理
|
||||
if status.Status == model.OrderStatusRefuseFailedGetGoods && order.Status != model.OrderStatusFinishedPickup && !model.IsOrderFinalStatus(order.Status) {
|
||||
@@ -374,9 +362,7 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
|
||||
status.Status == model.OrderStatusAgreeFailedGetGoods ||
|
||||
status.Status == model.OrderStatusDeliverFailed {
|
||||
if status.Status == model.OrderStatusApplyCancel {
|
||||
utils.CallFuncAsync(func() {
|
||||
weixinmsg.NotifyUserApplyCancel(savedOrderInfo.order, status.Remark)
|
||||
})
|
||||
s.notifyUserApplyCancel(savedOrderInfo.order, status.Remark)
|
||||
}
|
||||
msghub.OnKeyOrderStatusChanged(savedOrderInfo.order)
|
||||
}
|
||||
@@ -483,9 +469,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
if err := s.SelfDeliverDelivering(savedOrderInfo.order, bill.CourierMobile); err != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "自送出设置失败", err.Error())
|
||||
}
|
||||
utils.CallFuncAsync(func() {
|
||||
weixinmsg.NotifyWaybillStatus(bill, order, isBillAlreadyCandidate)
|
||||
})
|
||||
s.notify3rdPartyWaybill(order, bill, isBillAlreadyCandidate)
|
||||
} else {
|
||||
s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, 2, 10*time.Second)
|
||||
}
|
||||
@@ -496,9 +480,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
globals.SugarLogger.Infof("OnWaybillStatusChanged Accepted orderID:%s got multiple bill:%v", order.VendorOrderID, bill)
|
||||
}
|
||||
if isBillAlreadyCandidate && !s.isWaybillCourierSame(savedOrderInfo, bill) && !model.IsWaybillPlatformOwn(bill) {
|
||||
utils.CallFuncAsync(func() {
|
||||
weixinmsg.NotifyWaybillStatus(bill, order, isBillAlreadyCandidate)
|
||||
})
|
||||
s.notify3rdPartyWaybill(order, bill, isBillAlreadyCandidate)
|
||||
}
|
||||
flag2Clear := model.WaybillVendorID2Mask(bill.WaybillVendorID)
|
||||
order.Flag &= ^model.OrderFlagMaskFailedGetGoods
|
||||
@@ -579,9 +561,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
}
|
||||
}
|
||||
if !isPending {
|
||||
utils.CallFuncAsync(func() {
|
||||
weixinmsg.NotifyWaybillStatus(bill, order, false)
|
||||
})
|
||||
s.notify3rdPartyWaybill(order, bill, false)
|
||||
}
|
||||
// case model.WaybillStatusNeverSend: // 平台不配送,直接创建三方运单
|
||||
// s.resetTimer(savedOrderInfo, bill, isPending)
|
||||
@@ -710,9 +690,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf
|
||||
partner.CurOrderManager.OnOrderMsg(order, "转商家自配送失败", errStr)
|
||||
}
|
||||
} else {
|
||||
utils.CallFuncAsync(func() {
|
||||
weixinmsg.NotifyWaybillStatus(bill, order, false)
|
||||
})
|
||||
s.notify3rdPartyWaybill(order, bill, false)
|
||||
s.removeWaybillFromMap(savedOrderInfo, order.VendorID)
|
||||
partner.CurOrderManager.OnOrderMsg(order, "转自送成功", "")
|
||||
}
|
||||
@@ -1112,3 +1090,23 @@ func OnDefSchConfChanged(key, value string) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *DefScheduler) notifyNewOrder(order *model.GoodsOrder) {
|
||||
utils.CallFuncAsync(func() {
|
||||
netprinter.PrintOrderByOrder(jxcontext.AdminCtx, order)
|
||||
weixinmsg.NotifyNewOrder(order)
|
||||
smsmsg.NotifyNewOrder(order)
|
||||
})
|
||||
}
|
||||
|
||||
func (s *DefScheduler) notifyUserApplyCancel(order *model.GoodsOrder, cancelReason string) {
|
||||
utils.CallFuncAsync(func() {
|
||||
weixinmsg.NotifyUserApplyCancel(order, cancelReason)
|
||||
})
|
||||
}
|
||||
|
||||
func (s *DefScheduler) notify3rdPartyWaybill(order *model.GoodsOrder, bill *model.Waybill, isBillAlreadyCandidate bool) {
|
||||
utils.CallFuncAsync(func() {
|
||||
weixinmsg.NotifyWaybillStatus(bill, order, isBillAlreadyCandidate)
|
||||
})
|
||||
}
|
||||
|
||||
61
business/jxutils/smsmsg/smsmsg.go
Normal file
61
business/jxutils/smsmsg/smsmsg.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package smsmsg
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/baseapi/utils/errlist"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
)
|
||||
|
||||
var (
|
||||
warningMap = map[string]int{
|
||||
"isv.AMOUNT_NOT_ENOUGH": 1,
|
||||
"isv.ACCOUNT_ABNORMAL": 1,
|
||||
"isv.OUT_OF_SERVICE": 1,
|
||||
"isv.DAY_LIMIT_CONTROL": 1,
|
||||
}
|
||||
)
|
||||
|
||||
func SendSMSMsg(mobileList []string, signName, templateCode string, templateParam map[string]interface{}) (err error) {
|
||||
errList := errlist.New()
|
||||
for _, mobileNum := range mobileList {
|
||||
if mobileNum != "" {
|
||||
globals.SugarLogger.Debugf("SendSMSMsg mobileNum:%s, templateCode:%s", mobileNum, templateCode)
|
||||
if response, err := api.SMSClient.Execute(globals.AliKey, globals.AliSecret, mobileNum, signName, templateCode, string(utils.MustMarshal(templateParam))); err != nil {
|
||||
globals.SugarLogger.Warnf("SendSMSMsg mobileNum:%s failed with error:%v", mobileNum, err)
|
||||
errList.AddErr(err)
|
||||
} else if response.Code != aliyunsmsclient.ResponseCodeOk {
|
||||
errMsg := fmt.Sprintf("SendSMSMsg mobileNum:%s failed with response:%s", mobileNum, utils.Format4Output(response, false))
|
||||
errList.AddErr(fmt.Errorf(errMsg))
|
||||
if warningMap[response.Code] == 1 {
|
||||
globals.SugarLogger.Warnf(errMsg)
|
||||
} else {
|
||||
globals.SugarLogger.Infof(errMsg)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return errList.GetErrListAsOne()
|
||||
}
|
||||
|
||||
func NotifyNewOrder(order *model.GoodsOrder) (err error) {
|
||||
store := &model.Store{}
|
||||
store.ID = jxutils.GetSaleStoreIDFromOrder(order)
|
||||
if err = dao.GetEntity(dao.GetDB(), store); err == nil {
|
||||
if store.SMSNotify != 0 {
|
||||
err = SendSMSMsg([]string{store.Tel1, store.Tel2}, "京西菜市", "SMS_173477895", map[string]interface{}{
|
||||
"daySeq": order.OrderSeq,
|
||||
"consigneeName": order.ConsigneeName,
|
||||
"payMoney": order.ActualPayPrice,
|
||||
})
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
21
business/jxutils/smsmsg/smsmsg_test.go
Normal file
21
business/jxutils/smsmsg/smsmsg_test.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package smsmsg
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/globals/testinit"
|
||||
)
|
||||
|
||||
func init() {
|
||||
testinit.Init()
|
||||
// api2.Init()
|
||||
}
|
||||
|
||||
func TestSendSMSMsg(t *testing.T) {
|
||||
err := SendSMSMsg([]string{"18180948107"}, "京西菜市", "SMS_84655036", map[string]interface{}{
|
||||
"code": 123456,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,8 @@ package api
|
||||
import (
|
||||
"time"
|
||||
|
||||
aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/autonavi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/baidunavi"
|
||||
@@ -57,6 +59,7 @@ var (
|
||||
ZhongwuAPI *zhongwuapi.API
|
||||
|
||||
Cacher cache.ICacher
|
||||
SMSClient *aliyunsmsclient.SmsClient
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -153,4 +156,6 @@ func Init() {
|
||||
YilianyunAPI = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID", ""), beego.AppConfig.DefaultString("yilianyunClientSecret", ""))
|
||||
YilianyunAPI2 = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID2", ""), beego.AppConfig.DefaultString("yilianyunClientSecret2", ""))
|
||||
ZhongwuAPI = zhongwuapi.New(beego.AppConfig.DefaultInt("zhongwuAppID", 0), beego.AppConfig.DefaultString("zhongwuAppSecret", ""))
|
||||
|
||||
SMSClient = aliyunsmsclient.New("http://dysmsapi.aliyuncs.com/")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user