228 lines
7.8 KiB
Go
228 lines
7.8 KiB
Go
package dadaapi
|
|
|
|
import (
|
|
"fmt"
|
|
"git.rosy.net.cn/baseapi/utils"
|
|
)
|
|
|
|
const (
|
|
ReasonIDNobodyAccept = 1
|
|
ReasonIDNobodyPickup = 2
|
|
ReasonIDCourierIsPig = 3
|
|
ReasonIDClientCanceled = 4
|
|
ReasonIDOrderIsWrong = 5
|
|
ReasonIDCourierWantMeCancel = 34
|
|
ReasonIDCourierDontWantToPickup = 35
|
|
ReasonIDClientDontWantItAnymore = 36
|
|
ReasonIDCourierShirk = 37
|
|
ReasonIDOther = 10000
|
|
)
|
|
|
|
const (
|
|
OrderStatusWaitingForAccept = 1 // 待接单
|
|
OrderStatusAccepted = 2 // 待取货
|
|
OrderStatusDelivering = 3 // 配送中
|
|
OrderStatusFinished = 4 // 已完成
|
|
OrderStatusCanceled = 5 // 已取消
|
|
OrderStatusAssignment = 8 // 指派单
|
|
OrderStatusReturning = 9 // 妥投异常之物品返回中
|
|
OrderStatusReturningFinished = 10 // 妥投异常之物品返回完成
|
|
OrderStatusReturningInOrder = 100 // 骑手到店
|
|
OrderStatusAddOrderFailed = 1000 // ,创建达达运单失败
|
|
)
|
|
|
|
const (
|
|
CargoTypeSnak = 1 // 食品小吃
|
|
CargoTypeDrink = 2 // 饮料
|
|
CargoTypeFlower = 3 // 鲜花
|
|
CargoTypePrint = 8 // 文印票务
|
|
CargoTypeCVS = 9 // 便利店
|
|
CargoTypeFresh = 13 // 水果生鲜
|
|
CargoTypeCityEC = 19 // 同城电商
|
|
CargoTypeMedicine = 20 // 医药
|
|
CargoTypeCake = 21 // 蛋糕
|
|
CargoTypeSwine = 24 // 酒品
|
|
CargoTypeSmallMarket = 25 // 小商品市场
|
|
CargoTypeClothing = 26 // 服装
|
|
CargoTypeCarPart = 27 // 汽修零配
|
|
CargoTypeDigital = 28 // 数码
|
|
CargoTypeLobster = 29 // 小龙虾
|
|
CargoTypeOther = 5 // 其他
|
|
)
|
|
|
|
type OperateOrderParams struct {
|
|
// 以下为必要参数
|
|
|
|
ShopNo string `json:"shop_no"`
|
|
OriginID string `json:"origin_id"`
|
|
CityCode string `json:"city_code"`
|
|
CargoPrice float64 `json:"cargo_price"`
|
|
IsPrepay int `json:"is_prepay"`
|
|
ReceiverName string `json:"receiver_name"`
|
|
ReceiverAddress string `json:"receiver_address"`
|
|
ReceiverLat float64 `json:"receiver_lat"`
|
|
ReceiverLng float64 `json:"receiver_lng"`
|
|
ReceiverPhone string `json:"receiver_phone"`
|
|
ReceiverTel string `json:"receiver_tel"`
|
|
|
|
// 以下为可选参数
|
|
|
|
Tips float64 `json:"tips,omitempty"`
|
|
Info string `json:"info,omitempty"`
|
|
CargoType int `json:"cargo_type,omitempty"`
|
|
CargoWeight float64 `json:"cargo_weight,omitempty"`
|
|
CargoNum int `json:"cargo_num,omitempty"`
|
|
InvoiceTitle string `json:"invoice_title,omitempty"`
|
|
OriginMark string `json:"origin_mark,omitempty"`
|
|
OriginMarkNo string `json:"origin_mark_no,omitempty"`
|
|
IsUseInsurance int `json:"is_use_insurance"`
|
|
IsFinishCodeNeeded int `json:"is_finish_code_needed,omitempty"`
|
|
DelayPublishTime int `json:"delay_publish_time,omitempty"`
|
|
IsDirectDelivery int `json:"is_direct_delivery,omitempty"`
|
|
}
|
|
|
|
type CreateOrderResponse struct {
|
|
DeliveryNo string `json:"deliveryNo"`
|
|
Distance float64 `json:"distance"`
|
|
Fee float64 `json:"fee"`
|
|
DeliverFee float64 `json:"deliverFee"`
|
|
CouponFee float64 `json:"couponFee"`
|
|
Tips float64 `json:"tips"`
|
|
InsuranceFee float64 `json:"insuranceFee"`
|
|
}
|
|
|
|
type CancelOrderResponse struct {
|
|
DeductFee float64 `json:"deduct_fee"`
|
|
}
|
|
|
|
type ComplaintReason struct {
|
|
ID int `json:"id"`
|
|
Reason string `json:"reason"`
|
|
}
|
|
|
|
type OrderInfo struct {
|
|
AcceptTime string `json:"acceptTime"`
|
|
ActualFee float64 `json:"actualFee"`
|
|
CancelTime string `json:"cancelTime"`
|
|
CreateTime string `json:"createTime"`
|
|
DeductFee float64 `json:"deductFee"`
|
|
DeliveryFee float64 `json:"deliveryFee"`
|
|
Distance float64 `json:"distance"`
|
|
FetchTime string `json:"fetchTime"`
|
|
FinishTime string `json:"finishTime"`
|
|
InsuranceFee float64 `json:"insuranceFee"`
|
|
OrderFinishCode string `json:"orderFinishCode"`
|
|
OrderID string `json:"orderId"`
|
|
ReceiptURL string `json:"receiptUrl"`
|
|
StatusCode int `json:"statusCode"`
|
|
StatusMsg string `json:"statusMsg"`
|
|
SupplierAddress string `json:"supplierAddress"`
|
|
SupplierLat string `json:"supplierLat"`
|
|
SupplierLng string `json:"supplierLng"`
|
|
SupplierName string `json:"supplierName"`
|
|
SupplierPhone string `json:"supplierPhone"`
|
|
Tips float64 `json:"tips"`
|
|
TransporterLat string `json:"transporterLat"`
|
|
TransporterLng string `json:"transporterLng"`
|
|
TransporterName string `json:"transporterName"`
|
|
TransporterPhone string `json:"transporterPhone"`
|
|
}
|
|
|
|
// 订单详情查询
|
|
// http://newopen.imdada.cn/#/development/file/statusQuery?_k=7ou2o1
|
|
func (a *API) QueryOrderInfo(orderID string) (order *OrderInfo, err error) {
|
|
params := make(map[string]interface{})
|
|
params["order_id"] = orderID
|
|
result, err := a.AccessAPI("api/order/status/query", params)
|
|
if err == nil {
|
|
err = utils.Map2StructByJson(result.Result, &order, false)
|
|
}
|
|
order.DeliveryFee += (utils.Int2Float64(utils.WayBillDeliveryMarkUp) / 100)
|
|
return order, err
|
|
}
|
|
|
|
func (a *API) operateOrder(action string, orderInfo *OperateOrderParams) (retVal *CreateOrderResponse, err error) {
|
|
params := utils.Struct2MapByJson(orderInfo)
|
|
params["callback"] = a.callbackURL
|
|
result, err := a.AccessAPI(action, params)
|
|
if err == nil {
|
|
err = utils.Map2StructByJson(result.Result, &retVal, false)
|
|
}
|
|
return retVal, err
|
|
}
|
|
|
|
func (a *API) AddOrder(orderInfo *OperateOrderParams) (retVal *CreateOrderResponse, err error) {
|
|
return a.operateOrder("api/order/addOrder", orderInfo)
|
|
}
|
|
|
|
func (a *API) ReaddOrder(orderInfo *OperateOrderParams) (retVal *CreateOrderResponse, err error) {
|
|
return a.operateOrder("api/order/reAddOrder", orderInfo)
|
|
}
|
|
|
|
func (a *API) QueryDeliverFee(orderInfo *OperateOrderParams) (retVal *CreateOrderResponse, err error) {
|
|
return a.operateOrder("api/order/queryDeliverFee", orderInfo)
|
|
}
|
|
|
|
func (a *API) AddOrderAfterQuery(deliveryNo string) (err error) {
|
|
_, err = a.AccessAPI("api/order/addAfterQuery", map[string]interface{}{
|
|
"deliveryNo": deliveryNo,
|
|
})
|
|
return err
|
|
}
|
|
|
|
func (a *API) CancelOrder(thirdPartOrderID string, cancelOrderReasonId int, cancelOrderReason string) (retVal *CancelOrderResponse, err error) {
|
|
mapData := utils.Params2Map("order_id", thirdPartOrderID, "cancel_reason_id", cancelOrderReasonId, "cancel_reason", cancelOrderReason)
|
|
result, err := a.AccessAPI("api/order/formalCancel", mapData)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
mapResult := result.Result.(map[string]interface{})
|
|
retVal = new(CancelOrderResponse)
|
|
retVal.DeductFee = utils.MustInterface2Float64(mapResult["deduct_fee"])
|
|
return retVal, nil
|
|
}
|
|
|
|
//获取投诉原因
|
|
func (a *API) GetComplaintReasons() (complaintReasonList []*ComplaintReason, err error) {
|
|
result, err := a.AccessAPI("api/complaint/reasons", nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, v := range result.Result.([]interface{}) {
|
|
mapResult := v.(map[string]interface{})
|
|
complaintReason := &ComplaintReason{}
|
|
err = utils.Map2StructByJson(mapResult, complaintReason, false)
|
|
complaintReasonList = append(complaintReasonList, complaintReason)
|
|
}
|
|
return complaintReasonList, nil
|
|
}
|
|
|
|
//投诉骑手
|
|
func (a *API) ComplaintRider(orderID string, resonID int) (err error) {
|
|
mapData := utils.Params2Map("order_id", orderID, "reason_id", resonID)
|
|
_, err = a.AccessAPI("api/complaint/dada", mapData)
|
|
return err
|
|
}
|
|
|
|
// 获取投诉列表
|
|
func (a *API) ComplaintList() {
|
|
data, err := a.AccessAPI("api/complaint/reasons", nil)
|
|
fmt.Println(data)
|
|
fmt.Println(err)
|
|
}
|
|
|
|
// 增加小费
|
|
// http://newopen.imdada.cn/#/development/file/addTip?_k=5yerib
|
|
func (a *API) AddTip(orderID string, tips float64, cityCode, info string) (err error) {
|
|
mapData := map[string]interface{}{
|
|
"order_id": orderID,
|
|
"tips": tips,
|
|
"city_code": cityCode,
|
|
}
|
|
if info != "" {
|
|
mapData["info"] = info
|
|
}
|
|
_, err = a.AccessAPI("api/order/addTip", mapData)
|
|
return err
|
|
}
|