1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
package jingdong
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/util/gconv"
)
type refundJD struct {
}
var Refund = refundJD{}
type RefundCancelRes struct {
CommonRes
Result bool `json:"result"`
}
type ApplyReq struct {
JdOrderId uint `json:"jdOrderId"` //京东订单号
CustomerExpect uint `json:"customerExpect"` //售后类型:退货(10)、换货(20)、维修(30)
QuestionDesc string `json:"questionDesc"` //产品问题描述,最多1000字符
IsNeedDetectionReport bool `json:"isNeedDetectionReport"` //是否需要检测报告
IsHasPackage bool `json:"isHasPackage"` //是否有包装
QuestionPic string `json:"questionPic"` //问题描述图片.最多2000字符
PackageDesc int `json:"packageDesc"` //包装描述:0 无包装 10 包装完整20 包装破损
UserInfoDto *AfterSaleCustomerDto `json:"asCustomerDto"` //客户信息实体
PickDto *AfterSalePickwareDto `json:"asPickwareDto"` //取件信息实体
ReturnDto *AfterSaleReturnwareDto `json:"asReturnwareDto"` //返件信息实体
DetailDto *AfterSaleDetailDto `json:"asDetailDto"` //申请单明细
}
type AfterSaleCustomerDto struct {
Name string `json:"customerContactName"` //联系人,最多50字符,
Tel string `json:"customerTel"` //联系电话,最多50字符
Phone string `json:"customerMobilePhone"` //手机号,最多50字符
}
type AfterSalePickwareDto struct {
Type int `json:"pickwareType"` //取件方式:4上门取件; 7 客户送货;40客户发货
Province int `json:"pickwareProvince"` //取件省,必填
City int `json:"pickwareCity"` //取件市,必填
County int `json:"pickwareCounty"` //取件县,必填
Village int `json:"pickwareVillage"` //取件乡镇
Address string `json:"pickwareAddress"` //取件街道地址,取件方式为4(上门取件)时必填,最多500字符
}
type AfterSaleReturnwareDto struct {
Type int `json:"returnwareType"` //返件方式:自营配送(10),第三方配送(20);
Province int `json:"returnwareProvince"` //返件省
City int `json:"returnwareCity"` //返件市
County int `json:"returnwareCounty"` //返件县
Village int `json:"returnwareVillage"` //返件乡镇
Address string `json:"returnwareAddress"` //返件街道地址,最多500字符
}
type AfterSaleDetailDto struct {
Id int `json:"skuId"` //商品编号
Num uint `json:"skuNum"` //商品申请数量
}
type GetServiceListReq struct {
JdOrderID string `json:"jdOrderId"` //京东订单号
PageIndex int `json:"pageIndex"` //页码,1代表第一页
PageSize int `json:"pageSize"` //每页记录数, 大小取值范围[1,100]
}
type RefundListRes struct {
CommonRes
Result struct {
TotalNum int `json:"totalNum"` //总记录数
PageSize int `json:"pageSize"` //每页记录数
PageNum int `json:"pageNum"` //总页数
PageIndex int `json:"pageIndex"` //当前页数
ServiceInfoList []struct {
AfsServiceId int `json:"afsServiceId"` //服务单号
CustomerExpect int `json:"customerExpect"`
CustomerExpectName string `json:"customerExpectName"`
AfsApplyTime string `json:"afsApplyTime"`
OrderId int64 `json:"orderId"`
WareId int `json:"wareId"` //商品编号
WareName string `json:"wareName"`
AfsServiceStep int `json:"afsServiceStep"`
AfsServiceStepName string `json:"afsServiceStepName"`
Cancel int `json:"cancel"` //是否可取消: 0代表否,1代表是
} `json:"serviceInfoList"`
} `json:"result"`
}
type RefundDetailRes struct {
CommonRes
Result struct {
AfsServiceId int `json:"afsServiceId"` //京东售后服务单号
CustomerExpect int `json:"customerExpect"` //服务类型码:退货(10)、换货(20)、维修(20)
AfsApplyTime string `json:"afsApplyTime"` //服务单申请时间:格式为yyyy-MM-dd HH:mm:ss
OrderId int `json:"orderId"` //京东订单号
IsHasInvoice int `json:"isHasInvoice"`
IsNeedDetectionReport int `json:"isNeedDetectionReport"`
IsHasPackage int `json:"isHasPackage"`
QuestionPic string `json:"questionPic"`
QuestionDesc string `json:"questionDesc"`
ApproveNotes string `json:"approveNotes"` //审核意见
ApprovedResult int `json:"approvedResult"` //审核结果:直赔积分 (11),直赔余额 (12),直赔优惠卷 (13),直赔京豆 (14),直赔商品 (21),上门换新 (22),自营取件 (31),客户送货(32),客户发货 (33),闪电退款 (34),虚拟退款 (35),大家电检测 (80),大家电安装 (81),大家电移机 (82),大家电维修 (83),大家电其它(84);
ApprovedResultName string `json:"approvedResultName"`
AfsServiceStep int `json:"afsServiceStep"` //服务单环节:申请阶段(10),审核不通过(20),客服审核(21),商家审核(22),京东收货(31),商家收货(32), 京东处理(33),商家处理(34), 用户确认(40),完成(50), 取消(60);
AfsServiceStepName string `json:"afsServiceStepName"`
ProcessResult int `json:"processResult"` //处理结果:返修换新(23),退货(40), 换良(50),原返(60),病单(71),出检(72),维修(73),强制关单 (80),线下换新(90)
ProcessResultName interface{} `json:"processResultName"`
ServiceAftersalesAddressInfoDTO struct {
Address string `json:"address"` //售后地址
Tel string `json:"tel"` //售后电话
LinkMan string `json:"linkMan"` //售后联系人
PostCode string `json:"postCode"` //售后邮编
} `json:"serviceAftersalesAddressInfoDto"` //售后地址信息
ServiceFinanceDetailInfoDTOs []struct {
ServiceFinanceDetailInfoDTO
RefundPrice float64 `json:"refundPrice"` //退款金额
} `json:"serviceFinanceDetailInfoDTOs"` //退款明细
ServiceTrackInfoDTOs []struct {
AfsServiceId int `json:"afsServiceId"`
Title string `json:"title"`
Context string `json:"context"`
CreateDate string `json:"createDate"`
CreateName string `json:"createName"`
CreatePin string `json:"createPin"`
} `json:"serviceTrackInfoDTOs"`
ServiceDetailInfoDTOs []struct {
WareId int64 `json:"wareId"`
WareName string `json:"wareName"`
WareBrand string `json:"wareBrand"`
AfsDetailType int `json:"afsDetailType"`
} `json:"serviceDetailInfoDTOs"`
} `json:"result"`
}
type ServiceFinanceDetailInfoDTO struct {
RefundWay int `json:"refundWay"` //退款方式
RefundWayName string `json:"refundWayName"` //退款方式名称
Status int `json:"status"` //状态
StatusName string `json:"statusName"` //状态名称
WareName string `json:"wareName"` //商品名称
WareId int `json:"wareId"` //商品编号
}
type RefundCommonReq struct {
OrderID string `json:"jdOrderId"` //订单编号
SkuID string `json:"skuId"` //商品编号
}
type RefundIsSupportRes struct {
CommonRes
Result int `json:"result"` //可申请时返回可申请数量
}
type RefundSupportTypeRes struct {
CommonRes
Result []*CodeItem `json:"result"` //服务类型码:退货(10)、换货(20)、维修(30) 服务类型名称:退货、换货、维修
}
type CodeItem struct {
Code string `json:"code"` //编码
Name string `json:"name"` //名称
}
type RefundReturnTypeRes struct {
CommonRes
Result []*CodeItem `json:"result"` //服务类型码:上门取件(4)、客户发货(40)、客户送货(7) 服务类型名称:上门取件、客户发货、客户送货
}
type RefundSendReq struct {
AfsServiceId string `json:"afsServiceId"`
DeliverDate string `json:"deliverDate"`
ExpressCode string `json:"expressCode"`
ExpressCompany string `json:"expressCompany"`
FreightMoney int `json:"freightMoney"`
}
//Send 根据填写单号
func (*refundJD) Send(ctx context.Context, req *RefundSendReq) (res *CommonRes, err error) {
method := "afterSale/updateSendSku"
param := g.Map{
"param": gjson.New(req).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//Cancel 取消售后
func (*refundJD) Cancel(ctx context.Context, id interface{}) (res *RefundCancelRes, err error) {
method := "afterSale/auditCancel"
req := g.Map{
"serviceIdList": gconv.Ints(id),
"approveNotes": "取消售后",
}
param := g.Map{
"param": gjson.New(req).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
// Apply 申请售后服务(退货、换货、维修)
func (*refundJD) Apply(ctx context.Context, req *ApplyReq) (res *CommonRes, err error) {
method := "afterSale/createAfsApply"
param := g.Map{
"param": gjson.New(req).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//List 查询服务单根据客户账号和订单号分页查询服务单概要信息
func (*refundJD) List(ctx context.Context, OrderSn string) (res *RefundListRes, err error) {
method := "afterSale/getServiceListPage"
param := g.Map{
"param": gjson.New(&GetServiceListReq{
JdOrderID: OrderSn,
PageIndex: 1,
PageSize: 100,
}).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//Detail 根据服务单号查询服务单明细信息
func (*refundJD) Detail(ctx context.Context, req string) (res *RefundDetailRes, err error) {
method := "afterSale/getServiceDetailInfo"
var reqJson = gjson.New("")
_ = reqJson.Set("afsServiceId", req)
_ = reqJson.Set("appendInfoSteps", []int{1, 4, 5}) //1、代表增加获取售后地址信息; 2、代表增加获取客户发货信息; 3、代表增加获取退款明细; 4、代表增加获取跟踪信息; 5、代表增加获取允许的操作信息
param := g.Map{
"param": reqJson.MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
// IsSupport 查询订单商品是否允许售后
func (*refundJD) IsSupport(ctx context.Context, req *RefundCommonReq) (res *RefundIsSupportRes, err error) {
method := "afterSale/getAvailableNumberComp"
param := g.Map{
"param": gjson.New(req).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
// SupportType 查询订单商品售后类型
func (*refundJD) SupportType(ctx context.Context, req *RefundCommonReq) (res *RefundSupportTypeRes, err error) {
method := "afterSale/getCustomerExpectComp"
param := g.Map{
"param": gjson.New(req).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
// ReturnType 查询支持的商品返回京东方式
func (*refundJD) ReturnType(ctx context.Context, req *RefundCommonReq) (res *RefundReturnTypeRes, err error) {
method := "afterSale/getWareReturnJdComp"
param := g.Map{
"param": gjson.New(req).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}