| | |
| | | </select> |
| | | |
| | | <select id="getPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto"> |
| | | SELECT qi.inspect_type AS modelType, |
| | | SELECT t.modelType, |
| | | t.totalCount, |
| | | t.completedCount, |
| | | t.qualifiedCount, |
| | | t.unqualifiedCount, |
| | | |
| | | COALESCE(SUM(qi.quantity), 0) AS totalCount, |
| | | /* 完成率: |
| | | 如果总数为 0 则返回 0;否则计算比例,使用 TRUNCATE 保留 4 位小数(如 99.9992) |
| | | */ |
| | | IF(t.totalCount = 0, 0, |
| | | TRUNCATE((t.completedCount / t.totalCount) * 100, 2) |
| | | ) AS completionRate, |
| | | |
| | | 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 |
| | | THEN qi.qualified_quantity |
| | | ELSE 0 |
| | | END |
| | | ), 0) AS qualifiedCount, |
| | | |
| | | COALESCE(SUM( |
| | | CASE |
| | | WHEN qi.inspect_state = 1 |
| | | THEN qi.unqualified_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 |
| | | THEN qi.qualified_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 quality_inspect qi |
| | | |
| | | GROUP BY qi.inspect_type |
| | | ORDER BY qi.inspect_type; |
| | | /* 合格率: |
| | | 如果完工数为 0 则返回 0;使用 TRUNCATE 截断,防止极其接近 100% 的数据被四舍五入成 100 |
| | | */ |
| | | IF(t.completedCount = 0, 0, |
| | | TRUNCATE((t.qualifiedCount / t.completedCount) * 100, 2) |
| | | ) AS passRate |
| | | FROM ( |
| | | /* 先通过子查询把基础数据进行聚合统计,避免外层重复编写复杂的 CASE WHEN */ |
| | | SELECT qi.inspect_type AS 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 THEN qi.qualified_quantity ELSE 0 END), |
| | | 0) AS qualifiedCount, |
| | | COALESCE(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.unqualified_quantity ELSE 0 END), |
| | | 0) AS unqualifiedCount |
| | | FROM quality_inspect qi |
| | | GROUP BY qi.inspect_type) t |
| | | ORDER BY t.modelType; |
| | | </select> |
| | | |
| | | |
| | |
| | | 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, |
| | | SELECT |
| | | CASE t.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, |
| | | t.modelType, |
| | | t.totalCount, |
| | | t.completedCount, |
| | | t.qualifiedCount, |
| | | t.unqualifiedCount, |
| | | |
| | | /* 总数量 */ |
| | | COALESCE(SUM(qi.quantity), 0) AS totalCount, |
| | | IF(t.totalCount = 0, 0, |
| | | TRUNCATE((t.completedCount / t.totalCount) * 100, 2) |
| | | ) AS completionRate, |
| | | |
| | | /* 已完成 */ |
| | | COALESCE(SUM( |
| | | CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END |
| | | ), 0) AS completedCount, |
| | | IF(t.completedCount = 0, 0, |
| | | TRUNCATE((t.qualifiedCount / t.completedCount) * 100, 2) |
| | | ) AS passRate |
| | | |
| | | /* 合格 */ |
| | | COALESCE(SUM( |
| | | CASE |
| | | WHEN qi.inspect_state = 1 |
| | | THEN qi.qualified_quantity |
| | | ELSE 0 |
| | | END |
| | | ), 0) AS qualifiedCount, |
| | | |
| | | /* 不合格 */ |
| | | COALESCE(SUM( |
| | | CASE |
| | | WHEN qi.inspect_state = 1 |
| | | THEN qi.unqualified_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 |
| | | THEN qi.qualified_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 quality_inspect qi |
| | | ON qi.inspect_type = b.modelType |
| | | 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; |
| | | |
| | | FROM ( |
| | | SELECT |
| | | b.month_num, |
| | | 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 THEN qi.qualified_quantity ELSE 0 END), 0) AS qualifiedCount, |
| | | COALESCE(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.unqualified_quantity ELSE 0 END), 0) AS unqualifiedCount |
| | | FROM base b |
| | | LEFT JOIN quality_inspect qi ON qi.inspect_type = b.modelType |
| | | AND YEAR(qi.check_time) = #{year} |
| | | AND MONTH(qi.check_time) = b.month_num |
| | | GROUP BY b.month_num, b.modelType |
| | | ) t |
| | | ORDER BY t.month_num, t.modelType; |
| | | </select> |
| | | |
| | | <select id="getYearlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto"> |
| | | SELECT qi.inspect_type AS modelType, |
| | | |