- jd afs api
This commit is contained in:
@@ -71,6 +71,84 @@ const (
|
|||||||
QueryOrderRetryCount = 1 // 因为京东到家当前不存在的订单也返回-4,暂时不重试
|
QueryOrderRetryCount = 1 // 因为京东到家当前不存在的订单也返回-4,暂时不重试
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
AfsApproveTypeRefund = 1 // 退款
|
||||||
|
AfsApproveTypeReturnGoods = 2 // 退货
|
||||||
|
AfsApproveTypeRefused = 3 // 驳回
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
AfsServiceStateWaiting4Audit = 10 // 待审核
|
||||||
|
AfsServiceStateWaiting4GetGoods = 20 // 待取件
|
||||||
|
AfsServiceStateRefundProcessing = 30 // 退款处理中
|
||||||
|
AfsServiceStateWaiting4MerchantReceiveGoods = 31 // 待商家收货审核
|
||||||
|
AfsServiceStateRefundSuccess = 32 // 退款成功
|
||||||
|
AfsServiceStateRefundFailed = 33 // 退款失败
|
||||||
|
AfsServiceStateAuditRefused = 40 // 审核不通过-驳回
|
||||||
|
AfsServiceStateUserCanceled = 50 // 客户取消
|
||||||
|
AfsServiceStateMerchantFailedReceiveGoods = 60 // 商家收货审核不通过
|
||||||
|
AfsServiceStateSolved = 70 // 已解决
|
||||||
|
AfsServiceStateDirectCompensate = 91 // 直赔
|
||||||
|
AfsServiceStateDirectCompensateSuccess = 92 // 直赔成功
|
||||||
|
AfsServiceStateDirectCompensateFailed = 93 // 直赔失败
|
||||||
|
AfsServiceStateWaiting4Compensate = 90 // 待赔付
|
||||||
|
AfsServiceStateWaiting4ReturnGoods = 110 // 待退货
|
||||||
|
AfsServiceStateGetGoodsSuccess = 111 // 取货成功
|
||||||
|
AfsServiceStateGetGoodsWaiting4Refund = 112 // 退货成功-待退款
|
||||||
|
AfsServiceStateReturnGoodsFailed = 113 // 退货失败
|
||||||
|
AfsServiceStateReturnGoodsSuccess = 114 // 退货成功
|
||||||
|
)
|
||||||
|
|
||||||
|
type AfsSkuDiscount struct {
|
||||||
|
DetailDiscountType int `json:"detailDiscountType"`
|
||||||
|
DiscountType int `json:"discountType"`
|
||||||
|
PlatPayMoney int64 `json:"platPayMoney"`
|
||||||
|
VenderPayMoney int64 `json:"venderPayMoney"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AfsServiceDetail struct {
|
||||||
|
SkuIDIsv string `json:"skuIdIsv"`
|
||||||
|
WareName string `json:"wareName"`
|
||||||
|
WareNum int `json:"wareNum"`
|
||||||
|
AfsSkuDiscountList []*AfsSkuDiscount `json:"afsSkuDiscountList"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AfsServiceResponse struct {
|
||||||
|
AfsServiceID int64 `json:"afsServiceId"`
|
||||||
|
AfsServiceOrder string `json:"afsServiceOrder"`
|
||||||
|
AfsServiceState int `json:"afsServiceState"`
|
||||||
|
CreateTime *utils.JavaDate `json:"createTime"`
|
||||||
|
CustomerMobilePhone string `json:"customerMobilePhone"`
|
||||||
|
CustomerName string `json:"customerName"`
|
||||||
|
OrderID string `json:"orderId"`
|
||||||
|
OrderSource int `json:"orderSource"`
|
||||||
|
OrderStatus int `json:"orderStatus"`
|
||||||
|
OrderType int `json:"orderType"`
|
||||||
|
PickwareAddress string `json:"pickwareAddress"`
|
||||||
|
|
||||||
|
QuestionDesc string `json:"questionDesc"`
|
||||||
|
QuestionPic string `json:"questionPic"`
|
||||||
|
QuestionTypeCid int `json:"questionTypeCid"`
|
||||||
|
StationID string `json:"stationId"`
|
||||||
|
StationName string `json:"stationName"`
|
||||||
|
StationNumOutSystem string `json:"stationNumOutSystem"`
|
||||||
|
VenderID string `json:"venderId"`
|
||||||
|
|
||||||
|
AfsDetailList []*AfsServiceDetail `json:"afsDetailList"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type OAOSAdjustDTO struct {
|
||||||
|
SkuID int64 `json:"skuId,omitempty"`
|
||||||
|
OutSkuID string `json:"outSkuId,omitempty"`
|
||||||
|
SkuCount int `json:"skuCount"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type VenderAfsSkuDTO struct {
|
||||||
|
SkuID int64 `json:"skuId"`
|
||||||
|
SkuCount int `json:"skuCount"`
|
||||||
|
PromotionType int `json:"promotionType"`
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrCanNotFindOrder = errors.New("can not find order")
|
ErrCanNotFindOrder = errors.New("can not find order")
|
||||||
)
|
)
|
||||||
@@ -79,12 +157,6 @@ var (
|
|||||||
orderOperationResultParser = genNoPageResultParser("code", "msg", "detail", "0")
|
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
|
// 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) {
|
func (a *API) OrderQuery(jdParams map[string]interface{}) (retVal []interface{}, totalCount int, err error) {
|
||||||
@@ -239,6 +311,14 @@ func (a *API) GetAfsService(orderId string) (map[string]interface{}, error) {
|
|||||||
return result.(map[string]interface{}), nil
|
return result.(map[string]interface{}), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *API) GetAfsService2(afsOrderID string) (afsOrderInfo *AfsServiceResponse, err error) {
|
||||||
|
result, err := a.GetAfsService(afsOrderID)
|
||||||
|
if err == nil {
|
||||||
|
err = utils.Map2StructByJson(result, &afsOrderInfo, false)
|
||||||
|
}
|
||||||
|
return afsOrderInfo, nil
|
||||||
|
}
|
||||||
|
|
||||||
// 商家审核用户取消申请接口
|
// 商家审核用户取消申请接口
|
||||||
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=169&apiid=906b430307764a3ca3698c05c72f33d0
|
// 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) {
|
func (a *API) OrderCancelOperate(orderId string, isAgreed bool, operator, remark string) (err error) {
|
||||||
@@ -252,6 +332,8 @@ func (a *API) OrderCancelOperate(orderId string, isAgreed bool, operator, remark
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 订单调整接口
|
||||||
|
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=169&apiid=a7378109fd7243eea9efbb6231a7401c
|
||||||
func (a *API) AdjustOrder(orderId, operPin, remark string, oaosAdjustDTOList []*OAOSAdjustDTO) (err error) {
|
func (a *API) AdjustOrder(orderId, operPin, remark string, oaosAdjustDTOList []*OAOSAdjustDTO) (err error) {
|
||||||
jdParams := map[string]interface{}{
|
jdParams := map[string]interface{}{
|
||||||
"orderId": orderId,
|
"orderId": orderId,
|
||||||
@@ -297,3 +379,59 @@ func (a *API) ConfirmReceiveGoods(orderId string) (err error) {
|
|||||||
_, err = a.AccessAPINoPage("order/confirmReceiveGoods", jdParams, nil, nil, nullResultParser)
|
_, err = a.AccessAPINoPage("order/confirmReceiveGoods", jdParams, nil, nil, nullResultParser)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 申请售后单审核接口
|
||||||
|
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=170&apiid=1690f6efc0144d59823b236e0d8506a1
|
||||||
|
func (a *API) AfsOpenApprove(afsOrderID string, afsApproveType int, rejectReason string, optPin string) (err error) {
|
||||||
|
jdParams := map[string]interface{}{
|
||||||
|
"serviceOrder": afsOrderID,
|
||||||
|
"approveType": afsApproveType,
|
||||||
|
"optPin": optPin,
|
||||||
|
}
|
||||||
|
if rejectReason != "" {
|
||||||
|
jdParams["rejectReason"] = rejectReason
|
||||||
|
}
|
||||||
|
_, err = a.AccessAPINoPage("afs/afsOpenApprove", jdParams, nil, nil, nullResultParser)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 售后单确认收货接口
|
||||||
|
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=170&apiid=4826086e81934405980ae26f80d956e0
|
||||||
|
func (a *API) ConfirmReceipt(afsOrderID, pin string) (err error) {
|
||||||
|
jdParams := map[string]interface{}{
|
||||||
|
"serviceOrder": afsOrderID,
|
||||||
|
"pin": pin,
|
||||||
|
}
|
||||||
|
_, err = a.AccessAPINoPage("afs/confirmReceipt", jdParams, nil, nil, nullResultParser)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 商家自主发起售后接口
|
||||||
|
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=170&apiid=b8d1ddacb03846a8a2e78c79723c752f
|
||||||
|
func (a *API) AfsSubmit(OrderID, pin, questionTypeCode, questionDesc, questionPic, customerName, customerMobilePhone, address string, skuList []*VenderAfsSkuDTO) (afsOrderID string, err error) {
|
||||||
|
jdParams := map[string]interface{}{
|
||||||
|
"orderId": OrderID,
|
||||||
|
"pin": pin,
|
||||||
|
"questionTypeCode": questionTypeCode,
|
||||||
|
}
|
||||||
|
if questionDesc != "" {
|
||||||
|
jdParams["questionDesc"] = questionDesc
|
||||||
|
}
|
||||||
|
if questionPic != "" {
|
||||||
|
jdParams["questionPic"] = questionPic
|
||||||
|
}
|
||||||
|
if customerName != "" {
|
||||||
|
jdParams["customerName"] = customerName
|
||||||
|
}
|
||||||
|
if customerMobilePhone != "" {
|
||||||
|
jdParams["customerMobilePhone"] = customerMobilePhone
|
||||||
|
}
|
||||||
|
if address != "" {
|
||||||
|
jdParams["address"] = address
|
||||||
|
}
|
||||||
|
result, err := a.AccessAPINoPage("afs/submit", jdParams, nil, nil, genNoPageResultParser("code", "msg", "result", "0"))
|
||||||
|
if err == nil {
|
||||||
|
afsOrderID = utils.Interface2String(result.(map[string]interface{})["serviceOrder"])
|
||||||
|
}
|
||||||
|
return afsOrderID, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -193,3 +193,11 @@ func TestDeliveryEndOrder(t *testing.T) {
|
|||||||
}
|
}
|
||||||
sugarLogger.Debug(result)
|
sugarLogger.Debug(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetAfsService(t *testing.T) {
|
||||||
|
result, err := api.GetAfsService2("22520782")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err.Error())
|
||||||
|
}
|
||||||
|
sugarLogger.Debug(utils.Format4Output(result, false))
|
||||||
|
}
|
||||||
|
|||||||
44
utils/java_date.go
Normal file
44
utils/java_date.go
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type JavaDate struct {
|
||||||
|
Day time.Weekday `json:"day"` // day of the week
|
||||||
|
|
||||||
|
Hours int `json:"hours"`
|
||||||
|
Minutes int `json:"minutes"`
|
||||||
|
Seconds int `json:"seconds"`
|
||||||
|
Time int64 `json:"time"`
|
||||||
|
TimezoneOffset int `json:"timezoneOffset"`
|
||||||
|
|
||||||
|
Date int `json:"date"`
|
||||||
|
Month time.Month `json:"month"`
|
||||||
|
Year int `json:"year"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewJavaDate() *JavaDate {
|
||||||
|
return NewJavaDateFromTime(time.Now())
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewJavaDateFromTime(tm time.Time) (jd *JavaDate) {
|
||||||
|
jd = &JavaDate{
|
||||||
|
Time: tm.UnixNano() / 1000000,
|
||||||
|
Day: tm.Weekday(),
|
||||||
|
Hours: tm.Hour(),
|
||||||
|
Minutes: tm.Minute(),
|
||||||
|
Seconds: tm.Second(),
|
||||||
|
}
|
||||||
|
jd.Year, jd.Month, jd.Date = tm.Date()
|
||||||
|
jd.Year -= 1900
|
||||||
|
jd.Month--
|
||||||
|
_, jd.TimezoneOffset = tm.Zone()
|
||||||
|
jd.TimezoneOffset /= 60
|
||||||
|
jd.TimezoneOffset = -jd.TimezoneOffset
|
||||||
|
return jd
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *JavaDate) GoTime() time.Time {
|
||||||
|
return Timestamp2Time(j.Time / 1000)
|
||||||
|
}
|
||||||
38
utils/java_date_test.go
Normal file
38
utils/java_date_test.go
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestJavaDate(t *testing.T) {
|
||||||
|
var (
|
||||||
|
date interface{}
|
||||||
|
jd *JavaDate
|
||||||
|
)
|
||||||
|
err := UnmarshalUseNumber([]byte(`
|
||||||
|
{
|
||||||
|
"date":6,
|
||||||
|
"day":1,
|
||||||
|
"hours":9,
|
||||||
|
"minutes":45,
|
||||||
|
"month":4,
|
||||||
|
"seconds":46,
|
||||||
|
"time":1557107146000,
|
||||||
|
"timezoneOffset":-480,
|
||||||
|
"year":119
|
||||||
|
}
|
||||||
|
`), &date)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
err = Map2StructByJson(date, &jd, false)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(jd.GoTime())
|
||||||
|
t.Log(Format4Output(jd, false))
|
||||||
|
|
||||||
|
jd = NewJavaDateFromTime(jd.GoTime())
|
||||||
|
t.Log(jd.GoTime())
|
||||||
|
t.Log(Format4Output(jd, false))
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user