chore(qc): 补充阴阳性参数变更后历史结果刷新工具
提供第 1–10 条阴/阳→阴性/阳性及空值默认回填的预览执行脚本与迁移 SQL。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
3d9a71da46
commit
e2a50b33fe
2 files changed
+931
No files matched your search
@@ -0,0 +1,348 @@
|
||||
-- 质检历史结果刷新:对应 2026-11-09 配置变更第 1–10 条
|
||||
--
|
||||
-- 做什么:
|
||||
-- 1) 「阴/阳」→「阴性/阳性」
|
||||
-- 2) 已有结果行且值为空,且模板为 select 且有默认值 → 写成默认值(一般为「阴性」)
|
||||
-- 3) 值兼容时同步结果行 param_type 快照(text→select 等);定量等异形值不改
|
||||
-- 不做什么:
|
||||
-- - 不为「任务存在但无结果行」INSERT
|
||||
-- - 不改第 11 条 HLA、不改已有定量等非空异形值(如 0.01)
|
||||
--
|
||||
-- 使用:先跑「一、预览」,确认条数后再跑「二、执行」。
|
||||
-- 建议在事务中执行:START TRANSACTION; ... 核对 ... COMMIT; / ROLLBACK;
|
||||
-- 目标库:测试库 zkxw-sc 或生产库(执行前自行确认当前库)
|
||||
-- SELECT DATABASE();
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 公共:第 1–10 条项目参数模板
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 可先单独核对模板是否已是「阴性/阳性」单选:
|
||||
SELECT
|
||||
COALESCE(l.item_code, t.item_code) AS item_code,
|
||||
COALESCE(l.item_name, t.item_name) AS item_name,
|
||||
p.id AS param_id,
|
||||
p.param_name,
|
||||
p.param_type,
|
||||
p.options,
|
||||
p.default_value
|
||||
FROM biz_qc_item_param p
|
||||
LEFT JOIN biz_qc_lab_test_item l
|
||||
ON p.item_source = 'lab' AND p.item_id = l.id AND l.del_flag = 0
|
||||
LEFT JOIN biz_qc_third_party_item t
|
||||
ON p.item_source = 'third_party' AND p.item_id = t.id AND t.del_flag = 0
|
||||
WHERE p.del_flag = 0
|
||||
AND COALESCE(l.item_code, t.item_code) IN (
|
||||
'ZKXW-QC-000-1',
|
||||
'ZKXW-QC-003-18',
|
||||
'ZKXW-QC-003-19',
|
||||
'ZKXW-QC-003-17',
|
||||
'ZKXW-QC-001-12',
|
||||
'ZKXW-QC-001-11',
|
||||
'ZKXW-QC-001-10',
|
||||
'ZKXW-QC-001-06',
|
||||
'ZKXW-QC-001-18',
|
||||
'ZKXW-QC-002-02'
|
||||
)
|
||||
ORDER BY item_code, p.order_num;
|
||||
|
||||
|
||||
-- ===========================================================================
|
||||
-- 一、预览(只读)
|
||||
-- ===========================================================================
|
||||
|
||||
-- A. 已有结果行库存:空 / 阴阳旧文案 / 标准阴阳性 / 其他
|
||||
SELECT
|
||||
COALESCE(l.item_code, t.item_code) AS item_code,
|
||||
COUNT(*) AS result_rows,
|
||||
SUM(CASE WHEN r.param_value IS NULL OR TRIM(r.param_value) = '' THEN 1 ELSE 0 END) AS empty_n,
|
||||
SUM(CASE WHEN r.param_value IN ('阴', '阳') THEN 1 ELSE 0 END) AS old_label_n,
|
||||
SUM(CASE WHEN r.param_value IN ('阴性', '阳性') THEN 1 ELSE 0 END) AS standard_n,
|
||||
SUM(
|
||||
CASE
|
||||
WHEN r.param_value IS NOT NULL
|
||||
AND TRIM(r.param_value) <> ''
|
||||
AND r.param_value NOT IN ('阴', '阳', '阴性', '阳性')
|
||||
THEN 1 ELSE 0
|
||||
END
|
||||
) AS other_n
|
||||
FROM biz_qc_task_result r
|
||||
JOIN biz_qc_item_param p ON r.param_id = p.id AND p.del_flag = 0
|
||||
LEFT JOIN biz_qc_lab_test_item l
|
||||
ON p.item_source = 'lab' AND p.item_id = l.id AND l.del_flag = 0
|
||||
LEFT JOIN biz_qc_third_party_item t
|
||||
ON p.item_source = 'third_party' AND p.item_id = t.id AND t.del_flag = 0
|
||||
WHERE r.del_flag = 0
|
||||
AND COALESCE(l.item_code, t.item_code) IN (
|
||||
'ZKXW-QC-000-1',
|
||||
'ZKXW-QC-003-18',
|
||||
'ZKXW-QC-003-19',
|
||||
'ZKXW-QC-003-17',
|
||||
'ZKXW-QC-001-12',
|
||||
'ZKXW-QC-001-11',
|
||||
'ZKXW-QC-001-10',
|
||||
'ZKXW-QC-001-06',
|
||||
'ZKXW-QC-001-18',
|
||||
'ZKXW-QC-002-02'
|
||||
)
|
||||
GROUP BY item_code
|
||||
ORDER BY item_code;
|
||||
|
||||
-- B. 将执行:阴/阳 → 阴性/阳性
|
||||
SELECT
|
||||
COALESCE(l.item_code, t.item_code) AS item_code,
|
||||
r.id AS result_id,
|
||||
r.task_id,
|
||||
r.param_value AS old_value,
|
||||
CASE r.param_value WHEN '阴' THEN '阴性' WHEN '阳' THEN '阳性' END AS new_value
|
||||
FROM biz_qc_task_result r
|
||||
JOIN biz_qc_item_param p ON r.param_id = p.id AND p.del_flag = 0
|
||||
LEFT JOIN biz_qc_lab_test_item l
|
||||
ON p.item_source = 'lab' AND p.item_id = l.id AND l.del_flag = 0
|
||||
LEFT JOIN biz_qc_third_party_item t
|
||||
ON p.item_source = 'third_party' AND p.item_id = t.id AND t.del_flag = 0
|
||||
WHERE r.del_flag = 0
|
||||
AND r.param_value IN ('阴', '阳')
|
||||
AND COALESCE(l.item_code, t.item_code) IN (
|
||||
'ZKXW-QC-000-1',
|
||||
'ZKXW-QC-003-18',
|
||||
'ZKXW-QC-003-19',
|
||||
'ZKXW-QC-003-17',
|
||||
'ZKXW-QC-001-12',
|
||||
'ZKXW-QC-001-11',
|
||||
'ZKXW-QC-001-10',
|
||||
'ZKXW-QC-001-06',
|
||||
'ZKXW-QC-001-18',
|
||||
'ZKXW-QC-002-02'
|
||||
);
|
||||
|
||||
-- C. 将执行:空结果行 → 模板 default_value(仅 select 且模板有默认值)
|
||||
SELECT
|
||||
COALESCE(l.item_code, t.item_code) AS item_code,
|
||||
r.id AS result_id,
|
||||
r.task_id,
|
||||
r.param_value AS old_value,
|
||||
p.default_value AS new_value,
|
||||
r.param_type AS old_type,
|
||||
p.param_type AS template_type
|
||||
FROM biz_qc_task_result r
|
||||
JOIN biz_qc_item_param p ON r.param_id = p.id AND p.del_flag = 0
|
||||
LEFT JOIN biz_qc_lab_test_item l
|
||||
ON p.item_source = 'lab' AND p.item_id = l.id AND l.del_flag = 0
|
||||
LEFT JOIN biz_qc_third_party_item t
|
||||
ON p.item_source = 'third_party' AND p.item_id = t.id AND t.del_flag = 0
|
||||
WHERE r.del_flag = 0
|
||||
AND (r.param_value IS NULL OR TRIM(r.param_value) = '')
|
||||
AND p.param_type = 'select'
|
||||
AND p.default_value IS NOT NULL
|
||||
AND TRIM(p.default_value) <> ''
|
||||
AND COALESCE(l.item_code, t.item_code) IN (
|
||||
'ZKXW-QC-000-1',
|
||||
'ZKXW-QC-003-18',
|
||||
'ZKXW-QC-003-19',
|
||||
'ZKXW-QC-003-17',
|
||||
'ZKXW-QC-001-12',
|
||||
'ZKXW-QC-001-11',
|
||||
'ZKXW-QC-001-10',
|
||||
'ZKXW-QC-001-06',
|
||||
'ZKXW-QC-001-18',
|
||||
'ZKXW-QC-002-02'
|
||||
);
|
||||
|
||||
-- D. 将执行:同步 param_type(值空,或值已是阴性/阳性,或值已落在模板 options 内)
|
||||
SELECT
|
||||
COALESCE(l.item_code, t.item_code) AS item_code,
|
||||
r.id AS result_id,
|
||||
r.task_id,
|
||||
r.param_value,
|
||||
r.param_type AS old_type,
|
||||
p.param_type AS new_type
|
||||
FROM biz_qc_task_result r
|
||||
JOIN biz_qc_item_param p ON r.param_id = p.id AND p.del_flag = 0
|
||||
LEFT JOIN biz_qc_lab_test_item l
|
||||
ON p.item_source = 'lab' AND p.item_id = l.id AND l.del_flag = 0
|
||||
LEFT JOIN biz_qc_third_party_item t
|
||||
ON p.item_source = 'third_party' AND p.item_id = t.id AND t.del_flag = 0
|
||||
WHERE r.del_flag = 0
|
||||
AND IFNULL(r.param_type, '') <> IFNULL(p.param_type, '')
|
||||
AND (
|
||||
r.param_value IS NULL
|
||||
OR TRIM(r.param_value) = ''
|
||||
OR r.param_value IN ('阴性', '阳性', '阴', '阳')
|
||||
OR (
|
||||
p.options IS NOT NULL
|
||||
AND JSON_VALID(p.options)
|
||||
AND JSON_CONTAINS(CAST(p.options AS JSON), JSON_QUOTE(TRIM(r.param_value)))
|
||||
)
|
||||
)
|
||||
AND COALESCE(l.item_code, t.item_code) IN (
|
||||
'ZKXW-QC-000-1',
|
||||
'ZKXW-QC-003-18',
|
||||
'ZKXW-QC-003-19',
|
||||
'ZKXW-QC-003-17',
|
||||
'ZKXW-QC-001-12',
|
||||
'ZKXW-QC-001-11',
|
||||
'ZKXW-QC-001-10',
|
||||
'ZKXW-QC-001-06',
|
||||
'ZKXW-QC-001-18',
|
||||
'ZKXW-QC-002-02'
|
||||
);
|
||||
|
||||
-- E. 信息:关联任务但无结果行(本脚本不会 INSERT)
|
||||
SELECT 'lab' AS src, lti.item_code, COUNT(*) AS tasks_no_result
|
||||
FROM biz_qc_task task
|
||||
JOIN biz_qc_work_order_lab_item wi ON wi.id = task.source_line_id AND wi.del_flag = 0
|
||||
JOIN biz_qc_lab_test_item lti ON lti.id = wi.lab_test_item_id AND lti.del_flag = 0
|
||||
JOIN biz_qc_item_param p
|
||||
ON p.item_source = 'lab' AND p.item_id = lti.id AND p.del_flag = 0
|
||||
WHERE task.del_flag = 0
|
||||
AND task.task_type = 'sysz'
|
||||
AND lti.item_code IN (
|
||||
'ZKXW-QC-000-1',
|
||||
'ZKXW-QC-003-18',
|
||||
'ZKXW-QC-003-19',
|
||||
'ZKXW-QC-003-17',
|
||||
'ZKXW-QC-001-12',
|
||||
'ZKXW-QC-001-11',
|
||||
'ZKXW-QC-001-10',
|
||||
'ZKXW-QC-001-06',
|
||||
'ZKXW-QC-001-18',
|
||||
'ZKXW-QC-002-02'
|
||||
)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM biz_qc_task_result r
|
||||
WHERE r.task_id = task.id AND r.del_flag = 0
|
||||
AND (r.param_id = p.id OR (p.param_code <> '' AND r.param_code = p.param_code))
|
||||
)
|
||||
GROUP BY lti.item_code
|
||||
UNION ALL
|
||||
SELECT 'third_party', tpi.item_code, COUNT(*)
|
||||
FROM biz_qc_task task
|
||||
JOIN biz_qc_work_order_third_item wi ON wi.id = task.source_line_id AND wi.del_flag = 0
|
||||
JOIN biz_qc_third_party_item tpi ON tpi.id = wi.third_party_item_id AND tpi.del_flag = 0
|
||||
JOIN biz_qc_item_param p
|
||||
ON p.item_source = 'third_party' AND p.item_id = tpi.id AND p.del_flag = 0
|
||||
WHERE task.del_flag = 0
|
||||
AND task.task_type = 'dsfjc'
|
||||
AND tpi.item_code IN (
|
||||
'ZKXW-QC-000-1',
|
||||
'ZKXW-QC-003-18',
|
||||
'ZKXW-QC-003-19',
|
||||
'ZKXW-QC-003-17',
|
||||
'ZKXW-QC-001-12',
|
||||
'ZKXW-QC-001-11',
|
||||
'ZKXW-QC-001-10',
|
||||
'ZKXW-QC-001-06',
|
||||
'ZKXW-QC-001-18',
|
||||
'ZKXW-QC-002-02'
|
||||
)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM biz_qc_task_result r
|
||||
WHERE r.task_id = task.id AND r.del_flag = 0
|
||||
AND (r.param_id = p.id OR (p.param_code <> '' AND r.param_code = p.param_code))
|
||||
)
|
||||
GROUP BY tpi.item_code
|
||||
ORDER BY item_code;
|
||||
|
||||
|
||||
-- ===========================================================================
|
||||
-- 二、执行(建议包在事务里)
|
||||
-- ===========================================================================
|
||||
-- START TRANSACTION;
|
||||
|
||||
-- 1) 阴/阳 → 阴性/阳性
|
||||
UPDATE biz_qc_task_result r
|
||||
JOIN biz_qc_item_param p ON r.param_id = p.id AND p.del_flag = 0
|
||||
LEFT JOIN biz_qc_lab_test_item l
|
||||
ON p.item_source = 'lab' AND p.item_id = l.id AND l.del_flag = 0
|
||||
LEFT JOIN biz_qc_third_party_item t
|
||||
ON p.item_source = 'third_party' AND p.item_id = t.id AND t.del_flag = 0
|
||||
SET
|
||||
r.param_value = CASE r.param_value WHEN '阴' THEN '阴性' WHEN '阳' THEN '阳性' ELSE r.param_value END,
|
||||
r.update_by = 'd3000000000000000000000000000001',
|
||||
r.update_time = NOW()
|
||||
WHERE r.del_flag = 0
|
||||
AND r.param_value IN ('阴', '阳')
|
||||
AND COALESCE(l.item_code, t.item_code) IN (
|
||||
'ZKXW-QC-000-1',
|
||||
'ZKXW-QC-003-18',
|
||||
'ZKXW-QC-003-19',
|
||||
'ZKXW-QC-003-17',
|
||||
'ZKXW-QC-001-12',
|
||||
'ZKXW-QC-001-11',
|
||||
'ZKXW-QC-001-10',
|
||||
'ZKXW-QC-001-06',
|
||||
'ZKXW-QC-001-18',
|
||||
'ZKXW-QC-002-02'
|
||||
);
|
||||
|
||||
-- 2) 空结果行 → 模板默认值
|
||||
UPDATE biz_qc_task_result r
|
||||
JOIN biz_qc_item_param p ON r.param_id = p.id AND p.del_flag = 0
|
||||
LEFT JOIN biz_qc_lab_test_item l
|
||||
ON p.item_source = 'lab' AND p.item_id = l.id AND l.del_flag = 0
|
||||
LEFT JOIN biz_qc_third_party_item t
|
||||
ON p.item_source = 'third_party' AND p.item_id = t.id AND t.del_flag = 0
|
||||
SET
|
||||
r.param_value = p.default_value,
|
||||
r.update_by = 'd3000000000000000000000000000001',
|
||||
r.update_time = NOW()
|
||||
WHERE r.del_flag = 0
|
||||
AND (r.param_value IS NULL OR TRIM(r.param_value) = '')
|
||||
AND p.param_type = 'select'
|
||||
AND p.default_value IS NOT NULL
|
||||
AND TRIM(p.default_value) <> ''
|
||||
AND COALESCE(l.item_code, t.item_code) IN (
|
||||
'ZKXW-QC-000-1',
|
||||
'ZKXW-QC-003-18',
|
||||
'ZKXW-QC-003-19',
|
||||
'ZKXW-QC-003-17',
|
||||
'ZKXW-QC-001-12',
|
||||
'ZKXW-QC-001-11',
|
||||
'ZKXW-QC-001-10',
|
||||
'ZKXW-QC-001-06',
|
||||
'ZKXW-QC-001-18',
|
||||
'ZKXW-QC-002-02'
|
||||
);
|
||||
|
||||
-- 3) 兼容时同步 param_type 快照
|
||||
-- 注意:先跑 1)2) 后,「阴/阳」已变成标准文案;定量等 other 值不会命中本条件
|
||||
UPDATE biz_qc_task_result r
|
||||
JOIN biz_qc_item_param p ON r.param_id = p.id AND p.del_flag = 0
|
||||
LEFT JOIN biz_qc_lab_test_item l
|
||||
ON p.item_source = 'lab' AND p.item_id = l.id AND l.del_flag = 0
|
||||
LEFT JOIN biz_qc_third_party_item t
|
||||
ON p.item_source = 'third_party' AND p.item_id = t.id AND t.del_flag = 0
|
||||
SET
|
||||
r.param_type = p.param_type,
|
||||
r.update_by = 'd3000000000000000000000000000001',
|
||||
r.update_time = NOW()
|
||||
WHERE r.del_flag = 0
|
||||
AND IFNULL(r.param_type, '') <> IFNULL(p.param_type, '')
|
||||
AND (
|
||||
r.param_value IS NULL
|
||||
OR TRIM(r.param_value) = ''
|
||||
OR r.param_value IN ('阴性', '阳性')
|
||||
OR (
|
||||
p.options IS NOT NULL
|
||||
AND JSON_VALID(p.options)
|
||||
AND JSON_CONTAINS(CAST(p.options AS JSON), JSON_QUOTE(TRIM(r.param_value)))
|
||||
)
|
||||
)
|
||||
AND COALESCE(l.item_code, t.item_code) IN (
|
||||
'ZKXW-QC-000-1',
|
||||
'ZKXW-QC-003-18',
|
||||
'ZKXW-QC-003-19',
|
||||
'ZKXW-QC-003-17',
|
||||
'ZKXW-QC-001-12',
|
||||
'ZKXW-QC-001-11',
|
||||
'ZKXW-QC-001-10',
|
||||
'ZKXW-QC-001-06',
|
||||
'ZKXW-QC-001-18',
|
||||
'ZKXW-QC-002-02'
|
||||
);
|
||||
|
||||
-- 执行后可再跑「一、预览」核对;确认无误再 COMMIT,否则 ROLLBACK
|
||||
-- COMMIT;
|
||||
-- ROLLBACK;
|
||||
|
||||
-- 可选:把 update_by 换成实际操作人 ID
|
||||
Reference in new issue
Block a user