diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 527301d45..e479dbe50 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -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 } diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 17bfec8ee..aeeb29322 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -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