From 04dce61c02c10832665cdaf1aabf5b7e9b31da47 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期三, 21 一月 2026 16:17:19 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New' into dev_New
---
src/main/resources/mapper/quality/QualityInspectMapper.xml | 298 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 293 insertions(+), 5 deletions(-)
diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index dc3048e..8058455 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,292 @@
</foreach>
</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>
+
+ <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>
+
+ <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 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
+ 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
+ </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>
+
+ <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),
+ 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
+ FROM months m
+ LEFT JOIN qi_data d ON m.month_num = d.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 <= 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