ETest-Vue-FastAPI/check_sample_workorder_cons...

76 lines
2.6 KiB
MySQL
Raw Permalink Normal View History

-- 检查样品状态与工单的一致性
-- 用于诊断"删除工单后仍提示已有工单"的问题
-- 1. 查看样品状态分布
SELECT
'样品状态分布' AS ,
status AS ,
CASE
WHEN status = '0' THEN '待测试'
WHEN status = '1' THEN '测试中'
WHEN status = '2' THEN '已完成'
ELSE '未知'
END AS ,
COUNT(*) AS
FROM warehouse_sample
GROUP BY status
ORDER BY status;
-- 2. 查看工单数量
SELECT
'工单数量' AS ,
COUNT(*) AS ,
COUNT(CASE WHEN order_id IS NULL THEN 1 END) AS ,
COUNT(CASE WHEN order_id IS NOT NULL THEN 1 END) AS
FROM test_work_order;
-- 3. 查找状态为"测试中"但没有工单的样品(数据不一致)
SELECT
'不一致的样品' AS ,
s.sample_id AS ID,
s.sample_sn AS SN,
s.status AS ,
CASE
WHEN s.status = '0' THEN '待测试'
WHEN s.status = '1' THEN '测试中'
WHEN s.status = '2' THEN '已完成'
ELSE '未知'
END AS ,
COUNT(wo.id) AS
FROM warehouse_sample s
LEFT JOIN test_eut te ON s.sample_sn = te.sn
LEFT JOIN test_work_order wo ON te.id = wo.test_eut_id AND wo.order_id IS NULL
WHERE s.status != '0' -- 非待测试状态
GROUP BY s.sample_id, s.sample_sn, s.status
HAVING COUNT(wo.id) = 0;
-- 4. 查看最近的样品和工单关联情况
SELECT
'最近样品工单关联' AS ,
s.sample_id AS ID,
s.sample_sn AS SN,
s.status AS ,
te.id AS TestEutID,
COUNT(wo.id) AS ,
GROUP_CONCAT(wo.id) AS ID
FROM warehouse_sample s
LEFT JOIN test_eut te ON s.sample_sn = te.sn
LEFT JOIN test_work_order wo ON te.id = wo.test_eut_id AND wo.order_id IS NULL
GROUP BY s.sample_id, s.sample_sn, s.status, te.id
ORDER BY s.sample_id DESC
LIMIT 10;
-- 5. 统计结果
SELECT
'统计结果' AS ,
(SELECT COUNT(*) FROM warehouse_sample) AS ,
(SELECT COUNT(*) FROM warehouse_sample WHERE status = '0') AS ,
(SELECT COUNT(*) FROM warehouse_sample WHERE status = '1') AS ,
(SELECT COUNT(*) FROM warehouse_sample WHERE status = '2') AS ,
(SELECT COUNT(*) FROM test_work_order WHERE order_id IS NULL) AS ,
(SELECT COUNT(DISTINCT s.sample_id)
FROM warehouse_sample s
LEFT JOIN test_eut te ON s.sample_sn = te.sn
LEFT JOIN test_work_order wo ON te.id = wo.test_eut_id AND wo.order_id IS NULL
WHERE s.status != '0' AND wo.id IS NULL) AS ;