From ebfc4e86415881146c7ae221feb6aa4ff64c8a3c Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期三, 14 一月 2026 17:48:32 +0800
Subject: [PATCH] feat: 合格率统计调整,明细表格导出接口

---
 inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java          |   29 ++++++++------
 inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml                       |   19 ++++++---
 inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java |   51 +++++++++++++++++++++++++
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java         |    6 +++
 4 files changed, 86 insertions(+), 19 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java
index 933df44..c6efafd 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java
@@ -2,7 +2,9 @@
 
 import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
 import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.inspect.dto.DataAnalysisDto;
+import com.ruoyi.inspect.dto.MaterialPropTableDTO;
 import com.ruoyi.inspect.service.DataAnalysisService;
 import com.ruoyi.inspect.vo.DeviationAnalyzeVo;
 import io.swagger.annotations.Api;
@@ -10,6 +12,9 @@
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.List;
 
 /**
@@ -51,7 +56,7 @@
     /**
      * 鏌ヨ鐗╂枡灞炴�у悎鏍肩巼琛ㄦ牸
      *
-     * @param dataAnalysisDto
+     * @param dataAnalysisDto 鏌ヨ鍙傛暟
      * @return
      */
     @ApiOperation(value = "鏌ヨ鐗╂枡灞炴�у悎鏍肩巼琛ㄦ牸")
@@ -60,6 +65,50 @@
         return Result.success(dataAnalysisService.getMaterialPropTable(dataAnalysisDto));
     }
 
+    @PostMapping("/exportSupplierExcel")
+    public void exportSupplierExcel(HttpServletResponse response, @RequestBody List<MaterialPropTableDTO> materialProps) {
+
+        if (materialProps == null || materialProps.isEmpty()) {
+            return;
+        }
+
+        int index = 1;
+        for (MaterialPropTableDTO dto : materialProps) {
+            dto.setIndex(String.valueOf(index++));
+        }
+
+        int totalBatchSum = 0;
+        int unqualifiedBatchSum = 0;
+
+        for (MaterialPropTableDTO dto : materialProps) {
+            if (dto.getTotalBatch() != null) {
+                totalBatchSum += dto.getTotalBatch();
+            }
+            if (dto.getUnqualifiedBatch() != null) {
+                unqualifiedBatchSum += dto.getUnqualifiedBatch();
+            }
+        }
+
+        BigDecimal passRateSum = BigDecimal.ZERO;
+        if (totalBatchSum > 0) {
+            passRateSum = BigDecimal
+                    .valueOf(totalBatchSum - unqualifiedBatchSum)
+                    .multiply(BigDecimal.valueOf(100))
+                    .divide(BigDecimal.valueOf(totalBatchSum), 2, RoundingMode.HALF_UP);
+        }
+
+        MaterialPropTableDTO totalRow = new MaterialPropTableDTO();
+        totalRow.setIndex("鍚堣");
+        totalRow.setSupplierName("");
+        totalRow.setTotalBatch(totalBatchSum);
+        totalRow.setUnqualifiedBatch(unqualifiedBatchSum);
+        totalRow.setPassRate(passRateSum);
+        materialProps.add(totalRow);
+
+        ExcelUtil<MaterialPropTableDTO> excelUtil = new ExcelUtil<>(MaterialPropTableDTO.class);
+        excelUtil.exportExcel(response, materialProps, "鍚堟牸鐜囩粺璁�");
+    }
+
     /**
      * 鏌ヨ鍘熸潗鏂欓」
      *
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java
index 2e76cd1..091c6a6 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java
@@ -1,26 +1,31 @@
 package com.ruoyi.inspect.dto;
 
+import com.ruoyi.common.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
-import java.util.Date;
 
 @Data
 public class MaterialPropTableDTO {
 
-    @ApiModelProperty(value = "淇敼鍚庢壒娆″彿")
-    private String updateBatchNo;
+    @Excel(name = "搴忓彿")
+    @ApiModelProperty(value = "搴忓彿")
+    private String index;
 
-    @ApiModelProperty(value = "鎶佃揪鐨勯噰璐暟閲�")
-    private BigDecimal qtyArrived;
+    @Excel(name = "渚涘簲鍟嗗悕绉�")
+    @ApiModelProperty(value = "渚涘簲鍟嗗悕绉�")
+    private String supplierName;
 
-    @ApiModelProperty(value = "闆朵欢鎻忚堪")
-    private String partDesc;
+    @Excel(name = "鍒拌揣鎵规")
+    @ApiModelProperty(value = "鍒拌揣鎵规")
+    private Integer totalBatch;
 
-    @ApiModelProperty(value = "鍚堟牸鐘舵��")
-    private Integer inspectStatus;
+    @Excel(name = "涓嶅悎鏍兼壒娆�")
+    @ApiModelProperty(value = "涓嶅悎鏍兼壒娆�")
+    private Integer unqualifiedBatch;
 
-    @ApiModelProperty(value = "涓嬪彂鏃堕棿")
-    private Date sendTime;
-}
+    @Excel(name = "鍚堟牸鐜�(%)")
+    @ApiModelProperty(value = "鍚堟牸鐜�(%)")
+    private BigDecimal passRate;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java
index 123c9fe..e108c5d 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java
@@ -47,6 +47,12 @@
      */
     Map<String, Object> getRawPassRateByCake(@Param("dto") DataAnalysisDto dataAnalysisDto);
 
+    /**
+     * 鏌ョ湅鐗╂枡灞炴�ф槑缁嗚〃鏍�
+     *
+     * @param dataAnalysisDto 鏌ユ壘鍊�
+     * @return 鏄庣粏琛ㄦ牸
+     */
     List<MaterialPropTableDTO> getMaterialPropTable(@Param("dto") DataAnalysisDto dataAnalysisDto);
 
 
diff --git a/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml b/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
index 3c19453..749041b 100644
--- a/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
+++ b/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
@@ -241,17 +241,18 @@
 
     <select id="getMaterialPropTable" resultType="com.ruoyi.inspect.dto.MaterialPropTableDTO">
         SELECT
-        iiq.update_batch_no AS updateBatchNo, -- 淇敼鍚庢壒娆″彿
-        iiq.qty_arrived AS qtyArrived, -- 鎶佃揪鐨勯噰璐暟閲�
-        iiq.part_desc AS partDesc, -- 闆朵欢鎻忚堪
-        iiq.inspect_status AS inspectStatus, -- 鍚堟牸鐘舵��
-        io1.send_time AS sendTime -- 涓嬪彂鏃堕棿
+        iiq.supplier_name AS supplierName,
+        COUNT(*) AS totalBatch,
+        SUM(CASE WHEN iiq.inspect_status = 2 THEN 1 ELSE 0 END) AS unqualifiedBatch,
+        ROUND(SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) / COUNT(*)* 100, 2 ) AS passRate
+
         FROM ifs_inventory_quantity iiq
         INNER JOIN ins_order io1
         ON io1.ifs_inventory_id = iiq.id
         AND io1.order_type = #{dto.orderType}
         AND io1.state != -1
         AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
+
         LEFT JOIN (
         SELECT
         ins_order_id,
@@ -260,6 +261,7 @@
         FROM ins_sample
         GROUP BY ins_order_id
         ) ins ON ins.ins_order_id = io1.id
+
         WHERE
         iiq.is_finish = 1
         AND iiq.inspect_status IN (1,2)
@@ -280,7 +282,12 @@
             AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
         </if>
 
-        ORDER BY io1.send_time DESC
+        GROUP BY
+        iiq.supplier_name
+
+        ORDER BY
+        passRate DESC;
+
     </select>
 
     <select id="getRawProductAnalysisAllSample" resultType="com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto">

--
Gitblit v1.9.3