diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs index 0ec49af5..6b76d6ce 100644 --- a/PARR.API/Contracts/V1/ApiRoutes.cs +++ b/PARR.API/Contracts/V1/ApiRoutes.cs @@ -248,11 +248,21 @@ public const string Get = BaseStat + "/template-distribution/{applicationInWorkId}"; } - public static class StatStatResponseAreaWorkLoad + public static class StatResponseAreaWorkLoad { public const string GetAll = BaseStat + "/response-area-workloads/"; } + public static class StatWorkGroupWorkLoad + { + public const string Get = BaseStat + "/work-group-workloads/{responseAreaCode}"; + } + + public static class StatWorkWorkLoad + { + public const string Get = BaseStat + "/work-workloads/{workGroupId}"; + } + #endregion #region Наряды diff --git a/PARR.API/Contracts/V1/Responses/ApplicationInWorkResponse.cs b/PARR.API/Contracts/V1/Responses/ApplicationInWorkResponse.cs index 96c6da1d..29a892a8 100644 --- a/PARR.API/Contracts/V1/Responses/ApplicationInWorkResponse.cs +++ b/PARR.API/Contracts/V1/Responses/ApplicationInWorkResponse.cs @@ -1,8 +1,6 @@ -using System.Runtime.InteropServices; - -namespace PARR.API.Contracts.V1.Responses +namespace PARR.API.Contracts.V1.Responses { - public class ApplicationInWorkResponse + public class ApplicationInWorkBaseResponse { public Guid Id { get; set; } @@ -14,16 +12,18 @@ namespace PARR.API.Contracts.V1.Responses public required string Solution { get; set; } - //public DateTimeOffset? LastRun { get; set; } - - //public DateTimeOffset NextRun { get; set; } - public DateTimeOffset ReferenceDate { get; set; } public bool IsAutoDistributionEnabled { get; set; } public bool IsAgent { get; set; } + public ApplicationResponse? Application { get; set; } + } + + + public class ApplicationInWorkResponse : ApplicationInWorkBaseResponse + { public string? AgentName { get; set; } public int? AgentTimeOutSec { get; set; } @@ -32,8 +32,6 @@ namespace PARR.API.Contracts.V1.Responses public WorkResponse? Work { get; set; } - public ApplicationResponse? Application { get; set; } - public int TemplatesCount { get; set; } @@ -77,7 +75,7 @@ namespace PARR.API.Contracts.V1.Responses /// /// Ошибок синхронизации (RobotStatus = 33/Error) /// - public int Errors { get; set; } + public int Errors { get; set; } } diff --git a/PARR.API/Contracts/V1/Responses/Statistics/StatResponseAreaWorkLoadResponse.cs b/PARR.API/Contracts/V1/Responses/Statistics/StatResponseAreaWorkLoadResponse.cs index 5c1a51c9..fa0cacf5 100644 --- a/PARR.API/Contracts/V1/Responses/Statistics/StatResponseAreaWorkLoadResponse.cs +++ b/PARR.API/Contracts/V1/Responses/Statistics/StatResponseAreaWorkLoadResponse.cs @@ -1,15 +1,7 @@ namespace PARR.API.Contracts.V1.Responses.Statistics { - public class StatResponseAreaWorkLoadResponse + public class StatResponseAreaWorkLoadResponse : StatWorkLoadDataBaseResponse { public required ResponseAreaResponse ResponseArea { get; set; } - - public List WorkLoad { get; set; } - } - - public class StatWorkLoadDataResponse - { - public DateTimeOffset Date { get; set; } - public int TemplateCount { get; set; } } } diff --git a/PARR.API/Contracts/V1/Responses/Statistics/StatWorkGroupWorkLoadResponse.cs b/PARR.API/Contracts/V1/Responses/Statistics/StatWorkGroupWorkLoadResponse.cs new file mode 100644 index 00000000..db75dd45 --- /dev/null +++ b/PARR.API/Contracts/V1/Responses/Statistics/StatWorkGroupWorkLoadResponse.cs @@ -0,0 +1,7 @@ +namespace PARR.API.Contracts.V1.Responses.Statistics +{ + public class StatWorkGroupWorkLoadResponse : StatWorkLoadDataBaseResponse + { + public required WorkGroupResponse WorkGroup { get; set; } + } +} diff --git a/PARR.API/Contracts/V1/Responses/Statistics/StatWorkLoadDataBaseResponse.cs b/PARR.API/Contracts/V1/Responses/Statistics/StatWorkLoadDataBaseResponse.cs new file mode 100644 index 00000000..e7a99bda --- /dev/null +++ b/PARR.API/Contracts/V1/Responses/Statistics/StatWorkLoadDataBaseResponse.cs @@ -0,0 +1,17 @@ +namespace PARR.API.Contracts.V1.Responses.Statistics +{ + public class StatWorkLoadDataBaseResponse + { + public List WorkLoad { get; set; } + + public int WorksCount => WorkLoad?.Sum(t => t.TemplateCount) ?? 0; + + public double AverageWorksCount => Math.Round((double)WorksCount / WorkLoad.Count(), 2); + } + + public class StatWorkLoadDataResponse + { + public DateTimeOffset Date { get; set; } + public int TemplateCount { get; set; } + } +} diff --git a/PARR.API/Contracts/V1/Responses/Statistics/StatWorkWorkLoadResponse.cs b/PARR.API/Contracts/V1/Responses/Statistics/StatWorkWorkLoadResponse.cs new file mode 100644 index 00000000..5129925e --- /dev/null +++ b/PARR.API/Contracts/V1/Responses/Statistics/StatWorkWorkLoadResponse.cs @@ -0,0 +1,7 @@ +namespace PARR.API.Contracts.V1.Responses.Statistics +{ + public class StatWorkWorkLoadResponse : StatWorkLoadDataBaseResponse + { + public required ApplicationInWorkBaseResponse Job { get; set; } + } +} diff --git a/PARR.API/Controllers/V1/Statistics/StatResponseAreaWorkLoadController.cs b/PARR.API/Controllers/V1/Statistics/StatResponseAreaWorkLoadController.cs index 1793aa1e..0dcb903f 100644 --- a/PARR.API/Controllers/V1/Statistics/StatResponseAreaWorkLoadController.cs +++ b/PARR.API/Controllers/V1/Statistics/StatResponseAreaWorkLoadController.cs @@ -8,7 +8,9 @@ using PARR.API.Contracts.V1.Responses; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Contracts.V1.Responses.Statistics; using PARR.API.Controllers.V1.Base; +using PARR.API.Services.Interfaces; using PARR.Constants; +using PARR.DAL.Models; using PARR.DAL.Services.Interfaces; namespace PARR.API.Controllers.V1.Statistics @@ -22,16 +24,19 @@ namespace PARR.API.Controllers.V1.Statistics private readonly ITemplateService templateService; private readonly IResponseAreaService responseAreaService; private readonly IMapper mapper; + private readonly IWorkLoadService workLoadService; public StatResponseAreaWorkLoadController( ITemplateService templateService, IResponseAreaService responseAreaService, - IMapper mapper + IMapper mapper, + IWorkLoadService workLoadService ) { this.templateService = templateService; this.responseAreaService = responseAreaService; this.mapper = mapper; + this.workLoadService = workLoadService; } @@ -39,35 +44,15 @@ namespace PARR.API.Controllers.V1.Statistics /// Статистика загрузки РР по всем ЗО /// /// - [HttpGet(ApiRoutes.StatStatResponseAreaWorkLoad.GetAll)] + [HttpGet(ApiRoutes.StatResponseAreaWorkLoad.GetAll)] public async Task GetAll([FromQuery] WorkloadBaseQuery requestQuery) { - //начинаем не с сегодняшнего дня, а с завтра, так как на сегодня уже некоторые работы были проведены и дата изменилась - var queryStartDate = DateTimeOffset.UtcNow.Date.AddDays(1); - var queryEndDate = requestQuery.IsMonth == true ? queryStartDate.AddDays(30) : queryStartDate.AddDays(6); + var daysList = workLoadService.GetDatesForPeriod(requestQuery); - //----------- - var daysList = new List(); - daysList.Add(new DateTimeOffset(queryStartDate, new TimeSpan(0))); + IQueryable