From c19bcccbe4f091b4286a3ff40ee4a97c4e9848d6 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 19 三月 2026 10:22:37 +0800
Subject: [PATCH] 修改bom产品信息,如果有关联生成订单完成数量>0,则不许改;否则修改关联的产品结构,订单产品信息,工艺路线产品信息

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

diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index 8058455..5d12ed6 100644
--- a/src/main/resources/mapper/quality/QualityInspectMapper.xml
+++ b/src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -3,30 +3,49 @@
 <mapper namespace="com.ruoyi.quality.mapper.QualityInspectMapper">
     <select id="qualityInspectListPage" resultType="com.ruoyi.quality.pojo.QualityInspect">
         SELECT
-        *
-        FROM quality_inspect
-        where
+        qi.*,
+        <choose>
+            <when test="qualityInspect.inspectType == 0">
+                pl.purchase_contract_number as purchase_contract_no
+            </when>
+            <otherwise>
+                pwo.work_order_no
+            </otherwise>
+        </choose>
+        FROM
+        quality_inspect qi
+        <choose>
+            <when test="qualityInspect.inspectType == 0 ">
+                LEFT JOIN purchase_ledger pl ON pl.id = qi.purchase_ledger_id
+            </when>
+            <otherwise>
+                LEFT JOIN production_product_main ppm ON qi.product_main_id = ppm.id
+                LEFT JOIN product_work_order pwo ON ppm.work_order_id = pwo.id
+            </otherwise>
+        </choose>
+        WHERE
         inspect_type=#{qualityInspect.inspectType}
         <if test="qualityInspect.supplier != null and qualityInspect.supplier != '' ">
-            AND supplier like concat('%',#{qualityInspect.supplier},'%')
+            AND qi.supplier like concat('%',#{qualityInspect.supplier},'%')
         </if>
         <if test="qualityInspect.customer != null and qualityInspect.customer != '' ">
-            AND customer like concat('%',#{qualityInspect.customer},'%')
+            AND qi.customer like concat('%',#{qualityInspect.customer},'%')
         </if>
         <if test="qualityInspect.process != null and qualityInspect.process != '' ">
-            AND process like concat('%',#{qualityInspect.process},'%')
+            AND qi.process like concat('%',#{qualityInspect.process},'%')
         </if>
         <if test="qualityInspect.productName != null and qualityInspect.productName != '' ">
-            AND product_name like concat('%',#{qualityInspect.productName},'%')
+            AND qi.product_name like concat('%',#{qualityInspect.productName},'%')
         </if>
         <if test="qualityInspect.entryDateStart != null and qualityInspect.entryDateStart != '' ">
-            AND check_time &gt;= DATE_FORMAT(#{qualityInspect.entryDateStart},'%Y-%m-%d')
+            AND qi.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 qi.check_time &lt;= DATE_FORMAT(#{qualityInspect.entryDateEnd},'%Y-%m-%d')
         </if>
-        ORDER BY check_time DESC
+        ORDER BY qi.check_time DESC
     </select>
+
     <select id="qualityInspectExport" resultType="com.ruoyi.quality.pojo.QualityInspect">
         SELECT
         *
@@ -56,291 +75,278 @@
     </delete>
 
     <select id="getInspectStatistics" resultType="com.ruoyi.quality.dto.QualityInspectStatDto">
-        SELECT 0                                                                                   AS inspectType,
-               COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 1), 0) +
-               COALESCE((SELECT SUM(quantity) FROM quality_unqualified WHERE inspect_type = 0), 0) AS totalCount,
-               COALESCE((SELECT SUM(inbound_num)
-                         FROM procurement_record_storage
-                         WHERE type = 1
-                           AND quality_inspect_id != 0
-                           AND quality_inspect_id IS NOT NULL), 0) +
-               COALESCE((SELECT SUM(quantity) FROM quality_unqualified WHERE inspect_type = 0), 0) AS completedCount
-        UNION ALL
-        SELECT 1                                                   AS inspectType,
-               COALESCE((SELECT SUM(inbound_num)
-                         FROM procurement_record_storage
-                         WHERE type = 2
-                           AND sales_ledger_product_id = 0), 0)    AS totalCount,
-               COALESCE((SELECT SUM(inbound_num)
-                         FROM procurement_record_storage
-                         WHERE type = 2
-                           AND sales_ledger_product_id = 0
-                           AND quality_inspect_id != 0
-                           AND quality_inspect_id IS NOT NULL), 0) AS completedCount
-        UNION ALL
-        SELECT 2                                                   AS inspectType,
-               COALESCE((SELECT SUM(inbound_num)
-                         FROM procurement_record_storage
-                         WHERE type = 2
-                           AND sales_ledger_product_id != 0), 0)   AS totalCount,
-               COALESCE((SELECT SUM(inbound_num)
-                         FROM procurement_record_storage
-                         WHERE type = 2
-                           AND sales_ledger_product_id != 0
-                           AND quality_inspect_id != 0
-                           AND quality_inspect_id IS NOT NULL), 0) AS completedCount
+        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.inspectType,
-               COALESCE(prs.totalCount, 0)                                            AS totalCount,
-               COALESCE(qi.completedCount, 0)                                         AS completedCount,
-               COALESCE(qi.qualifiedCount, 0)                                         AS qualifiedCount,
-               COALESCE(qi.unqualifiedCount, 0)                                       AS unqualifiedCount,
-               IF(COALESCE(prs.totalCount, 0) = 0, 0,
-                  ROUND(COALESCE(qi.completedCount, 0) / prs.totalCount * 100, 2))    AS completionRate,
-               IF(COALESCE(qi.completedCount, 0) = 0, 0,
-                  ROUND(COALESCE(qi.qualifiedCount, 0) / qi.completedCount * 100, 2)) AS passRate
-        FROM (SELECT 0 AS inspectType
-              UNION ALL
-              SELECT 1
-              UNION ALL
-              SELECT 2) t
-                 LEFT JOIN (SELECT inspect_type,
-                                   SUM(quantity)                                 AS completedCount,
-                                   SUM(IF(check_result = '鍚堟牸', quantity, 0))   AS qualifiedCount,
-                                   SUM(IF(check_result = '涓嶅悎鏍�', quantity, 0)) AS unqualifiedCount
-                            FROM quality_inspect
-                            WHERE inspect_state = 1
-                            GROUP BY inspect_type) qi
-                           ON t.inspectType = qi.inspect_type
-                 LEFT JOIN (SELECT 0           AS inspectType,
-                                   COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 1),
-                                            0) +
-                                   COALESCE((SELECT SUM(quantity) FROM quality_unqualified WHERE inspect_type = 0),
-                                            0) AS totalCount
-                            UNION ALL
-                            SELECT 1                                                AS inspectType,
-                                   COALESCE((SELECT SUM(inbound_num)
-                                             FROM procurement_record_storage
-                                             WHERE type = 2
-                                               AND sales_ledger_product_id = 0), 0) AS totalCount
-                            UNION ALL
-                            SELECT 2                                                 AS inspectType,
-                                   COALESCE((SELECT SUM(inbound_num)
-                                             FROM procurement_record_storage
-                                             WHERE type = 2
-                                               AND sales_ledger_product_id != 0), 0) AS totalCount) prs
-                           ON t.inspectType = prs.inspectType
-        ORDER BY t.inspectType;
+        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 inspectType
-                      UNION ALL
-                      SELECT 1
-                      UNION ALL
-                      SELECT 2),
-            base AS (SELECT m.month_num, t.inspectType
-                     FROM months m,
-                          types t),
-            qi_data AS (SELECT MONTH(check_time)                                               AS month_num,
-                               inspect_type,
-                               SUM(quantity)                                                   AS completedCount,
-                               SUM(CASE WHEN check_result = '鍚堟牸' THEN quantity ELSE 0 END)   AS qualifiedCount,
-                               SUM(CASE WHEN check_result = '涓嶅悎鏍�' THEN quantity ELSE 0 END) AS unqualifiedCount
-                        FROM quality_inspect
-                        WHERE YEAR(check_time) = #{year}
-                          AND inspect_state = 1
-                        GROUP BY MONTH(check_time), inspect_type),
-            prs_data AS (SELECT month_num,
-                                inspectType,
-                                SUM(totalCount) AS totalCount
-                         FROM (SELECT MONTH(create_time) AS month_num,
-                                      0                  AS inspectType,
-                                      inbound_num        AS totalCount
-                               FROM procurement_record_storage
-                               WHERE type = 1
-                                 AND YEAR(create_time) = #{year}
-                               UNION ALL
-                               SELECT MONTH(check_time) AS month_num,
-                                      0                 AS inspectType,
-                                      quantity          AS totalCount
-                               FROM quality_unqualified
-                               WHERE inspect_type = 0
-                                 AND YEAR(check_time) = #{year}
-                               UNION ALL
-                               SELECT MONTH(create_time) AS month_num,
-                                      CASE
-                                          WHEN sales_ledger_product_id = 0 THEN 1
-                                          ELSE 2
-                                          END            AS inspectType,
-                                      inbound_num        AS totalCount
-                               FROM procurement_record_storage
-                               WHERE type = 2
-                                 AND YEAR(create_time) = #{year}) sub
-                         GROUP BY month_num, inspectType)
-        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.inspectType,
-               COALESCE(p.totalCount, 0)       AS totalCount,
-               COALESCE(q.completedCount, 0)   AS completedCount,
-               COALESCE(q.qualifiedCount, 0)   AS qualifiedCount,
-               COALESCE(q.unqualifiedCount, 0) AS unqualifiedCount,
-               CASE
-                   WHEN COALESCE(p.totalCount, 0) = 0 THEN 0
-                   ELSE ROUND(COALESCE(q.completedCount, 0) / p.totalCount * 100, 2)
-                   END                         AS completionRate,
-               CASE
-                   WHEN COALESCE(q.completedCount, 0) = 0 THEN 0
-                   ELSE ROUND(COALESCE(q.qualifiedCount, 0) / q.completedCount * 100, 2)
-                   END                         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 qi_data q ON b.month_num = q.month_num AND b.inspectType = q.inspect_type
-                 LEFT JOIN prs_data p ON b.month_num = p.month_num AND b.inspectType = p.inspectType
-        ORDER BY b.month_num, b.inspectType
+        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.inspectType,
-               COALESCE(prs.totalCount, 0)      AS totalCount,
-               COALESCE(qi.completedCount, 0)   AS completedCount,
-               COALESCE(qi.qualifiedCount, 0)   AS qualifiedCount,
-               COALESCE(qi.unqualifiedCount, 0) AS unqualifiedCount,
-               CASE
-                   WHEN COALESCE(prs.totalCount, 0) = 0 THEN 0
-                   ELSE ROUND(COALESCE(qi.completedCount, 0) / prs.totalCount * 100, 2)
-                   END                          AS completionRate,
-               CASE
-                   WHEN COALESCE(qi.completedCount, 0) = 0 THEN 0
-                   ELSE ROUND(COALESCE(qi.qualifiedCount, 0) / qi.completedCount * 100, 2)
-                   END                          AS passRate
-        FROM (SELECT 0 AS inspectType
-              UNION ALL
-              SELECT 1
-              UNION ALL
-              SELECT 2) t
-                 LEFT JOIN (SELECT inspect_type,
-                                   SUM(quantity)                                                   AS completedCount,
-                                   SUM(CASE WHEN check_result = '鍚堟牸' THEN quantity ELSE 0 END)   AS qualifiedCount,
-                                   SUM(CASE WHEN check_result = '涓嶅悎鏍�' THEN quantity ELSE 0 END) AS unqualifiedCount
-                            FROM quality_inspect
-                            WHERE YEAR(check_time) = #{year}
-                              AND inspect_state = 1
-                            GROUP BY inspect_type) qi
-                           ON t.inspectType = qi.inspect_type
-                 LEFT JOIN (SELECT 0                                               AS inspectType,
-                                   COALESCE((SELECT SUM(inbound_num)
-                                             FROM procurement_record_storage
-                                             WHERE type = 1
-                                               AND YEAR(create_time) = #{year}), 0) +
-                                   COALESCE((SELECT SUM(quantity)
-                                             FROM quality_unqualified
-                                             WHERE inspect_type = 0
-                                               AND YEAR(check_time) = #{year}), 0) AS totalCount
-                            UNION ALL
-                            SELECT 1                                                AS inspectType,
-                                   COALESCE((SELECT SUM(inbound_num)
-                                             FROM procurement_record_storage
-                                             WHERE type = 2
-                                               AND sales_ledger_product_id = 0
-                                               AND YEAR(create_time) = #{year}), 0) AS totalCount
-                            UNION ALL
-                            SELECT 2                                                AS inspectType,
-                                   COALESCE((SELECT SUM(inbound_num)
-                                             FROM procurement_record_storage
-                                             WHERE type = 2
-                                               AND sales_ledger_product_id != 0
-                                               AND YEAR(create_time) = #{year}), 0) AS totalCount) prs
-                           ON t.inspectType = prs.inspectType
-        ORDER BY t.inspectType
+        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),
-            qi_data AS (SELECT MONTH(check_time)                                        AS month_num,
-                               SUM(CASE WHEN inspect_type = 0 THEN quantity ELSE 0 END) AS rawMaterialCount,
-                               SUM(CASE WHEN inspect_type = 1 THEN quantity ELSE 0 END) AS processCount,
-                               SUM(CASE WHEN inspect_type = 2 THEN quantity ELSE 0 END) AS outgoingCount
-                        FROM quality_inspect
-                        WHERE YEAR(check_time) = #{year}
-                          AND inspect_state = 1
-                        GROUP BY MONTH(check_time))
-        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(d.rawMaterialCount, 0) AS rawMaterialCount,
-               COALESCE(d.processCount, 0)     AS processCount,
-               COALESCE(d.outgoingCount, 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 qi_data d ON m.month_num = d.month_num
-        ORDER BY 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,
-                                         SUM(COALESCE(qi.quantity, 0)) AS count
-                                  FROM quality_inspect qi
-                                           JOIN quality_inspect_param qip ON qip.inspect_id = qi.id
-                                  WHERE qi.inspect_type = #{inspectType}
-                                  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 &gt; 4
-              HAVING SUM(count) &gt; 0) t
-        ORDER BY rn
+        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
+        ORDER BY rn;
     </select>
 
+
 </mapper>

--
Gitblit v1.9.3