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

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, VendorStatus: vendorStatus,
Status: model.OrderStatusMsg, Status: model.OrderStatusMsg,
StatusTime: time.Now(), StatusTime: time.Now(),
Remark: remark, Remark: utils.LimitUTF8StringLen(remark, 255),
}, nil) }, nil)
return err 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 { _ = 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 { 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 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 { 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) { TimeoutAction: func(savedOrderInfo *WatchOrderInfo) (err error) {
if savedOrderInfo.autoPickupTimeoutMinute > 0 { if savedOrderInfo.autoPickupTimeoutMinute > 0 {
return sch.autoPickupGood(savedOrderInfo) if err = sch.autoPickupGood(savedOrderInfo); err != nil {
partner.CurOrderManager.OnOrderMsg(savedOrderInfo.order, "自动拣货失败", err.Error())
}
} }
return nil return nil
}, },
@@ -211,6 +214,7 @@ func init() {
}, },
}, },
map[int]*StatusActionConfig{ map[int]*StatusActionConfig{
// todo 平台物流二次创建运单的话这个TIMER有问题
model.WaybillStatusNew: &StatusActionConfig{ model.WaybillStatusNew: &StatusActionConfig{
StatusActionParams: partner.StatusActionParams{ StatusActionParams: partner.StatusActionParams{
TimerType: partner.TimerTypeBaseStatusTime, TimerType: partner.TimerTypeBaseStatusTime,
@@ -416,7 +420,9 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
} else { } else {
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore || if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore ||
model.IsSpecialOrderPlatformWaybill(bill) { 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() { utils.CallFuncAsync(func() {
weixinmsg.NotifyWaybillStatus(bill, order, isBillAlreadyCandidate) weixinmsg.NotifyWaybillStatus(bill, order, isBillAlreadyCandidate)
}) })
@@ -484,14 +490,20 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
case model.WaybillStatusDelivered: case model.WaybillStatusDelivered:
s.resetTimer(savedOrderInfo, bill, isPending) s.resetTimer(savedOrderInfo, bill, isPending)
s.removeWaybillFromMap(savedOrderInfo, bill.WaybillVendorID) s.removeWaybillFromMap(savedOrderInfo, bill.WaybillVendorID)
if !model.IsWaybillPlatformOwn(bill) && !isPending { if !isPending {
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { var err2 error
s.SelfDeliverDelivered(order, "") if !model.IsWaybillPlatformOwn(bill) {
} else { if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore {
s.Swtich2SelfDelivered(order, "") 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) { if !s.isBillCandidate(order, bill) {
// 一般只会消息乱序才会到这里,即新订单消息在运单接单消息后到达 // 一般只会消息乱序才会到这里,即新订单消息在运单接单消息后到达
@@ -557,9 +569,8 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
} else { } else {
globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, store:%d dont't support 3rd delivery platform", order.VendorOrderID, jxutils.GetSaleStoreIDFromOrder(order)) globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, store:%d dont't support 3rd delivery platform", order.VendorOrderID, jxutils.GetSaleStoreIDFromOrder(order))
} }
if err != nil { if err != nil {
partner.CurOrderManager.OnOrderMsg(order, "自动创建三方运单", utils.LimitUTF8StringLen(err.Error(), 255)) partner.CurOrderManager.OnOrderMsg(order, "自动创建三方运单失败", err.Error())
} }
} else { } else {
err = nil 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) { 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) globals.SugarLogger.Debugf("cancelOtherWaybills, orderID:%s, bill:%v", savedOrderInfo.order.VendorOrderID, bill2Keep)
toBeDeleted := []*model.Waybill{}
for _, v := range savedOrderInfo.waybills { for _, v := range savedOrderInfo.waybills {
if v.Status < model.WaybillStatusEndBegin && if v.Status < model.WaybillStatusEndBegin &&
!model.IsWaybillPlatformOwn(v) && !model.IsWaybillPlatformOwn(v) &&
(bill2Keep == nil || !(v.WaybillVendorID == bill2Keep.WaybillVendorID && v.VendorWaybillID == bill2Keep.VendorWaybillID)) { (bill2Keep == nil || !(v.WaybillVendorID == bill2Keep.WaybillVendorID && v.VendorWaybillID == bill2Keep.VendorWaybillID)) {
err2 := s.CancelWaybill(v, cancelReasonID, cancelReason) err2 := s.CancelWaybill(v, cancelReasonID, cancelReason)
if err2 == nil { if err2 == nil {
toBeDeleted = append(toBeDeleted, v) // 在这里就从map里删除而不是等收到运单结束事件才删除可避免不必要的重复取消第二次取消还会失败
} s.removeWaybillFromMap(savedOrderInfo, v.WaybillVendorID)
// 至少返回一个错误 } else {
if err == nil && err2 != nil { // 至少返回一个错误
err = err2 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 return err
} }
@@ -626,7 +631,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf
s.updateOrderByBill(order, nil, false) s.updateOrderByBill(order, nil, false)
} }
} }
partner.CurOrderManager.OnOrderMsg(order, "转商家自配送", errStr) partner.CurOrderManager.OnOrderMsg(order, "转商家自配送失败", errStr)
} }
} else { } else {
utils.CallFuncAsync(func() { utils.CallFuncAsync(func() {
@@ -638,6 +643,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf
s.cancelOtherWaybills(savedOrderInfo, nil, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrNotAcceptIntime) s.cancelOtherWaybills(savedOrderInfo, nil, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrNotAcceptIntime)
// 进到这里的原因是,在这个时间点,购物平台物流已经抢单(但抢单消息还没有被收到),所以转自送会失败 比如818810379000941更好的做法应该是判断Swtich2SelfDeliver的返回值这种情况下就不得试了 // 进到这里的原因是,在这个时间点,购物平台物流已经抢单(但抢单消息还没有被收到),所以转自送会失败 比如818810379000941更好的做法应该是判断Swtich2SelfDeliver的返回值这种情况下就不得试了
globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry orderID:%s status is wrong(maybe purchase platform accepted waybill)", order.VendorOrderID) 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) // 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) { func (s *DefScheduler) ProxyCancelWaybill(order *model.GoodsOrder, bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
globals.SugarLogger.Debugf("ProxyCancelWaybill orderID:%s", order.VendorOrderID) globals.SugarLogger.Debugf("ProxyCancelWaybill orderID:%s", order.VendorOrderID)
if (order.DeliveryFlag & model.OrderDeliveryFlagMaskScheduleDisabled) == 0 { 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) globals.SugarLogger.Debugf("ProxyCancelWaybill orderID:%s stop schedule, bypass CancelWaybill", order.VendorOrderID)
return nil return nil