- 调度器中,所有出错的地方尽量添加订单相关的日志
This commit is contained in:
@@ -165,7 +165,7 @@ func (c *OrderManager) OnOrderMsg(order *model.GoodsOrder, vendorStatus, remark
|
||||
VendorStatus: vendorStatus,
|
||||
Status: model.OrderStatusMsg,
|
||||
StatusTime: time.Now(),
|
||||
Remark: remark,
|
||||
Remark: utils.LimitUTF8StringLen(remark, 255),
|
||||
}, nil)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -149,6 +149,7 @@ func init() {
|
||||
}
|
||||
_ = sch.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, mobile, jxutils.GetSaleStoreIDFromOrder(order), nil, func(isAcceptIt bool) error {
|
||||
if err = sch.AcceptOrRefuseOrder(order, isAcceptIt, ""); err != nil && err != scheduler.ErrOrderStatusAlreadySatisfyCurOperation {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "自动接单失败", err.Error())
|
||||
// 为了解决京东新消息与接单消息乱序的问题
|
||||
if errWithCode, ok := err.(*utils.ErrorWithCode); ok && errWithCode.Level() == 1 && errWithCode.IntCode() == -1 {
|
||||
if order2, err2 := partner.GetPurchasePlatformFromVendorID(order.VendorID).GetOrder(order.VendorOrderID); err2 == nil && order2.Status > order.Status {
|
||||
@@ -185,7 +186,9 @@ func init() {
|
||||
},
|
||||
TimeoutAction: func(savedOrderInfo *WatchOrderInfo) (err error) {
|
||||
if savedOrderInfo.autoPickupTimeoutMinute > 0 {
|
||||
return sch.autoPickupGood(savedOrderInfo)
|
||||
if err = sch.autoPickupGood(savedOrderInfo); err != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(savedOrderInfo.order, "自动拣货失败", err.Error())
|
||||
}
|
||||
}
|
||||
return nil
|
||||
},
|
||||
@@ -211,6 +214,7 @@ func init() {
|
||||
},
|
||||
},
|
||||
map[int]*StatusActionConfig{
|
||||
// todo 平台物流二次创建运单的话,这个TIMER有问题
|
||||
model.WaybillStatusNew: &StatusActionConfig{
|
||||
StatusActionParams: partner.StatusActionParams{
|
||||
TimerType: partner.TimerTypeBaseStatusTime,
|
||||
@@ -416,7 +420,9 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
} else {
|
||||
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore ||
|
||||
model.IsSpecialOrderPlatformWaybill(bill) {
|
||||
s.SelfDeliverDelivering(savedOrderInfo.order, bill.CourierMobile)
|
||||
if err := s.SelfDeliverDelivering(savedOrderInfo.order, bill.CourierMobile); err != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "自送出设置失败", err.Error())
|
||||
}
|
||||
utils.CallFuncAsync(func() {
|
||||
weixinmsg.NotifyWaybillStatus(bill, order, isBillAlreadyCandidate)
|
||||
})
|
||||
@@ -484,14 +490,20 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
case model.WaybillStatusDelivered:
|
||||
s.resetTimer(savedOrderInfo, bill, isPending)
|
||||
s.removeWaybillFromMap(savedOrderInfo, bill.WaybillVendorID)
|
||||
if !model.IsWaybillPlatformOwn(bill) && !isPending {
|
||||
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore {
|
||||
s.SelfDeliverDelivered(order, "")
|
||||
} else {
|
||||
s.Swtich2SelfDelivered(order, "")
|
||||
if !isPending {
|
||||
var err2 error
|
||||
if !model.IsWaybillPlatformOwn(bill) {
|
||||
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore {
|
||||
err2 = s.SelfDeliverDelivered(order, "")
|
||||
} else {
|
||||
err2 = s.Swtich2SelfDelivered(order, "")
|
||||
}
|
||||
} else if model.IsSpecialOrderPlatformWaybill(bill) {
|
||||
err2 = s.SelfDeliverDelivered(savedOrderInfo.order, "")
|
||||
}
|
||||
if err2 != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "送达设置失败", err2.Error())
|
||||
}
|
||||
} else if model.IsSpecialOrderPlatformWaybill(bill) {
|
||||
s.SelfDeliverDelivered(savedOrderInfo.order, "")
|
||||
}
|
||||
if !s.isBillCandidate(order, bill) {
|
||||
// 一般只会消息乱序才会到这里,即新订单消息在运单接单消息后到达
|
||||
@@ -557,9 +569,8 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
|
||||
} else {
|
||||
globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, store:%d dont't support 3rd delivery platform", order.VendorOrderID, jxutils.GetSaleStoreIDFromOrder(order))
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "自动创建三方运单", utils.LimitUTF8StringLen(err.Error(), 255))
|
||||
partner.CurOrderManager.OnOrderMsg(order, "自动创建三方运单失败", err.Error())
|
||||
}
|
||||
} else {
|
||||
err = nil
|
||||
@@ -579,29 +590,23 @@ func (s *DefScheduler) cancelOtherWaybillsCheckOrderDeliveryFlag(savedOrderInfo
|
||||
|
||||
func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill2Keep *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
|
||||
globals.SugarLogger.Debugf("cancelOtherWaybills, orderID:%s, bill:%v", savedOrderInfo.order.VendorOrderID, bill2Keep)
|
||||
toBeDeleted := []*model.Waybill{}
|
||||
for _, v := range savedOrderInfo.waybills {
|
||||
if v.Status < model.WaybillStatusEndBegin &&
|
||||
!model.IsWaybillPlatformOwn(v) &&
|
||||
(bill2Keep == nil || !(v.WaybillVendorID == bill2Keep.WaybillVendorID && v.VendorWaybillID == bill2Keep.VendorWaybillID)) {
|
||||
err2 := s.CancelWaybill(v, cancelReasonID, cancelReason)
|
||||
if err2 == nil {
|
||||
toBeDeleted = append(toBeDeleted, v)
|
||||
}
|
||||
// 至少返回一个错误
|
||||
if err == nil && err2 != nil {
|
||||
err = err2
|
||||
// 在这里就从map里删除,而不是等收到运单结束事件才删除,可避免不必要的重复取消(第二次取消还会失败)
|
||||
s.removeWaybillFromMap(savedOrderInfo, v.WaybillVendorID)
|
||||
} else {
|
||||
// 至少返回一个错误
|
||||
if err == nil {
|
||||
err = err2
|
||||
}
|
||||
partner.CurOrderManager.OnOrderMsg(savedOrderInfo.order, "取消三方运单失败", err2.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(toBeDeleted) > 0 {
|
||||
// todo 这里为什么要删除运单,应该只需要在运单完成,取消或失败时才删除
|
||||
// for _, v := range toBeDeleted {
|
||||
// s.removeWaybillFromMap(savedOrderInfo, v.WaybillVendorID)
|
||||
// }
|
||||
} else {
|
||||
globals.SugarLogger.Debugf("cancelOtherWaybills, orderID:%s, bill:%v cancel 0 bills", savedOrderInfo.order.VendorOrderID, bill2Keep)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -626,7 +631,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf
|
||||
s.updateOrderByBill(order, nil, false)
|
||||
}
|
||||
}
|
||||
partner.CurOrderManager.OnOrderMsg(order, "转商家自配送", errStr)
|
||||
partner.CurOrderManager.OnOrderMsg(order, "转商家自配送失败", errStr)
|
||||
}
|
||||
} else {
|
||||
utils.CallFuncAsync(func() {
|
||||
@@ -638,6 +643,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf
|
||||
s.cancelOtherWaybills(savedOrderInfo, nil, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrNotAcceptIntime)
|
||||
// 进到这里的原因是,在这个时间点,购物平台物流已经抢单(但抢单消息还没有被收到),所以转自送会失败 (比如:818810379000941),更好的做法应该是判断Swtich2SelfDeliver的返回值,这种情况下就不得试了
|
||||
globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry orderID:%s status is wrong(maybe purchase platform accepted waybill)", order.VendorOrderID)
|
||||
partner.CurOrderManager.OnOrderMsg(order, "转商家自配送失败", "平台物流已接单")
|
||||
// globals.SugarLogger.Warnf("swtich2SelfDeliverWithRetry orderID:%s status is wrong, order details:%v", order.VendorOrderID, order)
|
||||
}
|
||||
}
|
||||
@@ -911,7 +917,10 @@ func (s *DefScheduler) isBillCandidate(order *model.GoodsOrder, bill *model.Wayb
|
||||
func (s *DefScheduler) ProxyCancelWaybill(order *model.GoodsOrder, bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
|
||||
globals.SugarLogger.Debugf("ProxyCancelWaybill orderID:%s", order.VendorOrderID)
|
||||
if (order.DeliveryFlag & model.OrderDeliveryFlagMaskScheduleDisabled) == 0 {
|
||||
return s.CancelWaybill(bill, cancelReasonID, cancelReason)
|
||||
if err = s.CancelWaybill(bill, cancelReasonID, cancelReason); err != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "取消三方运单失败", err.Error())
|
||||
}
|
||||
return err
|
||||
}
|
||||
globals.SugarLogger.Debugf("ProxyCancelWaybill orderID:%s stop schedule, bypass CancelWaybill", order.VendorOrderID)
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user