From 837395f43110f35c25a17e0fc07d204d19bed7bc Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 22 Mar 2019 20:55:59 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E8=87=AA=E9=85=8D=E9=80=81=E9=97=A8?= =?UTF-8?q?=E5=BA=97=E7=9A=84PickupGoods=E4=B8=8D=E5=BA=94=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E5=B9=B3=E5=8F=B0=E7=9B=B8=E5=BA=94API=EF=BC=8C?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E4=B8=80=E4=B8=AA=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jxcallback/scheduler/basesch/basesch.go | 28 +++++++++---------- .../scheduler/basesch/basesch_ext.go | 2 +- .../jxcallback/scheduler/defsch/defsch.go | 8 +++--- business/partner/partner.go | 2 +- business/partner/purchase/ebai/order.go | 4 +-- business/partner/purchase/elm/order.go | 2 +- business/partner/purchase/jd/order.go | 19 +++++++++++-- business/partner/purchase/mtwm/order.go | 21 ++++++++++++-- business/partner/purchase/weimob/wsc/order.go | 2 +- 9 files changed, 59 insertions(+), 29 deletions(-) diff --git a/business/jxcallback/scheduler/basesch/basesch.go b/business/jxcallback/scheduler/basesch/basesch.go index fb893ee74..d2955b90f 100644 --- a/business/jxcallback/scheduler/basesch/basesch.go +++ b/business/jxcallback/scheduler/basesch/basesch.go @@ -31,23 +31,21 @@ func (c *BaseScheduler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt return err } -func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder, userName string) (err error) { +func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) { globals.SugarLogger.Infof("PickupGoods orderID:%s", order.VendorOrderID) - if (order.DeliveryFlag & model.OrderDeliveryFlagMaskPurcahseDisabled) == 0 { - if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusAccepted { - if c.IsReallyCallPlatformAPI { - err = utils.CallFuncLogErrorWithInfo(func() error { - return partner.GetPurchasePlatformFromVendorID(order.VendorID).PickupGoods(order, userName) - }, "PickupGoods orderID:%s", order.VendorOrderID) - } + if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusAccepted { + if c.IsReallyCallPlatformAPI { + err = utils.CallFuncLogErrorWithInfo(func() error { + return partner.GetPurchasePlatformFromVendorID(order.VendorID).PickupGoods(order, isSelfDeilivery, userName) + }, "PickupGoods orderID:%s", order.VendorOrderID) + } + } else { + if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusAccepted { + err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation + globals.SugarLogger.Infof("PickupGoods orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) } else { - if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusAccepted { - err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation - globals.SugarLogger.Infof("PickupGoods orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) - } else { - err = scheduler.ErrOrderStatusAlreadySatisfyCurOperation - globals.SugarLogger.Debugf("PickupGoods orderID:%s status:%d already ok", order.VendorOrderID, order.Status) - } + err = scheduler.ErrOrderStatusAlreadySatisfyCurOperation + globals.SugarLogger.Debugf("PickupGoods orderID:%s status:%d already ok", order.VendorOrderID, order.Status) } } return err diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index 5ff0316fd..db6ab9818 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -67,7 +67,7 @@ func (c *BaseScheduler) PickupGoodsAndUpdateStatus(ctx *jxcontext.Context, vendo globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName) order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID) if err == nil { - err = c.PickupGoods(order, userName) + err = c.PickupGoods(order, GetStoreDeliveryType(order, nil) == scheduler.StoreDeliveryTypeByStore, userName) if err == nil { order.Status = model.OrderStatusFinishedPickup if err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order); err == nil { diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 0839557eb..0798da077 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -182,7 +182,7 @@ func init() { TimeoutGap: time2AutoPickupGap, TimeoutAction: func(savedOrderInfo *WatchOrderInfo) (err error) { if savedOrderInfo.autoPickupTimeoutMinute > 0 { - return sch.autoPickupGood(savedOrderInfo.order) + return sch.autoPickupGood(savedOrderInfo) } return nil }, @@ -281,7 +281,7 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus, isPending } else if status.LockStatus != model.OrderStatusUnknown { s.stopTimer(savedOrderInfo) } - } else if status.Status > model.OrderStatusApplyCancel { + } else if status.Status == model.OrderStatusApplyCancel { globals.SugarLogger.Debugf("OnOrderStatusChanged orderID:%s %s, status:%v", status.VendorOrderID, model.OrderStatusName[status.Status], status) savedOrderInfo := s.loadSavedOrderFromMap(status, true) utils.CallFuncAsync(func() { @@ -842,8 +842,8 @@ func (s *DefScheduler) updateBillsInfo(savedOrderInfo *WatchOrderInfo, bill *mod return isBillExist } -func (s *DefScheduler) autoPickupGood(order *model.GoodsOrder) (err error) { - err = s.PickupGoods(order, "") +func (s *DefScheduler) autoPickupGood(savedOrderInfo *WatchOrderInfo) (err error) { + err = s.PickupGoods(savedOrderInfo.order, savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore, "") if err == scheduler.ErrOrderStatusAlreadySatisfyCurOperation { err = nil } diff --git a/business/partner/partner.go b/business/partner/partner.go index 2899bd87f..be403e11e 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -72,7 +72,7 @@ type IPurchasePlatformHandler interface { GetStatusActionTimeout(statusType, status int) time.Duration AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) - PickupGoods(order *model.GoodsOrder, userName string) (err error) + PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) // 将订单从购物平台配送转为自送 Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go index 75575086b..9bf4b9fd3 100644 --- a/business/partner/purchase/ebai/order.go +++ b/business/partner/purchase/ebai/order.go @@ -158,9 +158,9 @@ func (p *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI return err } -func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) { +func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) { globals.SugarLogger.Debugf("ebai PickupGoods orderID:%s", order.VendorOrderID) - if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite { + if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite && !isSelfDeilivery { err = api.EbaiAPI.OrderCallDelivery(order.VendorOrderID) } p.postFakeFinishedPickupMsg(order.VendorOrderID) // 饿百没有拣货完成事件,模拟发送 diff --git a/business/partner/purchase/elm/order.go b/business/partner/purchase/elm/order.go index eca1c869c..6b725459e 100644 --- a/business/partner/purchase/elm/order.go +++ b/business/partner/purchase/elm/order.go @@ -287,7 +287,7 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI // 饿了么没有拣货这个状态,直接返回成功 // 真实流程中也不会调用这个方法,因为接收订单后状态会直接转移到已拣货 -func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) { +func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) { return nil } diff --git a/business/partner/purchase/jd/order.go b/business/partner/purchase/jd/order.go index dea53ae25..e1218f65e 100644 --- a/business/partner/purchase/jd/order.go +++ b/business/partner/purchase/jd/order.go @@ -226,6 +226,17 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *jdapi.CallbackOrderMsg) *model return orderStatus } +func (c *PurchaseHandler) postFakeFinishedPickupMsg(vendorOrderID string) { + msg := &jdapi.CallbackOrderMsg{ + BillID: vendorOrderID, + StatusID: jdapi.OrderStatusFinishedPickup, + Timestamp: utils.Time2Str(time.Now()), + } + utils.CallFuncAsync(func() { + OnOrderMsg(msg) + }) +} + // IPurchasePlatformHandler func (c *PurchaseHandler) GetStatusFromVendorStatus(vendorStatus string) int { if status, ok := VendorStatus2StatusMap[vendorStatus]; ok { @@ -238,8 +249,12 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI return api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt, userName) } -func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) { - _, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID, userName) +func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) { + if !isSelfDeilivery { + _, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID, userName) + } else { + c.postFakeFinishedPickupMsg(order.VendorOrderID) + } return err } diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 9e73ed96d..7b5fb8930 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -186,6 +186,21 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) *model.Or return orderStatus } +func (c *PurchaseHandler) postFakeFinishedPickupMsg(vendorOrderID string) { + msg := &mtwmapi.CallbackMsg{ + Cmd: mtwmapi.MsgTypeOrderAccepted, + Data: make(url.Values), + } + timeStr := utils.Int64ToStr(time.Now().Unix()) + msg.Data.Add(mtwmapi.KeyOrderID, vendorOrderID) + msg.Data.Add("status", mtwmapi.OrderStatusAccepted) + msg.Data.Add("timestamp", timeStr) + msg.Data.Add("utime", timeStr) + utils.CallFuncAsync(func() { + OnOrderCallbackMsg(msg) + }) +} + func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) { if globals.EnableStoreWrite && globals.EnableMtwmStoreWrite { if isAcceptIt { @@ -209,9 +224,11 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI return err } -func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) { - if globals.EnableStoreWrite && globals.EnableMtwmStoreWrite { +func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) { + if globals.EnableStoreWrite && globals.EnableMtwmStoreWrite && !isSelfDeilivery { err = api.MtwmAPI.OrderConfirm(utils.Str2Int64(order.VendorOrderID)) + } else { + c.postFakeFinishedPickupMsg(order.VendorOrderID) } return nil } diff --git a/business/partner/purchase/weimob/wsc/order.go b/business/partner/purchase/weimob/wsc/order.go index d52587cde..b3b2774f0 100644 --- a/business/partner/purchase/weimob/wsc/order.go +++ b/business/partner/purchase/weimob/wsc/order.go @@ -191,7 +191,7 @@ func (p *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI return err } -func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) { +func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) { if globals.EnableStoreWrite && globals.EnableWscStoreWrite { _, err = dada.CurDeliveryHandler.CreateWaybill(order, func(deliveryFee, addFee int64) error { if addFee > maxAddFee {