调整代码结构,修改美团配送
This commit is contained in:
@@ -157,6 +157,7 @@ func (s *DefScheduler) CreateWaybillOnProviders4SavedOrder(ctx *jxcontext.Contex
|
|||||||
}
|
}
|
||||||
newPrice = maxFee
|
newPrice = maxFee
|
||||||
}
|
}
|
||||||
|
// 门店支出运费
|
||||||
expend, lastFee, _ := partner.CurStoreAcctManager.GetStoreAcctExpendLastCreateWayBillFee(order.VendorOrderID)
|
expend, lastFee, _ := partner.CurStoreAcctManager.GetStoreAcctExpendLastCreateWayBillFee(order.VendorOrderID)
|
||||||
if int(newPrice) > lastFee {
|
if int(newPrice) > lastFee {
|
||||||
partner.CurStoreAcctManager.InsertStoreAcctExpendAndUpdateStoreAcctBalance(ctx, jxutils.GetSaleStoreIDFromOrder(order), int(model.Waybill{}.DesiredFee), partner.StoreAcctTypeExpendCreateWaybill2ndMore, order.VendorOrderID, expend.ID) //int(newPrice)-lastFee
|
partner.CurStoreAcctManager.InsertStoreAcctExpendAndUpdateStoreAcctBalance(ctx, jxutils.GetSaleStoreIDFromOrder(order), int(model.Waybill{}.DesiredFee), partner.StoreAcctTypeExpendCreateWaybill2ndMore, order.VendorOrderID, expend.ID) //int(newPrice)-lastFee
|
||||||
|
|||||||
@@ -252,22 +252,26 @@ func (c *DeliveryHandler) getBillParams(db *dao.DaoDB, order *model.GoodsOrder)
|
|||||||
// IDeliveryPlatformHandler
|
// IDeliveryPlatformHandler
|
||||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee int64) (bill *model.Waybill, err error) {
|
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee int64) (bill *model.Waybill, err error) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
if vendorOrgCode, err := dao.GetVendorOrgCode(db, model.VendorIDDada, "", model.VendorOrgTypeDelivery); err == nil {
|
|
||||||
if len(vendorOrgCode) > 0 {
|
// 判断配送平台是否被关闭
|
||||||
if vendorOrgCode[0].IsOpen == model.YES {
|
vendorOrgCode, err := dao.GetVendorOrgCode(db, model.VendorIDDada, "", model.VendorOrgTypeDelivery)
|
||||||
return nil, fmt.Errorf("此平台配送已被系统关闭,暂不发配送 [%v]", vendorOrgCode[0].Comment)
|
if err != nil {
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(vendorOrgCode) > 0 && vendorOrgCode[0].IsOpen == model.YES {
|
||||||
|
return nil, fmt.Errorf("此平台配送已被系统关闭,暂不发配送 [%v]", vendorOrgCode[0].Comment)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取达达第三方订单参数
|
||||||
billParams, err := c.getBillParams(db, order)
|
billParams, err := c.getBillParams(db, order)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
//if globals.EnableStoreWrite
|
return nil, err
|
||||||
{
|
}
|
||||||
// 达达要求第二次创建运单,调用函数不同。所以查找两天内有无相同订单号的运单
|
|
||||||
var waybillList []*model.Waybill
|
// 达达要求第二次创建运单,调用函数不同。所以查找两天内有无相同订单号的运单
|
||||||
err2 := dao.GetRows(db, &waybillList, `
|
var waybillList []*model.Waybill
|
||||||
|
err = dao.GetRows(db, &waybillList, `
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM waybill
|
FROM waybill
|
||||||
WHERE waybill_created_at > DATE_ADD(NOW(), interval -2 day)
|
WHERE waybill_created_at > DATE_ADD(NOW(), interval -2 day)
|
||||||
@@ -275,47 +279,52 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee
|
|||||||
AND waybill_vendor_id = ?
|
AND waybill_vendor_id = ?
|
||||||
ORDER BY id DESC
|
ORDER BY id DESC
|
||||||
`, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID), model.VendorIDDada)
|
`, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID), model.VendorIDDada)
|
||||||
var result *dadaapi.CreateOrderResponse
|
if err != nil {
|
||||||
if err = err2; err == nil && len(waybillList) > 0 && waybillList[0].Status != model.WaybillStatusFailed {
|
return nil, err
|
||||||
// 再次创建
|
|
||||||
globals.SugarLogger.Debugf("CreateWaybill orderID:%s len(waybillList)=%d use ReaddOrder", order.VendorOrderID, len(waybillList))
|
|
||||||
if err = delivery.CallCreateWaybillPolicy(waybillList[0].ActualFee, maxDeliveryFee, order, model.VendorIDDada); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
// result, err = api.DadaAPI.ReaddOrder(billParams, addParams)
|
|
||||||
result, err = api.DadaAPI.ReaddOrder(billParams)
|
|
||||||
} else {
|
|
||||||
// 第一次创建
|
|
||||||
if err != nil {
|
|
||||||
globals.SugarLogger.Warnf("CreateWaybill orderID:%s error:%v", order.VendorOrderID, err)
|
|
||||||
}
|
|
||||||
if false {
|
|
||||||
result, err = api.DadaAPI.AddOrder(billParams)
|
|
||||||
} else {
|
|
||||||
if result, err = api.DadaAPI.QueryDeliverFee(billParams); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if err = delivery.CallCreateWaybillPolicy(jxutils.StandardPrice2Int(result.Fee), maxDeliveryFee, order, model.VendorIDDada); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
err = api.DadaAPI.AddOrderAfterQuery(result.DeliveryNo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err == nil && result != nil {
|
|
||||||
bill = &model.Waybill{
|
|
||||||
VendorOrderID: order.VendorOrderID,
|
|
||||||
OrderVendorID: order.VendorID,
|
|
||||||
WaybillVendorID: model.VendorIDDada,
|
|
||||||
DesiredFee: jxutils.StandardPrice2Int(result.Fee),
|
|
||||||
ActualFee: jxutils.StandardPrice2Int(result.Fee),
|
|
||||||
}
|
|
||||||
delivery.OnWaybillCreated(bill)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//else {
|
|
||||||
// err = fmt.Errorf("测试环境不能真正创建运单")
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查两天内是否有订单
|
||||||
|
var result *dadaapi.CreateOrderResponse
|
||||||
|
if len(waybillList) > 0 && waybillList[0].Status != model.WaybillStatusFailed {
|
||||||
|
globals.SugarLogger.Debugf("CreateWaybill orderID:%s len(waybillList)=%d use ReaddOrder", order.VendorOrderID, len(waybillList))
|
||||||
|
// 检索达达配送费阀值
|
||||||
|
if err = delivery.CallCreateWaybillPolicy(waybillList[0].ActualFee, maxDeliveryFee, order, model.VendorIDDada); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// 重新发送订单
|
||||||
|
result, err = api.DadaAPI.ReaddOrder(billParams)
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Warnf("CreateWaybill orderID:%s error:%v", order.VendorOrderID, err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 第一次发布订单(预发布,先查询订单运费获取平台订单号,在调用查询订单后接口发布订单)
|
||||||
|
// 查询达达订单费用
|
||||||
|
if result, err = api.DadaAPI.QueryDeliverFee(billParams); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// 阀值警报
|
||||||
|
if err = delivery.CallCreateWaybillPolicy(jxutils.StandardPrice2Int(result.Fee), maxDeliveryFee, order, model.VendorIDDada); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// 真实发布订单
|
||||||
|
if err = api.DadaAPI.AddOrderAfterQuery(result.DeliveryNo); err != nil {
|
||||||
|
globals.SugarLogger.Warnf("CreateWaybill for Dada order err , orderID:%s error:%v", order.VendorOrderID, err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if result == nil {
|
||||||
|
return nil, errors.New("达达配送,平台调用错误,无订单数据返回")
|
||||||
|
}
|
||||||
|
|
||||||
|
bill = &model.Waybill{
|
||||||
|
VendorOrderID: order.VendorOrderID,
|
||||||
|
OrderVendorID: order.VendorID,
|
||||||
|
WaybillVendorID: model.VendorIDDada,
|
||||||
|
DesiredFee: jxutils.StandardPrice2Int(result.Fee),
|
||||||
|
ActualFee: jxutils.StandardPrice2Int(result.Fee),
|
||||||
|
}
|
||||||
|
delivery.OnWaybillCreated(bill)
|
||||||
return bill, err
|
return bill, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -140,6 +140,7 @@ func CalculateBillDeliveryFee(bill *model.Waybill) (deliveryFee, addFee int64) {
|
|||||||
return deliveryFee, addFee
|
return deliveryFee, addFee
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 日志提示检查订单运费
|
||||||
func OnWaybillCreated(waybill *model.Waybill) {
|
func OnWaybillCreated(waybill *model.Waybill) {
|
||||||
deliveryFee := int64(math.Max(float64(waybill.DesiredFee), float64(waybill.ActualFee)))
|
deliveryFee := int64(math.Max(float64(waybill.DesiredFee), float64(waybill.ActualFee)))
|
||||||
if deliveryFee > alarmFee {
|
if deliveryFee > alarmFee {
|
||||||
|
|||||||
@@ -87,90 +87,99 @@ func (c *DeliveryHandler) ComplaintRider(bill *model.Waybill, resonID int, reson
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 创建蜂鸟配送订单
|
||||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee int64) (bill *model.Waybill, err error) {
|
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee int64) (bill *model.Waybill, err error) {
|
||||||
var (
|
db := dao.GetDB()
|
||||||
db = dao.GetDB()
|
|
||||||
)
|
// 检查配送平台是否被禁用
|
||||||
if vendorOrgCode, err := dao.GetVendorOrgCode(db, model.VendorIDFengNiao, "", model.VendorOrgTypeDelivery); err == nil {
|
vendorOrgCode, err := dao.GetVendorOrgCode(db, model.VendorIDFengNiao, "", model.VendorOrgTypeDelivery)
|
||||||
if len(vendorOrgCode) > 0 {
|
if err != nil {
|
||||||
if vendorOrgCode[0].IsOpen == model.YES {
|
|
||||||
return nil, fmt.Errorf("此平台配送已被系统关闭,暂不发配送 [%v]", vendorOrgCode[0].Comment)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
storeDetail, err := dao.GetStoreDetail(db, order.StoreID, order.VendorID, order.VendorOrgCode)
|
if len(vendorOrgCode) > 0 && vendorOrgCode[0].IsOpen == model.YES {
|
||||||
deliveryFee, _, err := delivery.CalculateOrderDeliveryFee(order, time.Now(), db)
|
return nil, fmt.Errorf("此平台配送已被系统关闭,暂不发配送 [%v]", vendorOrgCode[0].Comment)
|
||||||
if err == nil {
|
|
||||||
if err = delivery.CallCreateWaybillPolicy(deliveryFee, maxDeliveryFee, order, model.VendorIDFengNiao); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
params := &fnpsapi.CreateOrderParam{
|
|
||||||
PartnerOrderCode: order.VendorOrderID,
|
|
||||||
NotifyURL: globals.FnNotifyURL,
|
|
||||||
ChainStoreCode: utils.Int2Str(jxutils.GetSaleStoreIDFromOrder(order)),
|
|
||||||
OrderType: 1, //即时达
|
|
||||||
TransportInfo: &fnpsapi.TransportInfo{
|
|
||||||
TransportName: order.StoreName,
|
|
||||||
TransportAddress: storeDetail.Address,
|
|
||||||
TransportLongitude: jxutils.IntCoordinate2Standard(storeDetail.Lng),
|
|
||||||
TransportLatitude: jxutils.IntCoordinate2Standard(storeDetail.Lat),
|
|
||||||
PositionSource: 3,
|
|
||||||
TransportTel: storeDetail.Tel1,
|
|
||||||
},
|
|
||||||
OrderAddTime: order.OrderCreatedAt.UnixNano() / 1e6,
|
|
||||||
OrderTotalAmount: jxutils.IntPrice2Standard(order.SalePrice),
|
|
||||||
OrderActualAmount: jxutils.IntPrice2Standard(order.ActualPayPrice),
|
|
||||||
OrderWeight: float64(jxutils.IntWeight2Float(order.Weight)),
|
|
||||||
OrderRemark: utils.FilterMb4("客户电话:" + order.ConsigneeMobile + "," + order.BuyerComment + ",取货失败或配送遇到问题请联系18048531223,禁止未配送直接完成定单!"),
|
|
||||||
IsInvoiced: 0,
|
|
||||||
OrderPaymentStatus: 1,
|
|
||||||
OrderPaymentMethod: 1,
|
|
||||||
IsAgentPayment: 0,
|
|
||||||
GoodsCount: order.GoodsCount,
|
|
||||||
ReceiverInfo: &fnpsapi.ReceiverInfo{
|
|
||||||
ReceiverName: order.ConsigneeName,
|
|
||||||
ReceiverAddress: order.ConsigneeAddress,
|
|
||||||
ReceiverLongitude: jxutils.IntCoordinate2Standard(order.ConsigneeLng),
|
|
||||||
ReceiverLatitude: jxutils.IntCoordinate2Standard(order.ConsigneeLat),
|
|
||||||
ReceiverPrimaryPhone: order.ConsigneeMobile,
|
|
||||||
ReceiverSecondPhone: order.ConsigneeMobile2,
|
|
||||||
PositionSource: 3,
|
|
||||||
},
|
|
||||||
SerialNumber: model.VendorNames[order.VendorID] + " #" + utils.Int2Str(order.OrderSeq),
|
|
||||||
}
|
|
||||||
var skuInfo []*fnpsapi.ItemsJSON
|
|
||||||
for _, v := range order.Skus {
|
|
||||||
skuInfo = append(skuInfo, &fnpsapi.ItemsJSON{
|
|
||||||
ItemID: utils.Int2Str(v.SkuID),
|
|
||||||
ItemName: v.SkuName,
|
|
||||||
ItemQuantity: v.Count,
|
|
||||||
ItemPrice: jxutils.IntPrice2Standard(v.SalePrice),
|
|
||||||
ItemActualPrice: jxutils.IntPrice2Standard(v.SalePrice),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
params.ItemsJSON = skuInfo
|
|
||||||
//要求饿百的订单要传来源
|
|
||||||
if order.VendorID == model.VendorIDEBAI {
|
|
||||||
params.OrderSource = "109"
|
|
||||||
params.ChannelOrderCode = order.VendorOrderID
|
|
||||||
}
|
|
||||||
err = api.FnAPI.CreateOrder(params)
|
|
||||||
if err == nil {
|
|
||||||
bill = &model.Waybill{
|
|
||||||
VendorOrderID: order.VendorOrderID,
|
|
||||||
OrderVendorID: order.VendorID,
|
|
||||||
VendorWaybillID: "",
|
|
||||||
VendorWaybillID2: "",
|
|
||||||
WaybillVendorID: model.VendorIDFengNiao,
|
|
||||||
DesiredFee: deliveryFee,
|
|
||||||
}
|
|
||||||
delivery.OnWaybillCreated(bill)
|
|
||||||
} else {
|
|
||||||
globals.SugarLogger.Debugf("CreateWaybill failed, orderID:%s, billParams:%v, error:%v", order.VendorOrderID, params, err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 购物平台信息
|
||||||
|
storeDetail, err := dao.GetStoreDetail(db, order.StoreID, order.VendorID, order.VendorOrgCode)
|
||||||
|
// 自定义配送费
|
||||||
|
deliveryFee, _, err := delivery.CalculateOrderDeliveryFee(order, time.Now(), db)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err = delivery.CallCreateWaybillPolicy(deliveryFee, maxDeliveryFee, order, model.VendorIDFengNiao); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 蜂鸟入参结构体
|
||||||
|
params := &fnpsapi.CreateOrderParam{
|
||||||
|
PartnerOrderCode: order.VendorOrderID,
|
||||||
|
NotifyURL: globals.FnNotifyURL,
|
||||||
|
ChainStoreCode: utils.Int2Str(jxutils.GetSaleStoreIDFromOrder(order)),
|
||||||
|
OrderType: 1, //即时达
|
||||||
|
TransportInfo: &fnpsapi.TransportInfo{
|
||||||
|
TransportName: order.StoreName,
|
||||||
|
TransportAddress: storeDetail.Address,
|
||||||
|
TransportLongitude: jxutils.IntCoordinate2Standard(storeDetail.Lng),
|
||||||
|
TransportLatitude: jxutils.IntCoordinate2Standard(storeDetail.Lat),
|
||||||
|
PositionSource: 3,
|
||||||
|
TransportTel: storeDetail.Tel1,
|
||||||
|
},
|
||||||
|
OrderAddTime: order.OrderCreatedAt.UnixNano() / 1e6,
|
||||||
|
OrderTotalAmount: jxutils.IntPrice2Standard(order.SalePrice),
|
||||||
|
OrderActualAmount: jxutils.IntPrice2Standard(order.ActualPayPrice),
|
||||||
|
OrderWeight: float64(jxutils.IntWeight2Float(order.Weight)),
|
||||||
|
OrderRemark: utils.FilterMb4("客户电话:" + order.ConsigneeMobile + "," + order.BuyerComment + ",取货失败或配送遇到问题请联系18048531223,禁止未配送直接完成定单!"),
|
||||||
|
IsInvoiced: 0,
|
||||||
|
OrderPaymentStatus: 1,
|
||||||
|
OrderPaymentMethod: 1,
|
||||||
|
IsAgentPayment: 0,
|
||||||
|
GoodsCount: order.GoodsCount,
|
||||||
|
ReceiverInfo: &fnpsapi.ReceiverInfo{
|
||||||
|
ReceiverName: order.ConsigneeName,
|
||||||
|
ReceiverAddress: order.ConsigneeAddress,
|
||||||
|
ReceiverLongitude: jxutils.IntCoordinate2Standard(order.ConsigneeLng),
|
||||||
|
ReceiverLatitude: jxutils.IntCoordinate2Standard(order.ConsigneeLat),
|
||||||
|
ReceiverPrimaryPhone: order.ConsigneeMobile,
|
||||||
|
ReceiverSecondPhone: order.ConsigneeMobile2,
|
||||||
|
PositionSource: 3,
|
||||||
|
},
|
||||||
|
SerialNumber: model.VendorNames[order.VendorID] + " #" + utils.Int2Str(order.OrderSeq),
|
||||||
|
}
|
||||||
|
var skuInfo []*fnpsapi.ItemsJSON
|
||||||
|
for _, v := range order.Skus {
|
||||||
|
skuInfo = append(skuInfo, &fnpsapi.ItemsJSON{
|
||||||
|
ItemID: utils.Int2Str(v.SkuID),
|
||||||
|
ItemName: v.SkuName,
|
||||||
|
ItemQuantity: v.Count,
|
||||||
|
ItemPrice: jxutils.IntPrice2Standard(v.SalePrice),
|
||||||
|
ItemActualPrice: jxutils.IntPrice2Standard(v.SalePrice),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
params.ItemsJSON = skuInfo
|
||||||
|
|
||||||
|
//要求饿百的订单要传来源
|
||||||
|
if order.VendorID == model.VendorIDEBAI {
|
||||||
|
params.OrderSource = "109"
|
||||||
|
params.ChannelOrderCode = order.VendorOrderID
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建蜂鸟订单
|
||||||
|
err = api.FnAPI.CreateOrder(params)
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("CreateWaybill failed, orderID:%s, billParams:%v, error:%v", order.VendorOrderID, params, err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
bill = &model.Waybill{
|
||||||
|
VendorOrderID: order.VendorOrderID,
|
||||||
|
OrderVendorID: order.VendorID,
|
||||||
|
VendorWaybillID: "",
|
||||||
|
VendorWaybillID2: "",
|
||||||
|
WaybillVendorID: model.VendorIDFengNiao,
|
||||||
|
DesiredFee: deliveryFee,
|
||||||
|
}
|
||||||
|
delivery.OnWaybillCreated(bill)
|
||||||
return bill, err
|
return bill, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -191,101 +191,98 @@ func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInf
|
|||||||
// IDeliveryPlatformHandler(美团配送)
|
// IDeliveryPlatformHandler(美团配送)
|
||||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee int64) (bill *model.Waybill, err error) {
|
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee int64) (bill *model.Waybill, err error) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
if vendorOrgCode, err := dao.GetVendorOrgCode(db, model.VendorIDMTPS, "", model.VendorOrgTypeDelivery); err == nil {
|
|
||||||
if len(vendorOrgCode) > 0 {
|
// 检查配送平台是否被禁用
|
||||||
if vendorOrgCode[0].IsOpen == model.YES {
|
vendorOrgCode, err := dao.GetVendorOrgCode(db, model.VendorIDFengNiao, "", model.VendorOrgTypeDelivery)
|
||||||
return nil, fmt.Errorf("此平台配送已被系统关闭,暂不发配送 [%v]", vendorOrgCode[0].Comment)
|
if err != nil {
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if len(vendorOrgCode) > 0 && vendorOrgCode[0].IsOpen == model.YES {
|
||||||
|
return nil, fmt.Errorf("此平台配送已被系统关闭,暂不发配送 [%v]", vendorOrgCode[0].Comment)
|
||||||
|
}
|
||||||
|
|
||||||
// 自定义计算预估费用
|
// 自定义计算预估费用
|
||||||
deliveryFee, _, err := delivery.CalculateOrderDeliveryFee(order, time.Now(), db)
|
//deliveryFee, _, err := delivery.CalculateOrderDeliveryFee(order, time.Now(), db)
|
||||||
if err == nil {
|
//if err != nil {
|
||||||
if err = delivery.CallCreateWaybillPolicy(deliveryFee, maxDeliveryFee, order, model.VendorIDMTPS); err != nil {
|
// return nil, err
|
||||||
return nil, err
|
//}
|
||||||
|
// 运费预警
|
||||||
|
//if err = delivery.CallCreateWaybillPolicy(deliveryFee, maxDeliveryFee, order, model.VendorIDMTPS); err != nil {
|
||||||
|
// return nil, err
|
||||||
|
//}
|
||||||
|
|
||||||
|
// 忽略坐标转换错误,即使是转换出错,也只能当成转换成功来处理,底层会有错误日志输出
|
||||||
|
lngFloat, latFloat, _ := jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType)
|
||||||
|
billParams := &mtpsapi.CreateOrderByShopParam{
|
||||||
|
OrderID: jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID),
|
||||||
|
DeliveryServiceCode: mtpsapi.DeliveryServiceCodeRapid,
|
||||||
|
ReceiverName: utils.FilterMb4(order.ConsigneeName),
|
||||||
|
ReceiverAddress: utils.FilterMb4(order.ConsigneeAddress),
|
||||||
|
ReceiverPhone: order.ConsigneeMobile,
|
||||||
|
CoordinateType: model.CoordinateTypeMars,
|
||||||
|
ReceiverLng: jxutils.StandardCoordinate2Int(lngFloat),
|
||||||
|
ReceiverLat: jxutils.StandardCoordinate2Int(latFloat),
|
||||||
|
GoodsValue: jxutils.IntPrice2Standard(order.ActualPayPrice), // todo 超价处理
|
||||||
|
GoodsWeight: float64(jxutils.IntWeight2Float(limitOrderWeight(order.Weight))),
|
||||||
|
// ExpectedDeliveryTime: order.ExpectedDeliveredTime.Unix(),
|
||||||
|
OrderType: mtpsapi.OrderTypeASAP,
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取送货单id
|
||||||
|
if billParams.DeliveryID, err = c.getDeliveryID(order, db); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// 获取商铺id
|
||||||
|
if billParams.ShopID, err = c.getMTPSShopID(order, db); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取美团入参结构体
|
||||||
|
goods := &mtpsapi.GoodsDetail{
|
||||||
|
Goods: []*mtpsapi.GoodsItem{},
|
||||||
|
}
|
||||||
|
goodItemMap := map[string]*mtpsapi.GoodsItem{}
|
||||||
|
for _, sku := range order.Skus {
|
||||||
|
goodItem := &mtpsapi.GoodsItem{
|
||||||
|
GoodCount: sku.Count,
|
||||||
|
GoodPrice: jxutils.IntPrice2Standard(sku.SalePrice),
|
||||||
}
|
}
|
||||||
// 忽略坐标转换错误,即使是转换出错,也只能当成转换成功来处理,底层会有错误日志输出
|
goodItem.GoodName, goodItem.GoodUnit = jxutils.GetNameAndUnitFromSkuName(sku.SkuName)
|
||||||
lngFloat, latFloat, _ := jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType)
|
// 好像SKU名不能重复,否则会报错,尝试处理一下
|
||||||
billParams := &mtpsapi.CreateOrderByShopParam{
|
if item, ok := goodItemMap[goodItem.GoodName]; !ok {
|
||||||
OrderID: jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID),
|
goods.Goods = append(goods.Goods, goodItem)
|
||||||
DeliveryServiceCode: mtpsapi.DeliveryServiceCodeRapid,
|
goodItemMap[goodItem.GoodName] = goodItem
|
||||||
ReceiverName: utils.FilterMb4(order.ConsigneeName),
|
} else {
|
||||||
ReceiverAddress: utils.FilterMb4(order.ConsigneeAddress),
|
item.GoodCount += goodItem.GoodCount
|
||||||
ReceiverPhone: order.ConsigneeMobile,
|
|
||||||
CoordinateType: model.CoordinateTypeMars,
|
|
||||||
ReceiverLng: jxutils.StandardCoordinate2Int(lngFloat),
|
|
||||||
ReceiverLat: jxutils.StandardCoordinate2Int(latFloat),
|
|
||||||
GoodsValue: jxutils.IntPrice2Standard(order.ActualPayPrice), // todo 超价处理
|
|
||||||
GoodsWeight: float64(jxutils.IntWeight2Float(limitOrderWeight(order.Weight))),
|
|
||||||
// ExpectedDeliveryTime: order.ExpectedDeliveredTime.Unix(),
|
|
||||||
OrderType: mtpsapi.OrderTypeASAP,
|
|
||||||
}
|
|
||||||
if billParams.DeliveryID, err = c.getDeliveryID(order, db); err == nil {
|
|
||||||
if billParams.ShopID, err = c.getMTPSShopID(order, db); err == nil {
|
|
||||||
globals.SugarLogger.Debug(billParams.ShopID)
|
|
||||||
goods := &mtpsapi.GoodsDetail{
|
|
||||||
Goods: []*mtpsapi.GoodsItem{},
|
|
||||||
}
|
|
||||||
goodItemMap := map[string]*mtpsapi.GoodsItem{}
|
|
||||||
for _, sku := range order.Skus {
|
|
||||||
goodItem := &mtpsapi.GoodsItem{
|
|
||||||
GoodCount: sku.Count,
|
|
||||||
GoodPrice: jxutils.IntPrice2Standard(sku.SalePrice),
|
|
||||||
}
|
|
||||||
goodItem.GoodName, goodItem.GoodUnit = jxutils.GetNameAndUnitFromSkuName(sku.SkuName)
|
|
||||||
// 好像SKU名不能重复,否则会报错,尝试处理一下
|
|
||||||
if item, ok := goodItemMap[goodItem.GoodName]; !ok {
|
|
||||||
goods.Goods = append(goods.Goods, goodItem)
|
|
||||||
goodItemMap[goodItem.GoodName] = goodItem
|
|
||||||
} else {
|
|
||||||
item.GoodCount += goodItem.GoodCount
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// addParams := map[string]interface{}{
|
|
||||||
// "note": utils.FilterMb4(order.BuyerComment),
|
|
||||||
// "goods_detail": string(utils.MustMarshal(goods)),
|
|
||||||
// "goods_pickup_info": fmt.Sprintf("%s第%d号单", model.VendorChineseNames[order.VendorID], order.OrderSeq),
|
|
||||||
// "poi_seq": fmt.Sprintf("#%d", order.OrderSeq),
|
|
||||||
// }
|
|
||||||
// storeTel := ""
|
|
||||||
// storeID := jxutils.GetSaleStoreIDFromOrder(order)
|
|
||||||
// storeDeatail, _ := dao.GetStoreDetail(db, storeID, order.VendorID)
|
|
||||||
// if storeDeatail.Tel2 != "" {
|
|
||||||
// storeTel = ",门店电话:" + storeDeatail.Tel2
|
|
||||||
// }
|
|
||||||
billParams.Note = utils.FilterMb4("客户电话:" + order.ConsigneeMobile + "," + order.BuyerComment + ",取货失败或配送遇到问题请联系18048531223,禁止未配送直接完成定单!")
|
|
||||||
billParams.GoodsDetail = string(utils.MustMarshal(goods))
|
|
||||||
billParams.GoodsPickupInfo = fmt.Sprintf("%s第%d号单", model.VendorChineseNames[order.VendorID], order.OrderSeq)
|
|
||||||
billParams.PoiSeq = fmt.Sprintf("#%d", order.OrderSeq)
|
|
||||||
//if globals.EnableStoreWrite
|
|
||||||
{
|
|
||||||
// 通知美团订单,获取返回订单配送费
|
|
||||||
result, err2 := api.MtpsAPI.CreateOrderByShop2(billParams)
|
|
||||||
if err = err2; err == nil {
|
|
||||||
bill = &model.Waybill{
|
|
||||||
VendorOrderID: order.VendorOrderID,
|
|
||||||
OrderVendorID: order.VendorID,
|
|
||||||
VendorWaybillID: result.MtPeisongID,
|
|
||||||
VendorWaybillID2: utils.Int64ToStr(result.DeliveryID),
|
|
||||||
WaybillVendorID: model.VendorIDMTPS,
|
|
||||||
DesiredFee: int64(result.DeliveryFee * 100),
|
|
||||||
}
|
|
||||||
// 当前运单总费大于配送阈值15,日志打印提示
|
|
||||||
delivery.OnWaybillCreated(bill)
|
|
||||||
globals.SugarLogger.Debug("============================================>", billParams.ShopID)
|
|
||||||
} else {
|
|
||||||
globals.SugarLogger.Debugf("CreateWaybill failed, orderID:%s, billParams:%v, error:%v", order.VendorOrderID, billParams, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//else {
|
|
||||||
// err = fmt.Errorf("测试环境不能真正创建运单")
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
billParams.Note = utils.FilterMb4("客户电话:" + order.ConsigneeMobile + "," + order.BuyerComment + ",取货失败或配送遇到问题请联系18048531223,禁止未配送直接完成定单!")
|
||||||
|
billParams.GoodsDetail = string(utils.MustMarshal(goods))
|
||||||
|
billParams.GoodsPickupInfo = fmt.Sprintf("%s第%d号单", model.VendorChineseNames[order.VendorID], order.OrderSeq)
|
||||||
|
billParams.PoiSeq = fmt.Sprintf("#%d", order.OrderSeq)
|
||||||
|
if !globals.EnableStoreWrite {
|
||||||
|
return nil, fmt.Errorf("测试环境不能真正创建运单")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 通知美团订单,获取返回订单配送费
|
||||||
|
result, err := api.MtpsAPI.CreateOrderByShop2(billParams)
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("CreateWaybill failed, orderID:%s, billParams:%v, error:%v", order.VendorOrderID, billParams, err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
bill = &model.Waybill{
|
||||||
|
VendorOrderID: order.VendorOrderID,
|
||||||
|
OrderVendorID: order.VendorID,
|
||||||
|
VendorWaybillID: result.MtPeisongID,
|
||||||
|
VendorWaybillID2: utils.Int64ToStr(result.DeliveryID),
|
||||||
|
WaybillVendorID: model.VendorIDMTPS,
|
||||||
|
DesiredFee: utils.Float64TwoInt64(result.DeliveryFee),
|
||||||
|
}
|
||||||
|
// 当前运单总费大于配送阈值15,日志打印提示
|
||||||
|
delivery.OnWaybillCreated(bill)
|
||||||
|
|
||||||
return bill, err
|
return bill, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -278,7 +278,7 @@ enableJdStoreWrite = true
|
|||||||
enableEbaiStoreWrite = true
|
enableEbaiStoreWrite = true
|
||||||
enableMtwmStoreWrite = true
|
enableMtwmStoreWrite = true
|
||||||
enableWscStoreWrite = true
|
enableWscStoreWrite = true
|
||||||
enableYbStoreWrite = true
|
enableYbStoreWrite = true
|
||||||
enableJdShopWrite = true
|
enableJdShopWrite = true
|
||||||
|
|
||||||
disableWeimob = false
|
disableWeimob = false
|
||||||
@@ -331,7 +331,7 @@ enableStoreWrite = true
|
|||||||
enableJdStoreWrite = true
|
enableJdStoreWrite = true
|
||||||
enableEbaiStoreWrite = true
|
enableEbaiStoreWrite = true
|
||||||
enableMtwmStoreWrite = true
|
enableMtwmStoreWrite = true
|
||||||
enableYbStoreWrite = true
|
enableYbStoreWrite = true
|
||||||
enableJdShopWrite = true
|
enableJdShopWrite = true
|
||||||
|
|
||||||
mtpsAppKey = "3c0a05d464c247c19d7ec13accc78605"
|
mtpsAppKey = "3c0a05d464c247c19d7ec13accc78605"
|
||||||
|
|||||||
@@ -14,6 +14,9 @@ func Init() {
|
|||||||
orm.RegisterDataBase("default", "mysql", web.AppConfig.DefaultString("dbConnectStr", ""))
|
orm.RegisterDataBase("default", "mysql", web.AppConfig.DefaultString("dbConnectStr", ""))
|
||||||
orm.RegisterDataBase("c4beta", "mysql", "ubuntu:WebServer@1@tcp(111.231.218.230:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true")
|
orm.RegisterDataBase("c4beta", "mysql", "ubuntu:WebServer@1@tcp(111.231.218.230:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true")
|
||||||
orm.RegisterDataBase("api", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true")
|
orm.RegisterDataBase("api", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true")
|
||||||
|
// 本地测试服调试
|
||||||
|
//orm.RegisterDataBase("default", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true")
|
||||||
|
//orm.RegisterDataBase("api", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true")
|
||||||
|
|
||||||
orm.RegisterModel(new(legacymodel.Config))
|
orm.RegisterModel(new(legacymodel.Config))
|
||||||
orm.RegisterModel(new(legacymodel.BlackClient))
|
orm.RegisterModel(new(legacymodel.BlackClient))
|
||||||
|
|||||||
Reference in New Issue
Block a user