- order manager added.
This commit is contained in:
@@ -91,7 +91,7 @@ func (c *DeliveryHandler) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVal
|
||||
}
|
||||
|
||||
// IDeliveryPlatformHandler
|
||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder) (err error) {
|
||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy func(deliveryFee, addFee int64) error) (bill *model.Waybill, err error) {
|
||||
billParams := &dadaapi.OperateOrderRequiredParams{
|
||||
ShopNo: utils.Int2Str(order.StoreID), // 当前达达的门店号与京西是一样的
|
||||
OriginID: jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID),
|
||||
@@ -111,6 +111,9 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder) (err error) {
|
||||
"info": order.BuyerComment,
|
||||
// "origin_mark": model.VendorNames[order.VendorID],
|
||||
"origin_mark_no": fmt.Sprintf("%d", order.OrderSeq),
|
||||
"cargo_type": 13,
|
||||
"cargo_weight": float64(order.Weight) / 1000.0,
|
||||
"cargo_num": order.GoodsCount,
|
||||
}
|
||||
|
||||
// 达达要求第二次创建运单,调用函数不同。所以查找两天内有无相同订单号的运单
|
||||
@@ -122,17 +125,27 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder) (err error) {
|
||||
AND vendor_order_id = ?
|
||||
AND waybill_vendor_id = ?
|
||||
`, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID), model.VendorIDDada).ValuesList(&lists)
|
||||
var result *dadaapi.CreateOrderResponse
|
||||
if err2 == nil && num > 0 {
|
||||
globals.SugarLogger.Debugf("CreateWaybill orderID:%s num=%d use ReaddOrder", order.VendorOrderID, num)
|
||||
_, err = api.DadaAPI.ReaddOrder(billParams, addParams)
|
||||
result, err = api.DadaAPI.ReaddOrder(billParams, addParams)
|
||||
} else {
|
||||
if err2 != nil {
|
||||
globals.SugarLogger.Warnf("CreateWaybill orderID:%s error:%v", order.VendorOrderID, err2)
|
||||
}
|
||||
_, err = api.DadaAPI.AddOrder(billParams, addParams)
|
||||
result, err = api.DadaAPI.AddOrder(billParams, addParams)
|
||||
}
|
||||
if err == nil && result != nil {
|
||||
bill = &model.Waybill{
|
||||
VendorOrderID: order.VendorOrderID,
|
||||
OrderVendorID: order.VendorID,
|
||||
WaybillVendorID: model.VendorIDDada,
|
||||
DesiredFee: jxutils.StandardPrice2Int(result.DeliverFee),
|
||||
ActualFee: jxutils.StandardPrice2Int(result.Fee),
|
||||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
return bill, err
|
||||
}
|
||||
|
||||
func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill) (err error) {
|
||||
|
||||
@@ -27,7 +27,8 @@ func TestCreateWaybill(t *testing.T) {
|
||||
if order, err := partner.CurOrderManager.LoadOrder(orderID, model.VendorIDJD); err == nil {
|
||||
// globals.SugarLogger.Debug(order)
|
||||
c := new(DeliveryHandler)
|
||||
if err = c.CreateWaybill(order); err == nil {
|
||||
_, err = c.CreateWaybill(order, nil)
|
||||
if err == nil {
|
||||
time.Sleep(1 * time.Second)
|
||||
bill := &model.Waybill{
|
||||
VendorOrderID: orderID,
|
||||
|
||||
@@ -19,13 +19,8 @@ import (
|
||||
"github.com/astaxie/beego/orm"
|
||||
)
|
||||
|
||||
const (
|
||||
maxAddFee = 200 // 最大增加费用,单位为分,超过不发美团了
|
||||
)
|
||||
|
||||
var (
|
||||
ErrCanNotFindMTPSStore = errors.New("不能找到美团配送站点配置")
|
||||
ErrAddFeeExceeded = errors.New("美团配送超过基准价太多")
|
||||
ErrStoreNoPriceInfo = errors.New("找不到门店的美团配送价格信息")
|
||||
ErrStoreNoCoordinate = errors.New("找不到门店的坐标信息")
|
||||
)
|
||||
@@ -176,11 +171,14 @@ func (c *DeliveryHandler) calculateBillDeliveryFee(bill *model.Waybill) (deliver
|
||||
}
|
||||
|
||||
// IDeliveryPlatformHandler
|
||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder) (err error) {
|
||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy func(deliveryFee, addFee int64) error) (bill *model.Waybill, err error) {
|
||||
db := orm.NewOrm()
|
||||
_, addFee, err := c.calculateOrderDeliveryFee(order, time.Now(), db)
|
||||
deliveryFee, addFee, err := c.calculateOrderDeliveryFee(order, time.Now(), db)
|
||||
if err == nil {
|
||||
if addFee <= maxAddFee {
|
||||
if policy != nil {
|
||||
err = policy(deliveryFee, addFee)
|
||||
}
|
||||
if err == nil {
|
||||
// 忽略坐标转换错误,即使是转换出错,也只能当成转换成功来处理,底层会有错误日志输出
|
||||
lngFloat, latFloat, _ := jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType)
|
||||
billParams := &mtpsapi.CreateOrderByShopParam{
|
||||
@@ -219,8 +217,8 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder) (err error) {
|
||||
}
|
||||
}
|
||||
addParams := utils.Params2Map("note", order.BuyerComment, "goods_detail", string(utils.MustMarshal(goods)), "poi_seq", fmt.Sprintf("#%d", order.OrderSeq))
|
||||
_, err = api.MtpsAPI.CreateOrderByShop(billParams, addParams)
|
||||
if err != nil {
|
||||
result, err2 := api.MtpsAPI.CreateOrderByShop(billParams, addParams)
|
||||
if err = err2; err != nil {
|
||||
globals.SugarLogger.Debugf("CreateWaybill failed, orderID:%s, billParams:%v, addParams:%v, error:%v", order.VendorOrderID, billParams, addParams, err)
|
||||
|
||||
tmpLog := &legacymodel.TempLog{
|
||||
@@ -230,23 +228,21 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder) (err error) {
|
||||
Msg: fmt.Sprintf("CreateWaybill failed, orderID:%s, billParams:%v, addParams:%v, error:%v", order.VendorOrderID, billParams, addParams, err),
|
||||
}
|
||||
db.Insert(tmpLog)
|
||||
} else {
|
||||
bill = &model.Waybill{
|
||||
VendorOrderID: order.VendorOrderID,
|
||||
OrderVendorID: order.VendorID,
|
||||
VendorWaybillID: result.MtPeisongID,
|
||||
VendorWaybillID2: utils.Int64ToStr(result.DeliveryID),
|
||||
WaybillVendorID: model.VendorIDMTPS,
|
||||
DesiredFee: deliveryFee,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
err = ErrAddFeeExceeded
|
||||
globals.SugarLogger.Infof("CreateWaybill orderID:%s addFee exceeded too much, it's %d", order.VendorOrderID, addFee)
|
||||
|
||||
tmpLog := &legacymodel.TempLog{
|
||||
VendorOrderID: order.VendorOrderID,
|
||||
RefVendorOrderID: order.VendorOrderID,
|
||||
IntValue1: addFee,
|
||||
Msg: fmt.Sprintf("CreateWaybill orderID:%s addFee exceeded too much, it's %d", order.VendorOrderID, addFee),
|
||||
}
|
||||
db.Insert(tmpLog)
|
||||
}
|
||||
}
|
||||
return err
|
||||
return bill, err
|
||||
}
|
||||
|
||||
func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill) (err error) {
|
||||
|
||||
@@ -26,7 +26,8 @@ func TestCreateWaybill(t *testing.T) {
|
||||
order, _ := partner.CurOrderManager.LoadOrder(orerID, model.VendorIDJD)
|
||||
// globals.SugarLogger.Debug(order)
|
||||
c := new(DeliveryHandler)
|
||||
if err := c.CreateWaybill(order); err != nil {
|
||||
_, err := c.CreateWaybill(order, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ type IPurchasePlatformHandler interface {
|
||||
}
|
||||
|
||||
type IDeliveryPlatformHandler interface {
|
||||
CreateWaybill(order *model.GoodsOrder) (err error)
|
||||
CreateWaybill(order *model.GoodsOrder, policy func(deliveryFee, addFee int64) error) (bill *model.Waybill, err error)
|
||||
CancelWaybill(bill *model.Waybill) (err error)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user