From 8a7c384b718a3d9b57352ff8f77df70baf587fe1 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期三, 16 九月 2026 19:51:53 +0800
Subject: [PATCH] fix: 产品父类名称适配

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

diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index 0efab8c..0472253 100644
--- a/src/main/resources/mapper/quality/QualityInspectMapper.xml
+++ b/src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -3,34 +3,57 @@
 <mapper namespace="com.ruoyi.quality.mapper.QualityInspectMapper">
     <select id="qualityInspectListPage" resultType="com.ruoyi.quality.pojo.QualityInspect">
         SELECT
-        *
-        FROM quality_inspect
-        where
+        qi.*,
+        pm.uid_no,
+        <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>
+        LEFT JOIN product_model pm on qi.product_model_id = pm.id
+        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
-        *
-        FROM quality_inspect
+        qi.*,
+        pm.uid_no
+        FROM quality_inspect qi
+        LEFT JOIN product_model pm on qi.product_model_id = pm.id
         where
         inspect_type=#{qualityInspect.inspectType}
         <if test="qualityInspect.supplier != null and qualityInspect.supplier != '' ">
@@ -55,12 +78,25 @@
         </foreach>
     </delete>
 
+    <sql id="productTypeTree">
+        WITH RECURSIVE product_type AS (SELECT id,
+                                               CASE
+                                                   WHEN product_name LIKE '%鍗婃垚鍝�%' THEN 1
+                                                   WHEN product_name LIKE '%鎴愬搧%' THEN 2
+                                                   WHEN product_name LIKE '%鍘熸潗鏂�%' THEN 0
+                                                   END AS modelType
+                                        FROM product
+                                        WHERE parent_id IS NULL
+                                        UNION ALL
+                                        SELECT p.id,
+                                               pt.modelType
+                                        FROM product p
+                                                 INNER JOIN product_type pt ON p.parent_id = pt.id)
+    </sql>
+
     <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,
+        <include refid="productTypeTree"/>
+        SELECT pt.modelType,
 
                IFNULL(SUM(qi.quantity), 0) AS totalCount,
 
@@ -69,21 +105,20 @@
                               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
+        FROM product_type pt
+                 INNER JOIN product_model pm
+                            ON pm.product_id = pt.id
                  LEFT JOIN quality_inspect qi
                            ON qi.product_model_id = pm.id
 
-        WHERE pp.product_name IN ('鍘熸潗鏂�', '鍗婃垚鍝�', '鎴愬搧')
+        WHERE pt.modelType IS NOT NULL
 
-        GROUP BY pp.product_name
+        GROUP BY pt.modelType
 
     </select>
 
     <select id="getPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto">
+        <include refid="productTypeTree"/>
         SELECT t.modelType,
 
                COALESCE(SUM(qi.quantity), 0) AS totalCount,
@@ -155,19 +190,12 @@
               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_type pt
+                           ON pt.modelType = t.modelType
                  LEFT JOIN product_model pm
-                           ON pm.product_id = p.id
+                           ON pm.product_id = pt.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;
@@ -188,7 +216,20 @@
                       SELECT 2),
             base AS (SELECT m.month_num, t.modelType
                      FROM months m
-                              CROSS JOIN types t)
+                              CROSS JOIN types t),
+            product_type AS (SELECT id,
+                                    CASE
+                                        WHEN product_name LIKE '%鍗婃垚鍝�%' THEN 1
+                                        WHEN product_name LIKE '%鎴愬搧%' THEN 2
+                                        WHEN product_name LIKE '%鍘熸潗鏂�%' THEN 0
+                                        END AS modelType
+                             FROM product
+                             WHERE parent_id IS NULL
+                             UNION ALL
+                             SELECT p.id,
+                                    pt.modelType
+                             FROM product p
+                                      INNER JOIN product_type pt ON p.parent_id = pt.id)
 
         SELECT CASE b.month_num
                    WHEN 1 THEN '涓�鏈�'
@@ -262,18 +303,13 @@
                )                             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 product_type pt
+                           ON pt.modelType = b.modelType
+                 LEFT JOIN product_model pm ON pm.product_id = pt.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;
@@ -281,25 +317,19 @@
     </select>
 
     <select id="getYearlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto">
+        <include refid="productTypeTree"/>
         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
+               COALESCE(SUM(qi.quantity), 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 product_type pt
+                           ON pt.modelType = t.modelType
+                 LEFT JOIN product_model pm ON pm.product_id = pt.id
                  LEFT JOIN quality_inspect qi
                            ON qi.product_model_id = pm.id
                                AND YEAR(qi.check_time) = #{year}
@@ -317,7 +347,20 @@
                                   UNION ALL
                                   SELECT month_num + 1
                                   FROM months
-                                  WHERE month_num &lt; 12)
+                                  WHERE month_num &lt; 12),
+                        product_type AS (SELECT id,
+                                                CASE
+                                                    WHEN product_name LIKE '%鍗婃垚鍝�%' THEN 1
+                                                    WHEN product_name LIKE '%鎴愬搧%' THEN 2
+                                                    WHEN product_name LIKE '%鍘熸潗鏂�%' THEN 0
+                                                    END AS modelType
+                                         FROM product
+                                         WHERE parent_id IS NULL
+                                         UNION ALL
+                                         SELECT p.id,
+                                                pt.modelType
+                                         FROM product p
+                                                  INNER JOIN product_type pt ON p.parent_id = pt.id)
         SELECT CASE m.month_num
                    WHEN 1 THEN '涓�鏈�'
                    WHEN 2 THEN '浜屾湀'
@@ -336,7 +379,7 @@
             /* 鍘熸潗鏂� */
                COALESCE(SUM(
                                 CASE
-                                    WHEN pp.product_name = '鍘熸潗鏂�'
+                                    WHEN pt.modelType = 0
                                         THEN qi.quantity
                                     ELSE 0
                                     END
@@ -345,7 +388,7 @@
             /* 鍗婃垚鍝� */
                COALESCE(SUM(
                                 CASE
-                                    WHEN pp.product_name = '鍗婃垚鍝�'
+                                    WHEN pt.modelType = 1
                                         THEN qi.quantity
                                     ELSE 0
                                     END
@@ -354,16 +397,15 @@
             /* 鎴愬搧 */
                COALESCE(SUM(
                                 CASE
-                                    WHEN pp.product_name = '鎴愬搧'
+                                    WHEN pt.modelType = 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 product_type pt ON 1 = 1
+                 LEFT JOIN product_model pm ON pm.product_id = pt.id
                  LEFT JOIN quality_inspect qi
                            ON qi.product_model_id = pm.id
                                AND qi.inspect_state = 1
@@ -376,20 +418,31 @@
     </select>
 
     <select id="getTopParameters" resultType="com.ruoyi.quality.dto.QualityParameterStatDto">
-        WITH parameter_counts AS (SELECT qip.parameter_item AS name,
+        WITH RECURSIVE product_type AS (SELECT id,
+                                               CASE
+                                                   WHEN product_name LIKE '%鍗婃垚鍝�%' THEN 1
+                                                   WHEN product_name LIKE '%鎴愬搧%' THEN 2
+                                                   WHEN product_name LIKE '%鍘熸潗鏂�%' THEN 0
+                                                   END AS modelType
+                                        FROM product
+                                        WHERE parent_id IS NULL
+                                        UNION ALL
+                                        SELECT p.id,
+                                               pt.modelType
+                                        FROM product p
+                                                 INNER JOIN product_type pt ON p.parent_id = pt.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
-                                           JOIN product p
-                                                ON qi.product_id = p.id
-                                           JOIN product pp
-                                                ON p.parent_id = pp.id
+                                           JOIN product_type pt
+                                                ON qi.product_id = pt.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 = '鎴愬搧')
+                                      (#{modelType} = 1 AND pt.modelType = 0)
+                                          OR (#{modelType} = 2 AND pt.modelType = 1)
+                                          OR (#{modelType} = 3 AND pt.modelType = 2)
                                       )
                                   GROUP BY qip.parameter_item),
              ranked AS (SELECT name,
@@ -420,6 +473,23 @@
         ORDER BY rn;
 
     </select>
+    <select id="selectOneData" resultType="com.ruoyi.quality.pojo.QualityInspect">
+        select *,
+               case
+                   when inspect_material_condition = '妫�楠岀敤绮夊墏' then
+                       '鈽�'
+                   else
+                       '鈽�'
+                   end as inspect_material_condition_a,
+               case
+                   when inspect_material_condition = '妫�楠岀敤娑插墏' then
+                       '鈽�'
+                   else
+                       '鈽�'
+                   end as inspect_material_condition_b
+        from quality_inspect
+        where id = #{id};
+    </select>
 
 
 </mapper>

--
Gitblit v1.9.3