feat(api, core): Workload - отчет по одной ЗО - РГ.
This commit is contained in:
@@ -304,6 +304,8 @@
|
|||||||
|
|
||||||
public const string ResponseArea = BaseStat + "/workload/response-areas";
|
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";
|
public const string ReportInfo = BaseStat + "/workload/report-info";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ using PARR.Core.Services.Workload.Interfaces;
|
|||||||
using PARR.Domain.Common.Roles;
|
using PARR.Domain.Common.Roles;
|
||||||
using PARR.Domain.Entities.Base.History;
|
using PARR.Domain.Entities.Base.History;
|
||||||
using PARR.Domain.Enums;
|
using PARR.Domain.Enums;
|
||||||
|
using PARR.Domain.Exceptions;
|
||||||
|
|
||||||
namespace PARR.API.Controllers.V1.Statistics
|
namespace PARR.API.Controllers.V1.Statistics
|
||||||
{
|
{
|
||||||
@@ -70,6 +71,23 @@ namespace PARR.API.Controllers.V1.Statistics
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Отчет о загруженности по ЗО - рабочие группы
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="responseArea"></param>
|
||||||
|
/// <param name="offset"></param>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet(ApiRoutes.Workload.ResponseAreaWorkGroups)]
|
||||||
|
public async Task<IActionResult> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Сформировать отчетность
|
/// Сформировать отчетность
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -117,7 +135,7 @@ namespace PARR.API.Controllers.V1.Statistics
|
|||||||
var localTime = utcNow.ToOffset(offset);
|
var localTime = utcNow.ToOffset(offset);
|
||||||
var dateStart = DateOnly.FromDateTime(localTime.Date);
|
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)
|
if (report == null)
|
||||||
return BadRequest(new Response<string?>(null, false, new List<ErrorModel> { new ErrorModel { Message = "Необходимо сформировать отчетность." } }, "empty"));
|
return BadRequest(new Response<string?>(null, false, new List<ErrorModel> { new ErrorModel { Message = "Необходимо сформировать отчетность." } }, "empty"));
|
||||||
|
|||||||
@@ -412,7 +412,7 @@ namespace PARR.Core.Services.Workload.Implementations
|
|||||||
//keyList.AddRange(cacheWorkloadResponseAreaAllKey);
|
//keyList.AddRange(cacheWorkloadResponseAreaAllKey);
|
||||||
keyList.AddRange(CacheKeys.Workload.WorkloadResponseAreaAll());
|
keyList.AddRange(CacheKeys.Workload.WorkloadResponseAreaAll());
|
||||||
break;
|
break;
|
||||||
case WorkloadReportType.ResponseAreaItem:
|
case WorkloadReportType.ResponseAreaWorkGroups:
|
||||||
keyList.AddRange(CacheKeys.Workload.WorkloadResponseAreaItem());
|
keyList.AddRange(CacheKeys.Workload.WorkloadResponseAreaItem());
|
||||||
break;
|
break;
|
||||||
case WorkloadReportType.WorkGroupAll:
|
case WorkloadReportType.WorkGroupAll:
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ namespace PARR.Core.Services.Workload.Implementations
|
|||||||
logger.LogDebug("Начинаю формировать отчет о загруженности по параметрам: reportType '{ReportType}', dateStart {DateStart}, durationDays {DurationDays}, offset {Offset}",
|
logger.LogDebug("Начинаю формировать отчет о загруженности по параметрам: reportType '{ReportType}', dateStart {DateStart}, durationDays {DurationDays}, offset {Offset}",
|
||||||
reportType.ToString(), dateStart, durationDays, 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());
|
logger.LogError("Для типа отчета {ReportType} не передан параметр.", reportType.ToString());
|
||||||
throw new ArgumentNullException(nameof(filterParam), $"Для отчета типа {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))
|
foreach (var group in templates.GroupBy(t => t.ResponseArea))
|
||||||
statistics.Add(BuildStatisticItem(group.Key, group, reportDays, offset));
|
statistics.Add(BuildStatisticItem(group.Key, group, reportDays, offset));
|
||||||
break;
|
break;
|
||||||
case WorkloadReportType.ResponseAreaItem:
|
case WorkloadReportType.ResponseAreaWorkGroups:
|
||||||
displayName = "По зоне ответственности";
|
displayName = "По зоне ответственности";
|
||||||
//todo: тут нужно вернуть другой отчет, либо группы работ, либо список работ
|
// Фильтруем по ЗО
|
||||||
var filteredRA = templates.Where(t => t.ResponseArea.Equals(filterParam, StringComparison.OrdinalIgnoreCase)).ToList();
|
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;
|
break;
|
||||||
case WorkloadReportType.WorkGroupAll:
|
case WorkloadReportType.WorkGroupAll:
|
||||||
displayName = "По рабочим группам";
|
displayName = "По рабочим группам";
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ namespace PARR.Domain.Enums
|
|||||||
ResponseAreaAll = 0,
|
ResponseAreaAll = 0,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Отчет по одной ЗО
|
/// Отчет по одной ЗО - список рабочих групп
|
||||||
/// </summary>
|
/// </summary>
|
||||||
ResponseAreaItem = 1,
|
ResponseAreaWorkGroups = 1,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Отчет по всем РГ
|
/// Отчет по всем РГ
|
||||||
|
|||||||
Reference in New Issue
Block a user