饿百平台运单取消后给运营发报警消息
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user