171 lines
7.4 KiB
Go
171 lines
7.4 KiB
Go
package fnpsapi
|
||
|
||
import (
|
||
"encoding/json"
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
)
|
||
|
||
const (
|
||
OrderCancelReson1 = 1 // 1:物流原因:订单长时间未分配骑手,
|
||
OrderCancelReson2 = 2 // 2:物流原因:分配骑手后,骑手长时间未取件 ,
|
||
OrderCancelReson3 = 3 // 3:物流原因:骑手告知不配送,让取消订单,
|
||
OrderCancelReson4 = 4 // 4:商品缺货/无法出货/已售完,
|
||
OrderCancelReson5 = 5 // 5:商户联系不上门店/门店关门了,
|
||
OrderCancelReson6 = 6 // 6:商户发错单,
|
||
OrderCancelReson7 = 7 // 7:商户/顾客自身定位错误,
|
||
OrderCancelReson8 = 8 // 8:商户改其他第三方配送,
|
||
OrderCancelReson9 = 9 // 9:顾客下错单/临时不想要了,
|
||
OrderCancelReson10 = 10 // 10:顾客自取/不在家/要求另改时间配送)(0类型已下线)
|
||
|
||
OrderStatusAccept = 1 //系统已接单
|
||
OrderStatusAssigned = 20 //已分配骑手
|
||
OrderStatusArrived = 80 //已到店
|
||
OrderStatusDelivering = 2 //配送中
|
||
OrderStatusDelivered = 3 //已送达
|
||
OrderStatusException = 5 //异常
|
||
)
|
||
|
||
// 蜂鸟预下单
|
||
func (a *API) PreCreateByShopFn(basicParams *PreCreateOrder) (deliveryFee, baseDeliveryFee int64, err error) {
|
||
preOrder := a.MakeFnRequestHead()
|
||
params := utils.Struct2MapByJson(basicParams)
|
||
preOrder["business_data"] = params
|
||
result, err := a.AccessAPI(ApiURL, "preCreateOrder", RequestPost, params)
|
||
if err != nil {
|
||
return 0, 0, err
|
||
}
|
||
|
||
preOrderResult := PreCreateOrderResp{}
|
||
if err := json.Unmarshal([]byte(result["business_data"].(string)), &preOrderResult); err != nil {
|
||
return 0, 0, err
|
||
}
|
||
|
||
deliveryFee = utils.Float64TwoInt64(utils.MustInterface2Float64(preOrderResult.GoodsInfos[0].ActualDeliveryAmountCent)) // 订单配送价格
|
||
baseDeliveryFee = utils.Float64TwoInt64(utils.MustInterface2Float64(preOrderResult.GoodsInfos[0].TotalDeliveryAmountCent)) // 订单优惠价格
|
||
return deliveryFee, baseDeliveryFee, nil
|
||
}
|
||
|
||
// 蜂鸟正式下单
|
||
func (a *API) CreateOrder(createOrderParam *CreateOrderReqParam) (err error) {
|
||
orderHead := a.MakeFnRequestHead()
|
||
bytes, err := json.Marshal(createOrderParam)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
orderHead["business_data"] = string(bytes)
|
||
_, err = a.AccessAPI(ApiURL, "createOrder", RequestPost, orderHead)
|
||
return err
|
||
}
|
||
|
||
type ReceiverInfo struct {
|
||
ReceiverName string `json:"receiver_name,omitempty"`
|
||
ReceiverPrimaryPhone string `json:"receiver_primary_phone,omitempty"`
|
||
ReceiverSecondPhone string `json:"receiver_second_phone,omitempty"`
|
||
ReceiverAddress string `json:"receiver_address,omitempty"`
|
||
ReceiverLongitude float64 `json:"receiver_longitude,omitempty"`
|
||
ReceiverLatitude float64 `json:"receiver_latitude,omitempty"`
|
||
PositionSource int `json:"position_source,omitempty"` // 经纬度来源
|
||
}
|
||
|
||
type TransportInfo struct {
|
||
TransportName string `json:"transport_name,omitempty"`
|
||
TransportAddress string `json:"transport_address,omitempty"`
|
||
TransportLongitude float64 `json:"transport_longitude,omitempty"`
|
||
TransportLatitude float64 `json:"transport_latitude,omitempty"`
|
||
PositionSource int `json:"position_source,omitempty"` // 经纬度来源
|
||
TransportTel string `json:"transport_tel,omitempty"`
|
||
TransportRemark string `json:"transport_remark,omitempty"`
|
||
}
|
||
|
||
type ItemsJSON struct {
|
||
ItemID string `json:"item_id,omitempty"`
|
||
ItemName string `json:"item_name,omitempty"`
|
||
ItemQuantity int `json:"item_quantity,omitempty"`
|
||
ItemPrice float64 `json:"item_price"`
|
||
ItemActualPrice float64 `json:"item_actual_price"`
|
||
ItemSize int `json:"item_size,omitempty"`
|
||
ItemRemark string `json:"item_remark,omitempty"`
|
||
IsNeedPackage int `json:"is_need_package"`
|
||
IsAgentPurchase int `json:"is_agent_purchase"`
|
||
AgentPurchasePrice float64 `json:"agent_purchase_price,omitempty"`
|
||
}
|
||
|
||
//order_cancel_reason_code 订单取消原因代码(1:用户取消,2:商家取消)
|
||
// order_cancel_code 订单取消编码(
|
||
// 1:物流原因:订单长时间未分配骑手,
|
||
// 2:物流原因:分配骑手后,骑手长时间未取件 ,
|
||
// 3:物流原因:骑手告知不配送,让取消订单,
|
||
// 4:商品缺货/无法出货/已售完, 5:商户联系不上门店/门店关门了, 6:商户发错单,
|
||
// 7:商户/顾客自身定位错误, 8:商户改其他第三方配送, 9:顾客下错单/临时不想要了,
|
||
// 10:顾客自取/不在家/要求另改时间配送)(0类型已下线)
|
||
|
||
type CancelOrderParam struct {
|
||
PartnerOrderCode string `json:"partner_order_code,omitempty"`
|
||
OrderCancelReasonCode int `json:"order_cancel_reason_code,omitempty"`
|
||
OrderCancelCode int `json:"order_cancel_code,omitempty"`
|
||
OrderCancelDescription string `json:"order_cancel_description,omitempty"`
|
||
OrderCancelTime int64 `json:"order_cancel_time,omitempty"`
|
||
}
|
||
|
||
//
|
||
//func (a *API) CancelOrder(cancelOrderParam *CancelOrderParam) (err error) {
|
||
// params := utils.Struct2FlatMap(cancelOrderParam)
|
||
// _, err = a.AccessAPI("v2/order/cancel", URL, params, true)
|
||
// return err
|
||
//}
|
||
//
|
||
//func (a *API) ComplaintOrder(cancelOrderParam *CancelOrderParam) (err error) {
|
||
// params := utils.Struct2FlatMap(cancelOrderParam)
|
||
// _, err = a.AccessAPI("v2/order/complaint", URL, params, true)
|
||
// return err
|
||
//}
|
||
|
||
type QueryOrderResult struct {
|
||
AbnormalCode string `json:"abnormal_code"`
|
||
AbnormalDesc string `json:"abnormal_desc"`
|
||
CarrierDriverID int `json:"carrier_driver_id"`
|
||
CarrierDriverName string `json:"carrier_driver_name"`
|
||
CarrierDriverPhone string `json:"carrier_driver_phone"`
|
||
ComplaintDescription interface{} `json:"complaintDescription"`
|
||
ComplaintStatus interface{} `json:"complaintStatus"`
|
||
EstimateArriveTime int64 `json:"estimate_arrive_time"`
|
||
EventLogDetails []struct {
|
||
CarrierDriverName string `json:"carrier_driver_name"`
|
||
CarrierDriverPhone string `json:"carrier_driver_phone"`
|
||
OccurTime int64 `json:"occur_time"`
|
||
OrderStatus int `json:"order_status"`
|
||
} `json:"event_log_details"`
|
||
HandleID interface{} `json:"handleId"`
|
||
OrderID interface{} `json:"orderId"`
|
||
OrderStatus int `json:"order_status"`
|
||
OrderTotalDeliveryCost float64 `json:"order_total_delivery_cost"`
|
||
OrderTotalDeliveryDiscount interface{} `json:"order_total_delivery_discount"`
|
||
OvertimeCompensationCost float64 `json:"overtime_compensation_cost"`
|
||
Reason string `json:"reason"`
|
||
SupportClaims bool `json:"support_claims"`
|
||
TrackingID int64 `json:"trackingId"`
|
||
TrackingID2 int64 `json:"tracking_id"`
|
||
TransportStationID string `json:"transport_station_id"`
|
||
TransportStationTel string `json:"transport_station_tel"`
|
||
}
|
||
|
||
//
|
||
//func (a *API) QueryOrder(partnerOrderCode string) (queryOrderResult *QueryOrderResult, err error) {
|
||
// result, err := a.AccessAPI("v2/order/query", URL, map[string]interface{}{
|
||
// "partner_order_code": partnerOrderCode,
|
||
// }, true)
|
||
// if err == nil {
|
||
// utils.Map2StructByJson(result["data"], &queryOrderResult, false)
|
||
// }
|
||
// return queryOrderResult, err
|
||
//}
|
||
//
|
||
//func (a *API) ComplaintRider(partnerOrderCode string, orderComplaintCode int) (err error) {
|
||
// _, err = a.AccessAPI("v2/order/complaint", URL, map[string]interface{}{
|
||
// "partner_order_code": partnerOrderCode,
|
||
// "order_complaint_code": orderComplaintCode,
|
||
// "order_complaint_time": time.Now().UnixNano() / 1e6,
|
||
// }, true)
|
||
// return err
|
||
//}
|