<?xml version="1.0" encoding="UTF-8" ?>
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
<mapper namespace="com.ruoyi.quality.mapper.QualityInspectMapper">
|
<select id="qualityInspectListPage" resultType="com.ruoyi.quality.pojo.QualityInspect">
|
SELECT
|
*
|
FROM quality_inspect
|
where
|
inspect_type=#{qualityInspect.inspectType}
|
<if test="qualityInspect.supplier != null and qualityInspect.supplier != '' ">
|
AND supplier like concat('%',#{qualityInspect.supplier},'%')
|
</if>
|
<if test="qualityInspect.customer != null and qualityInspect.customer != '' ">
|
AND customer like concat('%',#{qualityInspect.customer},'%')
|
</if>
|
<if test="qualityInspect.process != null and qualityInspect.process != '' ">
|
AND process like concat('%',#{qualityInspect.process},'%')
|
</if>
|
<if test="qualityInspect.productName != null and 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')
|
</if>
|
ORDER BY check_time DESC
|
</select>
|
<select id="qualityInspectExport" resultType="com.ruoyi.quality.pojo.QualityInspect">
|
SELECT
|
*
|
FROM quality_inspect
|
where
|
inspect_type=#{qualityInspect.inspectType}
|
<if test="qualityInspect.supplier != null and qualityInspect.supplier != '' ">
|
AND supplier = #{qualityInspect.supplier}
|
</if>
|
<if test="qualityInspect.customer != null and qualityInspect.customer != '' ">
|
AND customer = #{qualityInspect.customer}
|
</if>
|
<if test="qualityInspect.process != null and qualityInspect.process != '' ">
|
AND process = #{qualityInspect.process}
|
</if>
|
<if test="qualityInspect.productName != null and qualityInspect.productName != '' ">
|
AND product_name = #{qualityInspect.productName}
|
</if>
|
</select>
|
|
<delete id="deleteByProductMainIds">
|
DELETE FROM quality_inspect
|
WHERE product_main_id IN
|
<foreach collection="productMainIds" item="id" open="(" separator="," close=")">
|
#{id}
|
</foreach>
|
</delete>
|
|
<select id="getInspectStatistics" resultType="com.ruoyi.quality.dto.QualityInspectStatDto">
|
SELECT CASE pp.product_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 p
|
INNER JOIN product pp
|
ON p.parent_id = pp.id
|
LEFT JOIN product_model pm
|
ON pm.product_id = p.id
|
LEFT JOIN quality_inspect qi
|
ON qi.product_model_id = pm.id
|
|
WHERE pp.product_name IN ('原材料', '半成品', '成品')
|
|
GROUP BY pp.product_name
|
|
</select>
|
|
<select id="getPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto">
|
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,
|
|
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(
|
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
|
AND qi.check_result = '合格'
|
THEN qi.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 (SELECT 0 AS modelType
|
UNION ALL
|
SELECT 1
|
UNION ALL
|
SELECT 2) t
|
LEFT JOIN product p
|
ON 1 = 1
|
LEFT JOIN product pp
|
ON p.parent_id = pp.id
|
LEFT JOIN product_model pm
|
ON pm.product_id = p.id
|
LEFT JOIN quality_inspect qi
|
ON qi.product_model_id = pm.id
|
AND (
|
(pp.product_name = '原材料' AND t.modelType = 0) OR
|
(pp.product_name = '半成品' AND t.modelType = 1) OR
|
(pp.product_name = '成品' AND t.modelType = 2)
|
)
|
|
GROUP BY t.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 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(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(
|
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 AND qi.check_result = '合格'
|
THEN qi.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 product p ON 1 = 1
|
LEFT JOIN product pp ON p.parent_id = pp.id
|
LEFT JOIN product_model pm ON pm.product_id = p.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
|
AND (
|
(pp.product_name = '原材料' AND b.modelType = 0)
|
OR (pp.product_name = '半成品' AND b.modelType = 1)
|
OR (pp.product_name = '成品' AND b.modelType = 2)
|
)
|
|
GROUP BY b.month_num, b.modelType
|
ORDER BY b.month_num, b.modelType;
|
|
</select>
|
|
<select id="getYearlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto">
|
SELECT t.modelType,
|
|
COALESCE(SUM(
|
CASE
|
WHEN pp.product_name = '原材料' AND t.modelType = 0 THEN qi.quantity
|
WHEN pp.product_name = '半成品' AND t.modelType = 1 THEN qi.quantity
|
WHEN pp.product_name = '成品' AND t.modelType = 2 THEN qi.quantity
|
ELSE 0
|
END
|
), 0) AS totalCount
|
|
FROM (SELECT 0 AS modelType
|
UNION ALL
|
SELECT 1
|
UNION ALL
|
SELECT 2) t
|
LEFT JOIN product p ON 1 = 1
|
LEFT JOIN product pp ON p.parent_id = pp.id
|
LEFT JOIN product_model pm ON pm.product_id = p.id
|
LEFT JOIN quality_inspect qi
|
ON qi.product_model_id = pm.id
|
AND YEAR(qi.check_time) = #{year}
|
AND qi.inspect_state = 1
|
AND qi.check_result = '合格'
|
|
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)
|
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 pp.product_name = '原材料'
|
THEN qi.quantity
|
ELSE 0
|
END
|
), 0) AS rawMaterialCount,
|
|
/* 半成品 */
|
COALESCE(SUM(
|
CASE
|
WHEN pp.product_name = '半成品'
|
THEN qi.quantity
|
ELSE 0
|
END
|
), 0) AS processCount,
|
|
/* 成品 */
|
COALESCE(SUM(
|
CASE
|
WHEN pp.product_name = '成品'
|
THEN qi.quantity
|
ELSE 0
|
END
|
), 0) AS outgoingCount
|
|
FROM months m
|
LEFT JOIN product p ON 1 = 1
|
LEFT JOIN product pp ON p.parent_id = pp.id
|
LEFT JOIN product_model pm ON pm.product_id = p.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 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
|
JOIN product p
|
ON qi.product_id = p.id
|
JOIN product pp
|
ON p.parent_id = pp.id
|
WHERE qi.inspect_state = 1
|
AND (
|
(#{modelType} = 1 AND pp.product_name = '原材料')
|
OR (#{modelType} = 2 AND pp.product_name = '半成品')
|
OR (#{modelType} = 3 AND pp.product_name = '成品')
|
)
|
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>
|