|
|
@@ -0,0 +1,80 @@
|
|
|
+-- 1.0.105.sql
|
|
|
+-- TASK-015-TREE-SEED-PERSIST-1:固化异常类型 2 层树形结构的初始数据。
|
|
|
+-- 解决问题:Database.json 中 EnableIncreSeed=false 关闭了 SeedData 自动入库;
|
|
|
+-- 本脚本以幂等方式把 5 个 PARENT_* 父节点 + 子节点 parent_id 回填落地到 DB,
|
|
|
+-- 确保新环境拉代码启动后 tree API 也能返回 roots=5。
|
|
|
+-- 执行入口:AutoVersionUpdate.UseAutoVersionUpdate(),在 csproj Version=1.0.105 主节点首次启动时触发。
|
|
|
+-- 幂等性:列已存在不报错;父节点已存在则 UPDATE 关键字段;子节点 parent_id 已正确挂载则不动。
|
|
|
+-- 安全边界:不改 type_code;不动 enabled;不新增 PARENT_UNCLASSIFIED;不影响 deprecated/无 monitoring_category_key 的"未归类"行。
|
|
|
+-- 2026-05-14
|
|
|
+
|
|
|
+-- 1) 加列兜底:用 INFORMATION_SCHEMA 检查 + 动态 SQL,避免 MySQL 不支持 ADD COLUMN IF NOT EXISTS。
|
|
|
+SELECT COUNT(*) INTO @col_parent_id_exists
|
|
|
+FROM information_schema.COLUMNS
|
|
|
+WHERE TABLE_SCHEMA = DATABASE()
|
|
|
+ AND TABLE_NAME = 'ado_s8_exception_type'
|
|
|
+ AND COLUMN_NAME = 'parent_id';
|
|
|
+SET @sql_add_parent_id := IF(@col_parent_id_exists = 0,
|
|
|
+ 'ALTER TABLE ado_s8_exception_type ADD COLUMN parent_id BIGINT NULL',
|
|
|
+ 'DO 0');
|
|
|
+PREPARE stmt_add_parent_id FROM @sql_add_parent_id;
|
|
|
+EXECUTE stmt_add_parent_id;
|
|
|
+DEALLOCATE PREPARE stmt_add_parent_id;
|
|
|
+
|
|
|
+SELECT COUNT(*) INTO @col_is_group_exists
|
|
|
+FROM information_schema.COLUMNS
|
|
|
+WHERE TABLE_SCHEMA = DATABASE()
|
|
|
+ AND TABLE_NAME = 'ado_s8_exception_type'
|
|
|
+ AND COLUMN_NAME = 'is_group';
|
|
|
+SET @sql_add_is_group := IF(@col_is_group_exists = 0,
|
|
|
+ 'ALTER TABLE ado_s8_exception_type ADD COLUMN is_group TINYINT(1) NOT NULL DEFAULT 0',
|
|
|
+ 'DO 0');
|
|
|
+PREPARE stmt_add_is_group FROM @sql_add_is_group;
|
|
|
+EXECUTE stmt_add_is_group;
|
|
|
+DEALLOCATE PREPARE stmt_add_is_group;
|
|
|
+
|
|
|
+-- 2) 5 个分组父节点 idempotent upsert(字段值与 S8ExceptionTypeSeedData.P() 工厂一致)
|
|
|
+INSERT INTO ado_s8_exception_type
|
|
|
+ (id, tenant_id, factory_id, type_code, type_name, scene_code, severity_default, sla_minutes,
|
|
|
+ owner_role_code, escalate_role_code, stats_mode, monitoring_category_key, mobile_visible, icon,
|
|
|
+ enabled, sort_no, remark, parent_id, is_group, created_at, updated_at)
|
|
|
+VALUES
|
|
|
+ (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),
|
|
|
+ (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),
|
|
|
+ (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),
|
|
|
+ (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),
|
|
|
+ (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)
|
|
|
+ON DUPLICATE KEY UPDATE
|
|
|
+ type_name = VALUES(type_name),
|
|
|
+ scene_code = VALUES(scene_code),
|
|
|
+ monitoring_category_key = VALUES(monitoring_category_key),
|
|
|
+ is_group = VALUES(is_group),
|
|
|
+ parent_id = VALUES(parent_id),
|
|
|
+ enabled = VALUES(enabled),
|
|
|
+ sort_no = VALUES(sort_no),
|
|
|
+ remark = VALUES(remark),
|
|
|
+ severity_default = VALUES(severity_default),
|
|
|
+ sla_minutes = VALUES(sla_minutes),
|
|
|
+ stats_mode = VALUES(stats_mode),
|
|
|
+ mobile_visible = VALUES(mobile_visible);
|
|
|
+
|
|
|
+-- 3) 子节点 parent_id 幂等回填:按 monitoring_category_key 挂到对应父节点;
|
|
|
+-- 仅在 child.parent_id IS NULL 时更新,已正确挂载的行不动;
|
|
|
+-- 不处理 monitoring_category_key IS NULL 的 deprecated 节点(前端虚拟未归类根承载)。
|
|
|
+UPDATE ado_s8_exception_type child
|
|
|
+JOIN ado_s8_exception_type parent
|
|
|
+ ON parent.is_group = 1
|
|
|
+ AND parent.monitoring_category_key = child.monitoring_category_key
|
|
|
+ AND parent.tenant_id = child.tenant_id
|
|
|
+ AND parent.factory_id = child.factory_id
|
|
|
+SET child.parent_id = parent.id,
|
|
|
+ child.updated_at = NOW()
|
|
|
+WHERE child.is_group = 0
|
|
|
+ AND child.parent_id IS NULL
|
|
|
+ AND child.monitoring_category_key IN (
|
|
|
+ 'ORDER_REVIEW',
|
|
|
+ 'PRODUCT_DESIGN',
|
|
|
+ 'MATERIAL_PURCHASE',
|
|
|
+ 'BODY_PRODUCTION',
|
|
|
+ 'FINAL_ASSEMBLY_DELIVERY'
|
|
|
+ );
|