Files
zkxw/docs/sql/migrations/2026-11-13-uc-msc-builtin-task-set.sql
T
zlwuandCursor 50679fa75e fix(production): UC 入库编码自动派发脐带MSC五步任务
样本接收 UC… 此前无内置匹配规则导致工单空任务;新增 5 步原代培养模版与回补脚本,且不影响 BC 六步模版。

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

264 lines
9.6 KiB
SQL

-- UC 入库编码自动派发:脐带MSC原代培养(内置模版)5 步
-- 步骤:原代培养 → 半换液 → 二次贴壁 → 重铺 → 冻存(不含传代)
-- 内容从既有「干细胞培养(内置模版)」/ MSC培养-BUILTIN 按 process_code 拷贝
-- 幂等:已存在同名内置集合则跳过主数据创建-- 生产历史空任务工单请用:
-- cd backend && python -m scripts.backfill_uc_msc_production_tasks --dry-run
-- 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 = src.tenant_no
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 = s.route_id 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 = s.route_id 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 = s.route_id 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 = s.route_id 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 = s.route_id 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 = r.tenant_no
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 = s.id AND x.del_flag = 0
);