-- 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 );