From 8341ec7982e0d0fdae67ae32c8f55e4292c9605a Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 18 三月 2026 14:12:59 +0800
Subject: [PATCH] 1.报表管理(报表管理:原材料、半成品、成品的数据统计,做成入厂检、车间检、出厂检的数据统计)

---
 src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java               |    7 
 src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java |    3 
 src/main/java/com/ruoyi/quality/pojo/RawMaterial.java                      |   13 
 src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml             |    1 
 src/main/resources/mapper/quality/QualityInspectMapper.xml                 |  578 ++++++++++++++++++++++------------------------------
 5 files changed, 255 insertions(+), 347 deletions(-)

diff --git a/src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java b/src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java
index d2f8e88..18472d4 100644
--- a/src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java
+++ b/src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java
@@ -136,8 +136,13 @@
     @ApiModelProperty("鍏宠仈妫�娴媔d")
     private Long inspectId;
 
-
     @ApiModelProperty("鏄惁涓嶅悎鏍煎鐞嗚嚜宸辨柊澧�")
     @TableField(exist = false)
     private Boolean method;
+
+    @ApiModelProperty("鎵瑰彿")
+    private Boolean batchNo;
+
+    @ApiModelProperty("妫�娴嬬被鍨�")
+    private Integer checkType;
 }
diff --git a/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java b/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
index f84e322..bf7d158 100644
--- a/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
+++ b/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
@@ -1,13 +1,6 @@
 package com.ruoyi.quality.pojo;
 
 import com.baomidou.mybatisplus.annotation.*;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.Date;
-
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.annotations.ApiModel;
@@ -15,6 +8,10 @@
 import lombok.Getter;
 import lombok.Setter;
 import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * <p>
@@ -47,7 +44,7 @@
     private String batchNo;
 
     @ApiModelProperty("妫�楠岀粨鏋� 0鍚堟牸 1涓嶅悎鏍�")
-    @Excel(name = "妫�楠岀粨鏋�", readConverterExp = "0=鍚堟牸,1=涓嶅悎鏍�")
+    @Excel(name = "妫�楠岀粨鏋�", readConverterExp = "0=涓嶅悎鏍�,1=鍚堟牸")
     private Integer checkResult;
 
     @ApiModelProperty("绫诲埆(0:鏈彁浜�;1:宸叉彁浜�)")
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
index f01f315..cd2aee6 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
@@ -1,9 +1,6 @@
 package com.ruoyi.quality.service.impl;
 
-import com.ruoyi.basic.service.IProductModelService;
-import com.ruoyi.basic.service.IProductService;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.production.service.ProductOrderService;
 import com.ruoyi.quality.dto.*;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.quality.service.QualityReportService;
diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index 48fb369..5d12ed6 100644
--- a/src/main/resources/mapper/quality/QualityInspectMapper.xml
+++ b/src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -75,369 +75,277 @@
     </delete>
 
     <select id="getInspectStatistics" resultType="com.ruoyi.quality.dto.QualityInspectStatDto">
-        SELECT CASE pp.product_name
-                   WHEN '鍘熸潗鏂�' THEN 0
-                   WHEN '鍗婃垚鍝�' THEN 1
-                   WHEN '鎴愬搧' THEN 2
-                   END                     AS modelType,
-
-               IFNULL(SUM(qi.quantity), 0) AS totalCount,
-
-               IFNULL(SUM(CASE
-                              WHEN qi.inspect_state = 1 THEN qi.quantity
-                              ELSE 0
-                   END), 0)                AS completedCount
-
-        FROM product p
-                 INNER JOIN product pp
-                            ON p.parent_id = pp.id
-                 LEFT JOIN product_model pm
-                           ON pm.product_id = p.id
-                 LEFT JOIN quality_inspect qi
-                           ON qi.product_model_id = pm.id
-
-        WHERE pp.product_name IN ('鍘熸潗鏂�', '鍗婃垚鍝�', '鎴愬搧')
-
-        GROUP BY pp.product_name
-
+        SELECT
+            rm.check_type AS modelType,
+            COUNT(*) AS totalCount,
+            SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) AS completedCount,
+            SUM(CASE WHEN rm.inspect_state = 0 THEN 1 ELSE 0 END) AS uncommittedCount
+        FROM raw_material rm
+        WHERE rm.inspect_state IN (0, 1)
+        GROUP BY rm.check_type
+        ORDER BY rm.check_type;
     </select>
 
     <select id="getPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto">
-        SELECT t.modelType,
-
-               COALESCE(SUM(qi.quantity), 0) AS totalCount,
-
-               COALESCE(SUM(
-                                CASE
-                                    WHEN qi.inspect_state = 1 THEN qi.quantity
-                                    ELSE 0
-                                    END
-                        ), 0)                AS completedCount,
-
-               COALESCE(SUM(
-                                CASE
-                                    WHEN qi.inspect_state = 1
-                                        AND qi.check_result = '鍚堟牸'
-                                        THEN qi.quantity
-                                    ELSE 0
-                                    END
-                        ), 0)                AS qualifiedCount,
-
-               COALESCE(SUM(
-                                CASE
-                                    WHEN qi.inspect_state = 1
-                                        AND qi.check_result = '涓嶅悎鏍�'
-                                        THEN qi.quantity
-                                    ELSE 0
-                                    END
-                        ), 0)                AS unqualifiedCount,
-
-            /* 瀹屾垚鐜� */
-               IF(COALESCE(SUM(qi.quantity), 0) = 0, 0,
-                  ROUND(
-                          COALESCE(SUM(
-                                           CASE
-                                               WHEN qi.inspect_state = 1 THEN qi.quantity
-                                               ELSE 0
-                                               END
-                                   ), 0)
-                              / SUM(qi.quantity) * 100, 2)
-               )                             AS completionRate,
-
-            /* 鍚堟牸鐜� */
-               IF(COALESCE(SUM(
-                                   CASE
-                                       WHEN qi.inspect_state = 1 THEN qi.quantity
-                                       ELSE 0
-                                       END
-                           ), 0) = 0, 0,
-                  ROUND(
-                          COALESCE(SUM(
-                                           CASE
-                                               WHEN qi.inspect_state = 1
-                                                   AND qi.check_result = '鍚堟牸'
-                                                   THEN qi.quantity
-                                               ELSE 0
-                                               END
-                                   ), 0)
-                              /
-                          COALESCE(SUM(
-                                           CASE
-                                               WHEN qi.inspect_state = 1 THEN qi.quantity
-                                               ELSE 0
-                                               END
-                                   ), 0) * 100, 2)
-               )                             AS passRate
-
-        FROM (SELECT 0 AS modelType
-              UNION ALL
-              SELECT 1
-              UNION ALL
-              SELECT 2) t
-                 LEFT JOIN product p
-                           ON 1 = 1
-                 LEFT JOIN product pp
-                           ON p.parent_id = pp.id
-                 LEFT JOIN product_model pm
-                           ON pm.product_id = p.id
-                 LEFT JOIN quality_inspect qi
-                           ON qi.product_model_id = pm.id
-                               AND (
-                                  (pp.product_name = '鍘熸潗鏂�' AND t.modelType = 0) OR
-                                  (pp.product_name = '鍗婃垚鍝�' AND t.modelType = 1) OR
-                                  (pp.product_name = '鎴愬搧' AND t.modelType = 2)
-                                  )
-
-        GROUP BY t.modelType
+        SELECT
+            t.modelType,
+            COALESCE(rm.totalCount, 0) AS totalCount,
+            COALESCE(rm.completedCount, 0) AS completedCount,
+            COALESCE(rm.qualifiedCount, 0) AS qualifiedCount,
+            COALESCE(rm.unqualifiedCount, 0) AS unqualifiedCount,
+            COALESCE(rm.uncommittedCount, 0) AS uncommittedCount,
+            COALESCE(rm.completionRate, 0) AS completionRate,
+            COALESCE(rm.passRate, 0) AS passRate
+        FROM (
+                 SELECT 0 AS modelType
+                 UNION ALL
+                 SELECT 1
+                 UNION ALL
+                 SELECT 2
+             ) t
+                 LEFT JOIN (
+            SELECT
+                rm.check_type AS modelType,
+                COUNT(*) AS totalCount,
+                SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) AS completedCount,
+                SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 1 THEN 1 ELSE 0 END) AS qualifiedCount,
+                SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 0 THEN 1 ELSE 0 END) AS unqualifiedCount,
+                SUM(CASE WHEN rm.inspect_state = 0 THEN 1 ELSE 0 END) AS uncommittedCount,
+                IF(COUNT(*) = 0, 0,
+                   ROUND(SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2)
+                ) AS completionRate,
+                IF(SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) = 0, 0,
+                   ROUND(SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 1 THEN 1 ELSE 0 END) /
+                         SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) * 100, 2)
+                ) AS passRate
+            FROM raw_material rm
+            GROUP BY rm.check_type
+        ) rm ON t.modelType = rm.modelType
         ORDER BY t.modelType;
     </select>
 
 
     <select id="getMonthlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityMonthlyPassRateDto">
         WITH RECURSIVE
-            months AS (SELECT 1 AS month_num
-                       UNION ALL
-                       SELECT month_num + 1
-                       FROM months
-                       WHERE month_num &lt; 12),
-            types AS (SELECT 0 AS modelType
-                      UNION ALL
-                      SELECT 1
-                      UNION ALL
-                      SELECT 2),
-            base AS (SELECT m.month_num, t.modelType
-                     FROM months m
-                              CROSS JOIN types t)
-
-        SELECT CASE b.month_num
-                   WHEN 1 THEN '涓�鏈�'
-                   WHEN 2 THEN '浜屾湀'
-                   WHEN 3 THEN '涓夋湀'
-                   WHEN 4 THEN '鍥涙湀'
-                   WHEN 5 THEN '浜旀湀'
-                   WHEN 6 THEN '鍏湀'
-                   WHEN 7 THEN '涓冩湀'
-                   WHEN 8 THEN '鍏湀'
-                   WHEN 9 THEN '涔濇湀'
-                   WHEN 10 THEN '鍗佹湀'
-                   WHEN 11 THEN '鍗佷竴鏈�'
-                   WHEN 12 THEN '鍗佷簩鏈�'
-                   END                       AS month,
-
-               b.modelType,
-
-            /* 鎬绘暟閲� */
-               COALESCE(SUM(qi.quantity), 0) AS totalCount,
-
-            /* 宸插畬鎴� */
-               COALESCE(SUM(
-                                CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
-                        ), 0)                AS completedCount,
-
-            /* 鍚堟牸 */
-               COALESCE(SUM(
-                                CASE
-                                    WHEN qi.inspect_state = 1 AND qi.check_result = '鍚堟牸'
-                                        THEN qi.quantity
-                                    ELSE 0
-                                    END
-                        ), 0)                AS qualifiedCount,
-
-            /* 涓嶅悎鏍� */
-               COALESCE(SUM(
-                                CASE
-                                    WHEN qi.inspect_state = 1 AND qi.check_result = '涓嶅悎鏍�'
-                                        THEN qi.quantity
-                                    ELSE 0
-                                    END
-                        ), 0)                AS unqualifiedCount,
-
-            /* 瀹屾垚鐜� */
-               IF(COALESCE(SUM(qi.quantity), 0) = 0, 0,
-                  ROUND(
-                          COALESCE(SUM(
-                                           CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
-                                   ), 0) / SUM(qi.quantity) * 100, 2
-                  )
-               )                             AS completionRate,
-
-            /* 鍚堟牸鐜� */
-               IF(COALESCE(SUM(
-                                   CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
-                           ), 0) = 0, 0,
-                  ROUND(
-                          COALESCE(SUM(
-                                           CASE
-                                               WHEN qi.inspect_state = 1 AND qi.check_result = '鍚堟牸'
-                                                   THEN qi.quantity
-                                               ELSE 0
-                                               END
-                                   ), 0)
-                              /
-                          COALESCE(SUM(
-                                           CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
-                                   ), 0) * 100, 2
-                  )
-               )                             AS passRate
-
+        months AS (
+        SELECT 1 AS month_num
+        UNION ALL
+        SELECT month_num + 1
+        FROM months
+        WHERE month_num &lt; 12
+        ),
+        types AS (
+        SELECT 0 AS modelType
+        UNION ALL
+        SELECT 1
+        UNION ALL
+        SELECT 2
+        ),
+        base AS (
+        SELECT m.month_num, t.modelType
+        FROM months m
+        CROSS JOIN types t
+        )
+        SELECT
+        CASE b.month_num
+        WHEN 1 THEN '涓�鏈�'
+        WHEN 2 THEN '浜屾湀'
+        WHEN 3 THEN '涓夋湀'
+        WHEN 4 THEN '鍥涙湀'
+        WHEN 5 THEN '浜旀湀'
+        WHEN 6 THEN '鍏湀'
+        WHEN 7 THEN '涓冩湀'
+        WHEN 8 THEN '鍏湀'
+        WHEN 9 THEN '涔濇湀'
+        WHEN 10 THEN '鍗佹湀'
+        WHEN 11 THEN '鍗佷竴鏈�'
+        WHEN 12 THEN '鍗佷簩鏈�'
+        END AS month,
+        b.modelType,
+        COALESCE(rm.totalCount, 0) AS totalCount,
+        COALESCE(rm.completedCount, 0) AS completedCount,
+        COALESCE(rm.qualifiedCount, 0) AS qualifiedCount,
+        COALESCE(rm.unqualifiedCount, 0) AS unqualifiedCount,
+        COALESCE(rm.uncommittedCount, 0) AS uncommittedCount,
+        COALESCE(rm.completionRate, 0) AS completionRate,
+        COALESCE(rm.passRate, 0) AS passRate
         FROM base b
-                 LEFT JOIN product p ON 1 = 1
-                 LEFT JOIN product pp ON p.parent_id = pp.id
-                 LEFT JOIN product_model pm ON pm.product_id = p.id
-                 LEFT JOIN quality_inspect qi
-                           ON qi.product_model_id = pm.id
-                               AND YEAR(qi.check_time) = #{year}
-                               AND MONTH(qi.check_time) = b.month_num
-                               AND (
-                                  (pp.product_name = '鍘熸潗鏂�' AND b.modelType = 0)
-                                      OR (pp.product_name = '鍗婃垚鍝�' AND b.modelType = 1)
-                                      OR (pp.product_name = '鎴愬搧' AND b.modelType = 2)
-                                  )
-
-        GROUP BY b.month_num, b.modelType
+        LEFT JOIN (
+        SELECT
+        MONTH(rm.create_time) AS month_num,
+        rm.check_type AS modelType,
+        COUNT(*) AS totalCount,
+        SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) AS completedCount,
+        SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 1 THEN 1 ELSE 0 END) AS qualifiedCount,
+        SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 0 THEN 1 ELSE 0 END) AS unqualifiedCount,
+        SUM(CASE WHEN rm.inspect_state = 0 THEN 1 ELSE 0 END) AS uncommittedCount,
+        IF(COUNT(*) = 0, 0,
+        ROUND(SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2)
+        ) AS completionRate,
+        IF(SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) = 0, 0,
+        ROUND(SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 1 THEN 1 ELSE 0 END) /
+        SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) * 100, 2)
+        ) AS passRate
+        FROM raw_material rm
+        WHERE YEAR(rm.create_time) = #{year}  -- 鎸夊勾浠界瓫閫�
+        GROUP BY MONTH(rm.create_time), rm.check_type
+        ) rm ON b.month_num = rm.month_num AND b.modelType = rm.modelType
         ORDER BY b.month_num, b.modelType;
-
     </select>
 
     <select id="getYearlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto">
-        SELECT t.modelType,
-
-               COALESCE(SUM(
-                                CASE
-                                    WHEN pp.product_name = '鍘熸潗鏂�' AND t.modelType = 0 THEN qi.quantity
-                                    WHEN pp.product_name = '鍗婃垚鍝�' AND t.modelType = 1 THEN qi.quantity
-                                    WHEN pp.product_name = '鎴愬搧' AND t.modelType = 2 THEN qi.quantity
-                                    ELSE 0
-                                    END
-                        ), 0) AS totalCount
-
-        FROM (SELECT 0 AS modelType
-              UNION ALL
-              SELECT 1
-              UNION ALL
-              SELECT 2) t
-                 LEFT JOIN product p ON 1 = 1
-                 LEFT JOIN product pp ON p.parent_id = pp.id
-                 LEFT JOIN product_model pm ON pm.product_id = p.id
-                 LEFT JOIN quality_inspect qi
-                           ON qi.product_model_id = pm.id
-                               AND YEAR(qi.check_time) = #{year}
-                               AND qi.inspect_state = 1
-                               AND qi.check_result = '鍚堟牸'
-
-        GROUP BY t.modelType
+        SELECT
+            t.modelType,
+            COALESCE(rm.totalCount, 0) AS totalCount,
+            COALESCE(rm.completedCount, 0) AS completedCount,
+            COALESCE(rm.uncommittedCount, 0) AS uncommittedCount,
+            COALESCE(rm.qualifiedCount, 0) AS qualifiedCount,
+            COALESCE(rm.unqualifiedCount, 0) AS unqualifiedCount,
+            COALESCE(rm.completionRate, 0) AS completionRate,
+            COALESCE(rm.passRate, 0) AS passRate
+        FROM (
+                 SELECT 0 AS modelType
+                 UNION ALL
+                 SELECT 1
+                 UNION ALL
+                 SELECT 2
+             ) t
+                 LEFT JOIN (
+            SELECT
+                rm.check_type AS modelType,
+                COUNT(*) AS totalCount,
+                SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) AS completedCount,
+                SUM(CASE WHEN rm.inspect_state = 0 THEN 1 ELSE 0 END) AS uncommittedCount,
+                SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 1 THEN 1 ELSE 0 END) AS qualifiedCount,
+                SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 0 THEN 1 ELSE 0 END) AS unqualifiedCount,
+                -- 瀹屾垚鐜� = 宸叉彁浜ゆ暟閲� / 鎬绘暟閲� * 100
+                IF(COUNT(*) = 0, 0,
+                   ROUND(SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2)
+                ) AS completionRate,
+                -- 鍚堟牸鐜� = 鍚堟牸鏁伴噺 / 宸叉彁浜ゆ暟閲� * 100
+                IF(SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) = 0, 0,
+                   ROUND(SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 1 THEN 1 ELSE 0 END) /
+                         SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) * 100, 2)
+                ) AS passRate
+            FROM raw_material rm
+            WHERE rm.inspect_state IN (0, 1)
+              AND YEAR(rm.create_time) = #{year}  -- 鎸夊勾浠界瓫閫夛紝鍋囪鏈夋椂闂村瓧娈�
+            GROUP BY rm.check_type
+        ) rm ON t.modelType = rm.modelType
         ORDER BY t.modelType;
     </select>
 
 
 
     <select id="getMonthlyCompletionDetails" resultType="com.ruoyi.quality.dto.QualityMonthlyDetailDto">
-        WITH RECURSIVE months AS (SELECT 1 AS month_num
-                                  UNION ALL
-                                  SELECT month_num + 1
-                                  FROM months
-                                  WHERE month_num &lt; 12)
-        SELECT CASE m.month_num
-                   WHEN 1 THEN '涓�鏈�'
-                   WHEN 2 THEN '浜屾湀'
-                   WHEN 3 THEN '涓夋湀'
-                   WHEN 4 THEN '鍥涙湀'
-                   WHEN 5 THEN '浜旀湀'
-                   WHEN 6 THEN '鍏湀'
-                   WHEN 7 THEN '涓冩湀'
-                   WHEN 8 THEN '鍏湀'
-                   WHEN 9 THEN '涔濇湀'
-                   WHEN 10 THEN '鍗佹湀'
-                   WHEN 11 THEN '鍗佷竴鏈�'
-                   WHEN 12 THEN '鍗佷簩鏈�'
-                   END        AS month,
-
-            /* 鍘熸潗鏂� */
-               COALESCE(SUM(
-                                CASE
-                                    WHEN pp.product_name = '鍘熸潗鏂�'
-                                        THEN qi.quantity
-                                    ELSE 0
-                                    END
-                        ), 0) AS rawMaterialCount,
-
-            /* 鍗婃垚鍝� */
-               COALESCE(SUM(
-                                CASE
-                                    WHEN pp.product_name = '鍗婃垚鍝�'
-                                        THEN qi.quantity
-                                    ELSE 0
-                                    END
-                        ), 0) AS processCount,
-
-            /* 鎴愬搧 */
-               COALESCE(SUM(
-                                CASE
-                                    WHEN pp.product_name = '鎴愬搧'
-                                        THEN qi.quantity
-                                    ELSE 0
-                                    END
-                        ), 0) AS outgoingCount
-
+        WITH RECURSIVE months AS (
+        SELECT 1 AS month_num
+        UNION ALL
+        SELECT month_num + 1
+        FROM months
+        WHERE month_num &lt; 12
+        )
+        SELECT
+        CASE m.month_num
+        WHEN 1 THEN '涓�鏈�'
+        WHEN 2 THEN '浜屾湀'
+        WHEN 3 THEN '涓夋湀'
+        WHEN 4 THEN '鍥涙湀'
+        WHEN 5 THEN '浜旀湀'
+        WHEN 6 THEN '鍏湀'
+        WHEN 7 THEN '涓冩湀'
+        WHEN 8 THEN '鍏湀'
+        WHEN 9 THEN '涔濇湀'
+        WHEN 10 THEN '鍗佹湀'
+        WHEN 11 THEN '鍗佷竴鏈�'
+        WHEN 12 THEN '鍗佷簩鏈�'
+        END AS month,
+        /* 鍏ュ満妫� (check_type = 0) */
+        COALESCE(SUM(
+        CASE
+        WHEN rm.check_type = 0
+        THEN 1  -- 缁熻璁板綍鏁帮紝鍥犱负鍘烻QL鐢ㄧ殑鏄痲uantity瀛楁
+        ELSE 0
+        END
+        ), 0) AS rawMaterialCount,
+        /* 杞﹂棿妫� (check_type = 1) */
+        COALESCE(SUM(
+        CASE
+        WHEN rm.check_type = 1
+        THEN 1
+        ELSE 0
+        END
+        ), 0) AS processCount,
+        /* 鍑哄巶妫� (check_type = 2) */
+        COALESCE(SUM(
+        CASE
+        WHEN rm.check_type = 2
+        THEN 1
+        ELSE 0
+        END
+        ), 0) AS outgoingCount
         FROM months m
-                 LEFT JOIN product p ON 1 = 1
-                 LEFT JOIN product pp ON p.parent_id = pp.id
-                 LEFT JOIN product_model pm ON pm.product_id = p.id
-                 LEFT JOIN quality_inspect qi
-                           ON qi.product_model_id = pm.id
-                               AND qi.inspect_state = 1
-                               AND YEAR(qi.check_time) = #{year}
-                               AND MONTH(qi.check_time) = m.month_num
-
+        LEFT JOIN raw_material rm
+        ON YEAR(rm.create_time) = #{year}
+        AND MONTH(rm.create_time) = m.month_num
+        AND rm.inspect_state = 1      -- 宸叉彁浜�
+        AND rm.check_result = 1       -- 鍚堟牸
         GROUP BY m.month_num
         ORDER BY m.month_num;
-
     </select>
 
     <select id="getTopParameters" resultType="com.ruoyi.quality.dto.QualityParameterStatDto">
-        WITH parameter_counts AS (SELECT qip.parameter_item AS name,
-                                         COUNT(*)           AS count
-                                  FROM quality_inspect_param qip
-                                           JOIN quality_inspect qi
-                                                ON qip.inspect_id = qi.id
-                                           JOIN product p
-                                                ON qi.product_id = p.id
-                                           JOIN product pp
-                                                ON p.parent_id = pp.id
-                                  WHERE qi.inspect_state = 1
-                                    AND (
-                                      (#{modelType} = 1 AND pp.product_name = '鍘熸潗鏂�')
-                                          OR (#{modelType} = 2 AND pp.product_name = '鍗婃垚鍝�')
-                                          OR (#{modelType} = 3 AND pp.product_name = '鎴愬搧')
-                                      )
-                                  GROUP BY qip.parameter_item),
-             ranked AS (SELECT name,
-                               count,
-                               ROW_NUMBER() OVER (ORDER BY count DESC) AS rn
-                        FROM parameter_counts),
-             total AS (SELECT SUM(count) AS total_count
-                       FROM parameter_counts)
+        WITH parameter_counts AS (
+        SELECT
+        qii.name,
+        COUNT(*) AS count
+        FROM raw_material rm
+        LEFT JOIN raw_material_quality_inspect_item rmqi
+        ON rmqi.raw_material_id = rm.id
+        LEFT JOIN quality_inspect_item qii
+        ON qii.id = rmqi.quality_inspect_item_id
+        WHERE qii.name IS NOT NULL
+        AND rm.check_type = CASE
+        WHEN #{modelType} = 1 THEN 0   -- 鍓嶇1 鈫� 鏁版嵁搴�0
+        WHEN #{modelType} = 2 THEN 1   -- 鍓嶇2 鈫� 鏁版嵁搴�1
+        WHEN #{modelType} = 3 THEN 2   -- 鍓嶇3 鈫� 鏁版嵁搴�2
+        END
+        GROUP BY qii.name
+        ),
+        ranked AS (
+        SELECT
+        name,
+        count,
+        ROW_NUMBER() OVER (ORDER BY count DESC) AS rn
+        FROM parameter_counts
+        ),
+        total AS (
+        SELECT SUM(count) AS total_count
+        FROM parameter_counts
+        )
 
-        SELECT name,
-               count,
-               CASE
-                   WHEN (SELECT total_count FROM total) = 0 THEN 0
-                   ELSE ROUND(count / (SELECT total_count FROM total) * 100, 2)
-                   END AS percentage
-        FROM (SELECT name, count, rn
-              FROM ranked
-              WHERE rn &lt;= 4
-
-              UNION ALL
-
-              SELECT '鍏朵粬妫�娴�' AS name,
-                     SUM(count) AS count,
-                     5          AS rn
-              FROM ranked
-              WHERE rn > 4
-              HAVING SUM(count) > 0) t
+        SELECT
+        name,
+        count,
+        CASE
+        WHEN (SELECT total_count FROM total) = 0 THEN 0
+        ELSE ROUND(count / (SELECT total_count FROM total) * 100, 2)
+        END AS percentage
+        FROM (
+        SELECT name, count, rn
+        FROM ranked
+        WHERE rn &lt;= 4
+        UNION ALL
+        -- 鍏朵粬鍚堝苟
+        SELECT
+        '鍏朵粬妫�娴�' AS name,
+        SUM(count) AS count,
+        5 AS rn
+        FROM ranked
+        WHERE rn > 4
+        HAVING SUM(count) > 0
+        ) t
         ORDER BY rn;
-
     </select>
 
 
diff --git a/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml b/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
index 5bda4f6..48ec471 100644
--- a/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
+++ b/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
@@ -16,6 +16,7 @@
         qu.deal_result,
         qu.deal_name,
         qu.deal_time,
+        qu.batch_no,
         CASE
         WHEN qu.model = pm.id THEN pm.model
         ELSE qu.model

--
Gitblit v1.9.3