LegacyKpiTargetProvider.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Microsoft.Extensions.Logging;
  2. namespace Admin.NET.Plugin.AiDOP.SmartOps;
  3. public sealed class LegacyKpiTargetProvider : ILegacyKpiTargetProvider, ITransient
  4. {
  5. private static readonly HashSet<string> LegacyModules = new(StringComparer.OrdinalIgnoreCase) { "S1", "S2", "S3", "S4" };
  6. private readonly IKpiDailyTargetReader _daily;
  7. private readonly ILogger<LegacyKpiTargetProvider> _logger;
  8. public LegacyKpiTargetProvider(IKpiDailyTargetReader daily, ILogger<LegacyKpiTargetProvider> logger)
  9. {
  10. _daily = daily;
  11. _logger = logger;
  12. }
  13. public async Task<KpiTargetSnapshot?> TryResolveLegacyAsync(
  14. long tenantId,
  15. long factoryId,
  16. string metricCode,
  17. string moduleCode,
  18. DateTime bizDate,
  19. CancellationToken ct = default)
  20. {
  21. if (!LegacyModules.Contains(moduleCode ?? string.Empty))
  22. return null;
  23. var now = DateTime.Now;
  24. var current = await _daily.GetCurrentTargetAsync(tenantId, factoryId, moduleCode, metricCode, bizDate.Date, ct);
  25. if (current is > 0)
  26. {
  27. _logger.LogWarning("KPI 兼容命中当天日值 tenant={Tenant} metric={Metric} value={Value}", tenantId, metricCode, current);
  28. return new KpiTargetSnapshot(current, null, KpiTargetSnapshotSource.LegacyDailyCurrent, now);
  29. }
  30. var prior = await _daily.GetPriorTargetAsync(tenantId, factoryId, moduleCode, metricCode, bizDate.Date, ct);
  31. if (prior is > 0)
  32. {
  33. _logger.LogWarning("KPI 兼容命中历史日值 tenant={Tenant} metric={Metric} value={Value}", tenantId, metricCode, prior);
  34. return new KpiTargetSnapshot(prior, null, KpiTargetSnapshotSource.LegacyDailyPrior, now);
  35. }
  36. if (LegacyKpiCodeTargets.TryGet(metricCode, out var codeTarget))
  37. {
  38. _logger.LogWarning("KPI 兼容命中代码默认 tenant={Tenant} metric={Metric} value={Value}", tenantId, metricCode, codeTarget);
  39. return new KpiTargetSnapshot(codeTarget, null, KpiTargetSnapshotSource.LegacyCode, now);
  40. }
  41. return null;
  42. }
  43. }