Blame view

项目文档相关/docs/报销退回后重新走流程-接口调用示例.md 11.2 KB
ddcc459b   “wangming”   修改大项目部老师归属设置表:将月份...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  # 报销退回后修改并重新走流程 - 接口调用示例
  
  ## 前置条件
  
  - 已创建报销申请并提交审批
  - 申请已被退回(状态为"已退回")
  - 申请ID:`767672243453953285`(示例)
  - Token:`Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...`(需要替换为实际token)
  
  ---
  
  ## 完整流程
  
  ### 步骤1:退回申请(如果还未退回)
  
  **接口地址:** `POST /api/Extend/LqReimbursementApplication/{id}/Actions/Approve`
  
  **请求参数:**
  - `result`: 审批结果,值为 `退回`(需要URL编码为 `%E9%80%80%E5%9B%9E`
  - `opinion`: 退回原因
  
  **cURL 示例:**
  ```bash
8daf47d0   “wangming”   修改访问地址
24
  curl -X POST "http://localhost:2015/api/Extend/LqReimbursementApplication/767672243453953285/Actions/Approve?result=%E9%80%80%E5%9B%9E&opinion=%E9%9C%80%E8%A6%81%E4%BF%AE%E6%94%B9%E9%87%91%E9%A2%9D" \
ddcc459b   “wangming”   修改大项目部老师归属设置表:将月份...
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOiJhZG1pbiIsIkFjY291bnQiOiJhZG1pbiIsIlVzZXJOYW1lIjoi566h55CG5ZGYIiwiQWRtaW5pc3RyYXRvciI6MSwiVGVuYW50SWQiOiJkYiIsIlRlbmFudERiTmFtZSI6ImxxZXJwX3Rlc3QiLCJpYXQiOjE3NjUxOTIzMDgsIm5iZiI6MTc2NTE5MjMwOCwiZXhwIjoxNzY1MjQ2MzA4LCJpc3MiOiJ5aW5tYWlzb2Z0IiwiYXVkIjoieWlubWFpc29mdCJ9.5YBxyOU5SmmIldlVp6V7uclsLrzLR8KIp51kraW7EGQ" \
    -H "Content-Type: application/json"
  ```
  
  **返回示例:**
  ```json
  {
    "code": 200,
    "msg": "操作成功",
    "data": null
  }
  ```
  
  ---
  
  ### 步骤2:查看退回后的状态
  
  **接口地址:** `GET /api/Extend/LqReimbursementApplication/{id}`
  
  **cURL 示例:**
  ```bash
8daf47d0   “wangming”   修改访问地址
46
  curl -X GET "http://localhost:2015/api/Extend/LqReimbursementApplication/767672243453953285" \
ddcc459b   “wangming”   修改大项目部老师归属设置表:将月份...
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
    -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOiJhZG1pbiIsIkFjY291bnQiOiJhZG1pbiIsIlVzZXJOYW1lIjoi566h55CG5ZGYIiwiQWRtaW5pc3RyYXRvciI6MSwiVGVuYW50SWQiOiJkYiIsIlRlbmFudERiTmFtZSI6ImxxZXJwX3Rlc3QiLCJpYXQiOjE3NjUxOTIzMDgsIm5iZiI6MTc2NTE5MjMwOCwiZXhwIjoxNzY1MjQ2MzA4LCJpc3MiOiJ5aW5tYWlzb2Z0IiwiYXVkIjoieWlubWFpc29mdCJ9.5YBxyOU5SmmIldlVp6V7uclsLrzLR8KIp51kraW7EGQ" \
    -H "Content-Type: application/json"
  ```
  
  **返回示例:**
  ```json
  {
    "code": 200,
    "msg": "操作成功",
    "data": {
      "form": {
        "id": "767672243453953285",
        "applicationUserId": "admin",
        "applicationUserName": "管理员",
        "applicationStoreId": "1649328471923847168",
        "amount": "200.00",
        ...
      },
      "approvalStatus": "已退回",
      "currentNodeOrder": 0,
      "returnedReason": "需要修改金额",
      "nodes": [
        {
          "nodeOrder": 1,
          "nodeName": "部门经理审批",
          "approvalRecords": [
            {
              "approverName": "管理员",
              "approvalResult": "退回",
              "approvalOpinion": "需要修改金额",
              "approvalTime": 1765192675000
            }
          ]
        }
      ]
    }
  }
  ```
  
  ---
  
  ### 步骤3:修改报销单
  
  **接口地址:** `PUT /api/Extend/LqReimbursementApplication/{id}`
  
  **请求体参数:**
  ```json
  {
    "id": "767672243453953285",
    "applicationUserId": "admin",
    "applicationUserName": "管理员",
    "applicationStoreId": "1649328471923847168",
    "applicationTime": 1765123200000,
    "amount": "300.00",
    "selectedPurchaseRecordIds": [],
    "purchaseRecordsId": null
  }
  ```
  
  **参数说明:**
  - `id`: 申请编号(必填)
  - `applicationUserId`: 申请人编号(可选,不修改可不传)
  - `applicationUserName`: 申请人姓名(可选,不修改可不传)
  - `applicationStoreId`: 申请门店ID(可选,不修改可不传)
  - `applicationTime`: 申请时间(时间戳,可选)
  - `amount`: 总金额(可选,要修改的字段)
  - `selectedPurchaseRecordIds`: 选中的购买记录ID列表(可选,数组)
  - `purchaseRecordsId`: 关联购买编号(可选,字符串,多个用逗号分隔)
  
  **cURL 示例:**
  ```bash
8daf47d0   “wangming”   修改访问地址
118
  curl -X PUT "http://localhost:2015/api/Extend/LqReimbursementApplication/767672243453953285" \
ddcc459b   “wangming”   修改大项目部老师归属设置表:将月份...
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
    -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOiJhZG1pbiIsIkFjY291bnQiOiJhZG1pbiIsIlVzZXJOYW1lIjoi566h55CG5ZGYIiwiQWRtaW5pc3RyYXRvciI6MSwiVGVuYW50SWQiOiJkYiIsIlRlbmFudERiTmFtZSI6ImxxZXJwX3Rlc3QiLCJpYXQiOjE3NjUxOTIzMDgsIm5iZiI6MTc2NTE5MjMwOCwiZXhwIjoxNzY1MjQ2MzA4LCJpc3MiOiJ5aW5tYWlzb2Z0IiwiYXVkIjoieWlubWFpc29mdCJ9.5YBxyOU5SmmIldlVp6V7uclsLrzLR8KIp51kraW7EGQ" \
    -H "Content-Type: application/json" \
    -d '{
      "id": "767672243453953285",
      "amount": "300.00"
    }'
  ```
  
  **返回示例:**
  ```json
  {
    "code": 200,
    "msg": "操作成功",
    "data": null
  }
  ```
  
  **注意:**
  - 只有"待审批"(CurrentNodeOrder=0)或"已退回"状态的申请才能修改
  - 如果状态为"审批中"、"已通过"、"未通过",修改会被拒绝
  
  ---
  
  ### 步骤4:重新提交审批
  
  **接口地址:** `POST /api/Extend/LqReimbursementApplication/{id}/Actions/SubmitApproval`
  
  **cURL 示例:**
  ```bash
8daf47d0   “wangming”   修改访问地址
148
  curl -X POST "http://localhost:2015/api/Extend/LqReimbursementApplication/767672243453953285/Actions/SubmitApproval" \
ddcc459b   “wangming”   修改大项目部老师归属设置表:将月份...
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
    -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOiJhZG1pbiIsIkFjY291bnQiOiJhZG1pbiIsIlVzZXJOYW1lIjoi566h55CG5ZGYIiwiQWRtaW5pc3RyYXRvciI6MSwiVGVuYW50SWQiOiJkYiIsIlRlbmFudERiTmFtZSI6ImxxZXJwX3Rlc3QiLCJpYXQiOjE3NjUxOTIzMDgsIm5iZiI6MTc2NTE5MjMwOCwiZXhwIjoxNzY1MjQ2MzA4LCJpc3MiOiJ5aW5tYWlzb2Z0IiwiYXVkIjoieWlubWFpc29mdCJ9.5YBxyOU5SmmIldlVp6V7uclsLrzLR8KIp51kraW7EGQ" \
    -H "Content-Type: application/json"
  ```
  
  **返回示例:**
  ```json
  {
    "code": 200,
    "msg": "操作成功",
    "data": null
  }
  ```
  
  **说明:**
  - 重新提交审批后,会创建新的"待审批"记录
  - 之前的"退回"记录会被保留,不会删除
  - 申请状态会从"已退回"变为"审批中"
  
  ---
  
  ### 步骤5:审批通过
  
  **接口地址:** `POST /api/Extend/LqReimbursementApplication/{id}/Actions/Approve`
  
  **请求参数:**
  - `result`: 审批结果,值为 `通过`(需要URL编码为 `%E9%80%9A%E8%BF%87`
  - `opinion`: 审批意见(可选)
  
  **cURL 示例:**
  ```bash
8daf47d0   “wangming”   修改访问地址
179
  curl -X POST "http://localhost:2015/api/Extend/LqReimbursementApplication/767672243453953285/Actions/Approve?result=%E9%80%9A%E8%BF%87&opinion=%E4%BF%AE%E6%94%B9%E5%90%8E%E5%AE%A1%E6%89%B9%E9%80%9A%E8%BF%87" \
ddcc459b   “wangming”   修改大项目部老师归属设置表:将月份...
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
    -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOiJhZG1pbiIsIkFjY291bnQiOiJhZG1pbiIsIlVzZXJOYW1lIjoi566h55CG5ZGYIiwiQWRtaW5pc3RyYXRvciI6MSwiVGVuYW50SWQiOiJkYiIsIlRlbmFudERiTmFtZSI6ImxxZXJwX3Rlc3QiLCJpYXQiOjE3NjUxOTIzMDgsIm5iZiI6MTc2NTE5MjMwOCwiZXhwIjoxNzY1MjQ2MzA4LCJpc3MiOiJ5aW5tYWlzb2Z0IiwiYXVkIjoieWlubWFpc29mdCJ9.5YBxyOU5SmmIldlVp6V7uclsLrzLR8KIp51kraW7EGQ" \
    -H "Content-Type: application/json"
  ```
  
  **返回示例:**
  ```json
  {
    "code": 200,
    "msg": "操作成功",
    "data": {
      "approvalStatus": "已通过"
    }
  }
  ```
  
  ---
  
  ### 步骤6:查看最终状态和审批记录
  
  **接口地址:** `GET /api/Extend/LqReimbursementApplication/{id}`
  
  **cURL 示例:**
  ```bash
8daf47d0   “wangming”   修改访问地址
203
  curl -X GET "http://localhost:2015/api/Extend/LqReimbursementApplication/767672243453953285" \
ddcc459b   “wangming”   修改大项目部老师归属设置表:将月份...
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
    -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOiJhZG1pbiIsIkFjY291bnQiOiJhZG1pbiIsIlVzZXJOYW1lIjoi566h55CG5ZGYIiwiQWRtaW5pc3RyYXRvciI6MSwiVGVuYW50SWQiOiJkYiIsIlRlbmFudERiTmFtZSI6ImxxZXJwX3Rlc3QiLCJpYXQiOjE3NjUxOTIzMDgsIm5iZiI6MTc2NTE5MjMwOCwiZXhwIjoxNzY1MjQ2MzA4LCJpc3MiOiJ5aW5tYWlzb2Z0IiwiYXVkIjoieWlubWFpc29mdCJ9.5YBxyOU5SmmIldlVp6V7uclsLrzLR8KIp51kraW7EGQ" \
    -H "Content-Type: application/json"
  ```
  
  **返回示例:**
  ```json
  {
    "code": 200,
    "msg": "操作成功",
    "data": {
      "form": {
        "id": "767672243453953285",
        "amount": "300.00",
        ...
      },
      "approvalStatus": "已通过",
      "currentNodeOrder": 2,
      "nodes": [
        {
          "nodeOrder": 1,
          "nodeName": "部门经理审批",
          "approvalRecords": [
            {
              "approverName": "管理员",
              "approvalResult": "退回",
              "approvalOpinion": "需要修改金额",
              "approvalTime": 1765192675000
            },
            {
              "approverName": "管理员",
              "approvalResult": "通过",
              "approvalOpinion": "修改后审批通过",
              "approvalTime": 1765192762000
            }
          ]
        }
      ]
    }
  }
  ```
  
  **说明:**
  - 审批记录中包含完整的审批历史
  - "退回"记录和"通过"记录都会保留
  - 可以清楚地看到退回原因和重新审批的结果
  
  ---
  
  ## 完整流程总结
  
  1. **退回申请** → 状态变为"已退回",当前节点为0
  2. **修改报销单** → 修改需要调整的字段(金额、购买记录等)
  3. **重新提交审批** → 状态变为"审批中",创建新的"待审批"记录
  4. **审批通过** → 状态变为"已通过",审批记录中包含退回和通过两条记录
  
  ---
  
  ## 注意事项
  
  1. **URL编码**:中文字符需要URL编码
     - `退回` → `%E9%80%80%E5%9B%9E`
     - `通过` → `%E9%80%9A%E8%BF%87`
  
  2. **状态检查**
     - 只有"待审批"或"已退回"状态的申请才能修改
     - 只有"审批中"状态的申请才能进行审批操作
  
  3. **审批记录**
     - 退回记录会被保留,不会删除
     - 重新提交审批后会创建新的"待审批"记录
     - 审批记录按时间顺序显示,包含完整的审批历史
  
  4. **Token**:所有接口都需要在Header中携带有效的Authorization Token
  
  ---
  
  ## JavaScript/Axios 示例
  
  ```javascript
  const axios = require('axios');
8daf47d0   “wangming”   修改访问地址
284
  const BASE_URL = 'http://localhost:2015';
ddcc459b   “wangming”   修改大项目部老师归属设置表:将月份...
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
  const TOKEN = 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
  const APPLICATION_ID = '767672243453953285';
  
  // 1. 退回申请
  async function returnApplication() {
    const response = await axios.post(
      `${BASE_URL}/api/Extend/LqReimbursementApplication/${APPLICATION_ID}/Actions/Approve`,
      null,
      {
        headers: { Authorization: TOKEN },
        params: {
          result: '退回',
          opinion: '需要修改金额'
        }
      }
    );
    return response.data;
  }
  
  // 2. 修改报销单
  async function updateApplication() {
    const response = await axios.put(
      `${BASE_URL}/api/Extend/LqReimbursementApplication/${APPLICATION_ID}`,
      {
        id: APPLICATION_ID,
        amount: '300.00'
      },
      {
        headers: { Authorization: TOKEN }
      }
    );
    return response.data;
  }
  
  // 3. 重新提交审批
  async function resubmitApproval() {
    const response = await axios.post(
      `${BASE_URL}/api/Extend/LqReimbursementApplication/${APPLICATION_ID}/Actions/SubmitApproval`,
      null,
      {
        headers: { Authorization: TOKEN }
      }
    );
    return response.data;
  }
  
  // 4. 审批通过
  async function approveApplication() {
    const response = await axios.post(
      `${BASE_URL}/api/Extend/LqReimbursementApplication/${APPLICATION_ID}/Actions/Approve`,
      null,
      {
        headers: { Authorization: TOKEN },
        params: {
          result: '通过',
          opinion: '修改后审批通过'
        }
      }
    );
    return response.data;
  }
  
  // 完整流程
  async function completeFlow() {
    try {
      // 1. 退回
      await returnApplication();
      console.log('✅ 申请已退回');
      
      // 2. 修改
      await updateApplication();
      console.log('✅ 申请已修改');
      
      // 3. 重新提交
      await resubmitApproval();
      console.log('✅ 已重新提交审批');
      
      // 4. 审批通过
      await approveApplication();
      console.log('✅ 审批已通过');
      
    } catch (error) {
      console.error('❌ 流程执行失败:', error.response?.data || error.message);
    }
  }
  ```