using Admin.NET.Plugin.AiDOP.Entity.S8; namespace Admin.NET.Plugin.AiDOP; /// /// S8-NOTIFICATION-LAYER-BASELINE-1:S1-S7 × FOLLOW/SERIOUS × L1_OPERATOR 最小通知分层 baseline。 /// 灌入 ado_s8_notification_layer,使 S8NotificationLayerResolver 在任意场景命中后可解析到合法可达 RoleCode。 /// /// 设计要点: /// - tenant_id=0 / factory_id=0 全局基线:与 S8NotificationLayerResolver baseline fallback 一致(先精确租工厂匹配, /// 不命中再退到 0/0),覆盖所有租户/工厂,避免逐工厂复制。 /// - 仅使用当前可达的 ROLE_* 角色(owner 端 7 角色已全部 SysUser+EmployeeMaster 1:1 可达); /// 不使用 S8_01/S8_02/S8_03(当前 0 用户),避免 0 解析。 /// - level_code 仅 L1_OPERATOR;L2/L3 等真实组织层级待 S8_* 角色绑定 + 业务确认后扩展。 /// - notify_channel="log":经代码取证 S8NotificationPushAdapter 不存在 Channel="log" 的注册 pusher, /// wanted 集合内仅"log" → 无任何外部 pusher 触发;保留 row 让 resolver 可命中、便于后续 channel 切换。 /// - 不写 enabled/is_deleted(实体与 DB 均无该列,行存在即视为可用)。 /// /// 模块→角色映射(基于现有 ROLE_* 业务归属,与 exception_type owner 配置一致): /// S1 / S7 → ROLE_ORDER_PLANNER(订单 / 交付) /// S2 / S6 → ROLE_PRODUCTION_PLANNER(制造 / 工单) /// S3 → ROLE_QC(来料质检) /// S4 → ROLE_WH_INBOUND(仓储入库) /// S5 → ROLE_PURCHASER(采购) /// /// Id 区间:1329908200001 起(与 exception_type 1329908100000 区段不冲突),稳定可重灌。 /// [IncreSeed] public class S8NotificationLayerSeedData : ISqlSugarEntitySeedData { public IEnumerable HasData() { var ct = DateTime.Parse("2026-05-02 00:00:00"); const long baseId = 1329908200000L; // (sceneCode, ownerRoleCode) var sceneRoleMap = new (string Scene, string Role)[] { ("S1", "ROLE_ORDER_PLANNER"), ("S2", "ROLE_PRODUCTION_PLANNER"), ("S3", "ROLE_QC"), ("S4", "ROLE_WH_INBOUND"), ("S5", "ROLE_PURCHASER"), ("S6", "ROLE_PRODUCTION_PLANNER"), ("S7", "ROLE_ORDER_PLANNER"), }; var severities = new[] { "FOLLOW", "SERIOUS" }; var levelCode = "L1_OPERATOR"; var channel = "log"; long id = baseId; var list = new List(); foreach (var (scene, role) in sceneRoleMap) { foreach (var sev in severities) { id++; list.Add(new AdoS8NotificationLayer { Id = id, TenantId = 0, FactoryId = 0, SceneCode = scene, Severity = sev, LevelCode = levelCode, TargetRoleIds = role, NotifyChannel = channel, CreatedAt = ct, }); } } return list; } }