diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs
index 2743bcc0..f5aeaa65 100644
--- a/PARR.API/Contracts/V1/ApiRoutes.cs
+++ b/PARR.API/Contracts/V1/ApiRoutes.cs
@@ -304,6 +304,8 @@
public const string ResponseArea = BaseStat + "/workload/response-areas";
+ public const string ResponseAreaWorkGroups = BaseStat + "/workload/response-areas/{responseArea}/work-groups";
+
public const string ReportInfo = BaseStat + "/workload/report-info";
}
diff --git a/PARR.API/Controllers/V1/Statistics/StatWorkloadController.cs b/PARR.API/Controllers/V1/Statistics/StatWorkloadController.cs
index f7d4082f..9332551c 100644
--- a/PARR.API/Controllers/V1/Statistics/StatWorkloadController.cs
+++ b/PARR.API/Controllers/V1/Statistics/StatWorkloadController.cs
@@ -14,6 +14,7 @@ using PARR.Core.Services.Workload.Interfaces;
using PARR.Domain.Common.Roles;
using PARR.Domain.Entities.Base.History;
using PARR.Domain.Enums;
+using PARR.Domain.Exceptions;
namespace PARR.API.Controllers.V1.Statistics
{
@@ -70,6 +71,23 @@ namespace PARR.API.Controllers.V1.Statistics
}
+ ///
+ /// Отчет о загруженности по ЗО - рабочие группы
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpGet(ApiRoutes.Workload.ResponseAreaWorkGroups)]
+ public async Task GetResponseAreaWorkGroupsReport([FromRoute] string responseArea, [FromQuery] TimeZoneOffsetClient offset, [FromQuery] WorkloadBaseQuery request)
+ {
+ if (string.IsNullOrWhiteSpace(responseArea))
+ throw new AppValidationException("Не указано значение зоны ответственности");
+
+ return await GetReportAsync(WorkloadReportType.ResponseAreaWorkGroups, request.DurationDays, offset.TimeZoneOffset, responseArea);
+ }
+
+
///
/// Сформировать отчетность
///
@@ -117,7 +135,7 @@ namespace PARR.API.Controllers.V1.Statistics
var localTime = utcNow.ToOffset(offset);
var dateStart = DateOnly.FromDateTime(localTime.Date);
- var report = await workloadService.GetWorkloadReport(reportType, dateStart, durationDays, offset, filter);
+ var report = await workloadService.GetWorkloadReport(reportType, dateStart, durationDays, offset, filter?.Trim());
if (report == null)
return BadRequest(new Response(null, false, new List { new ErrorModel { Message = "Необходимо сформировать отчетность." } }, "empty"));
diff --git a/PARR.Core/Services/Workload/Implementations/WorkloadCacheService.cs b/PARR.Core/Services/Workload/Implementations/WorkloadCacheService.cs
index 483dcecb..3f491e8a 100644
--- a/PARR.Core/Services/Workload/Implementations/WorkloadCacheService.cs
+++ b/PARR.Core/Services/Workload/Implementations/WorkloadCacheService.cs
@@ -412,7 +412,7 @@ namespace PARR.Core.Services.Workload.Implementations
//keyList.AddRange(cacheWorkloadResponseAreaAllKey);
keyList.AddRange(CacheKeys.Workload.WorkloadResponseAreaAll());
break;
- case WorkloadReportType.ResponseAreaItem:
+ case WorkloadReportType.ResponseAreaWorkGroups:
keyList.AddRange(CacheKeys.Workload.WorkloadResponseAreaItem());
break;
case WorkloadReportType.WorkGroupAll:
diff --git a/PARR.Core/Services/Workload/Implementations/WorkloadService.cs b/PARR.Core/Services/Workload/Implementations/WorkloadService.cs
index c2c46308..6bb693a7 100644
--- a/PARR.Core/Services/Workload/Implementations/WorkloadService.cs
+++ b/PARR.Core/Services/Workload/Implementations/WorkloadService.cs
@@ -43,7 +43,7 @@ namespace PARR.Core.Services.Workload.Implementations
logger.LogDebug("Начинаю формировать отчет о загруженности по параметрам: reportType '{ReportType}', dateStart {DateStart}, durationDays {DurationDays}, offset {Offset}",
reportType.ToString(), dateStart, durationDays, offset);
- if ((reportType == WorkloadReportType.WorkGroupItem || reportType == WorkloadReportType.ResponseAreaItem) && string.IsNullOrEmpty(filterParam))
+ if ((reportType == WorkloadReportType.WorkGroupItem || reportType == WorkloadReportType.ResponseAreaWorkGroups) && string.IsNullOrEmpty(filterParam))
{
logger.LogError("Для типа отчета {ReportType} не передан параметр.", reportType.ToString());
throw new ArgumentNullException(nameof(filterParam), $"Для отчета типа {reportType.ToString()} параметр является обязательным.");
@@ -83,11 +83,14 @@ namespace PARR.Core.Services.Workload.Implementations
foreach (var group in templates.GroupBy(t => t.ResponseArea))
statistics.Add(BuildStatisticItem(group.Key, group, reportDays, offset));
break;
- case WorkloadReportType.ResponseAreaItem:
+ case WorkloadReportType.ResponseAreaWorkGroups:
displayName = "По зоне ответственности";
- //todo: тут нужно вернуть другой отчет, либо группы работ, либо список работ
+ // Фильтруем по ЗО
var filteredRA = templates.Where(t => t.ResponseArea.Equals(filterParam, StringComparison.OrdinalIgnoreCase)).ToList();
- statistics.Add(BuildStatisticItem(filterParam!, filteredRA, reportDays, offset));
+ // Группируем работы по РГ
+ foreach (var group in filteredRA.GroupBy(t => t.WorkGroup))
+ statistics.Add(BuildStatisticItem(group.Key, group, reportDays, offset));
+ //statistics.Add(BuildStatisticItem(filterParam!, filteredRA, reportDays, offset));
break;
case WorkloadReportType.WorkGroupAll:
displayName = "По рабочим группам";
diff --git a/PARR.Domain/Enums/WorkloadReportType.cs b/PARR.Domain/Enums/WorkloadReportType.cs
index 88666121..c3126ae3 100644
--- a/PARR.Domain/Enums/WorkloadReportType.cs
+++ b/PARR.Domain/Enums/WorkloadReportType.cs
@@ -14,9 +14,9 @@ namespace PARR.Domain.Enums
ResponseAreaAll = 0,
///
- /// Отчет по одной ЗО
+ /// Отчет по одной ЗО - список рабочих групп
///
- ResponseAreaItem = 1,
+ ResponseAreaWorkGroups = 1,
///
/// Отчет по всем РГ