| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- using Admin.NET.Core;
- namespace Admin.NET.Plugin.AiDOP.DataPlatform.S1Refresh;
- /// <summary>解析 AUTO/BOOTSTRAP 需要覆盖的租户/工厂作用域。</summary>
- public sealed class S1MdpScopeCatalog : ITransient
- {
- private readonly ISqlSugarClient _db;
- public S1MdpScopeCatalog(ISqlSugarClient db) => _db = db;
- public async Task<IReadOnlyList<S1MdpRunScope>> ListEnabledScopesAsync(CancellationToken ct = default)
- {
- var tenants = await _db.Queryable<SysTenant>()
- .Where(x => x.Status == StatusEnum.Enable && x.Id != SqlSugarConst.DefaultTenantId)
- .Select(x => x.Id)
- .ToListAsync(ct);
- var enabledTenants = tenants.ToHashSet();
- var fromFacts = await _db.Ado.SqlQueryAsync<S1MdpScopeRow>(
- """
- SELECT DISTINCT tenant_id AS TenantId, COALESCE(NULLIF(factory_id, 0), 1) AS FactoryId
- FROM mdp_std_so
- WHERE tenant_id > 0
- """);
- var set = new HashSet<string>(StringComparer.Ordinal);
- var list = new List<S1MdpRunScope>();
- void Add(long tenantId, long factoryId)
- {
- if (tenantId <= 0 || factoryId <= 0 || factoryId == tenantId) return;
- var key = $"{tenantId}:{factoryId}";
- if (!set.Add(key)) return;
- list.Add(S1MdpRunScope.Create(tenantId, factoryId));
- }
- foreach (var id in tenants)
- Add(id, 1);
- foreach (var row in fromFacts)
- {
- if (enabledTenants.Contains(row.TenantId))
- Add(row.TenantId, row.FactoryId <= 0 ? 1 : row.FactoryId);
- }
- return list;
- }
- }
|