S8NotificationLayerSeedData.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Admin.NET.Plugin.AiDOP.Entity.S8;
  2. namespace Admin.NET.Plugin.AiDOP;
  3. /// <summary>
  4. /// S8-NOTIFICATION-LAYER-BASELINE-1:S1-S7 × FOLLOW/SERIOUS × L1_OPERATOR 最小通知分层 baseline。
  5. /// 灌入 ado_s8_notification_layer,使 S8NotificationLayerResolver 在任意场景命中后可解析到合法可达 RoleCode。
  6. ///
  7. /// 设计要点:
  8. /// - tenant_id=0 / factory_id=0 全局基线:与 S8NotificationLayerResolver baseline fallback 一致(先精确租工厂匹配,
  9. /// 不命中再退到 0/0),覆盖所有租户/工厂,避免逐工厂复制。
  10. /// - 仅使用当前可达的 ROLE_* 角色(owner 端 7 角色已全部 SysUser+EmployeeMaster 1:1 可达);
  11. /// 不使用 S8_01/S8_02/S8_03(当前 0 用户),避免 0 解析。
  12. /// - level_code 仅 L1_OPERATOR;L2/L3 等真实组织层级待 S8_* 角色绑定 + 业务确认后扩展。
  13. /// - notify_channel="log":经代码取证 S8NotificationPushAdapter 不存在 Channel="log" 的注册 pusher,
  14. /// wanted 集合内仅"log" → 无任何外部 pusher 触发;保留 row 让 resolver 可命中、便于后续 channel 切换。
  15. /// - 不写 enabled/is_deleted(实体与 DB 均无该列,行存在即视为可用)。
  16. ///
  17. /// 模块→角色映射(基于现有 ROLE_* 业务归属,与 exception_type owner 配置一致):
  18. /// S1 / S7 → ROLE_ORDER_PLANNER(订单 / 交付)
  19. /// S2 / S6 → ROLE_PRODUCTION_PLANNER(制造 / 工单)
  20. /// S3 → ROLE_QC(来料质检)
  21. /// S4 → ROLE_WH_INBOUND(仓储入库)
  22. /// S5 → ROLE_PURCHASER(采购)
  23. ///
  24. /// Id 区间:1329908200001 起(与 exception_type 1329908100000 区段不冲突),稳定可重灌。
  25. /// </summary>
  26. [IncreSeed]
  27. public class S8NotificationLayerSeedData : ISqlSugarEntitySeedData<AdoS8NotificationLayer>
  28. {
  29. public IEnumerable<AdoS8NotificationLayer> HasData()
  30. {
  31. var ct = DateTime.Parse("2026-05-02 00:00:00");
  32. const long baseId = 1329908200000L;
  33. // (sceneCode, ownerRoleCode)
  34. var sceneRoleMap = new (string Scene, string Role)[]
  35. {
  36. ("S1", "ROLE_ORDER_PLANNER"),
  37. ("S2", "ROLE_PRODUCTION_PLANNER"),
  38. ("S3", "ROLE_QC"),
  39. ("S4", "ROLE_WH_INBOUND"),
  40. ("S5", "ROLE_PURCHASER"),
  41. ("S6", "ROLE_PRODUCTION_PLANNER"),
  42. ("S7", "ROLE_ORDER_PLANNER"),
  43. };
  44. var severities = new[] { "FOLLOW", "SERIOUS" };
  45. var levelCode = "L1_OPERATOR";
  46. var channel = "log";
  47. long id = baseId;
  48. var list = new List<AdoS8NotificationLayer>();
  49. foreach (var (scene, role) in sceneRoleMap)
  50. {
  51. foreach (var sev in severities)
  52. {
  53. id++;
  54. list.Add(new AdoS8NotificationLayer
  55. {
  56. Id = id,
  57. TenantId = 0,
  58. FactoryId = 0,
  59. SceneCode = scene,
  60. Severity = sev,
  61. LevelCode = levelCode,
  62. TargetRoleIds = role,
  63. NotifyChannel = channel,
  64. CreatedAt = ct,
  65. });
  66. }
  67. }
  68. return list;
  69. }
  70. }