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 { /// - /// идентификатор скважины, может не указыватся пользователем + /// идентификатор скважины /// [Required] public int IdWell { get; set; } diff --git a/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs b/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs index 07e41895..62ade194 100644 --- a/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs +++ b/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs @@ -1,5 +1,7 @@ -using AsbCloudApp.Data.Subsystems; +using AsbCloudApp.Data; +using AsbCloudApp.Data.Subsystems; using AsbCloudApp.Requests; +using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -36,7 +38,15 @@ namespace AsbCloudApp.Services.Subsystems /// /// /// - Task?> GetOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token); + Task?> GetOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token); + + /// + /// Временной диапазон за который есть статистика работы подсистем + /// + /// + /// + /// + Task GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token); } #nullable disable } diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs index 18566010..cbef2343 100644 --- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs +++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs @@ -185,6 +185,25 @@ namespace AsbCloudInfrastructure.Services.Subsystems } + /// + public async Task GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token) + { + var query = BuildQuery(request); + if (query is null) + { + return null; + } + var result = await query + .GroupBy(o => o.IdTelemetry) + .Select(g => new DatesRangeDto + { + From = g.Min(o => o.DateStart).DateTime, + To = g.Max(o => o.DateEnd).DateTime + }) + .FirstOrDefaultAsync(token); + return result; + } + private IQueryable? BuildQuery(SubsystemOperationTimeRequest request) { var well = wellService.GetOrDefault(request.IdWell); @@ -249,6 +268,8 @@ namespace AsbCloudInfrastructure.Services.Subsystems dto.DateEnd = operationTime.DateEnd.ToRemoteDateTime(well.Timezone.Hours); return dto; } + + } #nullable disable } diff --git a/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs b/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs index e4466d9d..d86a411f 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 { @@ -59,6 +60,19 @@ namespace AsbCloudWebApi.Controllers.Subsystems return Ok(result); } + /// + /// получить доступный диапазон дат наработки подсистемы. + /// + [HttpGet("datesRange")] + [ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)] + public async Task GetDateRangeOperationTimeAsync([FromQuery] SubsystemOperationTimeRequest request, CancellationToken token = default) + { + if (!await UserHasAccesToWellAsync(request.IdWell, token)) + return Forbid(); + var result = await subsystemOperationTimeService.GetDateRangeOperationTimeAsync(request, token); + return Ok(result); + } + /// /// получить список наработок подсистем ///