diff --git a/business/jxcallback/scheduler/basesch/basesch.go b/business/jxcallback/scheduler/basesch/basesch.go index 269ffb09f..fe7271167 100644 --- a/business/jxcallback/scheduler/basesch/basesch.go +++ b/business/jxcallback/scheduler/basesch/basesch.go @@ -61,12 +61,12 @@ func (c *BaseScheduler) GetDeliveryPlatformFromVendorID(vendorID int) *scheduler return c.DeliveryPlatformHandlers[vendorID] } -func (c *BaseScheduler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) { +func (c *BaseScheduler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) { globals.SugarLogger.Infof("AcceptOrRefuseOrder orderID:%s, isAcceptIt:%t", order.VendorOrderID, isAcceptIt) if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusNew { if c.IsReallyCallPlatformAPI { err = utils.CallFuncLogErrorWithInfo(func() error { - return c.GetPurchasePlatformFromVendorID(order.VendorID).AcceptOrRefuseOrder(order, isAcceptIt) + return c.GetPurchasePlatformFromVendorID(order.VendorID).AcceptOrRefuseOrder(order, isAcceptIt, userName) }, "AcceptOrRefuseOrder orderID:%s, isAcceptIt:%t", order.VendorOrderID, isAcceptIt) } } else { @@ -75,12 +75,12 @@ func (c *BaseScheduler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt return err } -func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder) (err error) { +func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder, userName string) (err error) { globals.SugarLogger.Infof("PickupGoods orderID:%s", order.VendorOrderID) if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusAccepted { if c.IsReallyCallPlatformAPI { err = utils.CallFuncLogErrorWithInfo(func() error { - return c.GetPurchasePlatformFromVendorID(order.VendorID).PickupGoods(order) + return c.GetPurchasePlatformFromVendorID(order.VendorID).PickupGoods(order, userName) }, "PickupGoods orderID:%s", order.VendorOrderID) } } else { @@ -92,12 +92,12 @@ func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder) (err error) { return err } -func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) { +func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) { globals.SugarLogger.Infof("Swtich2SelfDeliver orderID:%s", order.VendorOrderID) if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusFinishedPickup { if c.IsReallyCallPlatformAPI { err = utils.CallFuncLogErrorWithInfo(func() error { - return c.GetPurchasePlatformFromVendorID(order.VendorID).Swtich2SelfDeliver(order) + return c.GetPurchasePlatformFromVendorID(order.VendorID).Swtich2SelfDeliver(order, userName) }, "Swtich2SelfDeliver orderID:%s", order.VendorOrderID) if err == nil { // 因为有些平台转自送后,不会再发送订单在配送中消息过来,所以成功后就强制设置状态为配送中 order.Status = model.OrderStatusDelivering @@ -112,12 +112,12 @@ func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) return err } -func (c *BaseScheduler) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) { +func (c *BaseScheduler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (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) + return c.GetPurchasePlatformFromVendorID(order.VendorID).Swtich2SelfDelivered(order, userName) }, "Swtich2SelfDelivered orderID:%s", order.VendorOrderID) } } else { @@ -126,12 +126,12 @@ func (c *BaseScheduler) Swtich2SelfDelivered(order *model.GoodsOrder) (err error return err } -func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder) (err error) { +func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder, userName string) (err error) { globals.SugarLogger.Infof("SelfDeliverDelievering orderID:%s", order.VendorOrderID) if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusFinishedPickup { if c.IsReallyCallPlatformAPI { err = utils.CallFuncLogError(func() error { - return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievering(order) + return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievering(order, userName) }, "SelfDeliverDelievering orderID:%s", order.VendorOrderID) if err == nil { // 因为有些平台设置配送中后,不会发送订单在配送中消息过来,所以成功后就强制设置状态为配送中 order.Status = model.OrderStatusDelivering @@ -145,12 +145,12 @@ func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder) (err err return err } -func (c *BaseScheduler) SelfDeliverDelievered(order *model.GoodsOrder) (err error) { +func (c *BaseScheduler) SelfDeliverDelievered(order *model.GoodsOrder, userName string) (err error) { globals.SugarLogger.Infof("SelfDeliverDelievered 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).SelfDeliverDelievered(order) + return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievered(order, userName) }, "SelfDeliverDelievered orderID:%s", order.VendorOrderID) } } else { @@ -179,12 +179,12 @@ func (c *BaseScheduler) CreateWaybill(platformVendorID int, order *model.GoodsOr return bill, err } -func (c *BaseScheduler) CancelWaybill(bill *model.Waybill) (err error) { - globals.SugarLogger.Infof("CancelWaybill bill:%v", bill) +func (c *BaseScheduler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) { + globals.SugarLogger.Infof("CancelWaybill bill:%v, cancelReasonID:%d cancelReason:%s", bill, cancelReasonID, cancelReason) if c.IsReallyCallPlatformAPI && bill.OrderVendorID != bill.WaybillVendorID { if handlerInfo := c.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID); handlerInfo != nil { err = utils.CallFuncLogError(func() error { - return handlerInfo.Handler.CancelWaybill(bill) + return handlerInfo.Handler.CancelWaybill(bill, cancelReasonID, cancelReason) }, "CancelWaybill bill:%v", bill) globals.SugarLogger.Debugf("CancelWaybill bill:%v canceled by myself", bill) } diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index a5f81d218..ccc7371c0 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -18,10 +18,10 @@ func (c *BaseScheduler) CreateWaybillOnProviders(vendorOrderID string, vendorID return nil, err } -func (c *BaseScheduler) Swtich2SelfDeliverAndUpdateStatus(vendorOrderID string, vendorID int) (err error) { +func (c *BaseScheduler) Swtich2SelfDeliverAndUpdateStatus(vendorOrderID string, vendorID int, userName string) (err error) { order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID) if err == nil { - err = c.Swtich2SelfDeliver(order) + err = c.Swtich2SelfDeliver(order, userName) if err == nil { order.Status = model.OrderStatusDelivering err = partner.CurOrderManager.UpdateOrderStatusDirectly(order) @@ -30,10 +30,10 @@ func (c *BaseScheduler) Swtich2SelfDeliverAndUpdateStatus(vendorOrderID string, return err } -func (c *BaseScheduler) PickupGoodsAndUpdateStatus(vendorOrderID string, vendorID int) (err error) { +func (c *BaseScheduler) PickupGoodsAndUpdateStatus(vendorOrderID string, vendorID int, userName string) (err error) { order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID) if err == nil { - err = c.PickupGoods(order) + err = c.PickupGoods(order, userName) if err == nil { order.Status = model.OrderStatusFinishedPickup err = partner.CurOrderManager.UpdateOrderStatusDirectly(order) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 9d670e485..5ec3e05a6 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -152,7 +152,7 @@ func init() { TimeoutAction: func(savedOrderInfo *WatchOrderInfo) (err error) { order := savedOrderInfo.order _ = sch.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, order.ConsigneeMobile, jxutils.GetJxStoreIDFromOrder(order), nil, func(isAcceptIt bool) error { - if err = sch.AcceptOrRefuseOrder(order, isAcceptIt); err != nil { + if err = sch.AcceptOrRefuseOrder(order, isAcceptIt, ""); err != nil { // 为了解决京东新消息与接单消息乱序的问题 if errWithCode, ok := err.(*utils.ErrorWithCode); ok && errWithCode.Level() == 1 && errWithCode.IntCode() == -1 { if order2, err2 := sch.GetPurchasePlatformFromVendorID(order.VendorID).GetOrder(order.VendorOrderID); err2 == nil && order2.Status > order.Status { @@ -238,7 +238,7 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus, isPending globals.SugarLogger.Infof("OnOrderStatusChanged [运营2]订单orderID:%s可能被手动点击送达,会对程序状态产生不利影响,请通知门店不要这样操作!", status.VendorOrderID) } } - s.cancelOtherWaybills(savedOrderInfo, curWaybill) + s.cancelOtherWaybills(savedOrderInfo, curWaybill, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrOrderAlreadyFinished) s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(status)) } } else if status.LockStatus != model.OrderStatusUnknown { @@ -266,11 +266,11 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo s.addWaybill2Map(savedOrderInfo, bill) if !isPending { if order.Status > model.OrderStatusEndBegin { - s.CancelWaybill(bill) + s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) } else if order.WaybillVendorID != model.VendorIDUnknown { globals.SugarLogger.Debugf("OnWaybillStatusChanged multiple waybill created, bill:%v", bill) if !s.isBillCandidate(order, bill) && bill.WaybillVendorID != order.VendorID { - s.CancelWaybill(bill) + s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) } else if bill.WaybillVendorID == order.VendorID && order.WaybillVendorID != order.VendorID { globals.SugarLogger.Warnf("OnWaybillStatusChanged bill:%v purchase platform bill came later than others, strange!!!", bill) } @@ -293,10 +293,10 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo globals.SugarLogger.Infof("OnWaybillStatusChanged orderID:%s purchase platform waybill arrvied later, may case problem", order.VendorOrderID) } s.updateOrderByBill(order, bill, false) - s.cancelOtherWaybills(savedOrderInfo, bill) + s.cancelOtherWaybills(savedOrderInfo, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) if bill.WaybillVendorID != bill.OrderVendorID { if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { - s.SelfDeliverDelievering(savedOrderInfo.order) + s.SelfDeliverDelievering(savedOrderInfo.order, "") } else { s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, 2, 10*time.Second) } @@ -306,7 +306,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo } } else if !s.isBillCandidate(order, bill) && bill.WaybillVendorID != order.VendorID { // 发生这种情况的原因就是两个接单事件几乎同时到达(来不及取消),也算正常 - s.CancelWaybill(bill) + s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) globals.SugarLogger.Infof("OnWaybillStatusChanged Accepted orderID:%s got multiple bill:%v", order.VendorOrderID, bill) } } @@ -320,14 +320,14 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo s.createWaybillOn3rdProviders(savedOrderInfo, bill) } } else if order.WaybillVendorID != model.VendorIDUnknown { - s.CancelWaybill(bill) + s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) globals.SugarLogger.Warnf("OnWaybillStatusChanged AcceptCanceled orderID:%s got multiple bill:%v, order details:%v", order.VendorOrderID, bill, order) } case model.WaybillStatusCourierArrived: // do nothing s.resetTimer(savedOrderInfo, bill, isPending) if s.isBillCandidate(order, bill) { } else { - // s.CancelWaybill(bill) + // s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) globals.SugarLogger.Infof("OnWaybillStatusChanged CourierArrived order(%d, %s) bill(%d, %s), bill:%v shouldn't get here", order.WaybillVendorID, order.VendorWaybillID, bill.WaybillVendorID, bill.VendorWaybillID, bill) } case model.WaybillStatusFailed: // todo WaybillStatusFailed理解成订单整个失败了,不需要再尝试创建运单了,注意这里应该加个zabbix日志的报警 @@ -362,7 +362,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo if s.isBillCandidate(order, bill) { // do nothing } else { - // s.CancelWaybill(bill) + // s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) globals.SugarLogger.Infof("OnWaybillStatusChanged Delivering order(%d, %s) bill(%d, %s), bill:%v shouldn't get here", order.WaybillVendorID, order.VendorWaybillID, bill.WaybillVendorID, bill.VendorWaybillID, bill) } case model.WaybillStatusDelivered: @@ -370,9 +370,9 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo s.removeWaybillFromMap(savedOrderInfo, bill) if order.VendorID != bill.WaybillVendorID && !isPending { if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { - s.SelfDeliverDelievered(order) + s.SelfDeliverDelievered(order, "") } else { - s.Swtich2SelfDelivered(order) + s.Swtich2SelfDelivered(order, "") } } if !s.isBillCandidate(order, bill) { @@ -464,11 +464,11 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf return err } -func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill2Keep *model.Waybill) (err error) { +func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill2Keep *model.Waybill, cancelReasonID int, cancelReason string) (err error) { globals.SugarLogger.Debugf("cancelOtherWaybills, orderID:%s, bill:%v", savedOrderInfo.order.VendorOrderID, bill2Keep) for _, v := range savedOrderInfo.waybills { if (v.OrderVendorID != v.WaybillVendorID) && (bill2Keep == nil || !(v.WaybillVendorID == bill2Keep.WaybillVendorID && v.VendorWaybillID == bill2Keep.VendorWaybillID)) { - s.CancelWaybill(v) + s.CancelWaybill(v, cancelReasonID, cancelReason) } } return nil @@ -478,7 +478,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf order := savedOrderInfo.order globals.SugarLogger.Debugf("swtich2SelfDeliverWithRetry orderID:%s", order.VendorOrderID) if order.WaybillVendorID != order.VendorID { - if err := s.Swtich2SelfDeliver(order); err != nil { + if err := s.Swtich2SelfDeliver(order, ""); err != nil { globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry failed, bill:%v, err:%v", bill, err) if retryCount > 0 { time.AfterFunc(duration, func() { @@ -497,7 +497,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf db := orm.NewOrm() db.Insert(tmpLog) - if s.CancelWaybill(bill) == nil { + if s.CancelWaybill(bill, partner.CancelWaybillReasonSwitch2SelfFailed, partner.CancelWaybillReasonStrSwitch2SelfFailed) == nil { // 转自送失败的取消,要将订单中的运单状态更新 if s.isBillCandidate(order, bill) { bill.WaybillVendorID = model.VendorIDUnknown @@ -697,7 +697,7 @@ func (s *DefScheduler) updateOrderByBill(order *model.GoodsOrder, bill *model.Wa } func (s *DefScheduler) autoPickupGood(order *model.GoodsOrder) (err error) { - return s.PickupGoods(order) + return s.PickupGoods(order, "") } func (s *DefScheduler) isBillCandidate(order *model.GoodsOrder, bill *model.Waybill) bool { diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index 5e8b3192d..0c42a25e6 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -148,17 +148,16 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy func(del return bill, err } -func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill) (err error) { - reasonID := dadaapi.ReasonIDOther - reasonMsg := "send not in time" - if bill.Status < model.WaybillStatusAccepted { - reasonID = dadaapi.ReasonIDNobodyAccept - reasonMsg = "ReasonIDNobodyAccept" - } else if bill.Status < model.WaybillStatusCourierArrived { - reasonID = dadaapi.ReasonIDNobodyPickup - reasonMsg = "ReasonIDNobodyPickup" +func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) { + switch cancelReasonID { + case partner.CancelWaybillReasonNotAcceptIntime: + cancelReasonID = dadaapi.ReasonIDNobodyAccept + case partner.CancelWaybillReasonSwitch2SelfFailed: + cancelReasonID = dadaapi.ReasonIDClientDontWantItAnymore + default: + cancelReasonID = dadaapi.ReasonIDOther } - _, err = api.DadaAPI.CancelOrder(bill.VendorOrderID, reasonID, reasonMsg) + _, err = api.DadaAPI.CancelOrder(bill.VendorOrderID, cancelReasonID, cancelReason) return err } diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index 4f1fdb4d3..2be20852d 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -245,17 +245,16 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy func(del return bill, err } -func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill) (err error) { - reasonID := mtpsapi.CancelReasonRidderSendNotIntime - reasonMsg := "CancelReasonRidderSendNotIntime" - if bill.Status < model.WaybillStatusAccepted { - reasonID = mtpsapi.CancelReasonMerchantOther - reasonMsg = "nobody accept order" - } else if bill.Status < model.WaybillStatusCourierArrived { - reasonID = mtpsapi.CancelReasonRideerGetGoodNotIntime - reasonMsg = "CancelReasonRideerGetGoodNotIntime" +func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) { + switch cancelReasonID { + case partner.CancelWaybillReasonNotAcceptIntime: + cancelReasonID = mtpsapi.CancelReasonRideerMtpsOther + case partner.CancelWaybillReasonSwitch2SelfFailed: + cancelReasonID = mtpsapi.CancelReasonMerchantOther + default: + cancelReasonID = mtpsapi.CancelReasonRideerOther } - _, err = api.MtpsAPI.CancelOrder(utils.Str2Int64(bill.VendorWaybillID2), bill.VendorWaybillID, reasonID, reasonMsg) + _, err = api.MtpsAPI.CancelOrder(utils.Str2Int64(bill.VendorWaybillID2), bill.VendorWaybillID, cancelReasonID, cancelReason) return nil } diff --git a/business/partner/partner.go b/business/partner/partner.go index 55e2c7f25..b7448ae1e 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -6,6 +6,18 @@ import ( "git.rosy.net.cn/jx-callback/business/model" ) +const ( + CancelWaybillReasonNotAcceptIntime = 1 + CancelWaybillReasonSwitch2SelfFailed = 2 + CancelWaybillReasonOther = 10 +) + +var ( + CancelWaybillReasonStrNotAcceptIntime = "没有及时抢单" + CancelWaybillReasonStrSwitch2SelfFailed = "转自送失败" + CancelWaybillReasonStrOrderAlreadyFinished = "订单已经结束" +) + var ( CurOrderManager IOrderManager ) @@ -27,25 +39,25 @@ type IPurchasePlatformHandler interface { GetOrder(vendorOrderID string) (order *model.GoodsOrder, err error) GetStatusActionTimeout(statusType, status int) time.Duration - AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) - PickupGoods(order *model.GoodsOrder) (err error) + AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) + PickupGoods(order *model.GoodsOrder, userName string) (err error) // 将订单从购物平台配送转为自送 - Swtich2SelfDeliver(order *model.GoodsOrder) (err error) + Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) // 将订单从购物平台配送转为自送后又送达 - Swtich2SelfDelivered(order *model.GoodsOrder) (err error) + Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) // 完全自送的门店表示开始配送 - SelfDeliverDelievering(order *model.GoodsOrder) (err error) + SelfDeliverDelievering(order *model.GoodsOrder, userName string) (err error) // 完全自送的门店表示配送完成 - SelfDeliverDelievered(order *model.GoodsOrder) (err error) + SelfDeliverDelievered(order *model.GoodsOrder, userName string) (err error) } type IDeliveryPlatformHandler interface { CreateWaybill(order *model.GoodsOrder, policy func(deliveryFee, addFee int64) error) (bill *model.Waybill, err error) - CancelWaybill(bill *model.Waybill) (err error) + CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) } func Init(curOrderManager IOrderManager) { diff --git a/business/partner/purchase/elm/order.go b/business/partner/purchase/elm/order.go index 9817b8255..807a19512 100644 --- a/business/partner/purchase/elm/order.go +++ b/business/partner/purchase/elm/order.go @@ -264,7 +264,7 @@ func (c *PurchaseHandler) GetStatusFromVendorStatus(vendorStatus string) int { return model.OrderStatusUnknown } -func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) { +func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) { if isAcceptIt { err = api.ElmAPI.ConfirmOrder(order.VendorOrderID) } else { @@ -275,25 +275,25 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI // 饿了么没有拣货这个状态,直接返回成功 // 真实流程中也不会调用这个方法,因为接收订单后状态会直接转移到已拣货 -func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder) (err error) { +func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) { return nil } -func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) { +func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) { err = api.ElmAPI.DeliveryBySelfLite(order.VendorOrderID) return err } // 饿了么转商家自送后,没有确认送达的概念,空操作 -func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) { +func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) { return nil } -func (c *PurchaseHandler) SelfDeliverDelievering(order *model.GoodsOrder) (err error) { +func (c *PurchaseHandler) SelfDeliverDelievering(order *model.GoodsOrder, userName string) (err error) { return api.ElmAPI.StartDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile) } -func (c *PurchaseHandler) SelfDeliverDelievered(order *model.GoodsOrder) (err error) { +func (c *PurchaseHandler) SelfDeliverDelievered(order *model.GoodsOrder, userName string) (err error) { return api.ElmAPI.CompleteDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile) } diff --git a/business/partner/purchase/jd/order.go b/business/partner/purchase/jd/order.go index b1e239ae8..466950661 100644 --- a/business/partner/purchase/jd/order.go +++ b/business/partner/purchase/jd/order.go @@ -184,18 +184,18 @@ func (c *PurchaseHandler) GetStatusFromVendorStatus(vendorStatus string) int { return model.OrderStatusUnknown } -func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) { - _, err = api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt) +func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) { + _, err = api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt, userName) return err } -func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder) (err error) { - _, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID) +func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) { + _, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID, userName) return err } -func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) { - _, err = api.JdAPI.ModifySellerDelivery(order.VendorOrderID) +func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) { + _, err = api.JdAPI.ModifySellerDelivery(order.VendorOrderID, userName) if err != nil { if errWithCode, ok := err.(*utils.ErrorWithCode); ok && errWithCode.Level() == 1 { globals.SugarLogger.Infof("Swtich2SelfDeliver failed with error:%v try get current status", err) @@ -212,17 +212,17 @@ func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error return err } -func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) { - _, err = api.JdAPI.DeliveryEndOrder(order.VendorOrderID) +func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) { + _, err = api.JdAPI.DeliveryEndOrder(order.VendorOrderID, userName) return err } -func (c *PurchaseHandler) SelfDeliverDelievering(order *model.GoodsOrder) (err error) { - _, err = api.JdAPI.OrderSerllerDelivery(order.VendorOrderID) +func (c *PurchaseHandler) SelfDeliverDelievering(order *model.GoodsOrder, userName string) (err error) { + _, err = api.JdAPI.OrderSerllerDelivery(order.VendorOrderID, userName) return err } // 京东送达接口都是一样的 -func (c *PurchaseHandler) SelfDeliverDelievered(order *model.GoodsOrder) (err error) { - return c.Swtich2SelfDelivered(order) +func (c *PurchaseHandler) SelfDeliverDelievered(order *model.GoodsOrder, userName string) (err error) { + return c.Swtich2SelfDelivered(order, userName) } diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 7ecb59530..a7c63aaec 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -13,6 +13,14 @@ type OrderController struct { beego.Controller } +func GetUserNameFromToken(token string) string { + userName := token + if len(userName) > 10 { + userName = userName[:10] + } + return userName +} + func (c *OrderController) URLMapping() { c.Mapping("FinishedPickup", c.FinishedPickup) c.Mapping("GetStoreOrderInfo", c.GetStoreOrderInfo) @@ -21,16 +29,17 @@ func (c *OrderController) URLMapping() { c.Mapping("Swtich2SelfDeliver", c.Swtich2SelfDeliver) } -func (c *OrderController) orderOperate(handler func(vendorOrderID string, vendorID int) (interface{}, error)) { +func (c *OrderController) orderOperate(handler func(vendorOrderID string, vendorID int, userName string) (interface{}, error)) { var ( - vendorOrderID string - vendorID int - err error + vendorOrderID, token string + vendorID int + err error ) + token = c.Ctx.Input.Header("token") vendorOrderID = c.GetString("vendorOrderID") vendorID, err1 := c.GetInt("vendorID", 0) - if vendorOrderID != "" && err1 == nil { - result, err2 := handler(vendorOrderID, vendorID) + if vendorOrderID != "" && token != "" && err1 == nil { + result, err2 := handler(vendorOrderID, vendorID, GetUserNameFromToken(token)) if err = err2; err == nil { retObj := &model.CallResult{ Code: "0", @@ -45,6 +54,9 @@ func (c *OrderController) orderOperate(handler func(vendorOrderID string, vendor if vendorOrderID == "" { errMsg += "vendorOrderID is empty\n" } + if token == "" { + errMsg += "token is empty\n" + } if errMsg != "" { c.Data["json"] = &model.CallResult{ Code: "-1", @@ -56,45 +68,49 @@ func (c *OrderController) orderOperate(handler func(vendorOrderID string, vendor // @Title 完成拣货 // @Description 完成拣货 +// @Param token header string true "认证toke" // @Param vendorOrderID formData string true "订单ID" // @Param vendorID formData int true "订单所属的厂商ID" // @Success 200 {object} business.model.CallResult // @Failure 200 {object} business.model.CallResult // @router /FinishedPickup [post] func (c *OrderController) FinishedPickup() { - c.orderOperate(func(vendorOrderID string, vendorID int) (interface{}, error) { - return nil, basesch.FixedBaseScheduler.PickupGoodsAndUpdateStatus(vendorOrderID, vendorID) + c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) { + return nil, basesch.FixedBaseScheduler.PickupGoodsAndUpdateStatus(vendorOrderID, vendorID, userName) }) } // @Title 转自送 // @Description 转自送 +// @Param token header string true "认证toke" // @Param vendorOrderID formData string true "订单ID" // @Param vendorID formData int true "订单所属的厂商ID" // @Success 200 {object} business.model.CallResult // @Failure 200 {object} business.model.CallResult // @router /Swtich2SelfDeliver [post] func (c *OrderController) Swtich2SelfDeliver() { - c.orderOperate(func(vendorOrderID string, vendorID int) (interface{}, error) { - return nil, basesch.FixedBaseScheduler.Swtich2SelfDeliverAndUpdateStatus(vendorOrderID, vendorID) + c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) { + return nil, basesch.FixedBaseScheduler.Swtich2SelfDeliverAndUpdateStatus(vendorOrderID, vendorID, userName) }) } // @Title 创建三方运单 // @Description 创建三方运单 +// @Param token header string true "认证toke" // @Param vendorOrderID formData string true "订单ID" // @Param vendorID formData int true "订单所属的厂商ID" // @Success 200 {object} business.model.CallResult // @Failure 200 {object} business.model.CallResult // @router /CreateWaybillOnProviders [post] func (c *OrderController) CreateWaybillOnProviders() { - c.orderOperate(func(vendorOrderID string, vendorID int) (interface{}, error) { + c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) { return basesch.FixedBaseScheduler.CreateWaybillOnProviders(vendorOrderID, vendorID) }) } // @Title 得到门店订单信息 // @Description 得到门店订单信息 +// @Param token header string true "认证toke" // @Param storeID query string true "京西门店ID" // @Param lastHours query int false "最近多少小时的信息(缺省为两天)" // @Success 200 {object} business.model.CallResult @@ -132,6 +148,7 @@ func (c *OrderController) GetStoreOrderCountInfo() { // @Title 得到门店订单状态信息 // @Description 得到门店订单状态信息 +// @Param token header string true "认证toke" // @Param storeID query string true "京西门店ID" // @Param lastHours query int false "最近多少小时的信息(缺省为两天)" // @Param fromStatus query int true "起始状态(包括)" @@ -178,13 +195,15 @@ func (c *OrderController) GetStoreOrderInfo() { // @Title 得到订单SKU信息 // @Description 得到订单SKU信息 +// @Param token header string true "认证toke" // @Param vendorOrderID query string true "订单ID" // @Param vendorID query int true "订单所属的厂商ID" // @Success 200 {object} business.model.CallResult // @Failure 200 {object} business.model.CallResult // @router /GetOrderSkuInfo [get] func (c *OrderController) GetOrderSkuInfo() { - c.orderOperate(func(vendorOrderID string, vendorID int) (interface{}, error) { + c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) { + // globals.SugarLogger.Debugf("userName:%s", userName) return orderman.FixedOrderManager.GetOrderSkuInfo(vendorOrderID, vendorID) }) }