2026-09-01-production-task-set-builtin-templates.sql 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. -- 生产任务组合模版:按 4 条内置工艺路线创建内置模版
  2. -- 前置:
  3. -- 1) 2026-09-01-process-route-builtin-templates.sql(内置路线已存在)
  4. -- 2) 2026-09-01-production-task-set-add-is-builtin.sql
  5. -- 幂等:同租户同集合名称已存在且未删除则跳过
  6. -- MySQL 5.7+
  7. --
  8. -- 映射(集合名 = 内置路线名):
  9. -- CC样本处理-BUILTIN → 造血干样本处理(内置模版)
  10. -- MSC培养-BUILTIN → 干细胞培养(内置模版)
  11. -- UBMC冻存-BUILTIN → UBMC冻存(内置模版)
  12. -- PBMC冻存-BUILTIN → PBMC冻存(内置模版)
  13. -- 条目任务名统一:{lab_storage_code}样本处理
  14. DELIMITER $$
  15. DROP PROCEDURE IF EXISTS sp_seed_production_task_set_builtin$$
  16. CREATE PROCEDURE sp_seed_production_task_set_builtin(
  17. IN p_route_code VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
  18. IN p_set_name VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
  19. )
  20. BEGIN
  21. DECLARE v_done INT DEFAULT 0;
  22. DECLARE v_tenant VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  23. DECLARE v_route_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  24. DECLARE v_route_name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  25. DECLARE v_set_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  26. DECLARE cur CURSOR FOR
  27. SELECT
  28. r.tenant_no,
  29. r.id,
  30. IFNULL(r.route_name, '')
  31. FROM biz_process_route r
  32. INNER JOIN (
  33. SELECT
  34. tenant_no,
  35. SUBSTRING_INDEX(
  36. GROUP_CONCAT(id ORDER BY (IFNULL(is_current, '0') = '1') DESC, update_time DESC SEPARATOR ','),
  37. ',',
  38. 1
  39. ) AS pick_id
  40. FROM biz_process_route
  41. WHERE route_code = p_route_code
  42. AND del_flag = 0
  43. GROUP BY tenant_no
  44. ) p ON p.pick_id = r.id
  45. WHERE NOT EXISTS (
  46. SELECT 1
  47. FROM biz_production_task_set s
  48. WHERE s.tenant_no = CONVERT(r.tenant_no USING utf8mb4) COLLATE utf8mb4_general_ci
  49. AND s.set_name = p_set_name
  50. AND s.del_flag = 0
  51. );
  52. DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = 1;
  53. OPEN cur;
  54. read_loop: LOOP
  55. FETCH cur INTO v_tenant, v_route_id, v_route_name;
  56. IF v_done = 1 THEN
  57. LEAVE read_loop;
  58. END IF;
  59. -- MD5+源键,避免 UUID() 同微秒撞主键
  60. SET v_set_id = UPPER(MD5(CONCAT(UUID(), v_route_id, RAND(), CONNECTION_ID())));
  61. INSERT INTO biz_production_task_set (
  62. id, set_name, status, tenant_no, order_num, remark, is_builtin,
  63. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  64. ) VALUES (
  65. v_set_id,
  66. p_set_name,
  67. '1',
  68. CONVERT(v_tenant USING utf8mb4) COLLATE utf8mb4_general_ci,
  69. 0,
  70. '内置模版',
  71. '1',
  72. NULL,
  73. '',
  74. NOW(),
  75. NULL,
  76. NOW(),
  77. 0
  78. );
  79. INSERT INTO biz_production_task_set_item (
  80. id, set_id, task_name, route_id, route_name, description, remark,
  81. tenant_no, order_num, create_by, create_dept_id, create_time, update_by, update_time, del_flag
  82. ) VALUES (
  83. UPPER(MD5(CONCAT(UUID(), v_set_id, RAND(), CONNECTION_ID()))),
  84. v_set_id,
  85. '{lab_storage_code}样本处理',
  86. v_route_id,
  87. v_route_name,
  88. NULL,
  89. NULL,
  90. CONVERT(v_tenant USING utf8mb4) COLLATE utf8mb4_general_ci,
  91. 1,
  92. NULL,
  93. '',
  94. NOW(),
  95. NULL,
  96. NOW(),
  97. 0
  98. );
  99. END LOOP;
  100. CLOSE cur;
  101. END$$
  102. DELIMITER ;
  103. CALL sp_seed_production_task_set_builtin('CC样本处理-BUILTIN', '造血干样本处理(内置模版)');
  104. CALL sp_seed_production_task_set_builtin('MSC培养-BUILTIN', '干细胞培养(内置模版)');
  105. CALL sp_seed_production_task_set_builtin('UBMC冻存-BUILTIN', 'UBMC冻存(内置模版)');
  106. CALL sp_seed_production_task_set_builtin('PBMC冻存-BUILTIN', 'PBMC冻存(内置模版)');
  107. DROP PROCEDURE IF EXISTS sp_seed_production_task_set_builtin;
  108. -- 校验(可选):
  109. -- SELECT set_name, status, is_builtin, remark, tenant_no
  110. -- FROM biz_production_task_set
  111. -- WHERE is_builtin = '1' AND del_flag = 0;
  112. -- SELECT s.set_name, i.task_name, i.route_name
  113. -- FROM biz_production_task_set s
  114. -- JOIN biz_production_task_set_item i ON i.set_id = s.id AND i.del_flag = 0
  115. -- WHERE s.is_builtin = '1' AND s.del_flag = 0;