diff --git a/business/controller/dada/waybill.go b/business/controller/dada/waybill.go index 1adb66966..e62b033d4 100644 --- a/business/controller/dada/waybill.go +++ b/business/controller/dada/waybill.go @@ -30,7 +30,7 @@ func (c *WaybillController) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dada order.Status = model.WaybillStatusNew case dadaapi.OrderStatusAccepted: order.Status = model.WaybillStatusAccepted - case dadaapi.OrderStatusDeliverying: + case dadaapi.OrderStatusDelivering: order.Status = model.WaybillStatusDelivering case dadaapi.OrderStatusFinished: order.Status = model.WaybillStatusDelivered diff --git a/business/controller/elm/order.go b/business/controller/elm/order.go index 44c5f850a..91ab06fde 100644 --- a/business/controller/elm/order.go +++ b/business/controller/elm/order.go @@ -210,10 +210,25 @@ func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI return err } -func (c *OrderController) ForcePickUp(order *model.GoodsOrder) (err error) { +// 饿了么没有拣货这个状态,直接返回成功 +// 真实流程中也不会调用这个方法,因为接收定单后状态会直接转移到已拣货 +func (c *OrderController) PickedUpGoods(order *model.GoodsOrder) (err error) { return nil } -func (c *OrderController) SwtichSelfDeliver(order *model.GoodsOrder) (err error) { +func (c *OrderController) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) { + return api.ElmAPI.DeliveryBySelfLite(order.VendorOrderID) +} + +// 饿了么没有这个操作,直接返回成功 +func (c *OrderController) SelfDeliverPickedUpGoods(order *model.GoodsOrder) (err error) { return nil } + +func (c *OrderController) SelfDeliverDelievering(order *model.GoodsOrder) (err error) { + return api.ElmAPI.StartDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile) +} + +func (c *OrderController) SelfDeliverDelievered(order *model.GoodsOrder) (err error) { + return api.ElmAPI.CompleteDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile) +} diff --git a/business/controller/jd/order.go b/business/controller/jd/order.go index 002529663..d58c345d3 100644 --- a/business/controller/jd/order.go +++ b/business/controller/jd/order.go @@ -163,10 +163,39 @@ func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI return err } -func (c *OrderController) ForcePickUp(order *model.GoodsOrder) (err error) { +func (c *OrderController) PickedUpGoods(order *model.GoodsOrder) (err error) { + _, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID) + return c.translateOrderRelatedErr(err) +} + +func (c *OrderController) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) { + _, err = api.JdAPI.ModifySellerDelivery(order.VendorOrderID) + return c.translateOrderRelatedErr(err) +} + +func (c *OrderController) SelfDeliverPickedUpGoods(order *model.GoodsOrder) (err error) { + _, err = api.JdAPI.OrderSerllerDelivery(order.VendorOrderID) + return c.translateOrderRelatedErr(err) +} + +// 京东无此操作,直接返回成功 +func (c *OrderController) SelfDeliverDelievering(order *model.GoodsOrder) (err error) { return nil } -func (c *OrderController) SwtichSelfDeliver(order *model.GoodsOrder) (err error) { +func (c *OrderController) SelfDeliverDelievered(order *model.GoodsOrder) (err error) { + _, err = api.JdAPI.DeliveryEndOrder(order.VendorOrderID) + return err +} + +func (c *OrderController) translateOrderRelatedErr(err error) (retVal error) { + if err != nil { + if errWithCode, ok := err.(*utils.ErrorWithCode); ok { + if errWithCode.Level() == 1 && errWithCode.Code() == jdapi.ResponseInnerCodeOrderAlreadyPickedUp { + return nil + } + } + return scheduler.ErrStatusIsNotOKForOperation + } return nil } diff --git a/business/scheduler/scheduler.go b/business/scheduler/scheduler.go index 39b431991..959c6f234 100644 --- a/business/scheduler/scheduler.go +++ b/business/scheduler/scheduler.go @@ -1,6 +1,7 @@ package scheduler import ( + "errors" "fmt" "time" @@ -11,6 +12,10 @@ var ( CurrentScheduler Scheduler ) +var ( + ErrStatusIsNotOKForOperation = errors.New("当前状态操作无效") +) + type StatusTimeoutAction struct { Action func(order *model.GoodsOrder) (err error) Timeout time.Duration @@ -23,8 +28,11 @@ type StatusConfig struct { type PurchasePlatformHandler interface { AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) - ForcePickUp(order *model.GoodsOrder) (err error) - SwtichSelfDeliver(order *model.GoodsOrder) (err error) + PickedUpGoods(order *model.GoodsOrder) (err error) + Swtich2SelfDeliver(order *model.GoodsOrder) (err error) + SelfDeliverPickedUpGoods(order *model.GoodsOrder) (err error) + SelfDeliverDelievering(order *model.GoodsOrder) (err error) + SelfDeliverDelievered(order *model.GoodsOrder) (err error) } type DeliveryPlatformHandler interface {