与种子 SQL 分开,按空任务入库工单补派五步任务;并在种子/Python 回补说明中交叉引用。 Co-authored-by: Cursor <cursoragent@cursor.com>
266 lines
9.7 KiB
SQL
266 lines
9.7 KiB
SQL
-- UC 入库编码自动派发:脐带MSC原代培养(内置模版)5 步
|
||
-- 步骤:原代培养 → 半换液 → 二次贴壁 → 重铺 → 冻存(不含传代)
|
||
-- 内容从既有「干细胞培养(内置模版)」/ MSC培养-BUILTIN 按 process_code 拷贝
|
||
-- 幂等:已存在同名内置集合则跳过主数据创建-- 生产历史空任务工单回补(二选一,勿重复对同一工单各跑一遍):
|
||
-- 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 = 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
|
||
);
|