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();
}
}