| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- namespace Admin.NET.Plugin.AiDOP.Service.S8.Rules.DataAccess;
- /// <summary>
- /// 向 Provider 取数的请求上下文。
- ///
- /// 硬性设计约束:<see cref="TenantId"/> / <see cref="FactoryId"/> **必须由调用方显式传入**。
- /// Provider 实现禁止从 HttpContext / 当前登录用户 / 全局单租户假设推导作用域,
- /// 也禁止把租户写成 SQL 字面量 —— 这两种做法正是既有 LEGACY_SQL 规则里的已知问题形态。
- /// </summary>
- public sealed class S8MonitoringDataRequest
- {
- /// <summary>租户作用域。必填且必须 > 0。</summary>
- public long TenantId { get; init; }
- /// <summary>工厂作用域。必填且必须 > 0。</summary>
- public long FactoryId { get; init; }
- /// <summary>数据集编码(STANDARD_DATASET 模式)。</summary>
- public string DatasetCode { get; init; } = string.Empty;
- /// <summary>触发本次取数的规则 Id(仅用于日志与排查)。</summary>
- public long RuleId { get; init; }
- /// <summary>触发本次取数的规则编码(仅用于日志与排查)。</summary>
- public string RuleCode { get; init; } = string.Empty;
- /// <summary>规则类型 TIMEOUT / SHORTAGE / OUT_OF_RANGE,供 Provider 做能力校验。</summary>
- public string RuleType { get; init; } = string.Empty;
- /// <summary>
- /// 作用域校验。缺失租户 / 工厂时显式失败,不允许 Provider 用默认值兜底
- /// (兜底会让跨租户读取以"看起来正常"的方式发生)。
- /// </summary>
- public void EnsureValid()
- {
- if (TenantId <= 0)
- throw new S8RuleEvaluatorException(
- "dataset_scope_invalid",
- $"数据集取数缺少有效 TenantId(rule={RuleCode}, dataset={DatasetCode})");
- if (FactoryId <= 0)
- throw new S8RuleEvaluatorException(
- "dataset_scope_invalid",
- $"数据集取数缺少有效 FactoryId(rule={RuleCode}, dataset={DatasetCode})");
- }
- }
|