From 45827aceb5462b3a00dc139d98dd364a68dbb2aa Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 14:18:52 +0800 Subject: [PATCH] =?UTF-8?q?+CanSwitch2SelfDeliver=EF=BC=8C=E7=BE=8E?= =?UTF-8?q?=E5=9B=A2=E9=A2=84=E5=AE=9A=E5=8D=95=E6=98=AF=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E8=BD=AC=E8=87=AA=E9=80=81=E7=9A=84=20=E5=87=8F=E5=B0=8F?= =?UTF-8?q?=E8=BD=AC=E8=87=AA=E9=80=81=E5=A4=B1=E8=B4=A5=E5=B0=9D=E8=AF=95?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E9=97=B4=E9=9A=99=E8=87=B33=E7=A7=92?= =?UTF-8?q?=EF=BC=88=E4=BB=A5=E5=85=8D=E5=87=BA=E7=8E=B0=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E4=B8=89=E6=96=B9=E8=BF=90=E5=8D=95=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jxcallback/scheduler/defsch/defsch.go | 30 ++++++++++++++----- business/jxstore/act/act_test.go | 10 ++++--- business/partner/delivery/mtps/waybill.go | 6 ++-- business/partner/partner.go | 4 +++ business/partner/partner_order.go | 2 ++ business/partner/purchase/mtwm/order.go | 5 ++++ 6 files changed, 43 insertions(+), 14 deletions(-) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 7f06ad3fe..d4ffa17a8 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -35,6 +35,9 @@ const ( second2AutoPickupGap = 60 //随机60秒 time2AutoPickupAhead = 20 * time.Second // 有最后拣货时间的提前值 + switch2SelfDeliverRetryGap = 3 * time.Second // 转自送失败尝试的时间间隙 + switch2SelfDeliverRetryCount = 2 // 转自送失败尝试次数 + // (把pending order timerout 在-pendingOrderTimerMinMinSecond至pendingOrderTimerMaxSecond映射到pendingOrderTimerMinSecond至pendingOrderTimerMaxSecond) pendingOrderTimerMinMinSecond = 5 * 60 // 5分钟 pendingOrderTimerMinSecond = 2 @@ -296,11 +299,13 @@ func init() { ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { // 饿百转自送的时机不太清楚,暂时禁用超时转自送,在饿百运单取消时还是会自动创建 // 非自配送商家使用 + order := savedOrderInfo.order return savedOrderInfo.isDeliveryCompetition && - model.IsOrderDeliveryByPlatform(savedOrderInfo.order) && - savedOrderInfo.order.VendorID == bill.WaybillVendorID && - savedOrderInfo.order.VendorID != model.VendorIDEBAI && - savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake + model.IsOrderDeliveryByPlatform(order) && + order.VendorID == bill.WaybillVendorID && + order.VendorID != model.VendorIDEBAI && + order.DeliveryType != model.OrderDeliveryTypeSelfTake && + isOrderCanSwitch2SelfDeliver(order) }, }, //* @@ -317,10 +322,11 @@ func init() { // 非自配送商家使用 return (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) && savedOrderInfo.isDeliveryCompetition && - savedOrderInfo.order.VendorID == bill.WaybillVendorID && - model.IsOrderDeliveryByPlatform(savedOrderInfo.order) && + order.VendorID == bill.WaybillVendorID && + model.IsOrderDeliveryByPlatform(order) && order.VendorID == model.VendorIDEBAI && - savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake + order.DeliveryType != model.OrderDeliveryTypeSelfTake && + isOrderCanSwitch2SelfDeliver(order) }, }, //*/ @@ -511,7 +517,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo } s.notify3rdPartyWaybill(order, bill, isBillAlreadyCandidate) } else { - s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, 2, 10*time.Second) + s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, switch2SelfDeliverRetryCount, switch2SelfDeliverRetryGap) } } } else if !s.isBillCandidate(order, bill) && bill.WaybillVendorID != order.VendorID { @@ -1276,3 +1282,11 @@ func (s *DefScheduler) notify3rdPartyWaybill(order *model.GoodsOrder, bill *mode }) } } + +func isOrderCanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan bool) { + isCan = true + if handler := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID); handler != nil { + isCan, _ = handler.CanSwitch2SelfDeliver(order) + } + return isCan +} diff --git a/business/jxstore/act/act_test.go b/business/jxstore/act/act_test.go index 47c393cf9..dd76e8cf3 100644 --- a/business/jxstore/act/act_test.go +++ b/business/jxstore/act/act_test.go @@ -192,16 +192,18 @@ func TestSyncAct(t *testing.T) { } func TestForceUpdateVendorPrice(t *testing.T) { - _, err := ForceUpdateVendorPrice(jxcontext.AdminCtx, model.VendorIDJD, model.ActSkuDirectDown, []*ActStoreSkuParam{ + hint, err := ForceUpdateVendorPrice(jxcontext.AdminCtx, model.VendorIDJD, model.ActSkuDirectDown, []*ActStoreSkuParam{ &ActStoreSkuParam{ ActStoreSku: model.ActStoreSku{ - StoreID: 100118, - SkuID: 22509, + StoreID: 100118, + SkuID: 22509, + ActPrice: 9900, }, - ActualActPrice: 9900, + VendorPrice: 19900, }, }, false) if err != nil { t.Fatal(err) } + t.Log(hint) } diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index 105381db3..25fca1ea7 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -36,8 +36,10 @@ type DeliveryHandler struct { } func init() { - curDeliveryHandler = new(DeliveryHandler) - partner.RegisterDeliveryPlatform(curDeliveryHandler, true) + if api.MtpsAPI != nil { + curDeliveryHandler = new(DeliveryHandler) + partner.RegisterDeliveryPlatform(curDeliveryHandler, true) + } } func (c *DeliveryHandler) GetVendorID() int { diff --git a/business/partner/partner.go b/business/partner/partner.go index 102304630..b78cb21e8 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -190,6 +190,10 @@ func (p *BasePurchasePlatform) GetStatusActionTimeout(order *model.GoodsOrder, s return params } +func (c *BasePurchasePlatform) CanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan bool, err error) { + return true, nil +} + func init() { PurchasePlatformHandlers = make(map[int]IPurchasePlatformHandler) PurchaseOrderHandlers = make(map[int]IPurchasePlatformOrderHandler) diff --git a/business/partner/partner_order.go b/business/partner/partner_order.go index 99d290b67..442a87ce3 100644 --- a/business/partner/partner_order.go +++ b/business/partner/partner_order.go @@ -22,6 +22,8 @@ type IPurchasePlatformOrderHandler interface { CallCourier(ctx *jxcontext.Context, order *model.GoodsOrder) (err error) // 取货失败后再次招唤平台配送 ConfirmReceiveGoods(ctx *jxcontext.Context, order *model.GoodsOrder) (err error) // 投递失败后确认收到退货 + // 是否可能转商家自送 + CanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan bool, err error) // 将订单从购物平台配送转为自送 Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 732e44146..29ca7481b 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -468,6 +468,11 @@ func (p *PurchaseHandler) ConfirmReceiveGoods(ctx *jxcontext.Context, order *mod return err } +// 美团预定单不能转商家自送 +func (c *PurchaseHandler) CanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan bool, err error) { + return order.BusinessType != model.BusinessTypeDingshida, nil +} + func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) { globals.SugarLogger.Debugf("mtwm Swtich2SelfDeliver orderID:%s", order.VendorOrderID) if globals.EnableMtwmStoreWrite {