265 lines
9.1 KiB
Go
265 lines
9.1 KiB
Go
package jdapi
|
||
|
||
import (
|
||
"errors"
|
||
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
)
|
||
|
||
const (
|
||
OrderStatusAddComment = "12001"
|
||
OrderStatusModifyComment = "12006"
|
||
OrderStatusTipChanged = "12008"
|
||
|
||
OrderStatusPurchased = "41000" // 也即待处理,JD的消息很怪,新订单消息发过来是32000,但如果不是自动接单的,去查却是41000?,接单后才变为32000
|
||
OrderStatusNew = "32000"
|
||
OrderStatusAdjust = "33080"
|
||
OrderStatusWaitOutStore = "32001"
|
||
OrderStatusFinishedPickup = "2"
|
||
OrderStatusDelivering = "33040"
|
||
|
||
OrderStatusDelivered = "33060"
|
||
OrderStatusFinished = "90000"
|
||
OrderStatusCanceled = "20020"
|
||
|
||
OrderStatusUserApplyCancel = "20030" // 这个其实不是一个状态,是一个动作
|
||
OrderStatusLocked = "20010"
|
||
OrderStatusUnlocked = "20050"
|
||
OrderStatusInfoChanged = "1"
|
||
|
||
OrderStatusPayFinishedSettle = "330901" // 订单支付完成应结
|
||
OrderStatusAdjustSettle = "330902" // 订单调整后应结
|
||
OrderStatusSwitch2SelfSettle = "330903" // 订单众包配送转自送后应结
|
||
)
|
||
|
||
const (
|
||
DeliveryStatusWait4Grap = "10"
|
||
DeliveryStatusAccepted = "20"
|
||
DeliveryStatusCourierCanceled = "21"
|
||
DeliveryStatusCourierArrived = "23"
|
||
DeliveryStatusFailedGetGoods = "25"
|
||
DeliveryStatusFailedGetGoodsRejected = "26"
|
||
DeliveryStatusFailedGetGoodsWaiting = "27"
|
||
DeliveryStatusGotGoods = "30"
|
||
DeliveryStatusFailedDelivery = "35"
|
||
DeliveryStatusFinished = "40"
|
||
)
|
||
|
||
const (
|
||
PromotionTypeNormal = 1
|
||
PromotionTypeSeckill = 2
|
||
PromotionTypeDirectDown = 3
|
||
PromotionTypeLimitedTime = 4
|
||
PromotionTypeAddMoneyBuy = 1202
|
||
PromotionTypeOverflowGiveGift = 1203
|
||
PromotionTypeBuyGiveGift = 6
|
||
)
|
||
|
||
const (
|
||
FreightDiscountTypeByShop = 8 // 8:商家满免运费
|
||
FreightDiscountTypeByVip = 7 // 7:VIP免运费
|
||
FreightDiscountTypeByActivity = 12 // 12:首单地推满免运费
|
||
FreightDiscountTypeByCoupons = 15 // 15:运费券
|
||
SelfDeliveryCarrierNo = "2938" // 京东配送方式=商家自送
|
||
)
|
||
|
||
const (
|
||
UserApplyCancelWaitMinute = 15 // 用户申请取消订单后待处理的最大等待时间(分钟),超时自动同意
|
||
)
|
||
|
||
const (
|
||
QueryOrderRetryCount = 1 // 因为京东到家当前不存在的订单也返回-4,暂时不重试
|
||
)
|
||
|
||
var (
|
||
ErrCanNotFindOrder = errors.New("can not find order")
|
||
)
|
||
|
||
var (
|
||
orderOperationResultParser = genNoPageResultParser("code", "msg", "detail", "0")
|
||
)
|
||
|
||
type OAOSAdjustDTO struct {
|
||
SkuID int64 `json:"skuId,omitempty"`
|
||
OutSkuID string `json:"outSkuId,omitempty"`
|
||
SkuCount int `json:"skuCount"`
|
||
}
|
||
|
||
// 订单列表查询接口
|
||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=ba3027848c3c4fda9674966e2a466482
|
||
func (a *API) OrderQuery(jdParams map[string]interface{}) (retVal []interface{}, totalCount int, err error) {
|
||
// 最多试三次
|
||
for i := 0; i < QueryOrderRetryCount; i++ {
|
||
retVal, totalCount, err = a.AccessAPIHavePage("order/es/query", jdParams, nil, nil, nil)
|
||
if err != nil {
|
||
if err2, ok := err.(*utils.ErrorWithCode); ok {
|
||
if err2.IntCode() == -4 {
|
||
continue
|
||
}
|
||
}
|
||
}
|
||
break
|
||
}
|
||
return retVal, totalCount, err
|
||
}
|
||
|
||
// orderFreightMoney 基础运费
|
||
// tips 商家承担小费
|
||
// merchantPaymentDistanceFreightMoney 取件服务费(开票)(正向单展示远距离运费;售后单则展示达达售后运费)
|
||
// orderBaseFreightMoney ?
|
||
func (a *API) QuerySingleOrder(orderId string) (map[string]interface{}, error) {
|
||
jdParams := make(map[string]interface{})
|
||
jdParams["orderId"] = orderId
|
||
result, _, err := a.OrderQuery(jdParams)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
if len(result) == 0 {
|
||
return nil, ErrCanNotFindOrder
|
||
}
|
||
return result[0].(map[string]interface{}), nil
|
||
}
|
||
|
||
func (a *API) LegacyQuerySingleOrder(orderId string) (map[string]interface{}, error) {
|
||
jdParams := make(map[string]interface{})
|
||
jdParams["orderId"] = orderId
|
||
|
||
result, err := a.AccessAPI("order/es/query", jdParams)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
dataStr, _ := result["data"].(string)
|
||
var data map[string]interface{}
|
||
utils.UnmarshalUseNumber([]byte(dataStr), &data)
|
||
result["data"] = data
|
||
|
||
var dataResult map[string]interface{}
|
||
utils.UnmarshalUseNumber([]byte(data["result"].(string)), &dataResult)
|
||
data["result"] = dataResult
|
||
|
||
return result, nil
|
||
}
|
||
|
||
// 商家确认接单接口
|
||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=c1a15129d1374e9da7fa35487f878604
|
||
func (a *API) OrderAcceptOperate(orderId string, isAgreed bool, userName string) error {
|
||
jdParams := map[string]interface{}{
|
||
"orderId": orderId,
|
||
"isAgreed": utils.Bool2String(isAgreed),
|
||
"operator": utils.GetAPIOperator(userName),
|
||
}
|
||
_, err := a.AccessAPINoPage("ocs/orderAcceptOperate", jdParams, nil, nil, orderOperationResultParser)
|
||
return err
|
||
}
|
||
|
||
// 拣货完成且众包配送接口
|
||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=ed93745b86c6487eaaea5f55a84785ac
|
||
func (a *API) OrderJDZBDelivery(orderId string, userName string) (detail string, err error) {
|
||
jdParams := map[string]interface{}{
|
||
"orderId": orderId,
|
||
"operator": utils.GetAPIOperator(userName),
|
||
}
|
||
result, err := a.AccessAPINoPage("bm/open/api/order/OrderJDZBDelivery", jdParams, nil, nil, orderOperationResultParser)
|
||
if err == nil {
|
||
return utils.Interface2String(result), nil
|
||
}
|
||
return "", err
|
||
}
|
||
|
||
// 订单达达配送转商家自送接口
|
||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=e7b4950164754eecac7ea87278c2b071
|
||
func (a *API) ModifySellerDelivery(orderId string, userName string) (detail string, err error) {
|
||
jdParams := map[string]interface{}{
|
||
"orderId": orderId,
|
||
"updatePin": utils.GetAPIOperator(userName),
|
||
}
|
||
result, err := a.AccessAPINoPage("order/modifySellerDelivery", jdParams, nil, nil, orderOperationResultParser)
|
||
if err == nil {
|
||
return utils.Interface2String(result), nil
|
||
}
|
||
return "", err
|
||
}
|
||
|
||
// 拣货完成且商家自送接口(这个接口是商家本身配置为自送模式下才能调用的接口,如果启用了达达配送,是不能调用的)
|
||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=0e08e71a45dc48b6a337e06a852ac33a
|
||
func (a *API) OrderSerllerDelivery(orderId string, userName string) (detail string, err error) {
|
||
jdParams := map[string]interface{}{
|
||
"orderId": orderId,
|
||
"operator": utils.GetAPIOperator(userName),
|
||
}
|
||
result, err := a.AccessAPINoPage("bm/open/api/order/OrderSerllerDelivery", jdParams, nil, nil, orderOperationResultParser)
|
||
if err == nil {
|
||
return utils.Interface2String(result), nil
|
||
}
|
||
return "", err
|
||
}
|
||
|
||
// 商家自送,订单妥投接口
|
||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=ecc80f06d35141979f4841f345001f74
|
||
func (a *API) DeliveryEndOrder(orderId string, userName string) (result map[string]interface{}, err error) {
|
||
jdParams := map[string]interface{}{
|
||
"orderId": orderId,
|
||
"operPin": utils.GetAPIOperator(userName),
|
||
"operTime": utils.GetCurTimeStr(),
|
||
}
|
||
tmpResult, err := a.AccessAPINoPage("ocs/deliveryEndOrder", jdParams, nil, nil, nil)
|
||
if err == nil {
|
||
return tmpResult.(map[string]interface{}), nil
|
||
}
|
||
return nil, err
|
||
}
|
||
|
||
// 常规订单应结金额接口
|
||
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=169&apiid=17f0b596df554fe2b66fa7742a025d92
|
||
func (a *API) OrderShoudSettlementService(orderId string) (map[string]interface{}, error) {
|
||
jdParams := map[string]interface{}{
|
||
"orderId": orderId,
|
||
}
|
||
result, err := a.AccessAPINoPage("bill/orderShoudSettlementService", jdParams, nil, nil, genNoPageResultParser("code", "detail", "result", "0"))
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
if result == nil {
|
||
return nil, utils.NewErrorIntCode("查询订单信息异常", -4)
|
||
}
|
||
return result.(map[string]interface{}), nil
|
||
}
|
||
|
||
// 查询售后单详情接口
|
||
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=170&apiid=6805ed690b7b4776b058067312c57d98
|
||
func (a *API) GetAfsService(orderId string) (map[string]interface{}, error) {
|
||
jdParams := map[string]interface{}{
|
||
"afsServiceOrder": orderId,
|
||
}
|
||
result, err := a.AccessAPINoPage("afs/getAfsService", jdParams, nil, nil, genNoPageResultParser("code", "msg", "result", "0"))
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return result.(map[string]interface{}), nil
|
||
}
|
||
|
||
// 商家审核用户取消申请接口
|
||
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=169&apiid=906b430307764a3ca3698c05c72f33d0
|
||
func (a *API) OrderCancelOperate(orderId string, isAgreed bool, operator, remark string) (err error) {
|
||
jdParams := map[string]interface{}{
|
||
"orderId": orderId,
|
||
"isAgreed": isAgreed,
|
||
"operator": operator,
|
||
"remark": remark,
|
||
}
|
||
_, err = a.AccessAPINoPage("ocs/orderCancelOperate", jdParams, nil, nil, nullResultParser)
|
||
return err
|
||
}
|
||
|
||
func (a *API) AdjustOrder(orderId, operPin, remark string, oaosAdjustDTOList []*OAOSAdjustDTO) (err error) {
|
||
jdParams := map[string]interface{}{
|
||
"orderId": orderId,
|
||
"operPin": operPin,
|
||
"remark": remark,
|
||
"oaosAdjustDTOList": oaosAdjustDTOList,
|
||
}
|
||
_, err = a.AccessAPINoPage("orderAdjust/adjustOrder", jdParams, nil, nil, nullResultParser)
|
||
return err
|
||
}
|