- add API CancelAll3rdWaybills

- sync all order related APIs
This commit is contained in:
gazebo
2019-02-21 18:19:12 +08:00
parent 154f2b4d65
commit 34c25a7639
4 changed files with 155 additions and 98 deletions

View File

@@ -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) { 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) jxutils.CallMsgHandler(func() {
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID) err = func() (err error) {
if err == nil { globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName)
if GetStoreDeliveryType(order, nil) == scheduler.StoreDeliveryTypeByStore { order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
err = c.SelfDeliverDelievered(order, userName) if err == nil {
} else { if GetStoreDeliveryType(order, nil) == scheduler.StoreDeliveryTypeByStore {
err = c.Swtich2SelfDelivered(order, userName) err = c.SelfDeliverDelievered(order, userName)
} } else {
if err == nil { err = c.Swtich2SelfDelivered(order, userName)
order.Status = model.OrderStatusDelivered }
if err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order); err == nil { if err == nil {
globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s successfully", vendorOrderID, userName) order.Status = model.OrderStatusDelivered
return err 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)
} return err
globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s error:%v", vendorOrderID, userName, err) }()
}, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID))
return err return err
} }
func (c *BaseScheduler) PickupGoodsAndUpdateStatus(ctx *jxcontext.Context, vendorOrderID string, vendorID int, userName string) (err error) { 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) jxutils.CallMsgHandler(func() {
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID) err = func() (err error) {
if err == nil { globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName)
err = c.PickupGoods(order, userName) order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil { if err == nil {
order.Status = model.OrderStatusFinishedPickup err = c.PickupGoods(order, userName)
if err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order); err == nil { if err == nil {
globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s successfully", vendorOrderID, userName) order.Status = model.OrderStatusFinishedPickup
return err 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)
} return err
globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s error:%v", vendorOrderID, userName, err) }()
}, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID))
return err return err
} }

View File

@@ -13,83 +13,107 @@ import (
) )
func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, vendorOrderID string, vendorID int, userName string) (err error) { 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) jxutils.CallMsgHandler(func() {
status := &model.OrderStatus{ err = func() (err error) {
RefVendorOrderID: vendorOrderID, globals.SugarLogger.Infof("SelfDeliveringAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName)
RefVendorID: vendorID, status := &model.OrderStatus{
} RefVendorOrderID: vendorOrderID,
savedOrderInfo := s.loadSavedOrderFromMap(status, false) RefVendorID: vendorID,
if savedOrderInfo != nil { }
order := savedOrderInfo.order savedOrderInfo := s.loadSavedOrderFromMap(status, false)
err = s.cancelOtherWaybills(savedOrderInfo, nil, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive) if savedOrderInfo != nil {
if err == nil { order := savedOrderInfo.order
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { err = s.cancelOtherWaybills(savedOrderInfo, nil, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive)
if order.Status <= model.OrderStatusFinishedPickup { if err == nil {
err = s.SelfDeliverDelivering(order, "") 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 { } else {
if order.Status <= model.OrderStatusFinishedPickup { err = scheduler.ErrCanNotFindOrder
err = s.Swtich2SelfDeliver(order, userName)
} else if order.VendorID == order.WaybillVendorID { // 状态为配送中,且是购物平台运单,不能转自送了
err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation
}
} }
} globals.SugarLogger.Infof("SelfDeliveringAndUpdateStatus orderID:%s userName:%s error:%v", vendorOrderID, userName, err)
if err == nil { return err
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)
}, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID)) }, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID))
return err return err
} }
func (s *DefScheduler) CreateWaybillOnProvidersEx(ctx *jxcontext.Context, vendorOrderID string, vendorID int, forceCreate bool) (bills []*model.Waybill, err error) { func (s *DefScheduler) CreateWaybillOnProvidersEx(ctx *jxcontext.Context, vendorOrderID string, vendorID int, forceCreate bool) (bills []*model.Waybill, err error) {
userName := ctx.GetUserName() jxutils.CallMsgHandler(func() {
globals.SugarLogger.Debugf("CreateWaybillOnProvidersEx orderID:%s userName:%s", vendorOrderID, userName) bills, err = func() (bills []*model.Waybill, err error) {
if vendorID == model.VendorIDELM { userName := ctx.GetUserName()
return nil, fmt.Errorf("不要直接使用饿了么订单号,请使用相应的饿百订单号") globals.SugarLogger.Debugf("CreateWaybillOnProvidersEx orderID:%s userName:%s", vendorOrderID, userName)
} if vendorID == model.VendorIDELM {
status := &model.OrderStatus{ return nil, fmt.Errorf("不要直接使用饿了么订单号,请使用相应的饿百订单号")
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 { status := &model.OrderStatus{
globals.SugarLogger.Debugf("CreateWaybillOnProvidersEx orderID:%s orderDetails:%s", vendorOrderID, utils.Format4Output(order, true)) RefVendorOrderID: vendorOrderID,
err = fmt.Errorf("必须是处于拣货完成但没有结束的订单才能进行召唤配送操作") RefVendorID: vendorID,
} }
} else { savedOrderInfo := s.loadSavedOrderFromMap(status, true)
err = scheduler.ErrCanNotFindOrder if savedOrderInfo != nil {
} order := savedOrderInfo.order
globals.SugarLogger.Infof("CreateWaybillOnProvidersEx orderID:%s userName:%s error:%v", vendorOrderID, userName, err) 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 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
}

View File

@@ -55,7 +55,7 @@ func (c *OrderController) FinishedPickup() {
// @router /SelfDelivering [post] // @router /SelfDelivering [post]
func (c *OrderController) SelfDelivering() { func (c *OrderController) SelfDelivering() {
c.callSelfDelivering(func(params *tOrderSelfDeliveringParams) (retVal interface{}, errCode string, err error) { 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 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 得到门店订单信息 // @Title 得到门店订单信息
// @Description 得到门店订单信息 // @Description 得到门店订单信息
// @Param token header string true "认证token" // @Param token header string true "认证token"

View File

@@ -311,6 +311,14 @@ func init() {
MethodParams: param.Make(), MethodParams: param.Make(),
Params: nil}) 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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
beego.ControllerComments{ beego.ControllerComments{
Method: "CreateWaybillOnProviders", Method: "CreateWaybillOnProviders",