From 789ee31d8548162f2b511460e6b1c1e436d00e68 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 04 六月 2026 09:15:40 +0800
Subject: [PATCH] feat(vehicle): 添加车辆管理模块及归还里程功能

---
 src/main/java/com/ruoyi/quality/controller/QualityInspectController.java      |    1 
 src/main/java/com/ruoyi/quality/utils/QualityInspectTemplateExportHelper.java |   54 +++++++++++++++++
 src/main/resources/static/百事模版模板说明.md                                         |  100 +++++++++++++++++++++++++++++++++
 3 files changed, 152 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
index 9e26990..2f19742 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
@@ -140,7 +140,6 @@
     /**
      * 鎻愪氦
      *
-     * @param qualityInspect
      * @return
      */
     @GetMapping("/export/baishi/{id}")
diff --git a/src/main/java/com/ruoyi/quality/utils/QualityInspectTemplateExportHelper.java b/src/main/java/com/ruoyi/quality/utils/QualityInspectTemplateExportHelper.java
index 54ad922..5433fd1 100644
--- a/src/main/java/com/ruoyi/quality/utils/QualityInspectTemplateExportHelper.java
+++ b/src/main/java/com/ruoyi/quality/utils/QualityInspectTemplateExportHelper.java
@@ -1,7 +1,10 @@
 package com.ruoyi.quality.utils;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
 import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.quality.pojo.QualityInspect;
 import com.ruoyi.quality.pojo.QualityInspectParam;
@@ -22,7 +25,7 @@
 import java.io.OutputStream;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -47,7 +50,54 @@
     }
 
     public void exportBaiShi(HttpServletResponse response, Long inspectId) {
-        export(response, inspectId, BAISHI_TEMPLATE, "鐧句簨妯$増妫�楠岀粨鏋�");
+        if (inspectId == null) {
+            throw new ServiceException("妫�楠屽崟ID涓嶈兘涓虹┖");
+        }
+
+        QualityInspect inspect = qualityInspectMapper.selectById(inspectId);
+        if (inspect == null) {
+            throw new ServiceException("妫�楠屽崟涓嶅瓨鍦�");
+        }
+
+        List<QualityInspectParam> paramList = qualityInspectParamService.list(
+                Wrappers.<QualityInspectParam>lambdaQuery()
+                        .eq(QualityInspectParam::getInspectId, inspectId)
+                        .orderByAsc(QualityInspectParam::getId));
+        int index = 1;
+        for (QualityInspectParam detail : paramList) {
+            detail.setIndex(index);
+            index++;
+        }
+
+        try (InputStream inputStream = getClass().getResourceAsStream("/static/鐧句簨妯$増.docx")) {
+            if (inputStream == null) {
+                throw new ServiceException("妯℃澘鏂囦欢涓嶅瓨鍦細/static/鐧句簨妯$増.docx");
+            }
+
+            Configure configure = Configure.builder()
+                    .bind("paramList", new HackLoopTableRenderPolicy())
+                    .build();
+
+            XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                    new HashMap<String, Object>() {{
+                        put("inspect", inspect);
+                        put("paramList", paramList);
+                    }});
+
+            response.reset();
+            response.setContentType("application/msword");
+            response.setCharacterEncoding("UTF-8");
+            String encodedName = URLEncoder.encode("鐧句簨妯$増妫�楠岀粨鏋�", StandardCharsets.UTF_8).replace("+", "%20");
+            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+            response.setHeader("Content-Disposition", "attachment;filename=" + encodedName + ".docx");
+
+            try (OutputStream outputStream = response.getOutputStream()) {
+                template.write(outputStream);
+                outputStream.flush();
+            }
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭澶辫触", e);
+        }
     }
 
     public void exportDaLi(HttpServletResponse response, Long inspectId) {
diff --git "a/src/main/resources/static/\347\231\276\344\272\213\346\250\241\347\211\210\346\250\241\346\235\277\350\257\264\346\230\216.md" "b/src/main/resources/static/\347\231\276\344\272\213\346\250\241\347\211\210\346\250\241\346\235\277\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..9875f5c
--- /dev/null
+++ "b/src/main/resources/static/\347\231\276\344\272\213\346\250\241\347\211\210\346\250\241\346\235\277\350\257\264\346\230\216.md"
@@ -0,0 +1,100 @@
+# 鐧句簨妯$増.docx 妯℃澘鍒涘缓璇存槑
+
+## 鏂囦欢浣嶇疆
+`src/main/resources/static/鐧句簨妯$増.docx`
+
+---
+
+## Word 涓垱寤烘楠�
+
+### 1. 鏂板缓 Word 鏂囨。
+
+### 2. 鍒涘缓鍩烘湰淇℃伅琛�
+
+鎻掑叆涓�涓� 2鍒桸琛岀殑琛ㄦ牸锛�
+
+| 椤圭洰 | 鍐呭 |
+|------|------|
+| 浜у搧鍚嶇О | {{inspect.productName}} |
+| 瑙勬牸鍨嬪彿 | {{inspect.model}} |
+| 渚涘簲鍟� | {{inspect.supplier}} |
+| 鏁伴噺 | {{inspect.quantity}} |
+| 鍗曚綅 | {{inspect.unit}} |
+| 妫�娴嬫棩鏈� | {{inspect.checkTime}} |
+| 妫�楠屽憳 | {{inspect.checkName}} |
+| 妫�娴嬬粨鏋� | {{inspect.checkResult}} |
+| 鍚堟牸鏁伴噺 | {{inspect.qualifiedQuantity}} |
+| 涓嶅悎鏍兼暟閲� | {{inspect.unqualifiedQuantity}} |
+
+### 3. 鍒涘缓妫�楠屽弬鏁板垪琛ㄨ〃锛堝叧閿紒锛�
+
+鎻掑叆涓�涓� 6鍒�2琛岀殑琛ㄦ牸锛�
+
+**琛ㄥご琛岋細**
+| 搴忓彿 | 妫�娴嬫寚鏍� | 鍗曚綅 | 鏍囧噯鍊� | 鍐呮帶鍊� | 妫�楠屽�� |
+
+**鏁版嵁琛岋紙寰幆妯℃澘锛�**锛屾瘡涓崟鍏冩牸杈撳叆锛�
+| {{#paramList}}{{index}}{{/paramList}} | {{#paramList}}{{parameterItem}}{{/paramList}} | {{#paramList}}{{unit}}{{/paramList}} | {{#paramList}}{{standardValue}}{{/paramList}} | {{#paramList}}{{controlValue}}{{/paramList}} | {{#paramList}}{{testValue}}{{/paramList}} |
+
+### 4. 淇濆瓨
+
+淇濆瓨涓� `鐧句簨妯$増.docx`锛屾斁鍒� `src/main/resources/static/` 鐩綍銆�
+
+---
+
+## 绀轰緥妯℃澘鍐呭
+
+```
+鐧句簨妫�楠屾姤鍛�
+
+銆愬熀鏈俊鎭��
+浜у搧鍚嶇О锛歿{inspect.productName}}
+瑙勬牸鍨嬪彿锛歿{inspect.model}}
+渚涘簲鍟嗭細{{inspect.supplier}}
+鏁伴噺锛歿{inspect.quantity}} {{inspect.unit}}
+妫�娴嬫棩鏈燂細{{inspect.checkTime}}
+妫�楠屽憳锛歿{inspect.checkName}}
+妫�娴嬬粨鏋滐細{{inspect.checkResult}}
+
+銆愭楠屽弬鏁般��
+| 搴忓彿 | 妫�娴嬫寚鏍� | 鍗曚綅 | 鏍囧噯鍊� | 鍐呮帶鍊� | 妫�楠屽�� |
+| {{#paramList}}{{index}}{{/paramList}} | {{#paramList}}{{parameterItem}}{{/paramList}} | {{#paramList}}{{unit}}{{/paramList}} | {{#paramList}}{{standardValue}}{{/paramList}} | {{#paramList}}{{controlValue}}{{/paramList}} | {{#paramList}}{{testValue}}{{/paramList}} |
+
+鍚堟牸鏁伴噺锛歿{inspect.qualifiedQuantity}}
+涓嶅悎鏍兼暟閲忥細{{inspect.unqualifiedQuantity}}
+```
+
+---
+
+## 娉ㄦ剰浜嬮」
+
+1. **琛ㄦ牸寰幆蹇呴』浣跨敤 `{{#paramList}}...{{/paramList}}` 鍖呰9姣忎釜瀛楁**
+2. 琛ㄥご琛屽拰鏁版嵁琛岄兘瑕佷繚鐣欙紝鏁版嵁琛屼細鑷姩澶嶅埗澶氳
+3. 鍗犱綅绗﹁瀹屽叏鍖归厤锛屽寘鎷ぇ灏忓啓
+4. 淇濆瓨涓� `.docx` 鏍煎紡锛屼笉鏄� `.doc`
+
+---
+
+## 鍙敤瀛楁鍒楄〃
+
+### inspect锛堟楠屽崟锛夊瓧娈碉細
+- `productName` - 浜у搧鍚嶇О
+- `model` - 瑙勬牸鍨嬪彿
+- `supplier` - 渚涘簲鍟�
+- `customer` - 瀹㈡埛鍚嶇О
+- `quantity` - 鏁伴噺
+- `unit` - 鍗曚綅
+- `checkTime` - 妫�娴嬫棩鏈�
+- `checkName` - 妫�楠屽憳
+- `checkResult` - 妫�娴嬬粨鏋�
+- `checkCompany` - 妫�娴嬪崟浣�
+- `qualifiedQuantity` - 鍚堟牸鏁伴噺
+- `unqualifiedQuantity` - 涓嶅悎鏍兼暟閲�
+
+### paramList锛堟楠屽弬鏁板垪琛級瀛楁锛�
+- `index` - 搴忓彿锛堣嚜鍔ㄧ敓鎴愶級
+- `parameterItem` - 妫�娴嬫寚鏍�
+- `unit` - 鍗曚綅
+- `standardValue` - 鏍囧噯鍊�
+- `controlValue` - 鍐呮帶鍊�
+- `testValue` - 妫�楠屽��
\ No newline at end of file

--
Gitblit v1.9.3