SmartOpsOperationalFactory.cs 1.0 KB

123456789101112131415161718192021222324
  1. namespace Admin.NET.Plugin.AiDOP.Infrastructure;
  2. /// <summary>
  3. /// 运营事实与 KPI 日值的工厂兼容:租户隔离仍只信 tenant_id;
  4. /// 历史 DWD/KPI 使用 factory_id=1,可信作用域使用租户 OrgId。
  5. /// 禁止把 factory_id=tenant_id 当成工厂。
  6. /// </summary>
  7. public static class SmartOpsOperationalFactory
  8. {
  9. public const long LegacyDefaultFactoryId = 1;
  10. public static bool Matches(long tenantId, long trustedFactoryId, long? rowFactoryId)
  11. {
  12. if (rowFactoryId is null or 0) return true;
  13. if (rowFactoryId.Value == tenantId) return false;
  14. return rowFactoryId.Value == LegacyDefaultFactoryId || rowFactoryId.Value == trustedFactoryId;
  15. }
  16. public static string SqlPredicate(
  17. string column = "factory_id",
  18. string factoryParam = "@factoryId",
  19. string tenantParam = "@tenantId") =>
  20. $"({column} IS NULL OR {column}=0 OR {column}={LegacyDefaultFactoryId} OR {column}={factoryParam}) AND ({column} IS NULL OR {column}<>{tenantParam})";
  21. }