From 453fece707fc1e611554fbb10125383eba01449a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 18 九月 2026 14:39:09 +0800
Subject: [PATCH] feat(mes): 添加产品检验单Word导出功能

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/MesQcIndicatorResultController.java |   28 ++++++++++++++++++++++++++++
 1 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/MesQcIndicatorResultController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/MesQcIndicatorResultController.java
index 6e5a382..6a8021e 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/MesQcIndicatorResultController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/MesQcIndicatorResultController.java
@@ -1,8 +1,10 @@
 package cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.*;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO;
@@ -16,6 +18,7 @@
 import cn.iocoder.yudao.module.mes.enums.qc.MesQcIndicatorItemTypeEnum;
 import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService;
 import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService;
+import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcProductReportWordBuilder;
 import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcReportService;
 import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcLineService;
 import cn.iocoder.yudao.module.mes.service.qc.iqc.MesQcIqcLineService;
@@ -26,11 +29,13 @@
 import io.swagger.v3.oas.annotations.Parameters;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -137,6 +142,29 @@
         return success(reportService.getQcReportData(qcId, qcType, resultId));
     }
 
+    @GetMapping("/export-product-word")
+    @Operation(summary = "瀵煎嚭浜у搧妫�楠屽崟 Word锛堢焊璐ㄦ楠屽崟鐗堝紡锛氭棤鎶�鏈寚鏍囧垪锛屽垽瀹氱粨璁�/璐ㄦ涓撶敤绔犵暀绌烘墜濉紝鎵撳嵃鐢� Word 鎵撳紑锛�")
+    @Parameters({
+            @Parameter(name = "qcId", description = "璐ㄦ鍗旾D", required = true, example = "1"),
+            @Parameter(name = "qcType", description = "璐ㄦ绫诲瀷", required = true, example = "1"),
+            @Parameter(name = "resultId", description = "妫�楠岀粨鏋滐紙鏍峰搧锛夌紪鍙凤紝鍙笉浼狅紱澶氭牱鍝佹椂鐢ㄤ簬閫夋嫨", example = "1")
+    })
+    @PreAuthorize("@ss.hasAnyPermissions('mes:qc-iqc:query', 'mes:qc-ipqc:query', 'mes:qc-oqc:query', 'mes:qc-rqc:query')")
+    public void exportProductWord(
+            @RequestParam("qcId") Long qcId,
+            @RequestParam("qcType") Integer qcType,
+            @RequestParam(value = "resultId", required = false) Long resultId,
+            HttpServletResponse response) throws IOException {
+        MesQcQcReportRespVO report = reportService.getQcReportData(qcId, qcType, resultId);
+        byte[] docx = MesQcProductReportWordBuilder.build(report);
+        String productName = StrUtil.isNotBlank(report.getItemName()) ? report.getItemName() : "浜у搧";
+        String filename = productName + "浜у搧璐ㄩ噺妫�楠屽崟"
+                + (StrUtil.isNotBlank(report.getDocCode()) ? "-" + report.getDocCode() : "") + ".docx";
+        response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
+        response.addHeader("Content-Disposition", "attachment;filename=" + HttpUtils.encodeUtf8(filename));
+        response.getOutputStream().write(docx);
+    }
+
     // ==================== 鎷兼帴 VO ====================
 
     /**

--
Gitblit v1.9.3