From 5628c23741bf28af42454605d89523d4303344fe Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 29 Apr 2019 15:56:12 +0800 Subject: [PATCH] =?UTF-8?q?-=20CreateWaybillOnProviders=E6=B7=BB=E5=8A=A0m?= =?UTF-8?q?axAddFee=E4=B8=8EmaxDiffFee2Mtps=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jxcallback/scheduler/defsch/defsch.go | 2 +- .../jxcallback/scheduler/defsch/defsch_ext.go | 8 ++++-- business/partner/delivery/delivery.go | 28 +++++++++++++------ controllers/jx_order.go | 6 ++-- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 691595efe..fdb60065a 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -503,7 +503,7 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf if err = s.canOrderCreateWaybillNormally(order); err == nil { if (order.DeliveryFlag & model.OrderDeliveryFlagMaskScheduleDisabled) == 0 { if savedOrderInfo.retryCount <= maxWaybillRetryCount { - _, err = s.CreateWaybillOnProviders4SavedOrder(jxcontext.AdminCtx, savedOrderInfo, false) + _, err = s.CreateWaybillOnProviders4SavedOrder(jxcontext.AdminCtx, savedOrderInfo, false, 0, 0) } else { err = fmt.Errorf("订单:%s已经自动创建过了%d次运单,请人工处理", order.VendorOrderID, savedOrderInfo.retryCount) globals.SugarLogger.Infof("createWaybillOn3rdProviders [运营]同一订单orderID:%s尝试了%d次创建运单失败, 停止调度,如果还需要发单,请人工处理", order.VendorOrderID, savedOrderInfo.retryCount) diff --git a/business/jxcallback/scheduler/defsch/defsch_ext.go b/business/jxcallback/scheduler/defsch/defsch_ext.go index 57e6dba13..1bb2c6f41 100644 --- a/business/jxcallback/scheduler/defsch/defsch_ext.go +++ b/business/jxcallback/scheduler/defsch/defsch_ext.go @@ -76,7 +76,7 @@ func (s *DefScheduler) canOrderCreateWaybillNormally(order *model.GoodsOrder) (e return err } -func (s *DefScheduler) CreateWaybillOnProviders4SavedOrder(ctx *jxcontext.Context, savedOrderInfo *WatchOrderInfo, forceCreate bool) (bills []*model.Waybill, err error) { +func (s *DefScheduler) CreateWaybillOnProviders4SavedOrder(ctx *jxcontext.Context, savedOrderInfo *WatchOrderInfo, forceCreate bool, maxAddFee, maxDiffFee2Mtps int64) (bills []*model.Waybill, err error) { order := savedOrderInfo.order err = s.canOrderCreateWaybillNormally(order) if forceCreate || err == nil { @@ -84,6 +84,8 @@ func (s *DefScheduler) CreateWaybillOnProviders4SavedOrder(ctx *jxcontext.Contex feeHandler := delivery.DefCreateWaybillPolicy if forceCreate { feeHandler = delivery.NullCreateWaybillPolicy + } else if maxAddFee != 0 { + feeHandler = delivery.CreateWaybillPolicy(maxDiffFee2Mtps, maxAddFee) } if bills, err = s.CreateWaybillOnProviders(ctx, order, feeHandler, forceCreate); err == nil { if forceCreate { @@ -105,7 +107,7 @@ func (s *DefScheduler) CreateWaybillOnProviders4SavedOrder(ctx *jxcontext.Contex return nil, 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, maxAddFee, maxDiffFee2Mtps int64) (bills []*model.Waybill, err error) { jxutils.CallMsgHandler(func() { bills, err = func() (bills []*model.Waybill, err error) { userName := ctx.GetUserName() @@ -125,7 +127,7 @@ func (s *DefScheduler) CreateWaybillOnProvidersEx(ctx *jxcontext.Context, vendor time.Now().Sub(order.StatusTime) < minMinute2Schedule3rdCarrier*time.Minute { return nil, fmt.Errorf("非自配送门店转3方配送至少要求拣货完成后%d分钟才能操作", minMinute2Schedule3rdCarrier) } - bills, err = s.CreateWaybillOnProviders4SavedOrder(ctx, savedOrderInfo, forceCreate) + bills, err = s.CreateWaybillOnProviders4SavedOrder(ctx, savedOrderInfo, forceCreate, maxAddFee, maxDiffFee2Mtps) } else { err = scheduler.ErrCanNotFindOrder } diff --git a/business/partner/delivery/delivery.go b/business/partner/delivery/delivery.go index 9fb2e5492..59a648106 100644 --- a/business/partner/delivery/delivery.go +++ b/business/partner/delivery/delivery.go @@ -21,17 +21,29 @@ const ( maxAddFee = 300 // 最大增加费用,单位为分,超过不发三方配送了 ) +var ( + DefCreateWaybillPolicy = CreateWaybillPolicy(maxDiffFee2Mtps, maxAddFee) +) + func NullCreateWaybillPolicy(refDeliveryFee, refAddFee, deliveryFee int64) (errStr string) { return "" } -func DefCreateWaybillPolicy(refDeliveryFee, refAddFee, deliveryFee int64) (errStr string) { - if refDeliveryFee-deliveryFee > maxDiffFee2Mtps { - errStr = fmt.Sprintf("超参考价太多, 费用:%d,参考价:%d, 最高超价:%d", deliveryFee, refDeliveryFee, maxDiffFee2Mtps) - } else if refAddFee > maxAddFee { - errStr = fmt.Sprintf("超基础价太多, 当前加价:%d, 最高加价:%d", refAddFee, maxAddFee) +func CreateWaybillPolicy(maxDiffFee2Mtps2, maxAddFee2 int64) func(refDeliveryFee, refAddFee, deliveryFee int64) (errStr string) { + if maxDiffFee2Mtps2 == 0 { + maxDiffFee2Mtps2 = maxDiffFee2Mtps + } + if maxAddFee2 == 0 { + maxAddFee2 = maxAddFee + } + return func(refDeliveryFee, refAddFee, deliveryFee int64) (errStr string) { + if deliveryFee-refDeliveryFee > maxDiffFee2Mtps2 { + errStr = fmt.Sprintf("超参考价太多, 费用:%d,参考价:%d, 最高超价:%d", deliveryFee, refDeliveryFee, maxDiffFee2Mtps2) + } else if refAddFee > maxAddFee2 { + errStr = fmt.Sprintf("超基础价太多, 当前加价:%d, 最高加价:%d", refAddFee, maxAddFee2) + } + return errStr } - return errStr } func AddPolicy(prevPolicy, newPolicy partner.CreateWaybillPolicy) (outPolicy partner.CreateWaybillPolicy) { @@ -43,11 +55,11 @@ func AddPolicy(prevPolicy, newPolicy partner.CreateWaybillPolicy) (outPolicy par } } -func CallCreateWaybillPolicy(policy partner.CreateWaybillPolicy, refDeliveryFee, deliveryFee, addFee int64, order *model.GoodsOrder, waybillVendorID int) (err error) { +func CallCreateWaybillPolicy(policy partner.CreateWaybillPolicy, refDeliveryFee, refAddFee, deliveryFee int64, order *model.GoodsOrder, waybillVendorID int) (err error) { if policy == nil { policy = NullCreateWaybillPolicy } - if errStr := policy(deliveryFee, deliveryFee, addFee); errStr != "" { + if errStr := policy(refDeliveryFee, refAddFee, deliveryFee); errStr != "" { waybillVendorName := jxutils.GetVendorName(waybillVendorID) errStr = fmt.Sprintf("oderID:%s创建运单出错:%s", order.VendorOrderID, errStr) globals.SugarLogger.Debugf("%s CallCreateWaybillPolicy failed with %s", waybillVendorName, errStr) diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 23ddf3ea4..74ab71432 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -83,13 +83,15 @@ func (c *OrderController) SelfDelivered() { // @Param token header string true "认证token" // @Param vendorOrderID formData string true "订单ID" // @Param vendorID formData int true "订单所属的厂商ID" -// @Param forceCreate formData bool false "是否强制创建(忽略订单状态检查)" +// @Param forceCreate formData bool false "是否强制创建(忽略订单状态检查及其它参数)" +// @Param maxAddFee formData int false "最大加价,单位为分(为0时为缺省值)" +// @Param maxDiffFee2Mtps formData int false "最大与美团配送差价,单位为分(maxAddFee不为0时才可能有效)" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /CreateWaybillOnProviders [post] func (c *OrderController) CreateWaybillOnProviders() { c.callCreateWaybillOnProviders(func(params *tOrderCreateWaybillOnProvidersParams) (retVal interface{}, errCode string, err error) { - retVal, err = defsch.FixedScheduler.CreateWaybillOnProvidersEx(params.Ctx, params.VendorOrderID, params.VendorID, params.ForceCreate) + retVal, err = defsch.FixedScheduler.CreateWaybillOnProvidersEx(params.Ctx, params.VendorOrderID, params.VendorID, params.ForceCreate, int64(params.MaxAddFee), int64(params.MaxDiffFee2Mtps)) return retVal, "", err }) }