| | |
| | | <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 |
| | | * |
| | |
| | | </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 -- 统计记录数,因为原SQL用的是quantity字段 |
| | | 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, COUNT(*) AS count |
| | | FROM quality_inspect_param qip |
| | | JOIN quality_inspect qi ON qip.inspect_id = qi.id |
| | | WHERE qi.inspect_type = #{inspectType} |
| | | GROUP BY qip.parameter_item), |
| | | total AS (SELECT SUM(count) as total_count |
| | | FROM parameter_counts), |
| | | ranked AS (SELECT name, count, ROW_NUMBER() OVER (ORDER BY count DESC) as rn |
| | | 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 count > 0) sub |
| | | 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> |