| | |
| | | <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 |
| | | * |
| | |
| | | </foreach> |
| | | </delete> |
| | | |
| | | <select id="getInspectStatistics" resultType="com.ruoyi.quality.dto.QualityInspectStatDto"> |
| | | WITH RECURSIVE product_tree AS (SELECT id, |
| | | parent_id, |
| | | product_name, |
| | | id AS root_id, |
| | | product_name AS root_name |
| | | FROM product |
| | | WHERE product_name IN ('原料', '半成品', '成品') |
| | | UNION ALL |
| | | SELECT p.id, |
| | | p.parent_id, |
| | | p.product_name, |
| | | pt.root_id, |
| | | pt.root_name |
| | | FROM product p |
| | | INNER JOIN product_tree pt ON p.parent_id = pt.id) |
| | | SELECT CASE pt.root_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_tree pt |
| | | INNER JOIN product_model pm ON pm.product_id = pt.id |
| | | LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id |
| | | GROUP BY pt.root_id, pt.root_name |
| | | </select> |
| | | |
| | | <select id="getPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto"> |
| | | WITH RECURSIVE product_tree AS (SELECT id, |
| | | product_name, |
| | | CASE product_name |
| | | WHEN '原料' THEN 0 |
| | | WHEN '半成品' THEN 1 |
| | | WHEN '成品' THEN 2 |
| | | END AS modelType |
| | | FROM product |
| | | WHERE product_name IN ('原料', '半成品', '成品') |
| | | |
| | | UNION ALL |
| | | |
| | | SELECT p.id, |
| | | p.product_name, |
| | | pt.modelType |
| | | FROM product p |
| | | INNER JOIN product_tree pt ON p.parent_id = pt.id) |
| | | |
| | | SELECT base.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(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) |
| | | / SUM(qi.quantity) * 100, 2) |
| | | ) AS completionRate, |
| | | |
| | | IF(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) = 0, 0, |
| | | ROUND(SUM(CASE WHEN qi.inspect_state = 1 AND qi.check_result = '合格' THEN qi.quantity ELSE 0 END) |
| | | / SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) * 100, 2) |
| | | ) AS passRate |
| | | |
| | | FROM (SELECT 0 AS modelType |
| | | UNION ALL |
| | | SELECT 1 |
| | | UNION ALL |
| | | SELECT 2) base |
| | | LEFT JOIN product_tree pt ON base.modelType = pt.modelType |
| | | LEFT JOIN product_model pm ON pm.product_id = pt.id |
| | | LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id |
| | | |
| | | GROUP BY base.modelType |
| | | ORDER BY base.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), |
| | | product_tree AS (SELECT id, |
| | | product_name, |
| | | CASE product_name |
| | | WHEN '原料' THEN 0 |
| | | WHEN '半成品' THEN 1 |
| | | WHEN '成品' THEN 2 |
| | | END AS modelType |
| | | FROM product |
| | | WHERE product_name IN ('原料', '半成品', '成品') |
| | | |
| | | UNION ALL |
| | | |
| | | SELECT p.id, p.product_name, pt.modelType |
| | | FROM product p |
| | | INNER JOIN product_tree pt ON p.parent_id = pt.id), |
| | | base_matrix AS (SELECT m.month_num, t.modelType |
| | | FROM months m |
| | | CROSS JOIN (SELECT 0 AS modelType UNION ALL SELECT 1 UNION ALL SELECT 2) 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(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) / SUM(qi.quantity) * 100, 2) |
| | | ) AS completionRate, |
| | | |
| | | /* 合格率 */ |
| | | IF(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) = 0, 0, |
| | | ROUND(SUM(CASE WHEN qi.inspect_state = 1 AND qi.check_result = '合格' THEN qi.quantity ELSE 0 END) |
| | | / SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) * 100, 2) |
| | | ) AS passRate |
| | | |
| | | FROM base_matrix b |
| | | LEFT JOIN product_tree pt ON b.modelType = pt.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 |
| | | |
| | | GROUP BY b.month_num, b.modelType |
| | | ORDER BY b.month_num, b.modelType |
| | | </select> |
| | | |
| | | <select id="getYearlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto"> |
| | | WITH RECURSIVE |
| | | product_tree AS (SELECT id, |
| | | product_name, |
| | | CASE product_name |
| | | WHEN '原料' THEN 0 |
| | | WHEN '半成品' THEN 1 |
| | | WHEN '成品' THEN 2 |
| | | END AS modelType |
| | | FROM product |
| | | WHERE product_name IN ('原料', '半成品', '成品') |
| | | |
| | | UNION ALL |
| | | |
| | | SELECT p.id, p.product_name, pt.modelType |
| | | FROM product p |
| | | INNER JOIN product_tree pt ON p.parent_id = pt.id), |
| | | types AS (SELECT 0 AS modelType |
| | | UNION ALL |
| | | SELECT 1 |
| | | UNION ALL |
| | | SELECT 2) |
| | | |
| | | 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, |
| | | |
| | | IF(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) = 0, 0, |
| | | ROUND(SUM(CASE WHEN qi.inspect_state = 1 AND qi.check_result = '合格' THEN qi.quantity ELSE 0 END) |
| | | / SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) * 100, 2) |
| | | ) AS passRate |
| | | |
| | | FROM types t |
| | | LEFT JOIN product_tree pt ON t.modelType = pt.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} |
| | | |
| | | 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), |
| | | product_tree AS (SELECT id, product_name AS root_name |
| | | FROM product |
| | | WHERE product_name IN ('原料', '半成品', '成品') |
| | | |
| | | UNION ALL |
| | | |
| | | SELECT p.id, pt.root_name |
| | | FROM product p |
| | | INNER JOIN product_tree pt ON p.parent_id = pt.id) |
| | | 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 pt.root_name = '原料' THEN qi.quantity ELSE 0 END), 0) AS rawMaterialCount, |
| | | |
| | | COALESCE(SUM(CASE WHEN pt.root_name = '半成品' THEN qi.quantity ELSE 0 END), 0) AS processCount, |
| | | |
| | | COALESCE(SUM(CASE WHEN pt.root_name = '成品' THEN qi.quantity ELSE 0 END), 0) AS outgoingCount |
| | | |
| | | FROM months m |
| | | LEFT JOIN product_tree 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 |
| | | 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 RECURSIVE |
| | | -- 1. 找到对应的根节点 |
| | | root_node AS (SELECT id, product_name |
| | | FROM product |
| | | WHERE ( |
| | | (#{modelType} = 1 AND product_name = '原料') |
| | | OR (#{modelType} = 2 AND product_name = '半成品') |
| | | OR (#{modelType} = 3 AND product_name = '成品') |
| | | )), |
| | | target_ids AS (SELECT id |
| | | FROM root_node |
| | | UNION ALL |
| | | SELECT p.id |
| | | FROM product p |
| | | INNER JOIN target_ids ti ON p.parent_id = ti.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 |
| | | WHERE qi.inspect_state = 1 |
| | | AND qi.product_id IN (SELECT id FROM target_ids) |
| | | 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> |