From 66d041ed14b3ed3ed7183a28a5c588e235fc21d0 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期二, 26 五月 2026 11:14:07 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro_河南鹤壁' into dev_鹤壁_强信宇_pro

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

diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index f252881..72f166c 100644
--- a/src/main/resources/mapper/quality/QualityInspectMapper.xml
+++ b/src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -4,6 +4,10 @@
     <select id="qualityInspectListPage" resultType="com.ruoyi.quality.dto.QualityInspectDto">
         SELECT
         qi.*,
+        CASE
+            WHEN (IFNULL(qi.qualified_quantity, 0) + IFNULL(qi.unqualified_quantity, 0)) = 0 THEN 0
+            ELSE ROUND(IFNULL(qi.qualified_quantity, 0) / (IFNULL(qi.qualified_quantity, 0) + IFNULL(qi.unqualified_quantity, 0)) * 100, 2)
+        END AS passRate,
         <choose>
             <when test="qualityInspect.inspectType == 0">
                 pl.purchase_contract_number as purchase_contract_no
@@ -59,7 +63,11 @@
 
     <select id="qualityInspectExport" resultType="com.ruoyi.quality.pojo.QualityInspect">
         SELECT
-        *
+        qi.*,
+        CASE
+            WHEN (IFNULL(qi.qualified_quantity, 0) + IFNULL(qi.unqualified_quantity, 0)) = 0 THEN 0
+            ELSE ROUND(IFNULL(qi.qualified_quantity, 0) / (IFNULL(qi.qualified_quantity, 0) + IFNULL(qi.unqualified_quantity, 0)) * 100, 2)
+        END AS passRate
         FROM quality_inspect
         where
         inspect_type=#{qualityInspect.inspectType}
@@ -86,11 +94,7 @@
     </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,
+        SELECT qi.inspect_type AS modelType,
 
                IFNULL(SUM(qi.quantity), 0) AS totalCount,
 
@@ -99,107 +103,44 @@
                               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
+        FROM quality_inspect qi
 
-        WHERE pp.product_name IN ('鍘熸潗鏂�', '鍗婃垚鍝�', '鎴愬搧')
-
-        GROUP BY pp.product_name
+        GROUP BY qi.inspect_type
 
     </select>
 
     <select id="getPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto">
         SELECT t.modelType,
+               t.totalCount,
+               t.completedCount,
+               t.qualifiedCount,
+               t.unqualifiedCount,
 
-               COALESCE(SUM(qi.quantity), 0) AS totalCount,
+            /* 瀹屾垚鐜囷細
+               濡傛灉鎬绘暟涓� 0 鍒欒繑鍥� 0锛涘惁鍒欒绠楁瘮渚嬶紝浣跨敤 TRUNCATE 淇濈暀 4 浣嶅皬鏁帮紙濡� 99.9992锛�
+            */
+               IF(t.totalCount = 0, 0,
+                  TRUNCATE((t.completedCount / t.totalCount) * 100, 2)
+               ) AS completionRate,
 
-               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
+            /* 鍚堟牸鐜囷細
+               濡傛灉瀹屽伐鏁颁负 0 鍒欒繑鍥� 0锛涗娇鐢� TRUNCATE 鎴柇锛岄槻姝㈡瀬鍏舵帴杩� 100% 鐨勬暟鎹鍥涜垗浜斿叆鎴� 100
+            */
+               IF(t.completedCount = 0, 0,
+                  TRUNCATE((t.qualifiedCount / t.completedCount) * 100, 2)
+               ) AS passRate
+        FROM (
+                 /* 鍏堥�氳繃瀛愭煡璇㈡妸鍩虹鏁版嵁杩涜鑱氬悎缁熻锛岄伩鍏嶅灞傞噸澶嶇紪鍐欏鏉傜殑 CASE WHEN */
+                 SELECT qi.inspect_type                                                                          AS 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 THEN qi.qualified_quantity ELSE 0 END),
+                                 0)                                                                              AS qualifiedCount,
+                        COALESCE(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.unqualified_quantity ELSE 0 END),
+                                 0)                                                                              AS unqualifiedCount
+                 FROM quality_inspect qi
+                 GROUP BY qi.inspect_type) t
         ORDER BY t.modelType;
     </select>
 
@@ -220,45 +161,74 @@
                      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,
+        SELECT
+            CASE t.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,
+        t.modelType,
+        t.totalCount,
+        t.completedCount,
+        t.qualifiedCount,
+        t.unqualifiedCount,
 
-            /* 鎬绘暟閲� */
+        IF(t.totalCount = 0, 0,
+           TRUNCATE((t.completedCount / t.totalCount) * 100, 2)
+        ) AS completionRate,
+
+        IF(t.completedCount = 0, 0,
+           TRUNCATE((t.qualifiedCount / t.completedCount) * 100, 2)
+        ) AS passRate
+
+        FROM (
+            SELECT
+            b.month_num,
+            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 THEN qi.qualified_quantity ELSE 0 END), 0) AS qualifiedCount,
+            COALESCE(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.unqualified_quantity ELSE 0 END), 0) AS unqualifiedCount
+            FROM base b
+            LEFT JOIN quality_inspect qi ON qi.inspect_type = b.modelType
+            AND YEAR(qi.check_time) = #{year}
+            AND MONTH(qi.check_time) = b.month_num
+            GROUP BY b.month_num, b.modelType
+            ) t
+        ORDER BY t.month_num, t.modelType;
+    </select>
+    <select id="getYearlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto">
+        SELECT qi.inspect_type AS 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
+                                    WHEN qi.inspect_state = 1 THEN qi.quantity
+                                    ELSE 0
+                                    END
+                        ), 0)                AS completedCount,
+
+               COALESCE(SUM(
+                                CASE
+                                    WHEN qi.inspect_state = 1 THEN qi.qualified_quantity
                                     ELSE 0
                                     END
                         ), 0)                AS qualifiedCount,
 
-            /* 涓嶅悎鏍� */
                COALESCE(SUM(
                                 CASE
-                                    WHEN qi.inspect_state = 1 AND qi.check_result = '涓嶅悎鏍�'
-                                        THEN qi.quantity
+                                    WHEN qi.inspect_state = 1 THEN qi.unqualified_quantity
                                     ELSE 0
                                     END
                         ), 0)                AS unqualifiedCount,
@@ -268,8 +238,8 @@
                   ROUND(
                           COALESCE(SUM(
                                            CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
-                                   ), 0) / SUM(qi.quantity) * 100, 2
-                  )
+                                   ), 0)
+                              / SUM(qi.quantity) * 100, 2)
                )                             AS completionRate,
 
             /* 鍚堟牸鐜� */
@@ -278,66 +248,18 @@
                            ), 0) = 0, 0,
                   ROUND(
                           COALESCE(SUM(
-                                           CASE
-                                               WHEN qi.inspect_state = 1 AND qi.check_result = '鍚堟牸'
-                                                   THEN qi.quantity
-                                               ELSE 0
-                                               END
+                                           CASE WHEN qi.inspect_state = 1 THEN qi.qualified_quantity ELSE 0 END
                                    ), 0)
                               /
                           COALESCE(SUM(
                                            CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
-                                   ), 0) * 100, 2
-                  )
+                                   ), 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;
+        FROM quality_inspect qi
+        WHERE YEAR(qi.check_time) = #{year}
+        GROUP BY qi.inspect_type
+        ORDER BY qi.inspect_type;
     </select>
 
 
@@ -366,7 +288,7 @@
             /* 鍘熸潗鏂� */
                COALESCE(SUM(
                                 CASE
-                                    WHEN pp.product_name = '鍘熸潗鏂�'
+                                    WHEN qi.inspect_type = 0
                                         THEN qi.quantity
                                     ELSE 0
                                     END
@@ -375,7 +297,7 @@
             /* 鍗婃垚鍝� */
                COALESCE(SUM(
                                 CASE
-                                    WHEN pp.product_name = '鍗婃垚鍝�'
+                                    WHEN qi.inspect_type = 1
                                         THEN qi.quantity
                                     ELSE 0
                                     END
@@ -384,19 +306,15 @@
             /* 鎴愬搧 */
                COALESCE(SUM(
                                 CASE
-                                    WHEN pp.product_name = '鎴愬搧'
+                                    WHEN qi.inspect_type = 2
                                         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
+                           ON qi.inspect_state = 1
                                AND YEAR(qi.check_time) = #{year}
                                AND MONTH(qi.check_time) = m.month_num
 
@@ -411,16 +329,8 @@
                                   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 = '鎴愬搧')
-                                      )
+                                    AND qi.inspect_type = #{modelType} - 1
                                   GROUP BY qip.parameter_item),
              ranked AS (SELECT name,
                                count,

--
Gitblit v1.9.3