From 599b5ff692722226d1e30fbdffc594b826bfa815 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期一, 02 二月 2026 11:32:37 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New' into dev_New
---
src/main/resources/mapper/quality/QualityInspectMapper.xml | 377 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 372 insertions(+), 5 deletions(-)
diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index dc3048e..0efab8c 100644
--- a/src/main/resources/mapper/quality/QualityInspectMapper.xml
+++ b/src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -8,22 +8,22 @@
where
inspect_type=#{qualityInspect.inspectType}
<if test="qualityInspect.supplier != null and qualityInspect.supplier != '' ">
- AND supplier = #{qualityInspect.supplier}
+ AND supplier like concat('%',#{qualityInspect.supplier},'%')
</if>
<if test="qualityInspect.customer != null and qualityInspect.customer != '' ">
- AND customer = #{qualityInspect.customer}
+ AND customer like concat('%',#{qualityInspect.customer},'%')
</if>
<if test="qualityInspect.process != null and qualityInspect.process != '' ">
- AND process = #{qualityInspect.process}
+ AND process like concat('%',#{qualityInspect.process},'%')
</if>
<if test="qualityInspect.productName != null and qualityInspect.productName != '' ">
- AND product_name = #{qualityInspect.productName}
+ AND product_name like concat('%',#{qualityInspect.productName},'%')
</if>
<if test="qualityInspect.entryDateStart != null and qualityInspect.entryDateStart != '' ">
AND check_time >= DATE_FORMAT(#{qualityInspect.entryDateStart},'%Y-%m-%d')
</if>
<if test="qualityInspect.entryDateEnd != null and qualityInspect.entryDateEnd != '' ">
- AND check_time <= DATE_FORMAT(#{qualityInspect.entryDateEnd},'%Y-%m-%d')
+ AND check_time <= 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 < 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 < 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 <= 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