diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 24e584d9b..1b929dbb4 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -510,22 +510,23 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo globals.SugarLogger.Debugf("OnWaybillStatusChanged orderID:%s %s, bill:%v", bill.VendorOrderID, model.WaybillStatusName[bill.Status], utils.Format4Output(bill, true)) savedOrderInfo := s.loadSavedOrderFromMap(model.Waybill2Status(bill), true) order := savedOrderInfo.order - // todo 当前收到的事件顺序有时是乱的,不能严格限制,暂时放开 - // if order.Status < model.OrderStatusFinishedPickup || order.Status > model.OrderStatusEndBegin { // 如果当前order状态是不应该出现运单状态 - // globals.SugarLogger.Infof("OnWaybillStatusChanged orderID:%s status:%s is not suitable for waybill", order.VendorOrderID, model.OrderStatusName[order.Status]) - // s.ProxyCancelWaybill(order, bill) - // s.stopTimer(savedOrderInfo) - // s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(model.Order2Status(order))) - // return nil - // } - // if (order.DeliveryFlag & model.OrderDeliveryFlagMaskScheduleDisabled) == 0 { // 如果被停止调度,整个不动作 + + // 获取订单配送平台,如果是美团则需要获取门店配置的配送方式 + //isBlendWay := false + //if bill.OrderVendorID == model.VendorIDMTWM { + // mtStoreInfo, err := api.MtwmAPI.PoiGet(utils.Int2Str(order.JxStoreID)) + // globals.SugarLogger.Debugf("从美团上获取门店失败:%s", err) + // isBlendWay = strings.Contains(mtStoreInfo.LogisticsCodes, model.MTWMStorePSWay8) + //} if bill.Status == model.WaybillStatusNew { s.addWaybill2Map(savedOrderInfo, bill) if !isPending { if order.Status >= model.OrderStatusDelivering && order.Status < model.OrderStatusEndBegin { if order.DeliveryType == model.OrderDeliveryTypeStoreSelf { + // 门店配送方式仅为自配送的商家在接单后,如商品已开始配送 s.SelfDeliverDelivering(order, "自配送中") + // 将订单冲购物平台转自送(混合送转自送) s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, switch2SelfDeliverRetryCount, switch2SelfDeliverRetryGap) } else { s.ProxyCancelWaybill(order, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) @@ -675,10 +676,10 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo s.notify3rdPartyWaybill(order, bill, isBillAlreadyCandidate) } // 订单在三方配送中,转自送 - //if order.Status >= model.OrderStatusDelivering && order.VendorOrderID != order.VendorWaybillID && order.VendorWaybillID != "" { - // s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, switch2SelfDeliverRetryCount, switch2SelfDeliverRetryGap) - // s.SelfDeliverDelivering(order, "自配送中") - //} + if order.Status >= model.OrderStatusDelivering && order.VendorOrderID != order.VendorWaybillID && order.VendorWaybillID != "" { + s.SelfDeliverDelivering(order, "自配送中") + s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, switch2SelfDeliverRetryCount, switch2SelfDeliverRetryGap) + } order.Flag &= ^model.OrderFlagMaskFailedGetGoods err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order) } @@ -1028,7 +1029,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf order := savedOrderInfo.order globals.SugarLogger.Debugf("swtich2SelfDeliverWithRetry orderID:%s", order.VendorOrderID) if order.WaybillVendorID != order.VendorID { - if err := s.Swtich2SelfDeliver(order, ""); err != nil && err != scheduler.ErrOrderStatusAlreadySatisfyCurOperation { + if err := s.Swtich2SelfDeliver(order, ""); err != nil && (err != scheduler.ErrOrderStatusAlreadySatisfyCurOperation || err != scheduler.ErrOrderStatusAlreadySatisfyCurOperationELM || err != scheduler.ErrOrderStatusAlreadySatisfyCurOperationMTWM) { globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry failed, bill:%v, err:%v", bill, err) if retryCount > 0 { utils.AfterFuncWithRecover(duration, func() { diff --git a/business/jxcallback/scheduler/scheduler.go b/business/jxcallback/scheduler/scheduler.go index 178a6c631..df7aae943 100644 --- a/business/jxcallback/scheduler/scheduler.go +++ b/business/jxcallback/scheduler/scheduler.go @@ -16,7 +16,6 @@ const ( TimerStatusTypeUnknown = -1 TimerStatusTypeOrder = 0 TimerStatusTypeWaybill = 1 - ) const ( @@ -24,14 +23,15 @@ const ( JXC4B_SHOP = 7 // 京西超市 ) - var ( CurrentScheduler IScheduler ) var ( - ErrOrderStatusIsNotSuitable4CurOperation = errors.New("订单锁定或状态不适合当前操作") - ErrOrderStatusAlreadySatisfyCurOperation = errors.New("订单当前状态已满足当前操作") + ErrOrderStatusIsNotSuitable4CurOperation = errors.New("订单锁定或状态不适合当前操作") + ErrOrderStatusAlreadySatisfyCurOperation = errors.New("订单当前状态已满足当前操作") + ErrOrderStatusAlreadySatisfyCurOperationELM = errors.New("无需切自配送") + ErrOrderStatusAlreadySatisfyCurOperationMTWM = errors.New("非专送、快送、混合送订单不允许调用此接口 level:0, code:1047") ErrCanNotCreateAtLeastOneWaybill = errors.New("一个运单都不能创建") ErrCanNotFindOrder = errors.New("不能找到订单(一般是由于事件错序)") diff --git a/business/model/api_config.go b/business/model/api_config.go index 72ea567ec..1cb737a01 100644 --- a/business/model/api_config.go +++ b/business/model/api_config.go @@ -53,6 +53,21 @@ const ( VendorIDQiNiuCloud = 323 // 七牛云 VendorIDShowAPI = 325 // 万维易源 + // 美团配送门店配送方式 + MTWMStorePSWay1 = "1003" //美团跑腿(众包) + MTWMStorePSWay2 = "1001" //专送(加盟) + MTWMStorePSWay3 = "1002" //专送(自建) + MTWMStorePSWay4 = "1004" //城市代理 + MTWMStorePSWay5 = "2002" //快送 + MTWMStorePSWay6 = "2010" //全城送 + MTWMStorePSWay7 = "0000" //商家自配 + MTWMStorePSWay8 = "3001" //混合送(专送+快送) + MTWMStorePSWay9 = "30011002" //混合自建 + MTWMStorePSWay10 = "30011001" //混合加盟 + MTWMStorePSWay11 = "30012002" //混合快送 + MTWMStorePSWay12 = "0002" //趣生活美食配送 + MTWMStorePSWay13 = "0016" //达达快递 + MTWMStorePSWay14 = "0033" //E_代送 ) type VendorInfo struct {