提交
This commit is contained in:
1 parent
03226cac2a
commit
195c89e6b7
34 files changed
+7360
-5462
No files matched your search
@@ -1,8 +0,0 @@
|
||||
-- 工艺路线:增加内置模版标记
|
||||
-- 执行环境:测试 / 生产(MySQL 5.7+)
|
||||
-- 执行顺序:本脚本 → 2026-09-01-process-route-builtin-templates.sql
|
||||
|
||||
-- 若列已存在会报错,可忽略后继续执行复制脚本
|
||||
ALTER TABLE biz_process_route
|
||||
ADD COLUMN is_builtin CHAR(1) NOT NULL DEFAULT '0'
|
||||
COMMENT '是否内置模版(0-否 1-是)' AFTER remark;
|
||||
@@ -1,304 +0,0 @@
|
||||
-- 工艺路线:复制 4 条内置模版(深拷贝步骤及子表)
|
||||
-- 前置:已执行 2026-09-01-process-route-add-is-builtin.sql
|
||||
-- 幂等:同租户下目标 route_code 已存在且未删除则跳过
|
||||
-- MySQL 5.7+
|
||||
--
|
||||
-- 映射:
|
||||
-- 造血干样本处理 / CC样本处理 → 造血干样本处理(内置模版) / CC样本处理-BUILTIN
|
||||
-- 干细胞培养 / MSC培养 → 干细胞培养(内置模版) / MSC培养-BUILTIN
|
||||
-- UBMC冻存 / UBMC冻存 → UBMC冻存(内置模版) / UBMC冻存-BUILTIN
|
||||
-- PBMC冻存 / PBMC冻存 → PBMC冻存(内置模版) / PBMC冻存-BUILTIN
|
||||
--
|
||||
-- ID 生成说明:
|
||||
-- MySQL UUID() 在同一微秒批量 INSERT…SELECT 时可能撞主键。
|
||||
-- 新 id = UPPER(MD5(CONCAT(UUID(), 源行主键, RAND(), CONNECTION_ID()))),保证逐行唯一。
|
||||
--
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 若上次执行报 Duplicate entry … PRIMARY,先做半截数据清理再重跑本脚本:
|
||||
--
|
||||
-- -- 1) 查看已写入的 BUILTIN
|
||||
-- SELECT id, route_code, route_name, is_builtin, tenant_no, create_time
|
||||
-- FROM biz_process_route
|
||||
-- WHERE route_code LIKE '%-BUILTIN' AND del_flag = 0;
|
||||
--
|
||||
-- -- 2) 软删半截内置路线及其步骤/子表(仅清理本次模版种子,不动源路线)
|
||||
-- UPDATE biz_process_route_step_data_collection d
|
||||
-- INNER JOIN biz_process_route_step s ON s.id = d.step_id
|
||||
-- INNER JOIN biz_process_route r ON r.id = s.route_id
|
||||
-- SET d.del_flag = 1, d.update_time = NOW()
|
||||
-- WHERE r.route_code LIKE '%-BUILTIN' AND r.del_flag = 0 AND d.del_flag = 0;
|
||||
--
|
||||
-- UPDATE biz_process_route_step_output o
|
||||
-- INNER JOIN biz_process_route_step s ON s.id = o.step_id
|
||||
-- INNER JOIN biz_process_route r ON r.id = s.route_id
|
||||
-- SET o.del_flag = 1, o.update_time = NOW()
|
||||
-- WHERE r.route_code LIKE '%-BUILTIN' AND r.del_flag = 0 AND o.del_flag = 0;
|
||||
--
|
||||
-- UPDATE biz_process_route_step_consumable c
|
||||
-- INNER JOIN biz_process_route_step s ON s.id = c.step_id
|
||||
-- INNER JOIN biz_process_route r ON r.id = s.route_id
|
||||
-- SET c.del_flag = 1, c.update_time = NOW()
|
||||
-- WHERE r.route_code LIKE '%-BUILTIN' AND r.del_flag = 0 AND c.del_flag = 0;
|
||||
--
|
||||
-- UPDATE biz_process_route_step_reagent g
|
||||
-- INNER JOIN biz_process_route_step s ON s.id = g.step_id
|
||||
-- INNER JOIN biz_process_route r ON r.id = s.route_id
|
||||
-- SET g.del_flag = 1, g.update_time = NOW()
|
||||
-- WHERE r.route_code LIKE '%-BUILTIN' AND r.del_flag = 0 AND g.del_flag = 0;
|
||||
--
|
||||
-- UPDATE biz_process_route_step s
|
||||
-- INNER JOIN biz_process_route r ON r.id = s.route_id
|
||||
-- SET s.del_flag = 1, s.update_time = NOW()
|
||||
-- WHERE r.route_code LIKE '%-BUILTIN' AND r.del_flag = 0 AND s.del_flag = 0;
|
||||
--
|
||||
-- UPDATE biz_process_route
|
||||
-- SET del_flag = 1, update_time = NOW()
|
||||
-- WHERE route_code LIKE '%-BUILTIN' AND del_flag = 0;
|
||||
-- ---------------------------------------------------------------------------
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
DROP PROCEDURE IF EXISTS sp_copy_process_route_builtin$$
|
||||
CREATE PROCEDURE sp_copy_process_route_builtin(
|
||||
IN p_src_code VARCHAR(64),
|
||||
IN p_dst_code VARCHAR(64),
|
||||
IN p_dst_name VARCHAR(100)
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_done INT DEFAULT 0;
|
||||
DECLARE v_src_id VARCHAR(64);
|
||||
DECLARE v_tenant VARCHAR(64);
|
||||
DECLARE v_is_current CHAR(1);
|
||||
DECLARE v_new_route_id VARCHAR(64);
|
||||
|
||||
DECLARE cur CURSOR FOR
|
||||
SELECT x.id, x.tenant_no, IFNULL(x.is_current, '0')
|
||||
FROM biz_process_route x
|
||||
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_src_code
|
||||
AND del_flag = 0
|
||||
GROUP BY tenant_no
|
||||
) p ON p.pick_id = x.id
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM biz_process_route t
|
||||
WHERE t.tenant_no = x.tenant_no
|
||||
AND t.route_code = p_dst_code
|
||||
AND t.del_flag = 0
|
||||
);
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = 1;
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
ROLLBACK;
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
OPEN cur;
|
||||
read_loop: LOOP
|
||||
FETCH cur INTO v_src_id, v_tenant, v_is_current;
|
||||
IF v_done = 1 THEN
|
||||
LEAVE read_loop;
|
||||
END IF;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
SET v_new_route_id = UPPER(MD5(CONCAT(UUID(), v_src_id, RAND(), CONNECTION_ID())));
|
||||
|
||||
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
|
||||
v_new_route_id,
|
||||
p_dst_code,
|
||||
p_dst_name,
|
||||
product_type_id,
|
||||
version,
|
||||
v_is_current,
|
||||
equipment_ids,
|
||||
equipment_name,
|
||||
tenant_no,
|
||||
order_num,
|
||||
'内置模版',
|
||||
'1',
|
||||
create_by,
|
||||
IFNULL(create_dept_id, ''),
|
||||
NOW(),
|
||||
update_by,
|
||||
NOW(),
|
||||
0
|
||||
FROM biz_process_route
|
||||
WHERE id = v_src_id;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_step_id_map;
|
||||
CREATE TEMPORARY TABLE tmp_step_id_map (
|
||||
old_id VARCHAR(64) NOT NULL PRIMARY KEY,
|
||||
new_id VARCHAR(64) NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO tmp_step_id_map (old_id, new_id)
|
||||
SELECT
|
||||
id,
|
||||
UPPER(MD5(CONCAT(UUID(), id, RAND(), CONNECTION_ID())))
|
||||
FROM biz_process_route_step
|
||||
WHERE route_id = v_src_id
|
||||
AND del_flag = 0;
|
||||
|
||||
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
|
||||
m.new_id,
|
||||
v_new_route_id,
|
||||
s.process_id,
|
||||
s.step_order,
|
||||
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,
|
||||
s.order_num,
|
||||
s.remark,
|
||||
s.create_by,
|
||||
IFNULL(s.create_dept_id, ''),
|
||||
NOW(),
|
||||
s.update_by,
|
||||
NOW(),
|
||||
0
|
||||
FROM biz_process_route_step s
|
||||
INNER JOIN tmp_step_id_map m ON m.old_id = s.id;
|
||||
|
||||
INSERT INTO biz_process_route_step_reagent (
|
||||
id, step_id, reagent_code, reagent_name, spec, standard_usage, unit, is_key_material,
|
||||
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
|
||||
)
|
||||
SELECT
|
||||
UPPER(MD5(CONCAT(UUID(), r.id, RAND(), CONNECTION_ID()))),
|
||||
m.new_id,
|
||||
r.reagent_code,
|
||||
r.reagent_name,
|
||||
r.spec,
|
||||
r.standard_usage,
|
||||
r.unit,
|
||||
r.is_key_material,
|
||||
r.tenant_no,
|
||||
r.order_num,
|
||||
r.remark,
|
||||
r.create_by,
|
||||
IFNULL(r.create_dept_id, ''),
|
||||
NOW(),
|
||||
r.update_by,
|
||||
NOW(),
|
||||
0
|
||||
FROM biz_process_route_step_reagent r
|
||||
INNER JOIN tmp_step_id_map m ON m.old_id = r.step_id
|
||||
WHERE r.del_flag = 0;
|
||||
|
||||
INSERT INTO biz_process_route_step_consumable (
|
||||
id, step_id, consumable_code, consumable_name, spec_model, standard_usage, unit, is_required,
|
||||
remark, tenant_no, order_num, create_by, create_dept_id, create_time, update_by, update_time, del_flag
|
||||
)
|
||||
SELECT
|
||||
UPPER(MD5(CONCAT(UUID(), c.id, RAND(), CONNECTION_ID()))),
|
||||
m.new_id,
|
||||
c.consumable_code,
|
||||
c.consumable_name,
|
||||
c.spec_model,
|
||||
c.standard_usage,
|
||||
c.unit,
|
||||
c.is_required,
|
||||
c.remark,
|
||||
c.tenant_no,
|
||||
c.order_num,
|
||||
c.create_by,
|
||||
IFNULL(c.create_dept_id, ''),
|
||||
NOW(),
|
||||
c.update_by,
|
||||
NOW(),
|
||||
0
|
||||
FROM biz_process_route_step_consumable c
|
||||
INNER JOIN tmp_step_id_map m ON m.old_id = c.step_id
|
||||
WHERE c.del_flag = 0;
|
||||
|
||||
INSERT INTO biz_process_route_step_output (
|
||||
id, step_id, output_type_id, output_name, output_barcode,
|
||||
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
|
||||
)
|
||||
SELECT
|
||||
UPPER(MD5(CONCAT(UUID(), o.id, RAND(), CONNECTION_ID()))),
|
||||
m.new_id,
|
||||
o.output_type_id,
|
||||
o.output_name,
|
||||
o.output_barcode,
|
||||
o.tenant_no,
|
||||
o.order_num,
|
||||
o.remark,
|
||||
o.create_by,
|
||||
IFNULL(o.create_dept_id, ''),
|
||||
NOW(),
|
||||
o.update_by,
|
||||
NOW(),
|
||||
0
|
||||
FROM biz_process_route_step_output o
|
||||
INNER JOIN tmp_step_id_map m ON m.old_id = o.step_id
|
||||
WHERE o.del_flag = 0;
|
||||
|
||||
INSERT INTO biz_process_route_step_data_collection (
|
||||
id, step_id, collection_name, unit,
|
||||
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
|
||||
)
|
||||
SELECT
|
||||
UPPER(MD5(CONCAT(UUID(), d.id, RAND(), CONNECTION_ID()))),
|
||||
m.new_id,
|
||||
d.collection_name,
|
||||
d.unit,
|
||||
d.tenant_no,
|
||||
d.order_num,
|
||||
d.remark,
|
||||
d.create_by,
|
||||
IFNULL(d.create_dept_id, ''),
|
||||
NOW(),
|
||||
d.update_by,
|
||||
NOW(),
|
||||
0
|
||||
FROM biz_process_route_step_data_collection d
|
||||
INNER JOIN tmp_step_id_map m ON m.old_id = d.step_id
|
||||
WHERE d.del_flag = 0;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_step_id_map;
|
||||
|
||||
COMMIT;
|
||||
END LOOP;
|
||||
CLOSE cur;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
CALL sp_copy_process_route_builtin('CC样本处理', 'CC样本处理-BUILTIN', '造血干样本处理(内置模版)');
|
||||
CALL sp_copy_process_route_builtin('MSC培养', 'MSC培养-BUILTIN', '干细胞培养(内置模版)');
|
||||
CALL sp_copy_process_route_builtin('UBMC冻存', 'UBMC冻存-BUILTIN', 'UBMC冻存(内置模版)');
|
||||
CALL sp_copy_process_route_builtin('PBMC冻存', 'PBMC冻存-BUILTIN', 'PBMC冻存(内置模版)');
|
||||
|
||||
DROP PROCEDURE IF EXISTS sp_copy_process_route_builtin;
|
||||
|
||||
-- 校验(可选):
|
||||
-- SELECT route_code, route_name, is_builtin, remark, is_current, tenant_no
|
||||
-- FROM biz_process_route
|
||||
-- WHERE route_code LIKE '%-BUILTIN' AND del_flag = 0;
|
||||
@@ -1,7 +0,0 @@
|
||||
-- 生产任务组合模版:增加内置模版标记
|
||||
-- 测试 / 生产均可执行(MySQL 5.7+)
|
||||
-- 执行顺序:本脚本 → 2026-09-01-production-task-set-builtin-templates.sql
|
||||
|
||||
ALTER TABLE biz_production_task_set
|
||||
ADD COLUMN is_builtin CHAR(1) NOT NULL DEFAULT '0'
|
||||
COMMENT '是否内置模版(0-否 1-是)' AFTER remark;
|
||||
@@ -1,127 +0,0 @@
|
||||
-- 生产任务组合模版:按 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;
|
||||
Reference in new issue
Block a user