using System.Diagnostics; using Admin.NET.Plugin.AiDOP.Entity.S8; using SqlSugar; namespace Admin.NET.Plugin.AiDOP.Infrastructure; /// /// S8 业务维度元数据基线种子(S_STAGE / ORDER_FLOW)。 /// 幂等:按 dimension_code / (dimension_code, node_code) 逐条 Any() 判断后插入; /// 不删除任何已有数据,不修改 scene_tree / scene_config。 /// public static class AidopDimensionSeed { public static void EnsureSeed(ISqlSugarClient db) { try { var ct = DateTime.Parse("2026-05-07 00:00:00"); EnsureDimension(db, "S_STAGE", "S1-S7 阶段维度", 10, ct); EnsureDimension(db, "ORDER_FLOW", "订单全流程维度", 20, ct); // S_STAGE 节点(顶层叶节点,is_selectable=true) EnsureNode(db, "S_STAGE", "S1", "S1 产销协同", "/S_STAGE/S1", 10, ct); EnsureNode(db, "S_STAGE", "S2", "S2 生产准备", "/S_STAGE/S2", 20, ct); EnsureNode(db, "S_STAGE", "S3", "S3 供应协同", "/S_STAGE/S3", 30, ct); EnsureNode(db, "S_STAGE", "S4", "S4 质量检验", "/S_STAGE/S4", 40, ct); EnsureNode(db, "S_STAGE", "S5", "S5 仓储供应", "/S_STAGE/S5", 50, ct); EnsureNode(db, "S_STAGE", "S6", "S6 本体生产", "/S_STAGE/S6", 60, ct); EnsureNode(db, "S_STAGE", "S7", "S7 总装发货", "/S_STAGE/S7", 70, ct); // ORDER_FLOW 节点(顶层叶节点,is_selectable=true) EnsureNode(db, "ORDER_FLOW", "ORDER_REVIEW_PLAN_CALC", "评审/排产/测算", "/ORDER_FLOW/ORDER_REVIEW_PLAN_CALC", 10, ct); EnsureNode(db, "ORDER_FLOW", "PRODUCT_DESIGN", "产品设计", "/ORDER_FLOW/PRODUCT_DESIGN", 20, ct); EnsureNode(db, "ORDER_FLOW", "MATERIAL_PURCHASE", "材料采购", "/ORDER_FLOW/MATERIAL_PURCHASE", 30, ct); EnsureNode(db, "ORDER_FLOW", "BODY_PRODUCTION", "本体生产", "/ORDER_FLOW/BODY_PRODUCTION", 40, ct); EnsureNode(db, "ORDER_FLOW", "FINAL_ASSEMBLY_DELIVERY", "总装发货", "/ORDER_FLOW/FINAL_ASSEMBLY_DELIVERY", 50, ct); } catch (Exception ex) { Trace.TraceWarning("AidopDimensionSeed: " + ex); } } private static void EnsureDimension(ISqlSugarClient db, string code, string name, int sortNo, DateTime ct) { var exists = db.Queryable() .Any(x => x.TenantId == 0 && x.FactoryId == 0 && x.DimensionCode == code); if (exists) return; db.Insertable(new AdoS8Dimension { TenantId = 0, FactoryId = 0, DimensionCode = code, DimensionName = name, Enabled = true, SortNo = sortNo, CreatedAt = ct, }).ExecuteCommand(); } private static void EnsureNode(ISqlSugarClient db, string dimensionCode, string nodeCode, string nodeName, string path, int sortNo, DateTime ct) { var exists = db.Queryable() .Any(x => x.TenantId == 0 && x.FactoryId == 0 && x.DimensionCode == dimensionCode && x.NodeCode == nodeCode); if (exists) return; db.Insertable(new AdoS8DimensionNode { TenantId = 0, FactoryId = 0, DimensionCode = dimensionCode, NodeCode = nodeCode, NodeName = nodeName, ParentId = null, Level = 1, Path = path, IsSelectable = true, Enabled = true, SortNo = sortNo, CreatedAt = ct, }).ExecuteCommand(); } }