From 054381d20e23e30cfb3fe962e00be6a3ded3ee2b Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 15 五月 2026 15:51:03 +0800
Subject: [PATCH] feat: 质检数量区分合格/不合格数量

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

diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index 99d6df1..9c064b4 100644
--- a/src/main/resources/mapper/quality/QualityInspectMapper.xml
+++ b/src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -3,10 +3,43 @@
 <mapper namespace="com.ruoyi.quality.mapper.QualityInspectMapper">
     <select id="qualityInspectListPage" resultType="com.ruoyi.quality.pojo.QualityInspect">
         SELECT
-        qi.*,
+        qi.id,
+        qi.inspect_type,
+        qi.check_time,
+        qi.supplier,
+        qi.customer,
+        qi.process,
+        qi.check_name,
+        qi.product_id,
+        qi.product_name,
+        qi.model,
+        ifnull(pm.unit, qi.unit) as unit,
+        qi.quantity,
+        qi.qualified_quantity,
+        qi.unqualified_quantity,
+        qi.pass_rate,
+        qi.check_company,
+        qi.check_result,
+        qi.create_time,
+        qi.create_user,
+        qi.update_time,
+        qi.update_user,
+        qi.tenant_id,
+        qi.inspect_state,
+        qi.approval_status,
+        qi.approve_user_ids,
+        qi.purchase_ledger_id,
+        qi.product_main_id,
+        qi.defective_phenomena,
+        qi.product_model_id,
+        qi.test_standard_id,
         <choose>
             <when test="qualityInspect.inspectType == 0">
                 pl.purchase_contract_number as purchase_contract_no,
+                pm.thickness
+            </when>
+            <when test="qualityInspect.inspectType == 1">
+                pwo.work_order_no,
                 pm.thickness
             </when>
             <otherwise>
@@ -47,6 +80,12 @@
         <if test="qualityInspect.entryDateEnd != null and qualityInspect.entryDateEnd != '' ">
             AND qi.check_time &lt;= DATE_FORMAT(#{qualityInspect.entryDateEnd},'%Y-%m-%d')
         </if>
+        <if test="qualityInspect.approvalStatus != null">
+            AND qi.approval_status = #{qualityInspect.approvalStatus}
+        </if>
+        <if test="qualityInspect.approveUserIds != null and qualityInspect.approveUserIds != '' ">
+            AND qi.approve_user_ids like concat('%',#{qualityInspect.approveUserIds},'%')
+        </if>
         ORDER BY qi.id DESC
     </select>
 
@@ -68,6 +107,12 @@
         <if test="qualityInspect.productName != null and qualityInspect.productName != '' ">
             AND product_name = #{qualityInspect.productName}
         </if>
+        <if test="qualityInspect.approvalStatus != null">
+            AND approval_status = #{qualityInspect.approvalStatus}
+        </if>
+        <if test="qualityInspect.approveUserIds != null and qualityInspect.approveUserIds != '' ">
+            AND approve_user_ids like concat('%',#{qualityInspect.approveUserIds},'%')
+        </if>
     </select>
 
     <delete id="deleteByProductMainIds">
@@ -85,7 +130,7 @@
                                                id           AS root_id,
                                                product_name AS root_name
                                         FROM product
-                                        WHERE product_name IN ('鍘熸枡', '鍗婃垚鍝�', '鎴愬搧')
+                                        WHERE product_name IN ('鍘熸潗鏂�', '鍗婃垚鍝�', '鎴愬搧')
                                         UNION ALL
                                         SELECT p.id,
                                                p.parent_id,
@@ -95,7 +140,7 @@
                                         FROM product p
                                                  INNER JOIN product_tree pt ON p.parent_id = pt.id)
         SELECT CASE pt.root_name
-                   WHEN '鍘熸枡' THEN 0
+                   WHEN '鍘熸潗鏂�' THEN 0
                    WHEN '鍗婃垚鍝�' THEN 1
                    WHEN '鎴愬搧' THEN 2
                    END                     AS modelType,
@@ -117,12 +162,12 @@
         WITH RECURSIVE product_tree AS (SELECT id,
                                                product_name,
                                                CASE product_name
-                                                   WHEN '鍘熸枡' THEN 0
+                                                   WHEN '鍘熸潗鏂�' THEN 0
                                                    WHEN '鍗婃垚鍝�' THEN 1
                                                    WHEN '鎴愬搧' THEN 2
                                                    END AS modelType
                                         FROM product
-                                        WHERE product_name IN ('鍘熸枡', '鍗婃垚鍝�', '鎴愬搧')
+                                        WHERE product_name IN ('鍘熸潗鏂�', '鍗婃垚鍝�', '鎴愬搧')
 
                                         UNION ALL
 
@@ -135,10 +180,14 @@
         SELECT base.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,
+               COALESCE(SUM(CASE
+                                  WHEN qi.inspect_state = 1 THEN IFNULL(qi.qualified_quantity,
+                                                                          CASE WHEN qi.check_result = '鍚堟牸' THEN IFNULL(qi.quantity, 0) ELSE 0 END)
+                                  ELSE 0 END), 0)                                  AS qualifiedCount,
+               COALESCE(SUM(CASE
+                                  WHEN qi.inspect_state = 1 THEN IFNULL(qi.unqualified_quantity,
+                                                                        CASE WHEN qi.check_result IN ('涓嶅悎鏍�', '閮ㄥ垎鍚堟牸') THEN IFNULL(qi.quantity, 0) ELSE 0 END)
+                                  ELSE 0 END), 0)                                  AS unqualifiedCount,
 
                IF(COALESCE(SUM(qi.quantity), 0) = 0, 0,
                   ROUND(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END)
@@ -146,7 +195,10 @@
                    )                                                                        AS completionRate,
 
                IF(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) = 0, 0,
-                  ROUND(SUM(CASE WHEN qi.inspect_state = 1 AND qi.check_result = '鍚堟牸' THEN qi.quantity ELSE 0 END)
+                  ROUND(SUM(CASE
+                                WHEN qi.inspect_state = 1 THEN IFNULL(qi.qualified_quantity,
+                                                                        CASE WHEN qi.check_result = '鍚堟牸' THEN IFNULL(qi.quantity, 0) ELSE 0 END)
+                                ELSE 0 END)
                             / SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) * 100, 2)
                    )                                                                        AS passRate
 
@@ -173,12 +225,12 @@
             product_tree AS (SELECT id,
                                     product_name,
                                     CASE product_name
-                                        WHEN '鍘熸枡' THEN 0
+                                        WHEN '鍘熸潗鏂�' THEN 0
                                         WHEN '鍗婃垚鍝�' THEN 1
                                         WHEN '鎴愬搧' THEN 2
                                         END AS modelType
                              FROM product
-                             WHERE product_name IN ('鍘熸枡', '鍗婃垚鍝�', '鎴愬搧')
+                             WHERE product_name IN ('鍘熸潗鏂�', '鍗婃垚鍝�', '鎴愬搧')
 
                              UNION ALL
 
@@ -207,10 +259,14 @@
 
                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,
+               COALESCE(SUM(CASE
+                                  WHEN qi.inspect_state = 1 THEN IFNULL(qi.qualified_quantity,
+                                                                          CASE WHEN qi.check_result = '鍚堟牸' THEN IFNULL(qi.quantity, 0) ELSE 0 END)
+                                  ELSE 0 END), 0)                                  AS qualifiedCount,
+               COALESCE(SUM(CASE
+                                  WHEN qi.inspect_state = 1 THEN IFNULL(qi.unqualified_quantity,
+                                                                        CASE WHEN qi.check_result IN ('涓嶅悎鏍�', '閮ㄥ垎鍚堟牸') THEN IFNULL(qi.quantity, 0) ELSE 0 END)
+                                  ELSE 0 END), 0)                                  AS unqualifiedCount,
 
             /* 瀹屾垚鐜� */
                IF(COALESCE(SUM(qi.quantity), 0) = 0, 0,
@@ -219,7 +275,10 @@
 
             /* 鍚堟牸鐜� */
                IF(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) = 0, 0,
-                  ROUND(SUM(CASE WHEN qi.inspect_state = 1 AND qi.check_result = '鍚堟牸' THEN qi.quantity ELSE 0 END)
+                  ROUND(SUM(CASE
+                                WHEN qi.inspect_state = 1 THEN IFNULL(qi.qualified_quantity,
+                                                                        CASE WHEN qi.check_result = '鍚堟牸' THEN IFNULL(qi.quantity, 0) ELSE 0 END)
+                                ELSE 0 END)
                             / SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) * 100, 2)
                    )                                                                        AS passRate
 
@@ -241,12 +300,12 @@
             product_tree AS (SELECT id,
                                     product_name,
                                     CASE product_name
-                                        WHEN '鍘熸枡' THEN 0
+                                        WHEN '鍘熸潗鏂�' THEN 0
                                         WHEN '鍗婃垚鍝�' THEN 1
                                         WHEN '鎴愬搧' THEN 2
                                         END AS modelType
                              FROM product
-                             WHERE product_name IN ('鍘熸枡', '鍗婃垚鍝�', '鎴愬搧')
+                             WHERE product_name IN ('鍘熸潗鏂�', '鍗婃垚鍝�', '鎴愬搧')
 
                              UNION ALL
 
@@ -264,11 +323,16 @@
 
                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 THEN IFNULL(qi.qualified_quantity,
+                                                                          CASE WHEN qi.check_result = '鍚堟牸' THEN IFNULL(qi.quantity, 0) ELSE 0 END)
+                                  ELSE 0 END), 0)                                  AS qualifiedCount,
 
                IF(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) = 0, 0,
-                  ROUND(SUM(CASE WHEN qi.inspect_state = 1 AND qi.check_result = '鍚堟牸' THEN qi.quantity ELSE 0 END)
+                  ROUND(SUM(CASE
+                                WHEN qi.inspect_state = 1 THEN IFNULL(qi.qualified_quantity,
+                                                                        CASE WHEN qi.check_result = '鍚堟牸' THEN IFNULL(qi.quantity, 0) ELSE 0 END)
+                                ELSE 0 END)
                             / SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) * 100, 2)
                    )                                                                        AS passRate
 
@@ -291,7 +355,7 @@
                        WHERE month_num &lt; 12),
             product_tree AS (SELECT id, product_name AS root_name
                              FROM product
-                             WHERE product_name IN ('鍘熸枡', '鍗婃垚鍝�', '鎴愬搧')
+                             WHERE product_name IN ('鍘熸潗鏂�', '鍗婃垚鍝�', '鎴愬搧')
 
                              UNION ALL
 
@@ -313,7 +377,7 @@
                    WHEN 12 THEN '鍗佷簩鏈�'
                    END                                                                      AS month,
 
-               COALESCE(SUM(CASE WHEN pt.root_name = '鍘熸枡' THEN qi.quantity ELSE 0 END), 0)  AS rawMaterialCount,
+               COALESCE(SUM(CASE WHEN pt.root_name = '鍘熸潗鏂�' THEN qi.quantity ELSE 0 END), 0)  AS rawMaterialCount,
 
                COALESCE(SUM(CASE WHEN pt.root_name = '鍗婃垚鍝�' THEN qi.quantity ELSE 0 END), 0) AS processCount,
 
@@ -338,7 +402,7 @@
             root_node AS (SELECT id, product_name
                           FROM product
                           WHERE (
-                                        (#{modelType} = 1 AND product_name = '鍘熸枡')
+                                    (#{modelType} = 1 AND product_name = '鍘熸潗鏂�')
                                         OR (#{modelType} = 2 AND product_name = '鍗婃垚鍝�')
                                         OR (#{modelType} = 3 AND product_name = '鎴愬搧')
                                     )),
@@ -350,11 +414,11 @@
                                     INNER JOIN target_ids ti ON p.parent_id = ti.id),
             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
-                                 WHERE qi.inspect_state = 1
-                                   AND qi.product_id IN (SELECT id FROM target_ids)
-                                 GROUP BY qip.parameter_item),
+                                  FROM quality_inspect_param qip
+                                           JOIN quality_inspect qi ON qip.inspect_id = qi.id
+                                  WHERE qi.inspect_state = 1
+                                    AND qi.product_id IN (SELECT id FROM target_ids)
+                                  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

--
Gitblit v1.9.3