feat(core): WorkloadService - реализация логики формирования отчета

This commit is contained in:
Mikhail Trubnikov
2026-05-06 17:00:08 +10:00
parent 7d42a80556
commit eb6036f2c9
6 changed files with 443 additions and 12 deletions

View File

@@ -0,0 +1,93 @@
using PARR.Domain.Enums;
namespace PARR.Domain.DTOs.Workload
{
/// <summary>
/// Отчет о загруженности
/// </summary>
public record WorkloadReport
{
/// <summary>
/// Тип отчета (все ЗО, все РГ, одна ЗО, одна РГ)
/// </summary>
public WorkloadReportType Type { get; init; }
/// <summary>
/// Название отчета (По всем ЗО, по одной ЗО)
/// </summary>
public required string DisplayName { get; init; }
/// <summary>
/// Подзаголовок, наименование конкретной ЗО/РГ
/// </summary>
public string? SubfilterName { get; init; }
/// <summary>
/// Дата формирования отчета
/// </summary>
public DateTimeOffset ReportCacheCreatedAt { get; init; }
/// <summary>
/// Дата формирования кэша ЗО и РГ
/// </summary>
public DateTimeOffset TemplateCacheCreatedAt { get; init; }
/// <summary>
/// Список дней
/// </summary>
public required List<WorkloadDayItem> Days { get; init; }
/// <summary>
/// Нагруженность
/// </summary>
public required List<WorkloadStatisticItem> Statistics { get; init; }
}
public record WorkloadSummary
{
public required WorkloadSummaryItem Total { get; init; }
public required WorkloadSummaryItem Activated { get; init; }
public required WorkloadSummaryItem Deactivated { get; init; }
}
public record WorkloadSummaryItem
{
public int Count { get; init; }
public double Average { get; init; }
}
public record WorkloadDayItem
{
public DateOnly Date { get; init; }
public bool IsWeekend { get; init; }
}
public record WorkloadStatisticItem
{
public required string Title { get; init; }
public required WorkloadSummary Summary { get; init; }
public required List<WorkloadDailyItem> DailyMetrics { get; init; }
}
public record WorkloadDailyItem
{
public DateOnly Date { get; init; }
public bool IsWeekend { get; init; }
public int Total { get; init; }
public int Activated { get; init; }
public int Deactivated { get; init; }
}
}

View File

@@ -0,0 +1,31 @@
using System.Text.Json.Serialization;
namespace PARR.Domain.Enums
{
/// <summary>
/// Тип отчета о загруженности
/// </summary>
[JsonConverter(typeof(JsonStringEnumConverter))]
public enum WorkloadReportType
{
/// <summary>
/// Отчет по всем ЗО
/// </summary>
ResponseAreaAll = 0,
/// <summary>
/// Отчет по одной ЗО
/// </summary>
ResponseAreaItem = 1,
/// <summary>
/// Отчет по всем РГ
/// </summary>
WorkGroupAll = 2,
/// <summary>
/// Отчет по одной РГ
/// </summary>
WorkGroupItem = 3
}
}