@@ -69,16 +69,12 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap
order := c . callbackMsg2Waybill ( msg )
switch msg . OrderStatus {
case dadaapi . OrderStatusWaitingForAccept :
if result , err := api . DadaAPI . QueryOrderInfo ( msg . OrderID ) ; err == nil {
order . ActualFee = jxutils . StandardPrice2Int ( utils . Interface2Float64WithDefault ( result [ "actualFee" ] , 0.0 ) )
order . DesiredFee = jxutils . StandardPrice2Int ( utils . Interface2Float64WithDefault ( result [ "deliveryFee" ] , 0.0 ) )
if dadaOrder , err := api . DadaAPI . QueryOrderInfo2 ( msg . OrderID ) ; err == nil {
order . ActualFee = jxutils . StandardPrice2Int ( dadaOrder . ActualFee )
order . DesiredFee = jxutils . StandardPrice2Int ( dadaOrder . DeliveryFee )
}
order . Status = model . WaybillStatusNew
case dadaapi . OrderStatusAccepted :
// if result, err := api.DadaAPI.QueryOrderInfo(msg.OrderID); err == nil {
// order.ActualFee = jxutils.StandardPrice2Int(utils.Interface2Float64WithDefault(result["actualFee"], 0.0))
// order.DesiredFee = jxutils.StandardPrice2Int(utils.Interface2Float64WithDefault(result["deliveryFee"], 0.0))
// }
order . Status = model . WaybillStatusAccepted
case dadaapi . OrderStatusDelivering :
order . Status = model . WaybillStatusDelivering
@@ -204,10 +200,12 @@ func (c *DeliveryHandler) IsErrStoreExist(err error) bool {
func ( c * DeliveryHandler ) GetWaybillFee ( order * model . GoodsOrder ) ( deliveryFeeInfo * partner . WaybillFeeInfo , err error ) {
db := dao . GetDB ( )
deliveryFeeInfo = & partner . WaybillFeeInfo { }
billParams, addParams, err := c . getBillParams ( db , order )
// billParams, addParams, err := c.getBillParams(db, order)
billParams , err := c . getBillParams2 ( db , order )
if err == nil {
var result * dadaapi . CreateOrderResponse
if result , err = api . DadaAPI. QueryDeliverFee( billParams, addParams) ; err != nil {
// if result, err = api. DadaAPI. QueryDeliverFee( billParams, addParams); err != nil {
if result , err = api . DadaAPI . QueryDeliverFee2 ( billParams ) ; err != nil {
return nil , err
}
deliveryFeeInfo . DeliveryFee = jxutils . StandardPrice2Int ( result . Fee )
@@ -216,9 +214,34 @@ func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInf
return deliveryFeeInfo , err
}
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), // 当前达达的门店号与京西是一样的
// 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), // 当前达达的门店号与京西是一样的
// OriginID: jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID),
// CargoPrice: jxutils.IntPrice2Standard(limitOrderPrice(order.ActualPayPrice)),
// IsPrepay: 0,
// ReceiverName: utils.FilterMb4(order.ConsigneeName),
// ReceiverAddress: utils.FilterMb4(order.ConsigneeAddress),
// ReceiverPhone: order.ConsigneeMobile,
// }
// if billParams.ShopNo, err = c.getDadaShopID(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)
// addParams = map[string]interface{}{
// "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_no": fmt.Sprintf("%d", order.OrderSeq), // 订单来源编号( 该字段可以显示在达达app订单详情页面, 支持字母和数字, 最大长度为30)
// "cargo_type": 13,
// "cargo_weight": jxutils.IntWeight2Float(limitOrderWeight(order.Weight)),
// "cargo_num": order.GoodsCount,
// }
// }
// }
// return billParams, addParams, err
// }
func ( c * DeliveryHandler ) getBillParams2 ( db * dao . DaoDB , order * model . GoodsOrder ) ( billParams * dadaapi . OperateOrderParams , err error ) {
billParams = & dadaapi . OperateOrderParams {
OriginID : jxutils . ComposeUniversalOrderID ( order . VendorOrderID , order . VendorID ) ,
CargoPrice : jxutils . IntPrice2Standard ( limitOrderPrice ( order . ActualPayPrice ) ) ,
IsPrepay : 0 ,
@@ -229,23 +252,20 @@ func (c *DeliveryHandler) getBillParams(db *dao.DaoDB, order *model.GoodsOrder)
if billParams . ShopNo , err = c . getDadaShopID ( 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 )
add Params = map [ string ] interface { } {
"info" : fmt . Sprintf ( "%s第%d号订单, %s" , model . VendorChineseN ame s [ order . VendorID ] , order . OrderSeq , utils . FilterMb4 ( order . BuyerComment ) ) ,
// "origin_mark": model.VendorNames[order.VendorID], // 订单来源标示( 该字段可以显示在达达app订单详情页面, 只支持字母, 最大长度为10)
// "origin_mark_no": fmt.Sprintf("%d", order.OrderSeq), // 订单来源编号( 该字段可以显示在达达app订单详情页面, 支持字母和数字, 最大长度为30)
"cargo_type" : 13 ,
"cargo_weight" : jxutils . IntWeight2Float ( limitOrderWeight ( order . Weight ) ) ,
"cargo_num" : order . GoodsCount ,
}
bill Params. Info = fmt . Sprintf ( "%s第%d号订单, %s" , model . VendorChineseNames [ order . VendorID ] , order . OrderSeq , utils . FilterMb4 ( order . BuyerComment ) )
billPar ams . CargoType = dadaapi . CargoTypeFresh
billParams . CargoWeight = float64 ( jxutils . IntWeight2Float ( limitOrderWeight ( order . Weight ) ) )
billParams . CargoNum = order . GoodsCount
}
}
return billParams , addParams , err
return billParams , err
}
// IDeliveryPlatformHandler
func ( c * DeliveryHandler ) CreateWaybill ( order * model . GoodsOrder , maxDeliveryFee int64 ) ( bill * model . Waybill , err error ) {
db := dao . GetDB ( )
billParams, addParams, err := c . getBillParams ( db , order )
// billParams, addParams, err := c.getBillParams(db, order)
billParams , err := c . getBillParams2 ( db , order )
if err == nil {
if globals . EnableStoreWrite {
// 达达要求第二次创建运单,调用函数不同。所以查找两天内有无相同订单号的运单
@@ -265,16 +285,19 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee
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, addParams)
result , err = api . DadaAPI . ReaddOrder2 ( billParams )
} else {
// 第一次创建
if err != nil {
globals . SugarLogger . Warnf ( "CreateWaybill orderID:%s error:%v" , order . VendorOrderID , err )
}
if false {
result, err = api . DadaAPI. AddOrder( billParams, addParams )
// result, err = api. DadaAPI. AddOrder( billParams, addParams)
result , err = api . DadaAPI . AddOrder2 ( billParams )
} else {
if result , err = api . DadaAPI. QueryDeliverFee( billParams, addParams) ; err != nil {
// if result, err = api. DadaAPI. QueryDeliverFee( billParams, addParams); err != nil {
if result , err = api . DadaAPI . QueryDeliverFee2 ( billParams ) ; err != nil {
return nil , err
}
if err = delivery . CallCreateWaybillPolicy ( jxutils . StandardPrice2Int ( result . Fee ) , maxDeliveryFee , order , model . VendorIDDada ) ; err != nil {
@@ -368,3 +391,22 @@ func (c *DeliveryHandler) ComplaintRider(bill *model.Waybill, resonID int, reson
err = api . DadaAPI . ComplaintRider ( bill . VendorOrderID , resonID )
return err
}
func ( c * DeliveryHandler ) GetWaybillTip ( ctx * jxcontext . Context , vendorOrgCode , vendorOrderID , vendorWaybillID , vendorWaybillID2 string ) ( tipFee int64 , err error ) {
order , err := api . DadaAPI . QueryOrderInfo2 ( vendorOrderID )
if err == nil {
tipFee = jxutils . StandardPrice2Int ( order . Tips )
}
return tipFee , err
}
func ( c * DeliveryHandler ) AddWaybillTip ( ctx * jxcontext . Context , vendorOrgCode , vendorOrderID , vendorWaybillID , vendorWaybillID2 , cityCode string , tipFee2Add int64 ) ( err error ) {
curTip , err := c . GetWaybillTip ( ctx , vendorOrgCode , vendorOrderID , vendorWaybillID , vendorWaybillID2 )
if err == nil {
totalTip := curTip + tipFee2Add
if globals . EnableStoreWrite {
err = api . DadaAPI . AddTip ( vendorOrderID , jxutils . IntPrice2Standard ( totalTip ) , cityCode , "" )
}
}
return err
}