| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- using Microsoft.Extensions.Logging;
- namespace Admin.NET.Plugin.AiDOP.SmartOps;
- public sealed class LegacyKpiTargetProvider : ILegacyKpiTargetProvider, ITransient
- {
- private static readonly HashSet<string> LegacyModules = new(StringComparer.OrdinalIgnoreCase) { "S1", "S2", "S3", "S4" };
- private readonly IKpiDailyTargetReader _daily;
- private readonly ILogger<LegacyKpiTargetProvider> _logger;
- public LegacyKpiTargetProvider(IKpiDailyTargetReader daily, ILogger<LegacyKpiTargetProvider> logger)
- {
- _daily = daily;
- _logger = logger;
- }
- public async Task<KpiTargetSnapshot?> TryResolveLegacyAsync(
- long tenantId,
- long factoryId,
- string metricCode,
- string moduleCode,
- DateTime bizDate,
- CancellationToken ct = default)
- {
- if (!LegacyModules.Contains(moduleCode ?? string.Empty))
- return null;
- var now = DateTime.Now;
- var current = await _daily.GetCurrentTargetAsync(tenantId, factoryId, moduleCode, metricCode, bizDate.Date, ct);
- if (current is > 0)
- {
- _logger.LogWarning("KPI 兼容命中当天日值 tenant={Tenant} metric={Metric} value={Value}", tenantId, metricCode, current);
- return new KpiTargetSnapshot(current, null, KpiTargetSnapshotSource.LegacyDailyCurrent, now);
- }
- var prior = await _daily.GetPriorTargetAsync(tenantId, factoryId, moduleCode, metricCode, bizDate.Date, ct);
- if (prior is > 0)
- {
- _logger.LogWarning("KPI 兼容命中历史日值 tenant={Tenant} metric={Metric} value={Value}", tenantId, metricCode, prior);
- return new KpiTargetSnapshot(prior, null, KpiTargetSnapshotSource.LegacyDailyPrior, now);
- }
- if (LegacyKpiCodeTargets.TryGet(metricCode, out var codeTarget))
- {
- _logger.LogWarning("KPI 兼容命中代码默认 tenant={Tenant} metric={Metric} value={Value}", tenantId, metricCode, codeTarget);
- return new KpiTargetSnapshot(codeTarget, null, KpiTargetSnapshotSource.LegacyCode, now);
- }
- return null;
- }
- }
|