- 重构创建运单策略

This commit is contained in:
gazebo
2019-03-30 15:00:59 +08:00
parent 68b5ec38b6
commit 10a444c895
11 changed files with 142 additions and 125 deletions

View File

@@ -2,6 +2,7 @@ package delivery
import (
"errors"
"fmt"
"math"
"time"
@@ -17,11 +18,44 @@ import (
const (
warningDistance = 10 // 公里
warningWeight = 50 * 1000 // 克
maxDiffFee2Mtps = 150 // 与美团配送最多差价
maxAddFee = 300 // 最大增加费用,单位为分,超过不发三方配送了
)
var (
ErrStoreNoCoordinate = errors.New("找不到门店的坐标信息")
)
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)
}
return errStr
}
func AddPolicy(prevPolicy, newPolicy partner.CreateWaybillPolicy) (outPolicy partner.CreateWaybillPolicy) {
return func(refDeliveryFee, refAddFee, deliveryFee int64) (errStr string) {
if errStr = prevPolicy(refDeliveryFee, refAddFee, deliveryFee); errStr == "" {
errStr = newPolicy(refDeliveryFee, refAddFee, deliveryFee)
}
return errStr
}
}
func CallCreateWaybillPolicy(policy partner.CreateWaybillPolicy, refDeliveryFee, deliveryFee, addFee int64, order *model.GoodsOrder, waybillVendorID int) (err error) {
if policy == nil {
policy = NullCreateWaybillPolicy
}
if errStr := policy(deliveryFee, deliveryFee, addFee); errStr != "" {
waybillVendorName := jxutils.GetVendorName(waybillVendorID)
errStr = fmt.Sprintf("oderID:%s在平台%s创建运单出错:%s", order.VendorOrderID, waybillVendorName, errStr)
globals.SugarLogger.Debugf("%s CreateWaybill failed with %s", waybillVendorName, errStr)
return errors.New(errStr)
}
return nil
}
func CalculateOrderDeliveryFee(order *model.GoodsOrder, billTime time.Time, db orm.Ormer) (deliveryFee, addFee int64, err error) {
globals.SugarLogger.Debugf("CalculateOrderDeliveryFee orderID:%s", order.VendorOrderID)
@@ -53,7 +87,7 @@ func CalculateOrderDeliveryFee(order *model.GoodsOrder, billTime time.Time, db o
}
if lng == 0 || lat == 0 {
globals.SugarLogger.Warnf("calculateDeliveryFee 门店没有坐标信息 orderID:%s", order.VendorOrderID)
return 0, 0, ErrStoreNoCoordinate
return 0, 0, fmt.Errorf("找不到门店:%d的坐标", jxutils.GetSaleStoreIDFromOrder(order))
}
lng2, lat2, _ := jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType)
@@ -93,7 +127,7 @@ func CalculateOrderDeliveryFee(order *model.GoodsOrder, billTime time.Time, db o
// timeAddFee = jxutils.StandardPrice2Int(3)
// }
addFee = distanceAddFee + weightAddFee + timeAddFee
globals.SugarLogger.Debugf("CalculateOrderDeliveryFee orderID:%s, deliveryFee:%d addFee:%d, distance:%.3fkm distanceAddFee:%d, weight:%dg weightAddFee:%d, time:%d timeAddFee:%d", order.VendorOrderID, deliveryFee, addFee, distance, distanceAddFee, order.Weight, weightAddFee, totalSeconds, timeAddFee)
globals.SugarLogger.Debugf("CalculateOrderDeliveryFee orderID:%s, deliveryFee:%d addFee:%d, distance:%.3fkm distanceAddFee:%d, weight:%dg weightAddFee:%d, time:%s timeAddFee:%d", order.VendorOrderID, deliveryFee, addFee, distance, distanceAddFee, order.Weight, weightAddFee, utils.Time2TimeStr(billTime), timeAddFee)
return deliveryFee + addFee, addFee, nil
}