From afe31e0db724108ac2671d8fb43d1328907738a9 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sat, 4 Aug 2018 23:08:16 +0800 Subject: [PATCH] - reorganize purchase platform interface, split Swith2SelfDeliver and SelfDelivery. --- business/controller/elm/order.go | 8 +++++--- business/controller/jd/order.go | 9 +++++++-- business/scheduler/defsch/defsch.go | 6 +++++- business/scheduler/scheduler.go | 30 ++++++++++++++++++++++++++++- 4 files changed, 46 insertions(+), 7 deletions(-) diff --git a/business/controller/elm/order.go b/business/controller/elm/order.go index 928ef4332..168a0ea52 100644 --- a/business/controller/elm/order.go +++ b/business/controller/elm/order.go @@ -268,12 +268,14 @@ func (c *OrderController) PickupGoods(order *model.GoodsOrder) (err error) { func (c *OrderController) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) { err = api.ElmAPI.DeliveryBySelfLite(order.VendorOrderID) - // todo 饿了么订单转自送后,不会自动处于配送中状态(而京东平台就会),主动调用一个这个接口,这样使用是不确定的。 - // 参见:https://open.shop.ele.me/openapi/onlineqa/detail/c128392dd92a4d6a9af738ea5e6c6df9,这个回复也不清楚 - c.SelfDeliverDelievering(order) return err } +// 饿了么转商家自送后,没有确认送达的概念,空操作 +func (c *OrderController) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) { + return nil +} + func (c *OrderController) SelfDeliverDelievering(order *model.GoodsOrder) (err error) { return api.ElmAPI.StartDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile) } diff --git a/business/controller/jd/order.go b/business/controller/jd/order.go index dc8cb457a..142a570ea 100644 --- a/business/controller/jd/order.go +++ b/business/controller/jd/order.go @@ -214,12 +214,17 @@ func (c *OrderController) Swtich2SelfDeliver(order *model.GoodsOrder) (err error return err } +func (c *OrderController) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) { + _, err = api.JdAPI.DeliveryEndOrder(order.VendorOrderID) + return err +} + func (c *OrderController) SelfDeliverDelievering(order *model.GoodsOrder) (err error) { _, err = api.JdAPI.OrderSerllerDelivery(order.VendorOrderID) return err } +// 京东送达接口都是一样的 func (c *OrderController) SelfDeliverDelievered(order *model.GoodsOrder) (err error) { - _, err = api.JdAPI.DeliveryEndOrder(order.VendorOrderID) - return err + return c.Swtich2SelfDelivered(order) } diff --git a/business/scheduler/defsch/defsch.go b/business/scheduler/defsch/defsch.go index 8d7c1750b..a9a8f0ac0 100644 --- a/business/scheduler/defsch/defsch.go +++ b/business/scheduler/defsch/defsch.go @@ -343,7 +343,11 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo s.resetTimer(savedOrderInfo, bill, isPending) s.removeWaybillFromMap(savedOrderInfo, bill) if order.VendorID != bill.WaybillVendorID && !isPending { - s.SelfDeliverDelievered(order) + if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { + s.SelfDeliverDelievered(order) + } else { + s.Swtich2SelfDelivered(order) + } } if !s.isBillCandidate(order, bill) { // 一般只会消息乱序才会到这里,即新订单消息在运单接单消息后到达 diff --git a/business/scheduler/scheduler.go b/business/scheduler/scheduler.go index 8001ac957..21796d725 100644 --- a/business/scheduler/scheduler.go +++ b/business/scheduler/scheduler.go @@ -50,8 +50,16 @@ type PurchasePlatformHandler interface { AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) PickupGoods(order *model.GoodsOrder) (err error) + // 将订单从购物平台配送转为自送 Swtich2SelfDeliver(order *model.GoodsOrder) (err error) + + // 将订单从购物平台配送转为自送后又送达 + Swtich2SelfDelivered(order *model.GoodsOrder) (err error) + + // 完全自送的门店表示开始配送 SelfDeliverDelievering(order *model.GoodsOrder) (err error) + + // 完全自送的门店表示配送完成 SelfDeliverDelievered(order *model.GoodsOrder) (err error) } @@ -165,6 +173,9 @@ func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) err = utils.CallFuncLogErrorWithInfo(func() error { return c.GetPurchasePlatformFromVendorID(order.VendorID).Swtich2SelfDeliver(order) }, "Swtich2SelfDeliver orderID:%s", order.VendorOrderID) + if err == nil { // 因为有些平台转自送后,不会再发送订单在配送中消息过来,所以成功后就强制设置状态为配送中 + order.Status = model.OrderStatusDelivering + } } } else { globals.SugarLogger.Infof("Swtich2SelfDeliver orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) @@ -172,6 +183,20 @@ func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) return err } +func (c *BaseScheduler) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) { + globals.SugarLogger.Infof("Swtich2SelfDelivered orderID:%s", order.VendorOrderID) + if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusDelivering { + if c.IsReallyCallPlatformAPI { + err = utils.CallFuncLogError(func() error { + return c.GetPurchasePlatformFromVendorID(order.VendorID).Swtich2SelfDelivered(order) + }, "Swtich2SelfDelivered orderID:%s", order.VendorOrderID) + } + } else { + globals.SugarLogger.Infof("Swtich2SelfDelivered orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) + } + return err +} + func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder) (err error) { globals.SugarLogger.Infof("SelfDeliverDelievering orderID:%s", order.VendorOrderID) if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusFinishedPickup { @@ -179,6 +204,9 @@ func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder) (err err err = utils.CallFuncLogError(func() error { return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievering(order) }, "SelfDeliverDelievering orderID:%s", order.VendorOrderID) + if err == nil { // 因为有些平台设置配送中后,不会发送订单在配送中消息过来,所以成功后就强制设置状态为配送中 + order.Status = model.OrderStatusDelivering + } } } else if order.Status == model.OrderStatusDelivering { globals.SugarLogger.Debugf("SelfDeliverDelievering orderID:%s, status:%d already ok", order.VendorOrderID, order.Status) @@ -190,7 +218,7 @@ func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder) (err err func (c *BaseScheduler) SelfDeliverDelievered(order *model.GoodsOrder) (err error) { globals.SugarLogger.Infof("SelfDeliverDelievered orderID:%s", order.VendorOrderID) - if order.LockStatus == model.OrderStatusUnknown && (order.Status == model.OrderStatusFinishedPickup || order.Status == model.OrderStatusDelivering) { // todo 饿了么转自送后,不会发送配送中消息,暂时先这样 + if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusDelivering { if c.IsReallyCallPlatformAPI { err = utils.CallFuncLogError(func() error { return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievered(order)