- QueryOrderWaybillFeeInfo
This commit is contained in:
@@ -179,3 +179,47 @@ func (c *BaseScheduler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *model
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *BaseScheduler) QueryOrderWaybillFeeInfoEx(ctx *jxcontext.Context, vendorOrderID string, vendorID int) (deliveryFeeMap map[int]*partner.WaybillFeeInfo, err error) {
|
||||||
|
jxutils.CallMsgHandler(func() {
|
||||||
|
deliveryFeeMap, err = func() (deliveryFeeMap map[int]*partner.WaybillFeeInfo, err error) {
|
||||||
|
userName := ctx.GetUserName()
|
||||||
|
globals.SugarLogger.Infof("GetWaybillsInfoEx orderID:%s userName:%s", vendorOrderID, userName)
|
||||||
|
|
||||||
|
db := dao.GetDB()
|
||||||
|
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
storeCourierList, err := dao.GetStoreCourierList(db, jxutils.GetSaleStoreIDFromOrder(order), model.StoreStatusOpened)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
deliveryFeeMap = make(map[int]*partner.WaybillFeeInfo)
|
||||||
|
for _, storeCourier := range storeCourierList {
|
||||||
|
var feeInfo *partner.WaybillFeeInfo
|
||||||
|
if handler := partner.GetDeliveryPlatformFromVendorID(storeCourier.VendorID); handler != nil {
|
||||||
|
if handler.Use4CreateWaybill {
|
||||||
|
if feeInfo, err = handler.Handler.GetWaybillFee(order); err != nil {
|
||||||
|
feeInfo = &partner.WaybillFeeInfo{
|
||||||
|
ErrStr: err.Error(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
feeInfo = &partner.WaybillFeeInfo{
|
||||||
|
ErrStr: fmt.Sprintf("内部错误,%d不能用于创建运单", storeCourier.VendorID),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
feeInfo = &partner.WaybillFeeInfo{
|
||||||
|
ErrStr: fmt.Sprintf("内部错误,%d不被支持", storeCourier.VendorID),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deliveryFeeMap[storeCourier.VendorID] = feeInfo
|
||||||
|
}
|
||||||
|
err = nil
|
||||||
|
return deliveryFeeMap, err
|
||||||
|
}()
|
||||||
|
}, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID))
|
||||||
|
return deliveryFeeMap, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -99,17 +99,23 @@ func (c *DeliveryHandler) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVal
|
|||||||
return retVal
|
return retVal
|
||||||
}
|
}
|
||||||
|
|
||||||
// IDeliveryPlatformHandler
|
func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInfo *partner.WaybillFeeInfo, err error) {
|
||||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner.CreateWaybillPolicy) (bill *model.Waybill, err error) {
|
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
deliveryFee, addFee, err := delivery.CalculateOrderDeliveryFee(order, time.Now(), db)
|
deliveryFeeInfo = &partner.WaybillFeeInfo{}
|
||||||
if err != nil {
|
deliveryFeeInfo.RefDeliveryFee, deliveryFeeInfo.RefAddFee, err = delivery.CalculateOrderDeliveryFee(order, time.Now(), db)
|
||||||
return nil, err
|
billParams, addParams, err := c.getBillParams(db, order)
|
||||||
|
if err == nil {
|
||||||
|
var result *dadaapi.CreateOrderResponse
|
||||||
|
if result, err = api.DadaAPI.QueryDeliverFee(billParams, addParams); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
deliveryFeeInfo.DeliveryFee = jxutils.StandardPrice2Int(result.Fee)
|
||||||
}
|
}
|
||||||
if err = delivery.CallCreateWaybillPolicy(policy, deliveryFee, addFee, deliveryFee, order, model.VendorIDDada); err != nil {
|
return deliveryFeeInfo, err
|
||||||
return nil, err
|
}
|
||||||
}
|
|
||||||
billParams := &dadaapi.OperateOrderRequiredParams{
|
func (c *DeliveryHandler) getBillParams(db *dao.DaoDB, order *model.GoodsOrder) (billParams *dadaapi.OperateOrderRequiredParams, addParams map[string]interface{}, err error) {
|
||||||
|
billParams = &dadaapi.OperateOrderRequiredParams{
|
||||||
// ShopNo: utils.Int2Str(order.StoreID), // 当前达达的门店号与京西是一样的
|
// ShopNo: utils.Int2Str(order.StoreID), // 当前达达的门店号与京西是一样的
|
||||||
OriginID: jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID),
|
OriginID: jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID),
|
||||||
CargoPrice: jxutils.IntPrice2Standard(limitOrderPrice(order.ActualPayPrice)),
|
CargoPrice: jxutils.IntPrice2Standard(limitOrderPrice(order.ActualPayPrice)),
|
||||||
@@ -121,7 +127,7 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner.
|
|||||||
if billParams.ShopNo, err = c.getDadaShopID(order, db); err == nil {
|
if billParams.ShopNo, err = c.getDadaShopID(order, db); err == nil {
|
||||||
if billParams.CityCode, err = c.getDataCityCodeFromOrder(order, db); err == nil {
|
if billParams.CityCode, err = c.getDataCityCodeFromOrder(order, db); err == nil {
|
||||||
billParams.ReceiverLng, billParams.ReceiverLat, _ = jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType)
|
billParams.ReceiverLng, billParams.ReceiverLat, _ = jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType)
|
||||||
addParams := map[string]interface{}{
|
addParams = map[string]interface{}{
|
||||||
"info": fmt.Sprintf("%s第%d号订单, %s", model.VendorChineseNames[order.VendorID], order.OrderSeq, utils.FilterMb4(order.BuyerComment)),
|
"info": fmt.Sprintf("%s第%d号订单, %s", model.VendorChineseNames[order.VendorID], order.OrderSeq, utils.FilterMb4(order.BuyerComment)),
|
||||||
// "origin_mark": model.VendorNames[order.VendorID], // 订单来源标示(该字段可以显示在达达app订单详情页面,只支持字母,最大长度为10)
|
// "origin_mark": model.VendorNames[order.VendorID], // 订单来源标示(该字段可以显示在达达app订单详情页面,只支持字母,最大长度为10)
|
||||||
// "origin_mark_no": fmt.Sprintf("%d", order.OrderSeq), // 订单来源编号(该字段可以显示在达达app订单详情页面,支持字母和数字,最大长度为30)
|
// "origin_mark_no": fmt.Sprintf("%d", order.OrderSeq), // 订单来源编号(该字段可以显示在达达app订单详情页面,支持字母和数字,最大长度为30)
|
||||||
@@ -129,11 +135,27 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner.
|
|||||||
"cargo_weight": jxutils.IntWeight2Float(limitOrderWeight(order.Weight)),
|
"cargo_weight": jxutils.IntWeight2Float(limitOrderWeight(order.Weight)),
|
||||||
"cargo_num": order.GoodsCount,
|
"cargo_num": order.GoodsCount,
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return billParams, addParams, err
|
||||||
|
}
|
||||||
|
|
||||||
if globals.EnableStoreWrite {
|
// IDeliveryPlatformHandler
|
||||||
// 达达要求第二次创建运单,调用函数不同。所以查找两天内有无相同订单号的运单
|
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner.CreateWaybillPolicy) (bill *model.Waybill, err error) {
|
||||||
var waybillList []*model.Waybill
|
db := dao.GetDB()
|
||||||
err2 := dao.GetRows(db, &waybillList, `
|
deliveryFee, addFee, err := delivery.CalculateOrderDeliveryFee(order, time.Now(), db)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err = delivery.CallCreateWaybillPolicy(policy, deliveryFee, addFee, deliveryFee, order, model.VendorIDDada); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
billParams, addParams, err := c.getBillParams(db, order)
|
||||||
|
if err == nil {
|
||||||
|
if globals.EnableStoreWrite {
|
||||||
|
// 达达要求第二次创建运单,调用函数不同。所以查找两天内有无相同订单号的运单
|
||||||
|
var waybillList []*model.Waybill
|
||||||
|
err2 := 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)
|
||||||
@@ -141,39 +163,38 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner.
|
|||||||
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
|
var result *dadaapi.CreateOrderResponse
|
||||||
if err = err2; err == nil && len(waybillList) > 0 && waybillList[0].Status != model.WaybillStatusFailed {
|
if err = err2; err == nil && len(waybillList) > 0 && waybillList[0].Status != model.WaybillStatusFailed {
|
||||||
globals.SugarLogger.Debugf("CreateWaybill orderID:%s len(waybillList)=%d use ReaddOrder", order.VendorOrderID, len(waybillList))
|
globals.SugarLogger.Debugf("CreateWaybill orderID:%s len(waybillList)=%d use ReaddOrder", order.VendorOrderID, len(waybillList))
|
||||||
result, err = api.DadaAPI.ReaddOrder(billParams, addParams)
|
result, err = api.DadaAPI.ReaddOrder(billParams, addParams)
|
||||||
} else {
|
|
||||||
if err != nil {
|
|
||||||
globals.SugarLogger.Warnf("CreateWaybill orderID:%s error:%v", order.VendorOrderID, err)
|
|
||||||
}
|
|
||||||
if false {
|
|
||||||
result, err = api.DadaAPI.AddOrder(billParams, addParams)
|
|
||||||
} else {
|
|
||||||
if result, err = api.DadaAPI.QueryDeliverFee(billParams, addParams); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
dadaFee := jxutils.StandardPrice2Int(result.Fee)
|
|
||||||
if err = delivery.CallCreateWaybillPolicy(policy, deliveryFee, addFee, dadaFee, 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: deliveryFee,
|
|
||||||
ActualFee: jxutils.StandardPrice2Int(result.Fee),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
err = fmt.Errorf("测试环境不能真正创建运单")
|
if err != nil {
|
||||||
|
globals.SugarLogger.Warnf("CreateWaybill orderID:%s error:%v", order.VendorOrderID, err)
|
||||||
|
}
|
||||||
|
if false {
|
||||||
|
result, err = api.DadaAPI.AddOrder(billParams, addParams)
|
||||||
|
} else {
|
||||||
|
if result, err = api.DadaAPI.QueryDeliverFee(billParams, addParams); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
dadaFee := jxutils.StandardPrice2Int(result.Fee)
|
||||||
|
if err = delivery.CallCreateWaybillPolicy(policy, deliveryFee, addFee, dadaFee, 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: deliveryFee,
|
||||||
|
ActualFee: jxutils.StandardPrice2Int(result.Fee),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = fmt.Errorf("测试环境不能真正创建运单")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bill, err
|
return bill, err
|
||||||
|
|||||||
@@ -113,6 +113,18 @@ func (c *DeliveryHandler) callbackMsg2Waybill(msg *mtpsapi.CallbackOrderMsg) (re
|
|||||||
return retVal
|
return retVal
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInfo *partner.WaybillFeeInfo, err error) {
|
||||||
|
db := dao.GetDB()
|
||||||
|
deliveryFeeInfo = &partner.WaybillFeeInfo{}
|
||||||
|
deliveryFeeInfo.RefDeliveryFee, deliveryFeeInfo.RefAddFee, err = delivery.CalculateOrderDeliveryFee(order, time.Now(), db)
|
||||||
|
if err == nil {
|
||||||
|
if _, err = c.getMTPSShopID(order, db); err == nil {
|
||||||
|
deliveryFeeInfo.DeliveryFee = deliveryFeeInfo.RefDeliveryFee
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return deliveryFeeInfo, err
|
||||||
|
}
|
||||||
|
|
||||||
// IDeliveryPlatformHandler
|
// IDeliveryPlatformHandler
|
||||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner.CreateWaybillPolicy) (bill *model.Waybill, err error) {
|
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner.CreateWaybillPolicy) (bill *model.Waybill, err error) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
|
|||||||
@@ -63,6 +63,13 @@ type StatusActionParams struct {
|
|||||||
TimeoutGap int // 以秒为单位的随机时间,0在GetStatusActionConfig返回时表示不修改缺省
|
TimeoutGap int // 以秒为单位的随机时间,0在GetStatusActionConfig返回时表示不修改缺省
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type WaybillFeeInfo struct {
|
||||||
|
ErrStr string `json:"errStr"`
|
||||||
|
RefDeliveryFee int64 `json:"refDeliveryFee"`
|
||||||
|
RefAddFee int64 `json:"refAddFee"`
|
||||||
|
DeliveryFee int64 `json:"deliveryFee"`
|
||||||
|
}
|
||||||
|
|
||||||
func (s *StatusActionParams) GetRefTimeout(statusTime time.Time) (timeout time.Duration) {
|
func (s *StatusActionParams) GetRefTimeout(statusTime time.Time) (timeout time.Duration) {
|
||||||
switch s.TimerType {
|
switch s.TimerType {
|
||||||
case TimerTypeBaseNow:
|
case TimerTypeBaseNow:
|
||||||
@@ -220,6 +227,7 @@ type IDeliveryPlatformHandler interface {
|
|||||||
CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error)
|
CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error)
|
||||||
|
|
||||||
GetVendorID() int
|
GetVendorID() int
|
||||||
|
GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInfo *WaybillFeeInfo, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type IPrinterHandler interface {
|
type IPrinterHandler interface {
|
||||||
|
|||||||
@@ -78,6 +78,21 @@ func (c *OrderController) SelfDelivered() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 查询三方运单费用信息
|
||||||
|
// @Description 查询三方运单费用信息
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param vendorOrderID query string true "订单ID"
|
||||||
|
// @Param vendorID query int true "订单所属的厂商ID"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /QueryOrderWaybillFeeInfo [get]
|
||||||
|
func (c *OrderController) QueryOrderWaybillFeeInfo() {
|
||||||
|
c.callQueryOrderWaybillFeeInfo(func(params *tOrderQueryOrderWaybillFeeInfoParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
retVal, err = defsch.FixedScheduler.QueryOrderWaybillFeeInfoEx(params.Ctx, params.VendorOrderID, params.VendorID)
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// @Title 创建三方运单
|
// @Title 创建三方运单
|
||||||
// @Description 创建三方运单
|
// @Description 创建三方运单
|
||||||
// @Param token header string true "认证token"
|
// @Param token header string true "认证token"
|
||||||
|
|||||||
@@ -691,6 +691,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "QueryOrderWaybillFeeInfo",
|
||||||
|
Router: `/QueryOrderWaybillFeeInfo`,
|
||||||
|
AllowHTTPMethods: []string{"get"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "RefreshOrderRealMobile",
|
Method: "RefreshOrderRealMobile",
|
||||||
|
|||||||
Reference in New Issue
Block a user