Explorar o código

chore(s8): seed notification layer baseline

YY968XX hai 3 meses
pai
achega
9f356389a3

+ 75 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/SeedData/S8NotificationLayerSeedData.cs

@@ -0,0 +1,75 @@
+using Admin.NET.Plugin.AiDOP.Entity.S8;
+
+namespace Admin.NET.Plugin.AiDOP;
+
+/// <summary>
+/// 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 区段不冲突),稳定可重灌。
+/// </summary>
+[IncreSeed]
+public class S8NotificationLayerSeedData : ISqlSugarEntitySeedData<AdoS8NotificationLayer>
+{
+    public IEnumerable<AdoS8NotificationLayer> 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<AdoS8NotificationLayer>();
+        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;
+    }
+}