- 调度器中,所有出错的地方尽量添加订单相关的日志

This commit is contained in:
gazebo
2019-05-16 09:20:25 +08:00
parent 4586ede2dc
commit 30869da889
2 changed files with 37 additions and 28 deletions

View File

@@ -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
}

View File

@@ -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