Files
baseapi/platformapi/dadaapi/order.go
2020-02-07 11:31:39 +08:00

219 lines
7.4 KiB
Go

package dadaapi
import (
"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
OrderStatusExpired = 7
OrderStatusAssignment = 8
OrderStatusReturning = 9
OrderStatusReturningFinished = 10
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)
}
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
}
// 增加小费
// 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
}