From d93356ad019d191c5df81af2983ac5ed7465b221 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 29 Nov 2019 16:28:21 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A5=BF=E7=99=BE=E5=9C=A8=E5=8F=91=E9=80=81?= =?UTF-8?q?=E8=BF=90=E5=8D=95=E5=8F=96=E6=B6=88=E4=BA=8B=E4=BB=B6=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E5=A6=82=E6=9E=9C=E8=AE=A2=E5=8D=95=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=8F=8A=E6=97=B6=EF=BC=88=E5=85=B7=E4=BD=93=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=9C=AA=E7=9F=A5=EF=BC=89=E8=BD=AC=E5=87=BA=E8=87=AA=E9=80=81?= =?UTF-8?q?=EF=BC=8C=E5=88=99=E8=AE=A2=E5=8D=95=E4=BC=9A=E8=A2=AB=E5=8F=96?= =?UTF-8?q?=E6=B6=88=EF=BC=8C=E4=B8=94=E4=B8=8D=E4=BC=9A=E5=8F=91=E9=80=81?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=8F=96=E6=B6=88=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jxcallback/scheduler/defsch/defsch.go | 19 ++++++++++--------- business/partner/purchase/ebai/order.go | 17 ++++++++++++++++- business/partner/purchase/ebai/waybill.go | 14 ++++++++++++++ 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index d4ffa17a8..45487d5c2 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -300,19 +300,20 @@ func init() { // 饿百转自送的时机不太清楚,暂时禁用超时转自送,在饿百运单取消时还是会自动创建 // 非自配送商家使用 order := savedOrderInfo.order - return savedOrderInfo.isDeliveryCompetition && - model.IsOrderDeliveryByPlatform(order) && + return order.VendorID != model.VendorIDEBAI && order.VendorID == bill.WaybillVendorID && - order.VendorID != model.VendorIDEBAI && + savedOrderInfo.isDeliveryCompetition && + model.IsOrderDeliveryByPlatform(order) && order.DeliveryType != model.OrderDeliveryTypeSelfTake && - isOrderCanSwitch2SelfDeliver(order) + isOrderCanSwitch2SelfDeliver(order) && + (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) }, }, //* model.WaybillStatusCanceled: &StatusActionConfig{ StatusActionParams: partner.StatusActionParams{ TimerType: partner.TimerTypeBaseNow, - Timeout: 5 * time.Second, + Timeout: 1 * time.Second, }, TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) { return sch.createWaybillOn3rdProviders(savedOrderInfo, ebaiCancelWaybillMaxFee, nil) @@ -320,13 +321,13 @@ func init() { ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { order := savedOrderInfo.order // 非自配送商家使用 - return (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) && - savedOrderInfo.isDeliveryCompetition && + return order.VendorID == model.VendorIDEBAI && order.VendorID == bill.WaybillVendorID && + savedOrderInfo.isDeliveryCompetition && model.IsOrderDeliveryByPlatform(order) && - order.VendorID == model.VendorIDEBAI && order.DeliveryType != model.OrderDeliveryTypeSelfTake && - isOrderCanSwitch2SelfDeliver(order) + isOrderCanSwitch2SelfDeliver(order) && + (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) }, }, //*/ diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go index 2658dc3f1..e891e83fa 100644 --- a/business/partner/purchase/ebai/order.go +++ b/business/partner/purchase/ebai/order.go @@ -32,6 +32,7 @@ const ( fakeUserUndoApplyCancel = "fake_user_undo_apply_cancel" fakeAcceptOrder = "fake_accept_order" fakeOrderAdjustFinished = "fake_order_adjust_finished" + fakeOrderCanceled = "fake_order_canceled" ) // 饿百的接单会直接召唤配送,为了统一将饿百的接单影射成拣货完成,然后模拟一个接单消息 @@ -50,6 +51,7 @@ var ( fakeOrderAdjustFinished: model.OrderStatusAdjust, fakeUserApplyCancel: model.OrderStatusApplyCancel, fakeUserUndoApplyCancel: model.OrderStatusUndoApplyCancel, + fakeOrderCanceled: model.OrderStatusCanceled, } skuActTypeMap = map[string]int{ @@ -341,8 +343,11 @@ func (p *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName s if err = api.EbaiAPI.OrderSwitchselfdelivery(order.VendorOrderID); err != nil { if utils.IsErrMatch(err, "301251", nil) { if deliveryStatus, err2 := api.EbaiAPI.OrderDeliveryGet(order.VendorOrderID); err2 == nil { - if utils.Int64ToStr(utils.MustInterface2Int64(deliveryStatus["status"])) == ebaiapi.WaybillStatusSelfDelivery { + deliveryStatus := utils.Int64ToStr(utils.MustInterface2Int64(deliveryStatus["status"])) + if deliveryStatus == ebaiapi.WaybillStatusSelfDelivery { err = nil + } else if deliveryStatus == ebaiapi.WaybillStatusDeliveryCancled { + p.trySyncCancelStatus(order.VendorOrderID) } } } @@ -355,6 +360,16 @@ func (p *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName s return err } +func (p *PurchaseHandler) trySyncCancelStatus(vendorOrderID string) (err error) { + orderInfo, err := api.EbaiAPI.OrderGet2(vendorOrderID) + if err == nil { + if utils.Int2Str(orderInfo.Order.Status) == ebaiapi.OrderStatusCanceled { + p.postFakeMsg(vendorOrderID, fakeOrderCanceled) + } + } + return err +} + // 将订单从购物平台配送转为自送后又送达 func (p *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) { globals.SugarLogger.Debugf("ebai Swtich2SelfDelivered orderID:%s", order.VendorOrderID) diff --git a/business/partner/purchase/ebai/waybill.go b/business/partner/purchase/ebai/waybill.go index 12a9f4a27..0d7564fdd 100644 --- a/business/partner/purchase/ebai/waybill.go +++ b/business/partner/purchase/ebai/waybill.go @@ -1,6 +1,8 @@ package ebai import ( + "time" + "git.rosy.net.cn/baseapi/platformapi/ebaiapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" @@ -9,6 +11,10 @@ import ( "git.rosy.net.cn/jx-callback/globals/api" ) +const ( + timeout4WaybillCancel = 10 * time.Minute // 饿百发送运单取消消息10分钟后,如果没有转自送,就要取消订单,且不再发送订单取消消息 +) + var ( VendorWaybillStatus2StatusMap = map[string]int{ ebaiapi.WaybillStatusNew: model.WaybillStatusUnknown, @@ -44,6 +50,14 @@ func (c *PurchaseHandler) onWaybillMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiap order.CourierName = utils.Interface2String(result["name"]) order.CourierMobile = utils.Interface2String(result["phone"]) } + } else if order.Status == model.WaybillStatusCanceled { + utils.AfterFuncWithRecover(timeout4WaybillCancel, func() { + if localOrder, err2 := partner.CurOrderManager.LoadOrder(order.VendorOrderID, model.VendorIDEBAI); err2 == nil { + if localOrder.Status < model.OrderStatusEndBegin { + c.trySyncCancelStatus(order.VendorOrderID) + } + } + }) } return api.EbaiAPI.Err2CallbackResponse(msg.Cmd, partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus) }