- 新订单时,发送短信消息
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/jxcontext"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/netprinter"
|
"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/jx-callback/business/msghub"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
@@ -184,10 +185,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if isAcceptIt {
|
if isAcceptIt {
|
||||||
utils.CallFuncAsync(func() {
|
sch.notifyNewOrder(order)
|
||||||
netprinter.PrintOrderByOrder(jxcontext.AdminCtx, order)
|
|
||||||
weixinmsg.NotifyNewOrder(order)
|
|
||||||
})
|
|
||||||
msghub.OnNewOrder(order)
|
msghub.OnNewOrder(order)
|
||||||
} else {
|
} else {
|
||||||
partner.CurOrderManager.OnOrderMsg(order, "黑名单拒单", "")
|
partner.CurOrderManager.OnOrderMsg(order, "黑名单拒单", "")
|
||||||
@@ -307,10 +305,7 @@ func (s *DefScheduler) OnOrderNew(order *model.GoodsOrder, isPending bool) (err
|
|||||||
if order.Status >= model.OrderStatusNew {
|
if order.Status >= model.OrderStatusNew {
|
||||||
s.resetTimer(savedOrderInfo, nil, isPending)
|
s.resetTimer(savedOrderInfo, nil, isPending)
|
||||||
if !isPending && order.Status >= model.OrderStatusAccepted { // 有订单消息错序,先收到接单消息,再收到新订单消息,导致接单TIMER不动作,这里补一下
|
if !isPending && order.Status >= model.OrderStatusAccepted { // 有订单消息错序,先收到接单消息,再收到新订单消息,导致接单TIMER不动作,这里补一下
|
||||||
utils.CallFuncAsync(func() {
|
s.notifyNewOrder(order)
|
||||||
netprinter.PrintOrderByOrder(jxcontext.AdminCtx, order)
|
|
||||||
weixinmsg.NotifyNewOrder(order)
|
|
||||||
})
|
|
||||||
msghub.OnNewOrder(order)
|
msghub.OnNewOrder(order)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -329,13 +324,6 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
|
|||||||
savedOrderInfo := s.loadSavedOrderFromMap(status, false)
|
savedOrderInfo := s.loadSavedOrderFromMap(status, false)
|
||||||
savedOrderInfo.SetOrder(order)
|
savedOrderInfo.SetOrder(order)
|
||||||
|
|
||||||
// if status.Status == model.OrderStatusNew {
|
|
||||||
// if !isPending {
|
|
||||||
// utils.CallFuncAsync(func() {
|
|
||||||
// weixinmsg.NotifyNewOrder(savedOrderInfo.order)
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
if (model.IsOrderUnlockStatus(status.Status)) ||
|
if (model.IsOrderUnlockStatus(status.Status)) ||
|
||||||
(order.LockStatus == model.OrderStatusUnknown && (status.Status > model.OrderStatusUnknown || status.Status == model.OrderStatusRefuseFailedGetGoods)) { // 只处理状态转换,一般消息不处理
|
(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) {
|
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.OrderStatusAgreeFailedGetGoods ||
|
||||||
status.Status == model.OrderStatusDeliverFailed {
|
status.Status == model.OrderStatusDeliverFailed {
|
||||||
if status.Status == model.OrderStatusApplyCancel {
|
if status.Status == model.OrderStatusApplyCancel {
|
||||||
utils.CallFuncAsync(func() {
|
s.notifyUserApplyCancel(savedOrderInfo.order, status.Remark)
|
||||||
weixinmsg.NotifyUserApplyCancel(savedOrderInfo.order, status.Remark)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
msghub.OnKeyOrderStatusChanged(savedOrderInfo.order)
|
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 {
|
if err := s.SelfDeliverDelivering(savedOrderInfo.order, bill.CourierMobile); err != nil {
|
||||||
partner.CurOrderManager.OnOrderMsg(order, "自送出设置失败", err.Error())
|
partner.CurOrderManager.OnOrderMsg(order, "自送出设置失败", err.Error())
|
||||||
}
|
}
|
||||||
utils.CallFuncAsync(func() {
|
s.notify3rdPartyWaybill(order, bill, isBillAlreadyCandidate)
|
||||||
weixinmsg.NotifyWaybillStatus(bill, order, isBillAlreadyCandidate)
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, 2, 10*time.Second)
|
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)
|
globals.SugarLogger.Infof("OnWaybillStatusChanged Accepted orderID:%s got multiple bill:%v", order.VendorOrderID, bill)
|
||||||
}
|
}
|
||||||
if isBillAlreadyCandidate && !s.isWaybillCourierSame(savedOrderInfo, bill) && !model.IsWaybillPlatformOwn(bill) {
|
if isBillAlreadyCandidate && !s.isWaybillCourierSame(savedOrderInfo, bill) && !model.IsWaybillPlatformOwn(bill) {
|
||||||
utils.CallFuncAsync(func() {
|
s.notify3rdPartyWaybill(order, bill, isBillAlreadyCandidate)
|
||||||
weixinmsg.NotifyWaybillStatus(bill, order, isBillAlreadyCandidate)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
flag2Clear := model.WaybillVendorID2Mask(bill.WaybillVendorID)
|
flag2Clear := model.WaybillVendorID2Mask(bill.WaybillVendorID)
|
||||||
order.Flag &= ^model.OrderFlagMaskFailedGetGoods
|
order.Flag &= ^model.OrderFlagMaskFailedGetGoods
|
||||||
@@ -579,9 +561,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !isPending {
|
if !isPending {
|
||||||
utils.CallFuncAsync(func() {
|
s.notify3rdPartyWaybill(order, bill, false)
|
||||||
weixinmsg.NotifyWaybillStatus(bill, order, false)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
// case model.WaybillStatusNeverSend: // 平台不配送,直接创建三方运单
|
// case model.WaybillStatusNeverSend: // 平台不配送,直接创建三方运单
|
||||||
// s.resetTimer(savedOrderInfo, bill, isPending)
|
// s.resetTimer(savedOrderInfo, bill, isPending)
|
||||||
@@ -710,9 +690,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf
|
|||||||
partner.CurOrderManager.OnOrderMsg(order, "转商家自配送失败", errStr)
|
partner.CurOrderManager.OnOrderMsg(order, "转商家自配送失败", errStr)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
utils.CallFuncAsync(func() {
|
s.notify3rdPartyWaybill(order, bill, false)
|
||||||
weixinmsg.NotifyWaybillStatus(bill, order, false)
|
|
||||||
})
|
|
||||||
s.removeWaybillFromMap(savedOrderInfo, order.VendorID)
|
s.removeWaybillFromMap(savedOrderInfo, order.VendorID)
|
||||||
partner.CurOrderManager.OnOrderMsg(order, "转自送成功", "")
|
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 (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi"
|
"git.rosy.net.cn/baseapi/platformapi"
|
||||||
"git.rosy.net.cn/baseapi/platformapi/autonavi"
|
"git.rosy.net.cn/baseapi/platformapi/autonavi"
|
||||||
"git.rosy.net.cn/baseapi/platformapi/baidunavi"
|
"git.rosy.net.cn/baseapi/platformapi/baidunavi"
|
||||||
@@ -57,6 +59,7 @@ var (
|
|||||||
ZhongwuAPI *zhongwuapi.API
|
ZhongwuAPI *zhongwuapi.API
|
||||||
|
|
||||||
Cacher cache.ICacher
|
Cacher cache.ICacher
|
||||||
|
SMSClient *aliyunsmsclient.SmsClient
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -153,4 +156,6 @@ func Init() {
|
|||||||
YilianyunAPI = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID", ""), beego.AppConfig.DefaultString("yilianyunClientSecret", ""))
|
YilianyunAPI = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID", ""), beego.AppConfig.DefaultString("yilianyunClientSecret", ""))
|
||||||
YilianyunAPI2 = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID2", ""), beego.AppConfig.DefaultString("yilianyunClientSecret2", ""))
|
YilianyunAPI2 = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID2", ""), beego.AppConfig.DefaultString("yilianyunClientSecret2", ""))
|
||||||
ZhongwuAPI = zhongwuapi.New(beego.AppConfig.DefaultInt("zhongwuAppID", 0), beego.AppConfig.DefaultString("zhongwuAppSecret", ""))
|
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