# 报销退回后修改并重新走流程 - 接口调用示例 ## 前置条件 - 已创建报销申请并提交审批 - 申请已被退回(状态为"已退回") - 申请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 curl -X POST "http://localhost:2011/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" \ -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 curl -X GET "http://localhost:2011/api/Extend/LqReimbursementApplication/767672243453953285" \ -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 curl -X PUT "http://localhost:2011/api/Extend/LqReimbursementApplication/767672243453953285" \ -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 curl -X POST "http://localhost:2011/api/Extend/LqReimbursementApplication/767672243453953285/Actions/SubmitApproval" \ -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 curl -X POST "http://localhost:2011/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" \ -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 curl -X GET "http://localhost:2011/api/Extend/LqReimbursementApplication/767672243453953285" \ -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'); const BASE_URL = 'http://localhost:2011'; 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); } } ```