From 34c25a76394041a5f80a8f92e890d2584a7c3237 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 21 Feb 2019 18:19:12 +0800 Subject: [PATCH] - add API CancelAll3rdWaybills - sync all order related APIs --- .../scheduler/basesch/basesch_ext.go | 66 ++++--- .../jxcallback/scheduler/defsch/defsch_ext.go | 162 ++++++++++-------- controllers/jx_order.go | 17 +- routers/commentsRouter_controllers.go | 8 + 4 files changed, 155 insertions(+), 98 deletions(-) diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index 465bc281b..5ff0316fd 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -36,40 +36,50 @@ func (c *BaseScheduler) CreateWaybillOnProviders(order *model.GoodsOrder, userNa } func (c *BaseScheduler) SelfDeliveredAndUpdateStatus(ctx *jxcontext.Context, vendorOrderID string, vendorID int, userName string) (err error) { - globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName) - order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID) - if err == nil { - if GetStoreDeliveryType(order, nil) == scheduler.StoreDeliveryTypeByStore { - err = c.SelfDeliverDelievered(order, userName) - } else { - err = c.Swtich2SelfDelivered(order, userName) - } - if err == nil { - order.Status = model.OrderStatusDelivered - if err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order); err == nil { - globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s successfully", vendorOrderID, userName) - return err + jxutils.CallMsgHandler(func() { + err = func() (err error) { + globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName) + order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID) + if err == nil { + if GetStoreDeliveryType(order, nil) == scheduler.StoreDeliveryTypeByStore { + err = c.SelfDeliverDelievered(order, userName) + } else { + err = c.Swtich2SelfDelivered(order, userName) + } + if err == nil { + order.Status = model.OrderStatusDelivered + if err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order); err == nil { + globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s successfully", vendorOrderID, userName) + return err + } + } } - } - } - globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s error:%v", vendorOrderID, userName, err) + globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s error:%v", vendorOrderID, userName, err) + return err + }() + }, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID)) return err } func (c *BaseScheduler) PickupGoodsAndUpdateStatus(ctx *jxcontext.Context, vendorOrderID string, vendorID int, userName string) (err error) { - 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) - if err == nil { - order.Status = model.OrderStatusFinishedPickup - if err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order); err == nil { - globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s successfully", vendorOrderID, userName) - return err + jxutils.CallMsgHandler(func() { + err = func() (err error) { + 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) + if err == nil { + order.Status = model.OrderStatusFinishedPickup + if err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order); err == nil { + globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s successfully", vendorOrderID, userName) + return err + } + } } - } - } - globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s error:%v", vendorOrderID, userName, err) + globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s error:%v", vendorOrderID, userName, err) + return err + }() + }, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID)) return err } diff --git a/business/jxcallback/scheduler/defsch/defsch_ext.go b/business/jxcallback/scheduler/defsch/defsch_ext.go index 1ffa9b565..70e33ee63 100644 --- a/business/jxcallback/scheduler/defsch/defsch_ext.go +++ b/business/jxcallback/scheduler/defsch/defsch_ext.go @@ -13,83 +13,107 @@ import ( ) func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, vendorOrderID string, vendorID int, userName string) (err error) { - globals.SugarLogger.Infof("SelfDeliveringAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName) - status := &model.OrderStatus{ - RefVendorOrderID: vendorOrderID, - RefVendorID: vendorID, - } - savedOrderInfo := s.loadSavedOrderFromMap(status, false) - if savedOrderInfo != nil { - order := savedOrderInfo.order - err = s.cancelOtherWaybills(savedOrderInfo, nil, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive) - if err == nil { - if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { - if order.Status <= model.OrderStatusFinishedPickup { - err = s.SelfDeliverDelivering(order, "") + jxutils.CallMsgHandler(func() { + err = func() (err error) { + globals.SugarLogger.Infof("SelfDeliveringAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName) + status := &model.OrderStatus{ + RefVendorOrderID: vendorOrderID, + RefVendorID: vendorID, + } + savedOrderInfo := s.loadSavedOrderFromMap(status, false) + if savedOrderInfo != nil { + order := savedOrderInfo.order + err = s.cancelOtherWaybills(savedOrderInfo, nil, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive) + if err == nil { + if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { + if order.Status <= model.OrderStatusFinishedPickup { + err = s.SelfDeliverDelivering(order, "") + } + } else { + if order.Status <= model.OrderStatusFinishedPickup { + err = s.Swtich2SelfDeliver(order, userName) + } else if order.VendorID == order.WaybillVendorID { // 状态为配送中,且是购物平台运单,不能转自送了 + err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation + } + } + } + if err == nil { + order.Status = model.OrderStatusDelivering + order.DeliveryFlag |= model.OrderDeliveryFlagMaskScheduleDisabled | model.OrderDeliveryFlagMaskPurcahseDisabled + if err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order); err == nil { + s.stopTimer(savedOrderInfo) + globals.SugarLogger.Infof("SelfDeliveringAndUpdateStatus orderID:%s userName:%s successfully", vendorOrderID, userName) + return err + } } } else { - if order.Status <= model.OrderStatusFinishedPickup { - err = s.Swtich2SelfDeliver(order, userName) - } else if order.VendorID == order.WaybillVendorID { // 状态为配送中,且是购物平台运单,不能转自送了 - err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation - } + err = scheduler.ErrCanNotFindOrder } - } - if err == nil { - order.Status = model.OrderStatusDelivering - order.DeliveryFlag |= model.OrderDeliveryFlagMaskScheduleDisabled | model.OrderDeliveryFlagMaskPurcahseDisabled - if err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order); err == nil { - s.stopTimer(savedOrderInfo) - globals.SugarLogger.Infof("SelfDeliveringAndUpdateStatus orderID:%s userName:%s successfully", vendorOrderID, userName) - return err - } - } - } else { - err = scheduler.ErrCanNotFindOrder - } - globals.SugarLogger.Infof("SelfDeliveringAndUpdateStatus orderID:%s userName:%s error:%v", vendorOrderID, userName, err) - return err -} - -func (s *DefScheduler) SelfDeliveringAndUpdateStatusExt(ctx *jxcontext.Context, vendorOrderID string, vendorID int, userName string) (err error) { - jxutils.CallMsgHandler(func() { - err = s.SelfDeliveringAndUpdateStatus(ctx, vendorOrderID, vendorID, userName) + globals.SugarLogger.Infof("SelfDeliveringAndUpdateStatus orderID:%s userName:%s error:%v", vendorOrderID, userName, err) + return err + }() }, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID)) return err } func (s *DefScheduler) CreateWaybillOnProvidersEx(ctx *jxcontext.Context, vendorOrderID string, vendorID int, forceCreate bool) (bills []*model.Waybill, err error) { - userName := ctx.GetUserName() - globals.SugarLogger.Debugf("CreateWaybillOnProvidersEx orderID:%s userName:%s", vendorOrderID, userName) - if vendorID == model.VendorIDELM { - return nil, fmt.Errorf("不要直接使用饿了么订单号,请使用相应的饿百订单号") - } - status := &model.OrderStatus{ - RefVendorOrderID: vendorOrderID, - RefVendorID: vendorID, - } - savedOrderInfo := s.loadSavedOrderFromMap(status, true) - if savedOrderInfo != nil { - order := savedOrderInfo.order - if forceCreate || (order.LockStatus != model.OrderStatusLocked && order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) { - if bills, err = s.CreateWaybillOnProviders(order, userName, partner.UseableDeliveryVendorIDs, nil); err == nil { - if forceCreate { - order.DeliveryFlag |= model.OrderDeliveryFlagMaskScheduleDisabled - err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order) - } - if err == nil { - s.stopTimer(savedOrderInfo) - globals.SugarLogger.Debugf("CreateWaybillOnProvidersEx orderID:%s userName:%s successfully", vendorOrderID, userName) - return bills, err - } + jxutils.CallMsgHandler(func() { + bills, err = func() (bills []*model.Waybill, err error) { + userName := ctx.GetUserName() + globals.SugarLogger.Debugf("CreateWaybillOnProvidersEx orderID:%s userName:%s", vendorOrderID, userName) + if vendorID == model.VendorIDELM { + return nil, fmt.Errorf("不要直接使用饿了么订单号,请使用相应的饿百订单号") } - } else { - globals.SugarLogger.Debugf("CreateWaybillOnProvidersEx orderID:%s orderDetails:%s", vendorOrderID, utils.Format4Output(order, true)) - err = fmt.Errorf("必须是处于拣货完成但没有结束的订单才能进行召唤配送操作") - } - } else { - err = scheduler.ErrCanNotFindOrder - } - globals.SugarLogger.Infof("CreateWaybillOnProvidersEx orderID:%s userName:%s error:%v", vendorOrderID, userName, err) + status := &model.OrderStatus{ + RefVendorOrderID: vendorOrderID, + RefVendorID: vendorID, + } + savedOrderInfo := s.loadSavedOrderFromMap(status, true) + if savedOrderInfo != nil { + order := savedOrderInfo.order + if forceCreate || (order.LockStatus != model.OrderStatusLocked && order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) { + if bills, err = s.CreateWaybillOnProviders(order, userName, partner.UseableDeliveryVendorIDs, nil); err == nil { + if forceCreate { + order.DeliveryFlag |= model.OrderDeliveryFlagMaskScheduleDisabled + err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order) + } + if err == nil { + s.stopTimer(savedOrderInfo) + globals.SugarLogger.Debugf("CreateWaybillOnProvidersEx orderID:%s userName:%s successfully", vendorOrderID, userName) + return bills, err + } + } + } else { + globals.SugarLogger.Debugf("CreateWaybillOnProvidersEx orderID:%s orderDetails:%s", vendorOrderID, utils.Format4Output(order, true)) + err = fmt.Errorf("必须是处于拣货完成但没有结束的订单才能进行召唤配送操作") + } + } else { + err = scheduler.ErrCanNotFindOrder + } + globals.SugarLogger.Infof("CreateWaybillOnProvidersEx orderID:%s userName:%s error:%v", vendorOrderID, userName, err) + return bills, err + }() + }, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID)) return bills, err } + +func (s *DefScheduler) CancelAll3rdWaybills(ctx *jxcontext.Context, vendorOrderID string, vendorID int) (err error) { + jxutils.CallMsgHandler(func() { + err = func() (err error) { + globals.SugarLogger.Infof("CancelAll3rdWaybills orderID:%s userName:%s", vendorOrderID, ctx.GetUserName()) + status := &model.OrderStatus{ + RefVendorOrderID: vendorOrderID, + RefVendorID: vendorID, + } + savedOrderInfo := s.loadSavedOrderFromMap(status, false) + if savedOrderInfo != nil { + err = s.cancelOtherWaybills(savedOrderInfo, nil, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive) + } else { + err = scheduler.ErrCanNotFindOrder + } + globals.SugarLogger.Infof("CancelAll3rdWaybills orderID:%s userName:%s error:%v", vendorOrderID, ctx.GetUserName(), err) + return err + }() + }, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID)) + return err +} diff --git a/controllers/jx_order.go b/controllers/jx_order.go index b783a3058..6b348c3dd 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -55,7 +55,7 @@ func (c *OrderController) FinishedPickup() { // @router /SelfDelivering [post] func (c *OrderController) SelfDelivering() { c.callSelfDelivering(func(params *tOrderSelfDeliveringParams) (retVal interface{}, errCode string, err error) { - err = defsch.FixedScheduler.SelfDeliveringAndUpdateStatusExt(params.Ctx, params.VendorOrderID, params.VendorID, params.Ctx.GetUserName()) + err = defsch.FixedScheduler.SelfDeliveringAndUpdateStatus(params.Ctx, params.VendorOrderID, params.VendorID, params.Ctx.GetUserName()) return nil, "", err }) } @@ -91,6 +91,21 @@ func (c *OrderController) CreateWaybillOnProviders() { }) } +// @Title 取消所有三方运单 +// @Description 取消所有三方运单 +// @Param token header string true "认证token" +// @Param vendorOrderID formData string true "订单ID" +// @Param vendorID formData int true "订单所属的厂商ID" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /CancelAll3rdWaybills [post] +func (c *OrderController) CancelAll3rdWaybills() { + c.callCancelAll3rdWaybills(func(params *tOrderCancelAll3rdWaybillsParams) (retVal interface{}, errCode string, err error) { + err = defsch.FixedScheduler.CancelAll3rdWaybills(params.Ctx, params.VendorOrderID, params.VendorID) + return retVal, "", err + }) +} + // @Title 得到门店订单信息 // @Description 得到门店订单信息 // @Param token header string true "认证token" diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index ae532d374..48750d008 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -311,6 +311,14 @@ func init() { MethodParams: param.Make(), Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"], + beego.ControllerComments{ + Method: "CancelAll3rdWaybills", + Router: `/CancelAll3rdWaybills`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"], beego.ControllerComments{ Method: "CreateWaybillOnProviders",