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 >= DATE_FORMAT(#{qualityInspect.entryDateStart},'%Y-%m-%d')
+ AND qi.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 qi.check_time <= 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 < 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 < 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 < 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 < 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 <= 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
+ 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 <= 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