- CreateWaybillOnProviders添加maxAddFee与maxDiffFee2Mtps参数
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user