SELECT
qi.*,
pm.uid_no,
pl.purchase_contract_number as purchase_contract_no
pwo.work_order_no
FROM
quality_inspect qi
LEFT JOIN purchase_ledger pl ON pl.id = qi.purchase_ledger_id
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
LEFT JOIN product_model pm on qi.product_model_id = pm.id
WHERE
inspect_type=#{qualityInspect.inspectType}
AND qi.supplier like concat('%',#{qualityInspect.supplier},'%')
AND qi.customer like concat('%',#{qualityInspect.customer},'%')
AND qi.process like concat('%',#{qualityInspect.process},'%')
AND qi.product_name like concat('%',#{qualityInspect.productName},'%')
AND qi.check_time >= DATE_FORMAT(#{qualityInspect.entryDateStart},'%Y-%m-%d')
AND qi.check_time <= DATE_FORMAT(#{qualityInspect.entryDateEnd},'%Y-%m-%d')
ORDER BY qi.check_time DESC
SELECT
qi.*,
pm.uid_no
FROM quality_inspect qi
LEFT JOIN product_model pm on qi.product_model_id = pm.id
where
inspect_type=#{qualityInspect.inspectType}
AND supplier = #{qualityInspect.supplier}
AND customer = #{qualityInspect.customer}
AND process = #{qualityInspect.process}
AND product_name = #{qualityInspect.productName}
DELETE FROM quality_inspect
WHERE product_main_id IN
#{id}
WITH RECURSIVE product_type AS (SELECT id,
CASE
WHEN product_name LIKE '%半成品%' THEN 1
WHEN product_name LIKE '%成品%' THEN 2
WHEN product_name LIKE '%原材料%' THEN 0
END AS modelType
FROM product
WHERE parent_id IS NULL
UNION ALL
SELECT p.id,
pt.modelType
FROM product p
INNER JOIN product_type pt ON p.parent_id = pt.id)
SELECT pt.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_type pt
INNER JOIN product_model pm
ON pm.product_id = pt.id
LEFT JOIN quality_inspect qi
ON qi.product_model_id = pm.id
WHERE pt.modelType IS NOT NULL
GROUP BY pt.modelType
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_type pt
ON pt.modelType = t.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 t.modelType
ORDER BY t.modelType;
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),
product_type AS (SELECT id,
CASE
WHEN product_name LIKE '%半成品%' THEN 1
WHEN product_name LIKE '%成品%' THEN 2
WHEN product_name LIKE '%原材料%' THEN 0
END AS modelType
FROM product
WHERE parent_id IS NULL
UNION ALL
SELECT p.id,
pt.modelType
FROM product p
INNER JOIN product_type pt ON p.parent_id = pt.id)
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_type pt
ON pt.modelType = b.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 t.modelType,
COALESCE(SUM(qi.quantity), 0) AS totalCount
FROM (SELECT 0 AS modelType
UNION ALL
SELECT 1
UNION ALL
SELECT 2) t
LEFT JOIN product_type pt
ON pt.modelType = t.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 qi.inspect_state = 1
AND qi.check_result = '合格'
GROUP BY t.modelType
ORDER BY t.modelType;
WITH RECURSIVE months AS (SELECT 1 AS month_num
UNION ALL
SELECT month_num + 1
FROM months
WHERE month_num < 12),
product_type AS (SELECT id,
CASE
WHEN product_name LIKE '%半成品%' THEN 1
WHEN product_name LIKE '%成品%' THEN 2
WHEN product_name LIKE '%原材料%' THEN 0
END AS modelType
FROM product
WHERE parent_id IS NULL
UNION ALL
SELECT p.id,
pt.modelType
FROM product p
INNER JOIN product_type 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.modelType = 0
THEN qi.quantity
ELSE 0
END
), 0) AS rawMaterialCount,
/* 半成品 */
COALESCE(SUM(
CASE
WHEN pt.modelType = 1
THEN qi.quantity
ELSE 0
END
), 0) AS processCount,
/* 成品 */
COALESCE(SUM(
CASE
WHEN pt.modelType = 2
THEN qi.quantity
ELSE 0
END
), 0) AS outgoingCount
FROM months m
LEFT JOIN product_type 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;
WITH RECURSIVE product_type AS (SELECT id,
CASE
WHEN product_name LIKE '%半成品%' THEN 1
WHEN product_name LIKE '%成品%' THEN 2
WHEN product_name LIKE '%原材料%' THEN 0
END AS modelType
FROM product
WHERE parent_id IS NULL
UNION ALL
SELECT p.id,
pt.modelType
FROM product p
INNER JOIN product_type pt ON p.parent_id = pt.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
JOIN product_type pt
ON qi.product_id = pt.id
WHERE qi.inspect_state = 1
AND (
(#{modelType} = 1 AND pt.modelType = 0)
OR (#{modelType} = 2 AND pt.modelType = 1)
OR (#{modelType} = 3 AND pt.modelType = 2)
)
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 *,
case
when inspect_material_condition = '检验用粉剂' then
'☑'
else
'☐'
end as inspect_material_condition_a,
case
when inspect_material_condition = '检验用液剂' then
'☑'
else
'☐'
end as inspect_material_condition_b
from quality_inspect
where id = #{id};