饿百平台运单取消后给运营发报警消息

This commit is contained in:
gazebo
2020-01-17 14:14:36 +08:00
parent da904d307e
commit a27f261ca4
9 changed files with 296 additions and 368 deletions

View File

@@ -57,8 +57,10 @@ const (
addWaybillTipGap = 15 // 加一元小费间隔的分钟数
maxWaybillTipMoney = 400 // 最大小费
baseWaybillFee = 600 // 基本运费
ebaiCancelWaybillMaxFee = 1000 // 饿百取消运单最高运费
ebaiCancelWaybillMaxFee = 1000 // 饿百取消运单最高运费,门店自送最高运费
maxJxStoreDeliveryFee = 2000
ebaiCancelWaybillWarningMinute = 8
)
const (
@@ -323,7 +325,8 @@ func init() {
Timeout: 1 * time.Second,
},
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
return sch.createWaybillOn3rdProviders(savedOrderInfo, ebaiCancelWaybillMaxFee, nil)
return sch.onEbaiWaybillCanceled(savedOrderInfo, nil)
// return sch.createWaybillOn3rdProviders(savedOrderInfo, 0, nil)
},
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
order := savedOrderInfo.order
@@ -665,6 +668,24 @@ func (s *DefScheduler) removeWaybillFromMap(savedOrderInfo *WatchOrderInfo, wayb
}
}
func (s *DefScheduler) onEbaiWaybillCanceled(savedOrderInfo *WatchOrderInfo, excludeBill *model.Waybill) (err error) {
order := savedOrderInfo.order
timeout := time.Duration(ebaiCancelWaybillWarningMinute) * time.Minute
utils.AfterFuncWithRecover(timeout, func() {
jxutils.CallMsgHandlerAsync(func() {
ts := s.loadSavedOrderFromMap(model.Order2Status(order), true)
order := ts.order
globals.SugarLogger.Debugf("fire timer ebai waybill cancled, orderID:%s, status:%d", order.VendorOrderID, order.Status)
if order.Status < model.OrderStatusDelivering && order.LockStatus == model.OrderStatusLocked {
msgContent := fmt.Sprintf("门店:%d,订单:%s的平台运单被取消了可能导致订单被取消请重点关注必要的话可以先手动转自送", jxutils.GetSaleStoreIDFromOrder(order), order.VendorOrderID)
s.notifyOrderStakeHolder(order, "", msgContent)
}
}, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID))
})
err = s.createWaybillOn3rdProviders(savedOrderInfo, 0, excludeBill)
return err
}
func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInfo, maxDeliveryFee int64, excludeBill *model.Waybill) (err error) {
order := savedOrderInfo.order
if order.VendorID == model.VendorIDELM {
@@ -682,7 +703,9 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
savedOrderInfo.retryCount++
}
} else {
err = fmt.Errorf("订单:%s已经自动创建过了%d次运单请人工处理", order.VendorOrderID, savedOrderInfo.retryCount)
errMsg := fmt.Sprintf("订单:%s已经自动创建过了%d次运单仍然无法配送,请关注!", order.VendorOrderID, savedOrderInfo.retryCount)
err = fmt.Errorf(errMsg)
s.notifyOrderStakeHolder(order, "", errMsg)
globals.SugarLogger.Infof("createWaybillOn3rdProviders [运营2]同一订单orderID:%s尝试了%d次创建运单失败, 停止调度,如果还需要发单,请人工处理", order.VendorOrderID, savedOrderInfo.retryCount)
}
} else {
@@ -1160,11 +1183,11 @@ func getMaxDeliveryFee(order *model.GoodsOrder) (maxDeliveryFee int64) {
orderBaseFreightMoney = baseWaybillFee
}
maxDeliveryFee = orderBaseFreightMoney + order.DistanceFreightMoney + getWaybillTip(order)
}
if maxDeliveryFee < ebaiCancelWaybillMaxFee &&
order.VendorID == model.VendorIDEBAI &&
order.DeliveryType == model.OrderDeliveryTypeStoreSelf {
maxDeliveryFee = ebaiCancelWaybillMaxFee
if maxDeliveryFee < ebaiCancelWaybillMaxFee &&
(order.VendorID == model.VendorIDEBAI ||
order.DeliveryType == model.OrderDeliveryTypeStoreSelf) {
maxDeliveryFee = ebaiCancelWaybillMaxFee
}
}
return maxDeliveryFee
}
@@ -1396,3 +1419,28 @@ func OrderProfitWarning(order *model.GoodsOrder) {
}
}
}
func (s *DefScheduler) notifyOrderStakeHolder(order *model.GoodsOrder, msgTitle, msgContent string) (err error) {
userMobiles := []string{
"18180948107",
}
db := dao.GetDB()
storeDetail, err := dao.GetStoreDetail(db, jxutils.GetSaleStoreIDFromOrder(order), order.VendorID)
if err == nil && storeDetail.OperatorPhone != "" {
userMobiles = append(userMobiles, storeDetail.OperatorPhone)
}
if len(userMobiles) > 0 {
if msgTitle == "" {
msgTitle = fmt.Sprintf("%s平台订单%s异常", model.VendorChineseNames[order.VendorID], order.VendorOrderID)
}
users, _, err := dao.GetUsers(db, 0, "", nil, nil, userMobiles, 0, 0)
if err == nil && len(users) > 0 {
var userIDs []string
for _, v := range users {
userIDs = append(userIDs, v.UserID)
}
ddmsg.SendUsersMessage(dingdingapi.MsgTyeText, userIDs, msgTitle, msgContent)
}
}
return err
}