From dce3d86ba66f008832a4e63f2a9cd5fd3544a27c Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 02 二月 2026 11:18:24 +0800
Subject: [PATCH] fix: 质量管理-报表管理数据查询错误修改

---
 src/main/resources/mapper/quality/QualityInspectMapper.xml |  369 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 368 insertions(+), 1 deletions(-)

diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index 4e8a057..0efab8c 100644
--- a/src/main/resources/mapper/quality/QualityInspectMapper.xml
+++ b/src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -23,7 +23,7 @@
             AND check_time &gt;= DATE_FORMAT(#{qualityInspect.entryDateStart},'%Y-%m-%d')
         </if>
         <if test="qualityInspect.entryDateEnd != null and qualityInspect.entryDateEnd != '' ">
-            AND  check_time &lt;= DATE_FORMAT(#{qualityInspect.entryDateEnd},'%Y-%m-%d')
+            AND check_time &lt;= DATE_FORMAT(#{qualityInspect.entryDateEnd},'%Y-%m-%d')
         </if>
         ORDER BY check_time DESC
     </select>
@@ -55,4 +55,371 @@
         </foreach>
     </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>
+
+    <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
+        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
+
+        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
+        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
+        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
+
+        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
+
+        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)
+
+        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>
+
+
 </mapper>

--
Gitblit v1.9.3