Files
zkxw/docs/sql/migrations/2026-11-13-uc-msc-builtin-task-set.sql
T
zlwuandCursor 7b6a0523dd fix(sql): 兼容 UC MSC 回补脚本的 collation 与确定性 ID
跨表比较统一 COLLATE,避免 unicode_ci/general_ci 混用失败;回补 ID 改 MD5 业务键并修正 task_no 序号,避免 UUID 撞主键与浮点序号。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-13 13:27:43 +08:00

278 lines
10 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- UC 入库编码自动派发:脐带MSC原代培养(内置模版)5 步
-- 步骤:原代培养 → 半换液 → 二次贴壁 → 重铺 → 冻存(不含传代)
-- 内容从既有「干细胞培养(内置模版)」/ MSC培养-BUILTIN 按 process_code 拷贝
-- 幂等:已存在同名内置集合则跳过主数据创建-- 兼容:跨表比较统一 COLLATE utf8mb4_unicode_ci,避免 unicode_ci/general_ci 混用失败
-- 生产历史空任务工单回补(二选一,勿重复对同一工单各跑一遍):
-- SQL:docs/sql/migrations/2026-11-13-uc-msc-production-task-backfill.sql
-- 或 Python:
-- cd backend && python -m scripts.backfill_uc_msc_production_tasks
-- cd backend && python -m scripts.backfill_uc_msc_production_tasks --apply
SET NAMES utf8mb4;
-- 1) 工艺路线头
INSERT INTO biz_process_route (
id, route_code, route_name, product_type_id, version, is_current,
equipment_ids, equipment_name, tenant_no, order_num, remark, is_builtin,
create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
'UCMSCROUTEA5CC11F194118AC54085447A',
'MSC原代-UC-BUILTIN',
'脐带MSC原代培养(内置模版)',
src.product_type_id,
src.version,
'0',
src.equipment_ids,
src.equipment_name,
src.tenant_no,
0,
'内置模版:UC 入库编码自动派发(5 步,不含传代)',
'1',
src.create_by,
IFNULL(src.create_dept_id, ''),
NOW(),
src.update_by,
NOW(),
0
FROM biz_process_route src
WHERE src.del_flag = 0
AND (
src.route_code = 'MSC培养-BUILTIN'
OR (src.route_name = '干细胞培养(内置模版)' AND src.is_builtin = '1')
)
AND NOT EXISTS (
SELECT 1 FROM biz_process_route x
WHERE x.id = 'UCMSCROUTEA5CC11F194118AC54085447A' AND x.del_flag = 0
)
AND NOT EXISTS (
SELECT 1 FROM biz_process_route x
WHERE x.tenant_no COLLATE utf8mb4_unicode_ci = src.tenant_no COLLATE utf8mb4_unicode_ci
AND x.route_code = 'MSC原代-UC-BUILTIN'
AND x.del_flag = 0
)
ORDER BY CASE WHEN src.route_code = 'MSC培养-BUILTIN' THEN 0 ELSE 1 END
LIMIT 1;
-- 2) 路线步骤(按目标顺序)
-- step 1 SOP-SC-003
INSERT INTO biz_process_route_step (
id, route_id, process_id, step_order, process_code, category_id, process_name,
description, equipment_ids, equipment_name, estimated_duration, sop_ids, sop_content,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
'UCMSCSTEP1A5CC11F194118AC54085447A',
'UCMSCROUTEA5CC11F194118AC54085447A',
s.process_id, 1, s.process_code, s.category_id, s.process_name,
s.description, s.equipment_ids, s.equipment_name, s.estimated_duration, s.sop_ids, s.sop_content,
s.tenant_no, 1, s.remark, s.create_by, IFNULL(s.create_dept_id, ''), NOW(), s.update_by, NOW(), 0
FROM biz_process_route_step s
JOIN biz_process_route r
ON r.id COLLATE utf8mb4_unicode_ci = s.route_id COLLATE utf8mb4_unicode_ci
AND r.del_flag = 0
WHERE s.del_flag = 0
AND s.process_code = 'SOP-SC-003-E01-01'
AND (
r.route_code = 'MSC培养-BUILTIN'
OR (r.route_name = '干细胞培养(内置模版)' AND r.is_builtin = '1')
)
AND EXISTS (
SELECT 1 FROM biz_process_route nr
WHERE nr.id = 'UCMSCROUTEA5CC11F194118AC54085447A' AND nr.del_flag = 0
)
AND NOT EXISTS (
SELECT 1 FROM biz_process_route_step x
WHERE x.id = 'UCMSCSTEP1A5CC11F194118AC54085447A' AND x.del_flag = 0
)
LIMIT 1;
-- step 2 SOP-SC-004
INSERT INTO biz_process_route_step (
id, route_id, process_id, step_order, process_code, category_id, process_name,
description, equipment_ids, equipment_name, estimated_duration, sop_ids, sop_content,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
'UCMSCSTEP2A5CC11F194118AC54085447A',
'UCMSCROUTEA5CC11F194118AC54085447A',
s.process_id, 2, s.process_code, s.category_id, s.process_name,
s.description, s.equipment_ids, s.equipment_name, s.estimated_duration, s.sop_ids, s.sop_content,
s.tenant_no, 2, s.remark, s.create_by, IFNULL(s.create_dept_id, ''), NOW(), s.update_by, NOW(), 0
FROM biz_process_route_step s
JOIN biz_process_route r
ON r.id COLLATE utf8mb4_unicode_ci = s.route_id COLLATE utf8mb4_unicode_ci
AND r.del_flag = 0
WHERE s.del_flag = 0
AND s.process_code = 'SOP-SC-004-E01-01'
AND (
r.route_code = 'MSC培养-BUILTIN'
OR (r.route_name = '干细胞培养(内置模版)' AND r.is_builtin = '1')
)
AND EXISTS (
SELECT 1 FROM biz_process_route nr
WHERE nr.id = 'UCMSCROUTEA5CC11F194118AC54085447A' AND nr.del_flag = 0
)
AND NOT EXISTS (
SELECT 1 FROM biz_process_route_step x
WHERE x.id = 'UCMSCSTEP2A5CC11F194118AC54085447A' AND x.del_flag = 0
)
LIMIT 1;
-- step 3 SOP-SC-006 二次贴壁
INSERT INTO biz_process_route_step (
id, route_id, process_id, step_order, process_code, category_id, process_name,
description, equipment_ids, equipment_name, estimated_duration, sop_ids, sop_content,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
'UCMSCSTEP3A5CC11F194118AC54085447A',
'UCMSCROUTEA5CC11F194118AC54085447A',
s.process_id, 3, s.process_code, s.category_id, s.process_name,
s.description, s.equipment_ids, s.equipment_name, s.estimated_duration, s.sop_ids, s.sop_content,
s.tenant_no, 3, s.remark, s.create_by, IFNULL(s.create_dept_id, ''), NOW(), s.update_by, NOW(), 0
FROM biz_process_route_step s
JOIN biz_process_route r
ON r.id COLLATE utf8mb4_unicode_ci = s.route_id COLLATE utf8mb4_unicode_ci
AND r.del_flag = 0
WHERE s.del_flag = 0
AND s.process_code = 'SOP-SC-006-E01-01'
AND (
r.route_code = 'MSC培养-BUILTIN'
OR (r.route_name = '干细胞培养(内置模版)' AND r.is_builtin = '1')
)
AND EXISTS (
SELECT 1 FROM biz_process_route nr
WHERE nr.id = 'UCMSCROUTEA5CC11F194118AC54085447A' AND nr.del_flag = 0
)
AND NOT EXISTS (
SELECT 1 FROM biz_process_route_step x
WHERE x.id = 'UCMSCSTEP3A5CC11F194118AC54085447A' AND x.del_flag = 0
)
LIMIT 1;
-- step 4 SOP-SC-005 重铺
INSERT INTO biz_process_route_step (
id, route_id, process_id, step_order, process_code, category_id, process_name,
description, equipment_ids, equipment_name, estimated_duration, sop_ids, sop_content,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
'UCMSCSTEP4A5CC11F194118AC54085447A',
'UCMSCROUTEA5CC11F194118AC54085447A',
s.process_id, 4, s.process_code, s.category_id, s.process_name,
s.description, s.equipment_ids, s.equipment_name, s.estimated_duration, s.sop_ids, s.sop_content,
s.tenant_no, 4, s.remark, s.create_by, IFNULL(s.create_dept_id, ''), NOW(), s.update_by, NOW(), 0
FROM biz_process_route_step s
JOIN biz_process_route r
ON r.id COLLATE utf8mb4_unicode_ci = s.route_id COLLATE utf8mb4_unicode_ci
AND r.del_flag = 0
WHERE s.del_flag = 0
AND s.process_code = 'SOP-SC-005-E01-01'
AND (
r.route_code = 'MSC培养-BUILTIN'
OR (r.route_name = '干细胞培养(内置模版)' AND r.is_builtin = '1')
)
AND EXISTS (
SELECT 1 FROM biz_process_route nr
WHERE nr.id = 'UCMSCROUTEA5CC11F194118AC54085447A' AND nr.del_flag = 0
)
AND NOT EXISTS (
SELECT 1 FROM biz_process_route_step x
WHERE x.id = 'UCMSCSTEP4A5CC11F194118AC54085447A' AND x.del_flag = 0
)
LIMIT 1;
-- step 5 SOP-SC-008 冻存
INSERT INTO biz_process_route_step (
id, route_id, process_id, step_order, process_code, category_id, process_name,
description, equipment_ids, equipment_name, estimated_duration, sop_ids, sop_content,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
'UCMSCSTEP5A5CC11F194118AC54085447A',
'UCMSCROUTEA5CC11F194118AC54085447A',
s.process_id, 5, s.process_code, s.category_id, s.process_name,
s.description, s.equipment_ids, s.equipment_name, s.estimated_duration, s.sop_ids, s.sop_content,
s.tenant_no, 5, s.remark, s.create_by, IFNULL(s.create_dept_id, ''), NOW(), s.update_by, NOW(), 0
FROM biz_process_route_step s
JOIN biz_process_route r
ON r.id COLLATE utf8mb4_unicode_ci = s.route_id COLLATE utf8mb4_unicode_ci
AND r.del_flag = 0
WHERE s.del_flag = 0
AND s.process_code = 'SOP-SC-008-E01-01'
AND (
r.route_code = 'MSC培养-BUILTIN'
OR (r.route_name = '干细胞培养(内置模版)' AND r.is_builtin = '1')
)
AND EXISTS (
SELECT 1 FROM biz_process_route nr
WHERE nr.id = 'UCMSCROUTEA5CC11F194118AC54085447A' AND nr.del_flag = 0
)
AND NOT EXISTS (
SELECT 1 FROM biz_process_route_step x
WHERE x.id = 'UCMSCSTEP5A5CC11F194118AC54085447A' AND x.del_flag = 0
)
LIMIT 1;
-- 3) 任务组合头
INSERT INTO biz_production_task_set (
id, set_name, status, tenant_no, order_num, remark, is_builtin,
create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
'UCMSCSET00A5CC11F194118AC54085447A',
'脐带MSC原代培养(内置模版)',
'1',
r.tenant_no,
0,
'内置模版:UC 入库编码自动派发',
'1',
r.create_by,
IFNULL(r.create_dept_id, ''),
NOW(),
r.update_by,
NOW(),
0
FROM biz_process_route r
WHERE r.id = 'UCMSCROUTEA5CC11F194118AC54085447A'
AND r.del_flag = 0
AND NOT EXISTS (
SELECT 1 FROM biz_production_task_set x
WHERE x.tenant_no COLLATE utf8mb4_unicode_ci = r.tenant_no COLLATE utf8mb4_unicode_ci
AND x.set_name = '脐带MSC原代培养(内置模版)'
AND x.is_builtin = '1'
AND x.del_flag = 0
);
-- 4) 任务组合条目
INSERT INTO biz_production_task_set_item (
id, set_id, task_name, route_id, route_name, description, remark,
tenant_no, order_num, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
'UCMSCITEM0A5CC11F194118AC54085447A',
s.id,
'{lab_storage_code}样本处理',
'UCMSCROUTEA5CC11F194118AC54085447A',
'脐带MSC原代培养(内置模版)',
'脐带MSC原代培养(内置模版)',
NULL,
s.tenant_no,
1,
s.create_by,
IFNULL(s.create_dept_id, ''),
NOW(),
s.update_by,
NOW(),
0
FROM biz_production_task_set s
WHERE s.set_name = '脐带MSC原代培养(内置模版)'
AND s.is_builtin = '1'
AND s.del_flag = 0
AND NOT EXISTS (
SELECT 1 FROM biz_production_task_set_item x
WHERE x.set_id COLLATE utf8mb4_unicode_ci = s.id COLLATE utf8mb4_unicode_ci
AND x.del_flag = 0
);