1.0.105.sql 4.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. -- 1.0.105.sql
  2. -- TASK-015-TREE-SEED-PERSIST-1:固化异常类型 2 层树形结构的初始数据。
  3. -- 解决问题:Database.json 中 EnableIncreSeed=false 关闭了 SeedData 自动入库;
  4. -- 本脚本以幂等方式把 5 个 PARENT_* 父节点 + 子节点 parent_id 回填落地到 DB,
  5. -- 确保新环境拉代码启动后 tree API 也能返回 roots=5。
  6. -- 执行入口:AutoVersionUpdate.UseAutoVersionUpdate(),在 csproj Version=1.0.105 主节点首次启动时触发。
  7. -- 幂等性:列已存在不报错;父节点已存在则 UPDATE 关键字段;子节点 parent_id 已正确挂载则不动。
  8. -- 安全边界:不改 type_code;不动 enabled;不新增 PARENT_UNCLASSIFIED;不影响 deprecated/无 monitoring_category_key 的"未归类"行。
  9. -- 2026-05-14
  10. -- 1) 加列兜底:用 INFORMATION_SCHEMA 检查 + 动态 SQL,避免 MySQL 不支持 ADD COLUMN IF NOT EXISTS。
  11. SELECT COUNT(*) INTO @col_parent_id_exists
  12. FROM information_schema.COLUMNS
  13. WHERE TABLE_SCHEMA = DATABASE()
  14. AND TABLE_NAME = 'ado_s8_exception_type'
  15. AND COLUMN_NAME = 'parent_id';
  16. SET @sql_add_parent_id := IF(@col_parent_id_exists = 0,
  17. 'ALTER TABLE ado_s8_exception_type ADD COLUMN parent_id BIGINT NULL',
  18. 'DO 0');
  19. PREPARE stmt_add_parent_id FROM @sql_add_parent_id;
  20. EXECUTE stmt_add_parent_id;
  21. DEALLOCATE PREPARE stmt_add_parent_id;
  22. SELECT COUNT(*) INTO @col_is_group_exists
  23. FROM information_schema.COLUMNS
  24. WHERE TABLE_SCHEMA = DATABASE()
  25. AND TABLE_NAME = 'ado_s8_exception_type'
  26. AND COLUMN_NAME = 'is_group';
  27. SET @sql_add_is_group := IF(@col_is_group_exists = 0,
  28. 'ALTER TABLE ado_s8_exception_type ADD COLUMN is_group TINYINT(1) NOT NULL DEFAULT 0',
  29. 'DO 0');
  30. PREPARE stmt_add_is_group FROM @sql_add_is_group;
  31. EXECUTE stmt_add_is_group;
  32. DEALLOCATE PREPARE stmt_add_is_group;
  33. -- 2) 5 个分组父节点 idempotent upsert(字段值与 S8ExceptionTypeSeedData.P() 工厂一致)
  34. INSERT INTO ado_s8_exception_type
  35. (id, tenant_id, factory_id, type_code, type_name, scene_code, severity_default, sla_minutes,
  36. owner_role_code, escalate_role_code, stats_mode, monitoring_category_key, mobile_visible, icon,
  37. enabled, sort_no, remark, parent_id, is_group, created_at, updated_at)
  38. VALUES
  39. (1329908100100, 0, 0, 'PARENT_ORDER_REVIEW', '订单评审', 'ALL', 'FOLLOW', 0, NULL, NULL, 'ALL', 'ORDER_REVIEW', 0, NULL, 1, 10, '[TASK-015-TREE-DEV-1] 分组父节点;仅作为树形容器,不可作为业务异常类型。', NULL, 1, '2026-04-18 00:00:00', NULL),
  40. (1329908100101, 0, 0, 'PARENT_PRODUCT_DESIGN', '产品设计', 'ALL', 'FOLLOW', 0, NULL, NULL, 'ALL', 'PRODUCT_DESIGN', 0, NULL, 1, 20, '[TASK-015-TREE-DEV-1] 分组父节点;仅作为树形容器,不可作为业务异常类型。', NULL, 1, '2026-04-18 00:00:00', NULL),
  41. (1329908100102, 0, 0, 'PARENT_MATERIAL_PURCHASE', '材料采购', 'ALL', 'FOLLOW', 0, NULL, NULL, 'ALL', 'MATERIAL_PURCHASE', 0, NULL, 1, 30, '[TASK-015-TREE-DEV-1] 分组父节点;仅作为树形容器,不可作为业务异常类型。', NULL, 1, '2026-04-18 00:00:00', NULL),
  42. (1329908100103, 0, 0, 'PARENT_BODY_PRODUCTION', '本体生产', 'ALL', 'FOLLOW', 0, NULL, NULL, 'ALL', 'BODY_PRODUCTION', 0, NULL, 1, 40, '[TASK-015-TREE-DEV-1] 分组父节点;仅作为树形容器,不可作为业务异常类型。', NULL, 1, '2026-04-18 00:00:00', NULL),
  43. (1329908100104, 0, 0, 'PARENT_FINAL_ASSEMBLY_DELIVERY', '总装发货', 'ALL', 'FOLLOW', 0, NULL, NULL, 'ALL', 'FINAL_ASSEMBLY_DELIVERY', 0, NULL, 1, 50, '[TASK-015-TREE-DEV-1] 分组父节点;仅作为树形容器,不可作为业务异常类型。', NULL, 1, '2026-04-18 00:00:00', NULL)
  44. ON DUPLICATE KEY UPDATE
  45. type_name = VALUES(type_name),
  46. scene_code = VALUES(scene_code),
  47. monitoring_category_key = VALUES(monitoring_category_key),
  48. is_group = VALUES(is_group),
  49. parent_id = VALUES(parent_id),
  50. enabled = VALUES(enabled),
  51. sort_no = VALUES(sort_no),
  52. remark = VALUES(remark),
  53. severity_default = VALUES(severity_default),
  54. sla_minutes = VALUES(sla_minutes),
  55. stats_mode = VALUES(stats_mode),
  56. mobile_visible = VALUES(mobile_visible);
  57. -- 3) 子节点 parent_id 幂等回填:按 monitoring_category_key 挂到对应父节点;
  58. -- 仅在 child.parent_id IS NULL 时更新,已正确挂载的行不动;
  59. -- 不处理 monitoring_category_key IS NULL 的 deprecated 节点(前端虚拟未归类根承载)。
  60. UPDATE ado_s8_exception_type child
  61. JOIN ado_s8_exception_type parent
  62. ON parent.is_group = 1
  63. AND parent.monitoring_category_key = child.monitoring_category_key
  64. AND parent.tenant_id = child.tenant_id
  65. AND parent.factory_id = child.factory_id
  66. SET child.parent_id = parent.id,
  67. child.updated_at = NOW()
  68. WHERE child.is_group = 0
  69. AND child.parent_id IS NULL
  70. AND child.monitoring_category_key IN (
  71. 'ORDER_REVIEW',
  72. 'PRODUCT_DESIGN',
  73. 'MATERIAL_PURCHASE',
  74. 'BODY_PRODUCTION',
  75. 'FINAL_ASSEMBLY_DELIVERY'
  76. );