From 17c7392542070a6fdbfbab137c36199d883fef41 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov <ea.ivanov@digitaldrilling.ru> Date: Tue, 25 Oct 2022 09:42:08 +0500 Subject: [PATCH] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C=20=D0=B2=D0=BE?= =?UTF-8?q?=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D0=B5=D0=BC=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=BE=D0=BC=20=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=20=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D1=82=D0=BC=20=D0=B2=D0=BD=D1=83=D1=82=D1=80=D0=B8=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Requests/SubsystemOperationTimeRequest.cs | 2 +- .../ISubsystemOperationTimeService.cs | 5 +-- .../SubsystemOperationTimeService.cs | 34 ++++++++----------- .../SubsystemOperationTimeController.cs | 5 +-- 4 files changed, 21 insertions(+), 25 deletions(-) diff --git a/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs b/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs index 3a4c3e56..567e11cf 100644 --- a/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs +++ b/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs @@ -14,7 +14,7 @@ namespace AsbCloudApp.Requests public class SubsystemOperationTimeRequest: RequestBase { /// <summary> - /// идентификатор скважины, может не указыватся пользователем + /// идентификатор скважины /// </summary> [Required] public int IdWell { get; set; } diff --git a/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs b/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs index e8332f36..62ade194 100644 --- a/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs +++ b/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs @@ -1,4 +1,5 @@ -using AsbCloudApp.Data.Subsystems; +using AsbCloudApp.Data; +using AsbCloudApp.Data.Subsystems; using AsbCloudApp.Requests; using System; using System.Collections.Generic; @@ -45,7 +46,7 @@ namespace AsbCloudApp.Services.Subsystems /// <param name="request"></param> /// <param name="token"></param> /// <returns></returns> - Task<IEnumerable<(DateTimeOffset, DateTimeOffset)>?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token); + Task<DatesRangeDto?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token); } #nullable disable } diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs index 09027db2..ae055acf 100644 --- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs +++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs @@ -186,28 +186,22 @@ namespace AsbCloudInfrastructure.Services.Subsystems } /// <inheritdoc/> - public async Task<IEnumerable<(DateTimeOffset, DateTimeOffset)>?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token) - { - if (request.IdsSubsystems is null) - return null; - List<(DateTimeOffset dateFirst, DateTimeOffset dateLast)> result = new(); - var dateRanges = await db.SubsystemOperationTimes - .Where(o => request.IdsSubsystems.Contains(o.IdSubsystem)) - .GroupBy(o => o.IdSubsystem) - .Select(g => new - { - DateFirst = g.Min(o => o.DateStart), - DateLast = g.Max(o => o.DateEnd) - }) - .ToListAsync(token); - if (dateRanges.Any() != true) - return null; - foreach (var dateRange in dateRanges) + public async Task<DatesRangeDto?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token) + { + var query = BuildQuery(request); + if (query is not null) { - var resultItem = (dateRange.DateFirst, dateRange.DateLast); - result.Add(resultItem); + var result = await query + .GroupBy(o => o.IdSubsystem) + .Select(g => new DatesRangeDto + { + From = g.Min(o => o.DateStart).DateTime, + To = g.Max(o => o.DateEnd).DateTime + }) + .FirstOrDefaultAsync(token); + return result; } - return result; + return null; } private IQueryable<SubsystemOperationTime>? BuildQuery(SubsystemOperationTimeRequest request) diff --git a/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs b/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs index 6dce80c6..7ac1c560 100644 --- a/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs +++ b/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs @@ -10,6 +10,7 @@ using System.Threading; using System.Threading.Tasks; using AsbCloudInfrastructure; using System; +using AsbCloudApp.Data; namespace AsbCloudWebApi.Controllers.Subsystems { @@ -63,11 +64,11 @@ namespace AsbCloudWebApi.Controllers.Subsystems /// получить доступный диапазон дат наработки подсистемы. /// </summary> [HttpGet("rangeDate")] - [ProducesResponseType(typeof(IEnumerable<(DateTimeOffset,DateTimeOffset)>), (int)System.Net.HttpStatusCode.OK)] + [ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)] public async Task<IActionResult> GetDateRangeOperationTimeAsync([FromQuery] SubsystemOperationTimeRequest request, CancellationToken token = default) { if (!await UserHasAccesToWellAsync(request.IdWell, token)) - return Forbid(); + return Forbid(); var result = await subsystemOperationTimeService.GetDateRangeOperationTimeAsync(request, token); return Ok(result); }