| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- -- 生产任务组合模版:按 4 条内置工艺路线创建内置模版
- -- 前置:
- -- 1) 2026-09-01-process-route-builtin-templates.sql(内置路线已存在)
- -- 2) 2026-09-01-production-task-set-add-is-builtin.sql
- -- 幂等:同租户同集合名称已存在且未删除则跳过
- -- MySQL 5.7+
- --
- -- 映射(集合名 = 内置路线名):
- -- CC样本处理-BUILTIN → 造血干样本处理(内置模版)
- -- MSC培养-BUILTIN → 干细胞培养(内置模版)
- -- UBMC冻存-BUILTIN → UBMC冻存(内置模版)
- -- PBMC冻存-BUILTIN → PBMC冻存(内置模版)
- -- 条目任务名统一:{lab_storage_code}样本处理
- DELIMITER $$
- DROP PROCEDURE IF EXISTS sp_seed_production_task_set_builtin$$
- CREATE PROCEDURE sp_seed_production_task_set_builtin(
- IN p_route_code VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
- IN p_set_name VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
- )
- BEGIN
- DECLARE v_done INT DEFAULT 0;
- DECLARE v_tenant VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- DECLARE v_route_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- DECLARE v_route_name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- DECLARE v_set_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- DECLARE cur CURSOR FOR
- SELECT
- r.tenant_no,
- r.id,
- IFNULL(r.route_name, '')
- FROM biz_process_route r
- INNER JOIN (
- SELECT
- tenant_no,
- SUBSTRING_INDEX(
- GROUP_CONCAT(id ORDER BY (IFNULL(is_current, '0') = '1') DESC, update_time DESC SEPARATOR ','),
- ',',
- 1
- ) AS pick_id
- FROM biz_process_route
- WHERE route_code = p_route_code
- AND del_flag = 0
- GROUP BY tenant_no
- ) p ON p.pick_id = r.id
- WHERE NOT EXISTS (
- SELECT 1
- FROM biz_production_task_set s
- WHERE s.tenant_no = CONVERT(r.tenant_no USING utf8mb4) COLLATE utf8mb4_general_ci
- AND s.set_name = p_set_name
- AND s.del_flag = 0
- );
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = 1;
- OPEN cur;
- read_loop: LOOP
- FETCH cur INTO v_tenant, v_route_id, v_route_name;
- IF v_done = 1 THEN
- LEAVE read_loop;
- END IF;
- -- MD5+源键,避免 UUID() 同微秒撞主键
- SET v_set_id = UPPER(MD5(CONCAT(UUID(), v_route_id, RAND(), CONNECTION_ID())));
- 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
- ) VALUES (
- v_set_id,
- p_set_name,
- '1',
- CONVERT(v_tenant USING utf8mb4) COLLATE utf8mb4_general_ci,
- 0,
- '内置模版',
- '1',
- NULL,
- '',
- NOW(),
- NULL,
- NOW(),
- 0
- );
- 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
- ) VALUES (
- UPPER(MD5(CONCAT(UUID(), v_set_id, RAND(), CONNECTION_ID()))),
- v_set_id,
- '{lab_storage_code}样本处理',
- v_route_id,
- v_route_name,
- NULL,
- NULL,
- CONVERT(v_tenant USING utf8mb4) COLLATE utf8mb4_general_ci,
- 1,
- NULL,
- '',
- NOW(),
- NULL,
- NOW(),
- 0
- );
- END LOOP;
- CLOSE cur;
- END$$
- DELIMITER ;
- CALL sp_seed_production_task_set_builtin('CC样本处理-BUILTIN', '造血干样本处理(内置模版)');
- CALL sp_seed_production_task_set_builtin('MSC培养-BUILTIN', '干细胞培养(内置模版)');
- CALL sp_seed_production_task_set_builtin('UBMC冻存-BUILTIN', 'UBMC冻存(内置模版)');
- CALL sp_seed_production_task_set_builtin('PBMC冻存-BUILTIN', 'PBMC冻存(内置模版)');
- DROP PROCEDURE IF EXISTS sp_seed_production_task_set_builtin;
- -- 校验(可选):
- -- SELECT set_name, status, is_builtin, remark, tenant_no
- -- FROM biz_production_task_set
- -- WHERE is_builtin = '1' AND del_flag = 0;
- -- SELECT s.set_name, i.task_name, i.route_name
- -- FROM biz_production_task_set s
- -- JOIN biz_production_task_set_item i ON i.set_id = s.id AND i.del_flag = 0
- -- WHERE s.is_builtin = '1' AND s.del_flag = 0;
|