From 65ea825eb3e8547f0222224835554dabaec5a7ad Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 03 六月 2026 13:44:30 +0800
Subject: [PATCH] feat(vehicle): 添加车辆管理模块及归还里程功能

---
 src/main/java/com/ruoyi/approve/service/impl/VehicleBorrowRecordServiceImpl.java |   18 +
 src/main/java/com/ruoyi/approve/pojo/VehicleBorrowRecord.java                    |    4 
 src/main/resources/application-dev.yml                                           |    2 
 doc/车辆管理模块API接口文档.md                                                             |  765 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java                          |    4 
 5 files changed, 785 insertions(+), 8 deletions(-)

diff --git "a/doc/\350\275\246\350\276\206\347\256\241\347\220\206\346\250\241\345\235\227API\346\216\245\345\217\243\346\226\207\346\241\243.md" "b/doc/\350\275\246\350\276\206\347\256\241\347\220\206\346\250\241\345\235\227API\346\216\245\345\217\243\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..5abe4f1
--- /dev/null
+++ "b/doc/\350\275\246\350\276\206\347\256\241\347\220\206\346\250\241\345\235\227API\346\216\245\345\217\243\346\226\207\346\241\243.md"
@@ -0,0 +1,765 @@
+# 杞﹁締绠$悊妯″潡 API 鎺ュ彛鏂囨。
+
+## 妯″潡姒傝堪
+
+杞﹁締绠$悊妯″潡鍖呭惈涓や釜瀛愭ā鍧楋細
+1. **杞﹁締绠$悊** - 杞﹁締鍩虹淇℃伅鐨勫鍒犳敼鏌�
+2. **鍊熷嚭璁板綍绠$悊** - 杞﹁締鍊熷嚭鐢宠銆佸鎵广�佸綊杩樸�佸欢鏈熺瓑鍔熻兘
+
+**鍩虹璺緞**: `/approve/vehicle`
+
+---
+
+## 涓�銆佽溅杈嗙鐞嗘帴鍙�
+
+### 1.1 鍒嗛〉鏌ヨ杞﹁締鍒楄〃
+
+**璇锋眰**
+```
+GET /approve/vehicle/listPage
+```
+
+**璇锋眰鍙傛暟**
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|--------|------|------|------|
+| current | Long | 鍚� | 褰撳墠椤电爜锛岄粯璁�1 |
+| size | Long | 鍚� | 姣忛〉鏉℃暟锛岄粯璁�10 |
+| plateNumber | String | 鍚� | 杞︾墝鍙凤紝妯$硦鏌ヨ |
+| status | String | 鍚� | 浣跨敤鐘舵�侊細IDLE-绌洪棽锛孖N_USE-浣跨敤涓� |
+| createTimeStart | String | 鍚� | 鍒涘缓鏃堕棿璧峰 |
+| createTimeEnd | String | 鍚� | 鍒涘缓鏃堕棿缁撴潫 |
+
+**鍝嶅簲绀轰緥**
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛",
+  "data": {
+    "records": [
+      {
+        "id": 1,
+        "plateNumber": "浜珹12345",
+        "mileage": 15000.50,
+        "status": "IDLE",
+        "deleted": 0,
+        "createUser": 1,
+        "createTime": "2026-05-29 10:00:00",
+        "updateUser": 1,
+        "updateTime": "2026-05-29 10:00:00",
+        "deptId": 100
+      }
+    ],
+    "total": 1,
+    "size": 10,
+    "current": 1
+  }
+}
+```
+
+---
+
+### 1.2 鏂板杞﹁締
+
+**璇锋眰**
+```
+POST /approve/vehicle/save
+Content-Type: application/json
+```
+
+**璇锋眰浣�**
+```json
+{
+  "plateNumber": "浜珹12345",
+  "mileage": 15000.50,
+  "status": "IDLE"
+}
+```
+
+**璇锋眰鍙傛暟璇存槑**
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|--------|------|------|------|
+| plateNumber | String | 鏄� | 杞︾墝鍙� |
+| mileage | BigDecimal | 鍚� | 杞﹁締鍏噷鏁� |
+| status | String | 鍚� | 浣跨敤鐘舵�侊紝榛樿IDLE |
+
+**鍝嶅簲绀轰緥**
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛"
+}
+```
+
+---
+
+### 1.3 杞﹁締璇︽儏
+
+**璇锋眰**
+```
+GET /approve/vehicle/detail?id=1
+```
+
+**璇锋眰鍙傛暟**
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|--------|------|------|------|
+| id | Long | 鏄� | 杞﹁締ID |
+
+**鍝嶅簲绀轰緥**
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛",
+  "data": {
+    "id": 1,
+    "plateNumber": "浜珹12345",
+    "mileage": 15000.50,
+    "status": "IDLE",
+    "deleted": 0,
+    "createTime": "2026-05-29 10:00:00"
+  }
+}
+```
+
+---
+
+### 1.4 淇敼杞﹁締
+
+**璇锋眰**
+```
+PUT /approve/vehicle/update
+Content-Type: application/json
+```
+
+**璇锋眰浣�**
+```json
+{
+  "id": 1,
+  "plateNumber": "浜珹12346",
+  "mileage": 16000.00,
+  "status": "IN_USE"
+}
+```
+
+**鍝嶅簲绀轰緥**
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛"
+}
+```
+
+---
+
+### 1.5 鍒犻櫎杞﹁締
+
+**璇锋眰**
+```
+DELETE /approve/vehicle/delete
+Content-Type: application/json
+```
+
+**璇锋眰浣�**
+```json
+[1, 2, 3]
+```
+
+**鍝嶅簲绀轰緥**
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛"
+}
+```
+
+---
+
+## 浜屻�佸�熷嚭璁板綍鎺ュ彛
+
+### 2.1 鍒嗛〉鏌ヨ鍊熷嚭璁板綍
+
+**璇锋眰**
+```
+GET /approve/vehicle/borrow/listPage
+```
+
+**璇锋眰鍙傛暟**
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|--------|------|------|------|
+| current | Long | 鍚� | 褰撳墠椤电爜 |
+| size | Long | 鍚� | 姣忛〉鏉℃暟 |
+| borrowNo | String | 鍚� | 鍊熷嚭鍗曞彿锛屾ā绯婃煡璇� |
+| vehiclePlateNumber | String | 鍚� | 杞︾墝鍙凤紝妯$硦鏌ヨ |
+| applicantName | String | 鍚� | 鐢宠浜哄鍚嶏紝妯$硦鏌ヨ |
+| borrowStatus | String | 鍚� | 鍊熷嚭鐘舵�� |
+| extendStatus | String | 鍚� | 寤舵湡鐘舵�� |
+| vehicleId | Long | 鍚� | 杞﹁締ID |
+| createTimeStart | String | 鍚� | 鍒涘缓鏃堕棿璧峰 |
+| createTimeEnd | String | 鍚� | 鍒涘缓鏃堕棿缁撴潫 |
+
+**鍊熷嚭鐘舵�佹灇涓�**
+| 鍊� | 璇存槑 |
+|-----|------|
+| DRAFT | 鑽夌 |
+| IN_APPROVAL | 瀹℃壒涓� |
+| BORROWING | 鍊熷嚭涓� |
+| RETURNED | 宸插綊杩� |
+| REJECTED | 宸查┏鍥� |
+
+**寤舵湡鐘舵�佹灇涓�**
+| 鍊� | 璇存槑 |
+|-----|------|
+| NONE | 鏈敵璇� |
+| PENDING | 瀹℃壒涓� |
+| APPROVED | 宸查�氳繃 |
+| REJECTED | 宸查┏鍥� |
+
+**鍝嶅簲绀轰緥**
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛",
+  "data": {
+    "records": [
+      {
+        "id": 1,
+        "borrowNo": "CLJC202605290001",
+        "vehicleId": 1,
+        "vehiclePlateNumber": "浜珹12345",
+        "applicantId": 10,
+        "applicantName": "寮犱笁",
+        "applicantDeptId": 100,
+        "applicantDeptName": "鐮斿彂閮�",
+        "borrowReason": "澶栧嚭鍔炰簨",
+        "borrowStartTime": "2026-05-29 09:00:00",
+        "plannedReturnTime": "2026-05-29 18:00:00",
+        "actualReturnTime": null,
+        "borrowStatus": "IN_APPROVAL",
+        "approvalInstanceId": 100,
+        "approvedTime": null,
+        "returnedTime": null,
+        "extendStatus": "NONE",
+        "extendTargetReturnTime": null,
+        "extendReason": null,
+        "extendApprovedTime": null,
+        "borrowStorageBlobVOList": [],
+        "returnStorageBlobVOList": []
+      }
+    ],
+    "total": 1
+  }
+}
+```
+
+---
+
+### 2.2 鏂板鍊熷嚭璁板綍锛堝彂璧峰�熻溅鐢宠锛�
+
+**璇锋眰**
+```
+POST /approve/vehicle/borrow/save
+Content-Type: application/json
+```
+
+**璇锋眰浣�**
+```json
+{
+  "vehicleId": 1,
+  "borrowReason": "澶栧嚭鍔炰簨",
+  "borrowStartTime": "2026-05-29 09:00:00",
+  "plannedReturnTime": "2026-05-29 18:00:00",
+  "borrowStatus": "IN_APPROVAL",
+  "approvalTemplateId": 1,
+  "borrowStorageBlobDTOs": [
+    {
+      "fileName": "鐢宠鍗�.pdf",
+      "filePath": "/upload/2026/05/xxx.pdf",
+      "fileSize": 1024
+    }
+  ]
+}
+```
+
+**璇锋眰鍙傛暟璇存槑**
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|--------|------|------|------|
+| vehicleId | Long | 鏄� | 杞﹁締ID |
+| borrowReason | String | 鏄� | 鍊熷嚭鍘熷洜 |
+| borrowStartTime | DateTime | 鏄� | 鍊熷嚭寮�濮嬫椂闂达紝鏍煎紡锛歽yyy-MM-dd HH:mm:ss |
+| plannedReturnTime | DateTime | 鏄� | 璁″垝褰掕繕鏃堕棿锛屽繀椤绘櫄浜庡�熷嚭寮�濮嬫椂闂� |
+| borrowStatus | String | 鏄� | DRAFT(瀛樿崏绋�) 鎴� IN_APPROVAL(鎻愪氦瀹℃壒) |
+| approvalTemplateId | Long | 鍚� | 瀹℃壒妯℃澘ID锛屼笉浼犲垯浣跨敤榛樿妯℃澘 |
+| borrowStorageBlobDTOs | Array | 鍚� | 鍊熷嚭闄勪欢鍒楄〃 |
+| formConfig | String | 鍚� | 鑷畾涔夎〃鍗曢厤缃�(JSON瀛楃涓�) |
+
+**涓氬姟瑙勫垯**
+- 蹇呴』閫夋嫨鐘舵�佷负 IDLE(绌洪棽) 鐨勮溅杈�
+- 鍚屼竴杞﹁締涓嶈兘鏈夐噸澶嶇殑鍊熷嚭鐢宠锛堝鎵逛腑鎴栧�熷嚭涓級
+- `borrowStatus=IN_APPROVAL` 鏃朵細鑷姩鍙戣捣瀹℃壒娴佺▼
+- `borrowStatus=DRAFT` 鏃朵粎淇濆瓨鑽夌锛屼笉鍙戣捣瀹℃壒
+- 鐢宠浜轰俊鎭嚜鍔ㄤ粠褰撳墠鐧诲綍鐢ㄦ埛鑾峰彇
+
+**鍝嶅簲绀轰緥**
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛"
+}
+```
+
+**閿欒鍝嶅簲**
+```json
+{
+  "code": 500,
+  "msg": "褰撳墠杞﹁締宸叉湁鍊熷嚭璁板綍锛屼笉鑳介噸澶嶅�熷嚭"
+}
+```
+
+---
+
+### 2.3 鍊熷嚭璁板綍璇︽儏
+
+**璇锋眰**
+```
+GET /approve/vehicle/borrow/detail?id=1
+```
+
+**璇锋眰鍙傛暟**
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|--------|------|------|------|
+| id | Long | 鏄� | 鍊熷嚭璁板綍ID |
+
+**鍝嶅簲绀轰緥**
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛",
+  "data": {
+    "id": 1,
+    "borrowNo": "CLJC202605290001",
+    "vehicleId": 1,
+    "vehiclePlateNumber": "浜珹12345",
+    "applicantId": 10,
+    "applicantName": "寮犱笁",
+    "applicantDeptId": 100,
+    "applicantDeptName": "鐮斿彂閮�",
+    "borrowReason": "澶栧嚭鍔炰簨",
+    "borrowStartTime": "2026-05-29 09:00:00",
+    "plannedReturnTime": "2026-05-29 18:00:00",
+    "actualReturnTime": null,
+    "borrowStatus": "BORROWING",
+    "approvalInstanceId": 100,
+    "approvedTime": "2026-05-29 09:30:00",
+    "returnedTime": null,
+    "extendStatus": "NONE",
+    "extendTargetReturnTime": null,
+    "extendReason": null,
+    "extendApprovedTime": null,
+    "extendApprovalInstanceId": null,
+    "deleted": 0,
+    "createUser": 10,
+    "createTime": "2026-05-29 09:00:00",
+    "updateUser": 10,
+    "updateTime": "2026-05-29 09:30:00",
+    "deptId": 100
+  }
+}
+```
+
+---
+
+### 2.4 淇敼鍊熷嚭璁板綍
+
+**璇锋眰**
+```
+PUT /approve/vehicle/borrow/update
+Content-Type: application/json
+```
+
+**璇锋眰浣�**
+```json
+{
+  "id": 1,
+  "vehicleId": 1,
+  "borrowReason": "澶栧嚭鍔炰簨锛堜慨鏀癸級",
+  "borrowStartTime": "2026-05-29 10:00:00",
+  "plannedReturnTime": "2026-05-29 18:00:00",
+  "borrowStatus": "IN_APPROVAL",
+  "approvalTemplateId": 2,
+  "borrowStorageBlobDTOs": []
+}
+```
+
+**涓氬姟瑙勫垯**
+- 浠� DRAFT(鑽夌) 鎴� REJECTED(宸查┏鍥�) 鐘舵�佸彲淇敼
+- 淇敼鍚庢彁浜ゅ鎵逛細鍒犻櫎鍘熷鎵瑰疄渚嬪苟閲嶆柊鍙戣捣
+- 闄勪欢鍒楄〃浼犲叆鏃朵細瑕嗙洊鍘熸湁闄勪欢
+
+**鍝嶅簲绀轰緥**
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛"
+}
+```
+
+**閿欒鍝嶅簲**
+```json
+{
+  "code": 500,
+  "msg": "褰撳墠鐘舵�佺殑鍊熷嚭璁板綍涓嶅厑璁镐慨鏀�"
+}
+```
+
+---
+
+### 2.5 鍒犻櫎鍊熷嚭璁板綍
+
+**璇锋眰**
+```
+DELETE /approve/vehicle/borrow/delete
+Content-Type: application/json
+```
+
+**璇锋眰浣�**
+```json
+[1, 2]
+```
+
+**涓氬姟瑙勫垯**
+- 瀹℃壒涓�(IN_APPROVAL) 鎴� 鍊熷嚭涓�(BORROWING) 鐨勮褰曚笉鍙垹闄�
+
+**鍝嶅簲绀轰緥**
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛"
+}
+```
+
+**閿欒鍝嶅簲**
+```json
+{
+  "code": 500,
+  "msg": "瀹℃壒涓垨鍊熷嚭涓殑璁板綍涓嶅厑璁稿垹闄�"
+}
+```
+
+---
+
+### 2.6 褰掕繕杞﹁締
+
+**璇锋眰**
+```
+POST /approve/vehicle/borrow/return
+Content-Type: application/json
+```
+
+**璇锋眰浣�**
+```json
+{
+  "id": 1,
+  "actualReturnTime": "2026-05-29 17:30:00",
+  "returnMileage": 16500.50,
+  "returnStorageBlobDTOs": [
+    {
+      "fileName": "褰掕繕纭鍗�.pdf",
+      "filePath": "/upload/2026/05/xxx.pdf",
+      "fileSize": 2048
+    }
+  ]
+}
+```
+
+**璇锋眰鍙傛暟璇存槑**
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|--------|------|------|------|
+| id | Long | 鏄� | 鍊熷嚭璁板綍ID |
+| actualReturnTime | DateTime | 鍚� | 瀹為檯褰掕繕鏃堕棿锛屼笉浼犲垯浣跨敤褰撳墠鏃堕棿 |
+| returnMileage | BigDecimal | 鍚� | 褰掕繕鏃跺叕閲屾暟锛屼細鍚屾鏇存柊鍒拌溅杈嗕俊鎭� |
+| returnStorageBlobDTOs | Array | 鍚� | 褰掕繕闄勪欢鍒楄〃 |
+
+**涓氬姟瑙勫垯**
+- 浠� BORROWING(鍊熷嚭涓�) 鐘舵�佸彲褰掕繕
+- 寤舵湡瀹℃壒涓�(PENDING) 鐨勮褰曚笉鍙洿鎺ュ綊杩橈紝闇�鍏堝鐞嗗欢鏈熷鎵�
+- 褰掕繕鍚庤溅杈嗙姸鎬佽嚜鍔ㄥ彉涓� IDLE(绌洪棽)
+- 鍊熷嚭璁板綍鐘舵�佸彉涓� RETURNED(宸插綊杩�)
+- 鑻ヤ紶鍏� returnMileage锛屼細鍚屾鏇存柊杞﹁締鐨勫叕閲屾暟
+
+**鍝嶅簲绀轰緥**
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛"
+}
+```
+
+**閿欒鍝嶅簲**
+```json
+{
+  "code": 500,
+  "msg": "鍙湁鍊熷嚭涓殑杞﹁締鎵嶈兘褰掕繕"
+}
+```
+
+---
+
+### 2.7 鍙戣捣寤舵湡鐢宠
+
+**璇锋眰**
+```
+POST /approve/vehicle/borrow/delay
+Content-Type: application/json
+```
+
+**璇锋眰浣�**
+```json
+{
+  "id": 1,
+  "extendTargetReturnTime": "2026-05-30 18:00:00",
+  "extendReason": "涓氬姟闇�瑕佸欢闀夸竴澶�"
+}
+```
+
+**璇锋眰鍙傛暟璇存槑**
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|--------|------|------|------|
+| id | Long | 鏄� | 鍊熷嚭璁板綍ID |
+| extendTargetReturnTime | DateTime | 鏄� | 寤舵湡鍚庣殑褰掕繕鏃堕棿锛屽繀椤绘櫄浜庡綋鍓嶈鍒掑綊杩樻椂闂� |
+| extendReason | String | 鍚� | 寤舵湡鍘熷洜 |
+
+**涓氬姟瑙勫垯**
+- 浠� BORROWING(鍊熷嚭涓�) 鐘舵�佸彲鐢宠寤舵湡
+- 寤舵湡褰掕繕鏃堕棿蹇呴』鏅氫簬褰撳墠璁″垝褰掕繕鏃堕棿
+- 宸叉湁寤舵湡瀹℃壒涓殑鐢宠涓嶅彲閲嶅鎻愪氦
+- 鐢宠鍚庝細鑷姩鍙戣捣寤舵湡瀹℃壒娴佺▼(涓氬姟绫诲瀷=20)
+
+**鍝嶅簲绀轰緥**
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛"
+}
+```
+
+**閿欒鍝嶅簲**
+```json
+{
+  "code": 500,
+  "msg": "宸叉湁寤舵湡瀹℃壒涓殑鐢宠锛岃鍕块噸澶嶆彁浜�"
+}
+```
+
+---
+
+## 涓夈�佺姸鎬佹祦杞鏄�
+
+### 3.1 鍊熷嚭鐘舵�佹祦杞浘
+
+```
+                    鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+                    鈹�                                      鈹�
+                    鈹�                                      鈫�
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�    鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�    鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�    鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�  鏂板缓   鈹傗攢鈹�鈹�鈫掆攤    DRAFT      鈹傗攢鈹�鈹�鈫掆攤 IN_APPROVAL 鈹傗攢鈹�鈹�鈫掆攤 BORROWING 鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�    鈹�   (鑽夌)      鈹�    鈹�  (瀹℃壒涓�)   鈹�    鈹� (鍊熷嚭涓�)  鈹�
+               鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�    鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�    鈹斺攢鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�
+                       鈹�                   鈹�                  鈹�
+                       鈹�                   鈫�                  鈹�
+                       鈹�            鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�            鈹�
+                       鈹�            鈹�  REJECTED  鈹�            鈹�
+                       鈹�            鈹�  (宸查┏鍥�)  鈹�            鈹�
+                       鈹�            鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�            鈹�
+                       鈹�                   鈹�                  鈹�
+                       鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�                  鈹�
+                                                              鈹�
+                                                              鈹� 褰掕繕
+                                                              鈫�
+                                                       鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+                                                       鈹� RETURNED  鈹�
+                                                       鈹� (宸插綊杩�)  鈹�
+                                                       鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+### 3.2 寤舵湡鐘舵�佹祦杞浘
+
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�    鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�    鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�  NONE   鈹傗攢鈹�鈹�鈫掆攤  PENDING  鈹傗攢鈹�鈹�鈫掆攤 APPROVED  鈹�
+鈹�(鏈敵璇�) 鈹�    鈹� (瀹℃壒涓�)  鈹�    鈹� (宸查�氳繃)  鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�    鈹斺攢鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�    鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+                     鈹�
+                     鈫�
+              鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+              鈹�  REJECTED 鈹�
+              鈹� (宸查┏鍥�)  鈹�
+              鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+### 3.3 杞﹁締鐘舵�佽鏄�
+
+| 鐘舵�� | 鍊� | 璇存槑 | 瑙﹀彂鏉′欢 |
+|------|-----|------|----------|
+| 绌洪棽 | IDLE | 杞﹁締鍙�熷嚭 | 鏂板杞﹁締銆佸�熷嚭褰掕繕鍚� |
+| 浣跨敤涓� | IN_USE | 杞﹁締宸茶鍊熷嚭 | 鍊熷嚭瀹℃壒閫氳繃鍚� |
+
+---
+
+## 鍥涖�侀檮浠惰鏄�
+
+### 4.1 闄勪欢绫诲瀷
+
+| 绫诲瀷 | recordType | 浣跨敤鍦烘櫙 |
+|------|------------|----------|
+| 鍊熷嚭闄勪欢 | vehicle_borrow_record | 鍊熻溅鐢宠鏃朵笂浼� |
+| 褰掕繕闄勪欢 | vehicle_return_record | 褰掕繕鏃朵笂浼� |
+
+### 4.2 闄勪欢涓婁紶娴佺▼
+
+1. 鍏堣皟鐢ㄦ枃浠朵笂浼犳帴鍙h幏鍙栨枃浠朵俊鎭�
+2. 灏嗘枃浠朵俊鎭斁鍏� `borrowStorageBlobDTOs` 鎴� `returnStorageBlobDTOs`
+3. 鎻愪氦涓氬姟鎺ュ彛鏃朵竴骞朵繚瀛�
+
+**闄勪欢瀵硅薄缁撴瀯**
+```json
+{
+  "fileName": "鏂囦欢鍚嶇О.pdf",
+  "filePath": "/upload/2026/05/xxx.pdf",
+  "fileSize": 1024,
+  "fileType": "application/pdf"
+}
+```
+
+---
+
+## 浜斻�佸鎵归厤缃鏄�
+
+### 5.1 瀹℃壒妯℃澘閰嶇疆
+
+闇�鍦ㄥ鎵规ā鏉跨鐞嗕腑閰嶇疆浠ヤ笅涓氬姟绫诲瀷鐨勬ā鏉匡細
+
+| 涓氬姟绫诲瀷 | 绫诲瀷鍊� | 璇存槑 |
+|----------|--------|------|
+| 杞﹁締鍊熷嚭瀹℃壒 | 19 | 杞﹁締鍊熷嚭鐢宠鐨勫鎵规祦绋� |
+| 杞婅締寤舵湡瀹℃壒 | 20 | 杞﹁締寤舵湡鐢宠鐨勫鎵规祦绋� |
+
+### 5.2 瀹℃壒鍥炶皟鏈哄埗
+
+瀹℃壒缁撴灉浼氳嚜鍔ㄥ悓姝ュ埌涓氬姟鐘舵�侊細
+
+| 瀹℃壒绫诲瀷 | 瀹℃壒閫氳繃 | 瀹℃壒椹冲洖 |
+|----------|----------|----------|
+| 杞﹁締鍊熷嚭瀹℃壒(19) | borrowStatus 鈫� BORROWING<br>杞﹁締status 鈫� IN_USE | borrowStatus 鈫� REJECTED |
+| 杞﹁締寤舵湡瀹℃壒(20) | extendStatus 鈫� APPROVED<br>鏇存柊plannedReturnTime涓篹xtendTargetReturnTime | extendStatus 鈫� REJECTED |
+
+---
+
+## 鍏�侀敊璇爜璇存槑
+
+| 閿欒淇℃伅 | 鍘熷洜 | 瑙e喅鏂规 |
+|----------|------|----------|
+| 杞﹁締涓嶅瓨鍦� | 杞﹁締ID鏃犳晥鎴栧凡鍒犻櫎 | 妫�鏌ヨ溅杈咺D鏄惁姝g‘ |
+| 褰撳墠杞﹁締涓嶅湪鍙�熷嚭鐘舵�� | 杞﹁締鐘舵�佷负 IN_USE | 閫夋嫨鍏朵粬绌洪棽杞﹁締 |
+| 褰撳墠杞﹁締宸叉湁鍊熷嚭璁板綍锛屼笉鑳介噸澶嶅�熷嚭 | 璇ヨ溅宸叉湁瀹℃壒涓垨鍊熷嚭涓殑璁板綍 | 绛夊緟璇ヨ溅杈嗗綊杩樺悗鍐嶇敵璇� |
+| 璇峰厛閰嶇疆杞﹁締瀹℃壒妯℃澘 | 鏈厤缃溅杈嗗�熷嚭瀹℃壒妯℃澘 | 鍦ㄥ鎵规ā鏉跨鐞嗕腑閰嶇疆 |
+| 鍊熷嚭璁板綍涓嶅瓨鍦� | 鍊熷嚭璁板綍ID鏃犳晥鎴栧凡鍒犻櫎 | 妫�鏌ヨ褰旾D鏄惁姝g‘ |
+| 褰撳墠鐘舵�佺殑鍊熷嚭璁板綍涓嶅厑璁镐慨鏀� | 闈炶崏绋挎垨椹冲洖鐘舵�� | 浠呰崏绋垮拰椹冲洖鐘舵�佸彲淇敼 |
+| 瀹℃壒涓垨鍊熷嚭涓殑璁板綍涓嶅厑璁稿垹闄� | 璁板綍鐘舵�佷负瀹℃壒涓垨鍊熷嚭涓� | 涓嶈兘鍒犻櫎杩涜涓殑璁板綍 |
+| 鍙湁鍊熷嚭涓殑杞﹁締鎵嶈兘褰掕繕 | 闈� BORROWING 鐘舵�� | 浠呭�熷嚭涓姸鎬佸彲褰掕繕 |
+| 寤舵湡瀹℃壒涓殑璁板綍涓嶅厑璁哥洿鎺ュ綊杩� | 瀛樺湪杩涜涓殑寤舵湡瀹℃壒 | 鍏堝鐞嗗欢鏈熷鎵瑰啀褰掕繕 |
+| 鍊熷嚭璁板綍ID涓嶈兘涓虹┖ | 璇锋眰缂哄皯璁板綍ID | 浼犲叆姝g‘鐨勮褰旾D |
+| 璁″垝褰掕繕鏃堕棿涓嶈兘涓虹┖ | 缂哄皯璁″垝褰掕繕鏃堕棿 | 濉啓璁″垝褰掕繕鏃堕棿 |
+| 璁″垝褰掕繕鏃堕棿蹇呴』鏅氫簬鍊熷嚭寮�濮嬫椂闂� | 鏃堕棿椤哄簭閿欒 | 璋冩暣鏃堕棿椤哄簭 |
+| 寤舵湡鍚庣殑褰掕繕鏃堕棿涓嶈兘涓虹┖ | 缂哄皯寤舵湡鐩爣鏃堕棿 | 濉啓寤舵湡鍚庣殑褰掕繕鏃堕棿 |
+| 寤舵湡鍚庣殑褰掕繕鏃堕棿蹇呴』鏅氫簬褰撳墠璁″垝褰掕繕鏃堕棿 | 寤舵湡鏃堕棿涓嶅悎鐞� | 寤舵湡鏃堕棿闇�鏅氫簬褰撳墠璁″垝鏃堕棿 |
+| 鍙湁鍊熷嚭涓殑杞﹁締鎵嶈兘鐢宠寤舵湡 | 闈� BORROWING 鐘舵�� | 浠呭�熷嚭涓姸鎬佸彲寤舵湡 |
+| 宸叉湁寤舵湡瀹℃壒涓殑鐢宠锛岃鍕块噸澶嶆彁浜� | 閲嶅鐢宠寤舵湡 | 绛夊緟褰撳墠寤舵湡瀹℃壒瀹屾垚 |
+| 璇峰厛鐧诲綍 | 鏈櫥褰曟垨鐧诲綍澶辨晥 | 閲嶆柊鐧诲綍 |
+
+---
+
+## 涓冦�佹暟鎹粨鏋�
+
+### 7.1 杞﹁締瀹炰綋 (Vehicle)
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 |
+|--------|------|------|
+| id | Long | 杞﹁締ID |
+| plateNumber | String | 杞︾墝鍙� |
+| mileage | BigDecimal | 杞﹁締鍏噷鏁� |
+| status | String | 浣跨敤鐘舵�侊細IDLE/IN_USE |
+| deleted | Integer | 鍒犻櫎鏍囪锛�0鏈垹闄わ紝1宸插垹闄� |
+| createUser | Long | 鍒涘缓浜篒D |
+| createTime | DateTime | 鍒涘缓鏃堕棿 |
+| updateUser | Long | 鏇存柊浜篒D |
+| updateTime | DateTime | 鏇存柊鏃堕棿 |
+| deptId | Long | 閮ㄩ棬ID |
+
+### 7.2 鍊熷嚭璁板綍瀹炰綋 (VehicleBorrowRecord)
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 |
+|--------|------|------|
+| id | Long | 璁板綍ID |
+| borrowNo | String | 鍊熷嚭鍗曞彿锛屾牸寮忥細CLJC+鏃ユ湡+搴忓彿 |
+| vehicleId | Long | 杞﹁締ID |
+| vehiclePlateNumber | String | 杞︾墝鍙� |
+| applicantId | Long | 鐢宠浜篒D |
+| applicantName | String | 鐢宠浜哄鍚� |
+| applicantDeptId | Long | 鐢宠閮ㄩ棬ID |
+| applicantDeptName | String | 鐢宠閮ㄩ棬鍚嶇О |
+| borrowReason | String | 鍊熷嚭鍘熷洜 |
+| borrowStartTime | DateTime | 鍊熷嚭寮�濮嬫椂闂� |
+| plannedReturnTime | DateTime | 璁″垝褰掕繕鏃堕棿 |
+| actualReturnTime | DateTime | 瀹為檯褰掕繕鏃堕棿 |
+| borrowStatus | String | 鍊熷嚭鐘舵�� |
+| approvalInstanceId | Long | 鍊熷嚭瀹℃壒瀹炰緥ID |
+| approvedTime | DateTime | 鍊熷嚭瀹℃壒閫氳繃鏃堕棿 |
+| returnedTime | DateTime | 褰掕繕鏃堕棿 |
+| returnMileage | BigDecimal | 褰掕繕鏃跺叕閲屾暟 |
+| extendApprovalInstanceId | Long | 寤舵湡瀹℃壒瀹炰緥ID |
+| extendStatus | String | 寤舵湡鐘舵�� |
+| extendTargetReturnTime | DateTime | 寤舵湡鐩爣褰掕繕鏃堕棿 |
+| extendReason | String | 寤舵湡鍘熷洜 |
+| extendApprovedTime | DateTime | 寤舵湡瀹℃壒閫氳繃鏃堕棿 |
+| deleted | Integer | 鍒犻櫎鏍囪 |
+| createUser | Long | 鍒涘缓浜篒D |
+| createTime | DateTime | 鍒涘缓鏃堕棿 |
+| updateUser | Long | 鏇存柊浜篒D |
+| updateTime | DateTime | 鏇存柊鏃堕棿 |
+| deptId | Long | 閮ㄩ棬ID |
+
+---
+
+## 鍏�佸墠绔紑鍙戝缓璁�
+
+### 8.1 杞﹁締绠$悊椤甸潰
+
+- 鏂板杞﹁締鏃惰溅鐗屽彿寤鸿鍋氬敮涓�鎬ф牎楠�
+- 杞﹁締鐘舵�佷娇鐢ㄦ爣绛惧睍绀猴細绌洪棽(缁胯壊)銆佷娇鐢ㄤ腑(绾㈣壊/姗欒壊)
+- 鍒犻櫎杞﹁締鍓嶆鏌ユ槸鍚︽湁杩涜涓殑鍊熷嚭璁板綍
+
+### 8.2 鍊熷嚭璁板綍椤甸潰
+
+- 鍒楄〃椤靛缓璁寜鐘舵�佺瓫閫夛細鑽夌銆佸鎵逛腑銆佸�熷嚭涓�佸凡褰掕繕銆佸凡椹冲洖
+- 鏂板鐢宠鏃讹紝杞﹁締閫夋嫨涓嬫媺妗嗕粎鏄剧ずIDLE鐘舵�佺殑杞﹁締
+- 瀹℃壒涓拰鍊熷嚭涓殑璁板綍涓嶅厑璁稿垹闄わ紝寤鸿闅愯棌鍒犻櫎鎸夐挳
+- 寤舵湡鐢宠鎸夐挳浠呭湪BORROWING鐘舵�佷笖鏃犺繘琛屼腑寤舵湡鐢宠鏃舵樉绀�
+- 褰掕繕鎸夐挳浠呭湪BORROWING鐘舵�佷笖鏃犺繘琛屼腑寤舵湡鐢宠鏃舵樉绀�
+- 椹冲洖鐘舵�佺殑璁板綍鍏佽淇敼鍚庨噸鏂版彁浜�
+
+### 8.3 鐘舵�佸睍绀哄缓璁�
+
+| 鐘舵�� | 寤鸿棰滆壊 | 寤鸿鎿嶄綔鎸夐挳 |
+|------|----------|--------------|
+| DRAFT | 鐏拌壊 | 缂栬緫銆佸垹闄ゃ�佹彁浜ゅ鎵� |
+| IN_APPROVAL | 钃濊壊 | 鏌ョ湅銆佹挙鍥�(闇�閰嶇疆) |
+| BORROWING | 缁胯壊 | 鐢宠寤舵湡銆佸綊杩� |
+| RETURNED | 榛樿鑹� | 鏌ョ湅 |
+| REJECTED | 绾㈣壊 | 缂栬緫銆佸垹闄ゃ�侀噸鏂版彁浜� |
+
+---
+
+## 涔濄�佺増鏈俊鎭�
+
+- **妯″潡鐗堟湰**: 1.0.0
+- **鏇存柊鏃ユ湡**: 2026-05-29
+- **浣滆��**: 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/approve/pojo/VehicleBorrowRecord.java b/src/main/java/com/ruoyi/approve/pojo/VehicleBorrowRecord.java
index 3acb6dc..c5bf059 100644
--- a/src/main/java/com/ruoyi/approve/pojo/VehicleBorrowRecord.java
+++ b/src/main/java/com/ruoyi/approve/pojo/VehicleBorrowRecord.java
@@ -11,6 +11,7 @@
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 /**
@@ -82,6 +83,9 @@
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime returnedTime;
 
+    @Schema(description = "褰掕繕鏃跺叕閲屾暟")
+    private BigDecimal returnMileage;
+
     @Schema(description = "寤舵湡瀹℃壒瀹炰緥ID")
     private Long extendApprovalInstanceId;
 
diff --git a/src/main/java/com/ruoyi/approve/service/impl/VehicleBorrowRecordServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/VehicleBorrowRecordServiceImpl.java
index dd7f646..5fe032d 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/VehicleBorrowRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/VehicleBorrowRecordServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.approve.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -197,6 +198,7 @@
         update.setActualReturnTime(now);
         update.setReturnedTime(now);
         update.setBorrowStatus(BORROW_STATUS_RETURNED);
+        update.setReturnMileage(record.getReturnMileage());
         update.setUpdateUser(SecurityUtils.getUserId());
         update.setUpdateTime(now);
         update.setExtendStatus(existing.getExtendStatus());
@@ -208,6 +210,9 @@
         Vehicle vehicle = new Vehicle();
         vehicle.setId(existing.getVehicleId());
         vehicle.setStatus("IDLE");
+        if (record.getReturnMileage() != null) {
+            vehicle.setMileage(record.getReturnMileage());
+        }
         vehicleMapper.updateById(vehicle);
         return true;
     }
@@ -247,7 +252,10 @@
             throw new ServiceException("淇濆瓨寤舵湡鐢宠澶辫触");
         }
         VehicleBorrowRecord refreshed = detail(existing.getId());
-        startApproval(refreshed, TypeEnums.VEHICLE_DELAY_APPROVAL.getCode());
+        VehicleBorrowRecordDto recordDto = new VehicleBorrowRecordDto();
+        BeanUtil.copyProperties(refreshed, recordDto);
+        recordDto.setFormConfig(record.getFormConfig());
+        startApproval(recordDto, TypeEnums.VEHICLE_DELAY_APPROVAL.getCode());
         return true;
     }
 
@@ -329,11 +337,12 @@
         }
     }
 
-    private void startApproval(VehicleBorrowRecord record, Long businessType) {
+    private void startApproval(VehicleBorrowRecordDto record, Long businessType) {
         Long templateId = null;
-        if (record instanceof VehicleBorrowRecordDto) {
-            templateId = ((VehicleBorrowRecordDto) record).getApprovalTemplateId();
+        if (record == null) {
+            return;
         }
+        templateId = record.getApprovalTemplateId();
         ApprovalTemplate approvalTemplate = resolveApprovalTemplate(templateId, businessType);
         ApprovalInstanceDto approvalInstanceDto = new ApprovalInstanceDto();
         approvalInstanceDto.setTemplateId(approvalTemplate.getId());
@@ -346,6 +355,7 @@
         approvalInstanceDto.setApplyTime(LocalDateTime.now());
         approvalInstanceDto.setStatus("PENDING");
         approvalInstanceDto.setCurrentLevel(1);
+        approvalInstanceDto.setFormConfig(record.getFormConfig());
 
         boolean saved = approvalInstanceService.add(approvalInstanceDto);
         if (!saved || approvalInstanceDto.getId() == null) {
diff --git a/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java b/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
index 3f7a4a5..320a7c6 100644
--- a/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
@@ -202,9 +202,7 @@
     APPROVAL_INSTANCE("approval_instance"),
     ACCOUNT_INVOICE_APPLICATION("account_invoice_application"),
     ACCOUNT_PURCHASE_INVOICE("account_purchase_invoice"),
-    APPROVAL_TEMPLATE("approval_template");
-    ACCOUNT_PURCHASE_INVOICE("account_purchase_invoice"),
-    // Vehicle
+    APPROVAL_TEMPLATE("approval_template"),
     VEHICLE("vehicle"),
     VEHICLE_BORROW_RECORD("vehicle_borrow_record"),
     VEHICLE_RETURN_RECORD("vehicle_return_record");
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index f1a5bf9..59a2bee 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -74,7 +74,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://localhost:3306/product-inventory-management-new-pro?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://localhost:3306/product-inventory-management-yzfx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: 123456
       # 浠庡簱鏁版嵁婧�

--
Gitblit v1.9.3