From 482033ad6accee24ae2a530ad5fbc42febb0f2f1 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 16 三月 2026 13:31:56 +0800
Subject: [PATCH] 质量管理:优化更新逻辑,增加原料导出、下载接口

---
 src/main/java/com/ruoyi/quality/controller/RawMaterialController.java     |   16 +++++
 src/main/resources/static/report-template.docx                            |    0 
 src/main/java/com/ruoyi/quality/dto/RawMaterialQualityInspectItemDto.java |   27 +++++++++
 src/main/java/com/ruoyi/quality/service/impl/RawMaterialServiceImpl.java  |   79 ++++++++++++++++++++++++++
 src/main/java/com/ruoyi/quality/pojo/RawMaterial.java                     |    7 ++
 src/main/java/com/ruoyi/quality/service/RawMaterialService.java           |    6 ++
 src/main/java/com/ruoyi/quality/pojo/RawMaterialQualityInspectItem.java   |    3 +
 src/main/java/com/ruoyi/quality/dto/RawMaterialDto.java                   |    3 +
 8 files changed, 140 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/ruoyi/quality/controller/RawMaterialController.java b/src/main/java/com/ruoyi/quality/controller/RawMaterialController.java
index bbcdd1b..92f13f1 100644
--- a/src/main/java/com/ruoyi/quality/controller/RawMaterialController.java
+++ b/src/main/java/com/ruoyi/quality/controller/RawMaterialController.java
@@ -4,11 +4,14 @@
 import com.ruoyi.common.enums.RawMaterialInspectState;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.quality.dto.RawMaterialDto;
+import com.ruoyi.quality.pojo.QualityInspect;
 import com.ruoyi.quality.pojo.RawMaterial;
 import com.ruoyi.quality.service.RawMaterialService;
+import com.ruoyi.staff.pojo.StaffOnJob;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -90,4 +93,17 @@
     public AjaxResult delete(@RequestBody List<Integer> ids) {
         return AjaxResult.success(rawMaterialService.removeByIds(ids));
     }
+
+    /**
+     * 瀵煎嚭鍘熸枡鏁版嵁
+     */
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, RawMaterialDto rawMaterialDto) {
+        rawMaterialService.export(response, rawMaterialDto);
+    }
+
+    @PostMapping("/down")
+    public void down(HttpServletResponse response,@RequestBody RawMaterialDto rawMaterialDto) {
+        rawMaterialService.down(response, rawMaterialDto);
+    }
 }
diff --git a/src/main/java/com/ruoyi/quality/dto/RawMaterialDto.java b/src/main/java/com/ruoyi/quality/dto/RawMaterialDto.java
index 7063498..7357a19 100644
--- a/src/main/java/com/ruoyi/quality/dto/RawMaterialDto.java
+++ b/src/main/java/com/ruoyi/quality/dto/RawMaterialDto.java
@@ -1,5 +1,6 @@
 package com.ruoyi.quality.dto;
 
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.inspectiontask.pojo.QualityInspectItem;
 import com.ruoyi.quality.pojo.RawMaterial;
 import io.swagger.annotations.ApiModel;
@@ -42,9 +43,11 @@
     private List<QualityInspectItem> qualityInspectItem;
 
     @ApiModelProperty("浜у搧鍚嶇О")
+    @Excel(name = "浜у搧鍚嶇О")
     private String productName;
 
     @ApiModelProperty("瑙勬牸鍨嬪彿")
+    @Excel(name = "瑙勬牸鍨嬪彿")
     private String model;
 
     @ApiModelProperty("浜у搧id")
diff --git a/src/main/java/com/ruoyi/quality/dto/RawMaterialQualityInspectItemDto.java b/src/main/java/com/ruoyi/quality/dto/RawMaterialQualityInspectItemDto.java
new file mode 100644
index 0000000..0ae9a32
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/dto/RawMaterialQualityInspectItemDto.java
@@ -0,0 +1,27 @@
+package com.ruoyi.quality.dto;
+
+import com.ruoyi.quality.pojo.RawMaterialQualityInspectItem;
+import lombok.Data;
+
+@Data
+public class RawMaterialQualityInspectItemDto extends RawMaterialQualityInspectItem {
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鍗曚綅
+     */
+    private String unit;
+
+    /**
+     * 鏍囧噯鍊�
+     */
+    private String standardValue;
+
+    /**
+     * 鍐呮帶鍊�
+     */
+    private String internalControl;
+}
diff --git a/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java b/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
index bb7f632..e6d3e7c 100644
--- a/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
+++ b/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
@@ -36,18 +36,23 @@
     private Long productModelId;
 
     @ApiModelProperty("鎵规鍙�")
+    @Excel(name = "鎵规鍙�")
     private String batchNo;
 
-    @ApiModelProperty("妫�楠岀被鍨� 0鍏ュ満妫� 1杞﹂棿妫� 2鍑哄巶妫�")
+    @ApiModelProperty("妫�楠岀被鍨� 0鍏ュ巶妫� 1杞﹂棿妫� 2鍑哄巶妫�")
+    @Excel(name = "妫�楠岀被鍨�", readConverterExp = "0=鍏ュ巶妫�,1=杞﹂棿妫�,2=鍑哄巶妫�")
     private Integer checkType;
 
     @ApiModelProperty("妫�楠岀粨鏋� 0鍚堟牸 1涓嶅悎鏍�")
+    @Excel(name = "妫�楠岀粨鏋�", readConverterExp = "0=鍚堟牸,1=涓嶅悎鏍�")
     private Integer checkResult;
 
     @ApiModelProperty("绫诲埆(0:鏈彁浜�;1:宸叉彁浜�)")
+    @Excel(name = "鎻愪氦鐘舵��", readConverterExp = "0=鏈彁浜�,1=宸叉彁浜�")
     private Integer inspectState;
 
     @ApiModelProperty("妫�楠屽憳鍚嶇О")
+    @Excel(name = "妫�楠屽憳")
     private String checkUserName;
 
     @ApiModelProperty("妫�楠屾棩鏈�")
diff --git a/src/main/java/com/ruoyi/quality/pojo/RawMaterialQualityInspectItem.java b/src/main/java/com/ruoyi/quality/pojo/RawMaterialQualityInspectItem.java
index 3b5c8e3..640dce8 100644
--- a/src/main/java/com/ruoyi/quality/pojo/RawMaterialQualityInspectItem.java
+++ b/src/main/java/com/ruoyi/quality/pojo/RawMaterialQualityInspectItem.java
@@ -44,4 +44,7 @@
     @ApiModelProperty("鏇存柊鏃堕棿")
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private LocalDateTime updateTime;
+
+    @TableField(select = false, exist = false)
+    private Integer index;
 }
diff --git a/src/main/java/com/ruoyi/quality/service/RawMaterialService.java b/src/main/java/com/ruoyi/quality/service/RawMaterialService.java
index 5155ead..d032c3c 100644
--- a/src/main/java/com/ruoyi/quality/service/RawMaterialService.java
+++ b/src/main/java/com/ruoyi/quality/service/RawMaterialService.java
@@ -6,6 +6,8 @@
 import com.ruoyi.quality.dto.RawMaterialDto;
 import com.ruoyi.quality.pojo.RawMaterial;
 
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * <p>
  *  鏈嶅姟绫�
@@ -22,4 +24,8 @@
     boolean add(RawMaterialDto rawMaterialDto);
 
     boolean update(RawMaterialDto rawMaterialDto);
+
+    void export(HttpServletResponse response, RawMaterialDto rawMaterialDto);
+
+    void down(HttpServletResponse response, RawMaterialDto rawMaterialDto);
 }
diff --git a/src/main/java/com/ruoyi/quality/service/impl/RawMaterialServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/RawMaterialServiceImpl.java
index 026fa22..035648f 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/RawMaterialServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/RawMaterialServiceImpl.java
@@ -4,6 +4,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
 import com.ruoyi.basic.mapper.ProductMapper;
 import com.ruoyi.basic.mapper.ProductModelMapper;
 import com.ruoyi.basic.pojo.Product;
@@ -11,11 +13,16 @@
 import com.ruoyi.common.enums.RawMaterialCheckResult;
 import com.ruoyi.common.enums.RawMaterialCheckType;
 import com.ruoyi.common.enums.RawMaterialInspectState;
+import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
 import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.inspectiontask.mapper.QualityInspectItemMapper;
 import com.ruoyi.inspectiontask.pojo.QualityInspectItem;
 import com.ruoyi.quality.dto.RawMaterialDto;
+import com.ruoyi.quality.dto.RawMaterialQualityInspectItemDto;
 import com.ruoyi.quality.mapper.RawMaterialMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.quality.pojo.QualityInspectParam;
 import com.ruoyi.quality.pojo.RawMaterial;
 import com.ruoyi.quality.pojo.RawMaterialQualityInspectItem;
 import com.ruoyi.quality.service.RawMaterialQualityInspectItemService;
@@ -25,6 +32,10 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -208,4 +219,72 @@
 
         return true;
     }
+
+    @Override
+    public void export(HttpServletResponse response, RawMaterialDto rawMaterialDto) {
+        List<RawMaterialDto> rawMaterials = rawMaterialMapper.listPage(new Page<>(1, Integer.MAX_VALUE), rawMaterialDto).getRecords();
+        ExcelUtil<RawMaterialDto> util = new ExcelUtil<RawMaterialDto>(RawMaterialDto.class);
+        util.exportExcel(response, rawMaterials, "鍘熸枡妫�楠屽鍑�");
+    }
+
+    @Override
+    public void down(HttpServletResponse response, RawMaterialDto rawMaterialDto) {
+        RawMaterial rawMaterial = rawMaterialMapper.selectById(rawMaterialDto.getId());
+        // 鑾峰彇浜у搧鍨嬪彿淇℃伅
+        ProductModel productModel = productModelMapper.selectById(rawMaterial.getProductModelId());
+        Product product = productMapper.selectById(productModel.getProductId());
+        RawMaterialDto inspect = new RawMaterialDto();
+        BeanUtils.copyProperties(rawMaterial, inspect);
+        inspect.setModel(productModel.getModel());
+        inspect.setProductName(product.getProductName());
+        inspect.setCheckTypeText(RawMaterialCheckType.fromValue(rawMaterial.getCheckType()) == null ? "" : RawMaterialCheckType.fromValue(rawMaterial.getCheckType()).getValue());
+        inspect.setCheckResultText(RawMaterialCheckResult.fromValue(rawMaterial.getCheckResult()) == null ? "" : RawMaterialCheckResult.fromValue(rawMaterial.getCheckResult()).getValue());
+
+        List<RawMaterialQualityInspectItem> paramList = rawMaterialQualityInspectItemService.list(
+                new LambdaQueryWrapper<RawMaterialQualityInspectItem>()
+                        .eq(RawMaterialQualityInspectItem::getRawMaterialId, rawMaterialDto.getId())
+        );
+        List<RawMaterialQualityInspectItemDto> inspectItems = new ArrayList<>();
+
+        int index = 1;
+        for (RawMaterialQualityInspectItem item : paramList) {
+            RawMaterialQualityInspectItemDto dto = new RawMaterialQualityInspectItemDto();
+            BeanUtils.copyProperties(item, dto);
+            QualityInspectItem qualityInspectItem = qualityInspectItemMapper.selectById(item.getQualityInspectItemId());
+            dto.setName(qualityInspectItem.getName());
+            dto.setUnit(qualityInspectItem.getUnit());
+            dto.setStandardValue(qualityInspectItem.getStandardValue());
+            dto.setInternalControl(qualityInspectItem.getInternalControl());
+            dto.setIndex(index);
+            inspectItems.add(dto);
+            index++;
+        }
+
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.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", inspectItems);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "妫�楠屾姤鍛�", "UTF-8");
+            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+            inputStream.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
 }
\ No newline at end of file
diff --git a/src/main/resources/static/report-template.docx b/src/main/resources/static/report-template.docx
index 6824a62..d202094 100644
--- a/src/main/resources/static/report-template.docx
+++ b/src/main/resources/static/report-template.docx
Binary files differ

--
Gitblit v1.9.3