package dadaapi import ( "git.rosy.net.cn/baseapi/utils" "github.com/fatih/structs" ) const ( ReasonIdNobodyAccept = 1 ReasonIdNobodyPickup = 2 ReasonIdCourierIsPig = 3 ReasonIdClientCanceled = 4 ReasonIdOrderIsWrong = 5 ReasonIdCourierWantMeCancel = 34 ReasonIdCourierDontWantToPickup = 35 ReasonIdClientDontWantItAnymore = 36 ReasonIdCourierShirk = 37 ReasonIdOther = 10000 ) type OperateOrderRequiredParams 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"` } type CreateOrderResponse struct { Distance float64 Fee float64 DeliverFee float64 CouponFee float64 Tips float64 InsuranceFee float64 } type CancelOrderResponse struct { DeductFee float64 `json:"deduct_fee"` } func (d *DadaAPI) QueryOrderInfo(orderId string) (retVal map[string]interface{}, err error) { params := make(map[string]interface{}) params["order_id"] = orderId result, err := d.AccessDada("api/order/status/query", params) if err != nil { return nil, err } return result.Result.(map[string]interface{}), nil } func map2CreateOrderResponse(mapData map[string]interface{}) *CreateOrderResponse { retVal := new(CreateOrderResponse) retVal.Distance = utils.MustInterface2Float64(mapData["distance"]) retVal.Fee = utils.MustInterface2Float64(mapData["fee"]) retVal.DeliverFee = utils.MustInterface2Float64(mapData["deliverFee"]) if value, ok := mapData["couponFee"]; ok { retVal.CouponFee = utils.MustInterface2Float64(value) } if value, ok := mapData["tips"]; ok { retVal.CouponFee = utils.MustInterface2Float64(value) } if value, ok := mapData["insuranceFee"]; ok { retVal.CouponFee = utils.MustInterface2Float64(value) } return retVal } func (d *DadaAPI) operateOrder(action string, orderInfo *OperateOrderRequiredParams, addParams map[string]interface{}) (retVal *CreateOrderResponse, err error) { params := structs.Map(orderInfo) params["callback"] = d.callbackURL allParams := utils.MergeMaps(params, addParams) result, err := d.AccessDada(action, allParams) if err != nil { return nil, err } return map2CreateOrderResponse(result.Result.(map[string]interface{})), nil } func (d *DadaAPI) AddOrder(orderInfo *OperateOrderRequiredParams, addParams map[string]interface{}) (retVal *CreateOrderResponse, err error) { return d.operateOrder("api/order/addOrder", orderInfo, addParams) } func (d *DadaAPI) ReaddOrder(orderInfo *OperateOrderRequiredParams, addParams map[string]interface{}) (retVal *CreateOrderResponse, err error) { return d.operateOrder("api/order/reAddOrder", orderInfo, addParams) } func (d *DadaAPI) QueryDeliverFee(orderInfo *OperateOrderRequiredParams, addParams map[string]interface{}) (retVal *CreateOrderResponse, err error) { return d.operateOrder("api/order/queryDeliverFee", orderInfo, addParams) } func (d *DadaAPI) AddOrderAfterQuery(orderInfo *OperateOrderRequiredParams, addParams map[string]interface{}) (retVal *CreateOrderResponse, err error) { return d.operateOrder("api/order/addAfterQuery", orderInfo, addParams) } func (d *DadaAPI) CancelOrder(orderId string, cancelOrderReasonId int, cancelOrderReason string) (retVal *CancelOrderResponse, err error) { mapData := utils.Params2Map("order_id", orderId, "cancel_reason_id", cancelOrderReasonId, "cancel_reason", cancelOrderReason) result, err := d.AccessDada("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 }