diff --git a/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs b/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs index f940bfb1..fd3c1054 100644 --- a/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs +++ b/AsbCloudApp/Data/Subsystems/SubsystemActiveWellStatDto.cs @@ -14,7 +14,7 @@ namespace AsbCloudApp.Data.Subsystems /// /// Наработки подсистем /// - public List listSubsystemStat { get; set; } + public IEnumerable listSubsystemStat { get; set; } } } \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs index 9add54b0..65c68188 100644 --- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs +++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs @@ -192,24 +192,21 @@ namespace AsbCloudInfrastructure.Services.Subsystems // скважинам - private async Task> GetSubsystemOperationTimeAll(int idCompany, CancellationToken token) + private async Task> GetActiveWellByCompany(int idCompany, CancellationToken token) { var listWell = await wellService.GetWellsByCompanyAsync(idCompany, token); var active = listWell.Where(w => w.IdState == 1); return active; - } + } + + public async Task?> GetStatByActiveWell(int idCompany, DateTime? gtDate, DateTime? ltDate, CancellationToken token) { - var activeWell = await GetSubsystemOperationTimeAll(idCompany, token); + var activeWell = await GetActiveWellByCompany(idCompany, token); var telemetryIds = activeWell.Select(w => w.IdTelemetry).Distinct(); var query = db.SubsystemOperationTimes .Where(o => telemetryIds.Contains(o.IdTelemetry)) - .AsNoTracking(); - - if (query is null) - { - return null; - } + .AsNoTracking(); DateTime today = DateTime.Today; if (!gtDate.HasValue) { @@ -222,9 +219,13 @@ namespace AsbCloudInfrastructure.Services.Subsystems ltDate = today.AddDays(-1); } query = query.Where(o => o.DateEnd <= ltDate.Value.ToUniversalTime()); - var result = new List(); - var subsystemsOperationTime = query.ToList(); - var groupingSubsystemsOperationTime = subsystemsOperationTime.GroupBy(g => g.IdTelemetry).ToList(); + var result = new List(); + if (query is null) + { + return null; + } + var subsystemsOperationTime = await query.ToListAsync(token); + var groupingSubsystemsOperationTime = subsystemsOperationTime.GroupBy(g => g.IdTelemetry); foreach (var group in groupingSubsystemsOperationTime) { @@ -246,13 +247,13 @@ namespace AsbCloudInfrastructure.Services.Subsystems if (detectedOperations is not null && detectedOperations.Any()) { var depthInterval = GetDepthInterval(detectedOperations); - var groupSubsystem = group.GroupBy(g => g.IdSubsystem).ToList(); + var groupSubsystem = group.GroupBy(g => g.IdSubsystem); foreach (var subsystem in groupSubsystem) { var dto = subsystem.Select(s => s.Adapt()); var subsystemStat = CalcStat(dto, depthInterval); - wellStat.listSubsystemStat.AddRange(subsystemStat); + wellStat.listSubsystemStat.Concat(subsystemStat); } result.Add(wellStat); } diff --git a/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs b/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs index 55b3b26b..7790472f 100644 --- a/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs +++ b/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs @@ -49,18 +49,19 @@ namespace AsbCloudWebApi.Controllers.Subsystems /// /// получить статистику по активным скважинам /// + /// Больше или равно дате + /// Меньше или равно дате + /// Токен + /// [HttpGet("statByActiveWell")] [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] - public async Task GetStatByWellAsync([FromQuery] DateTime? GtDate, DateTime? LtDate, CancellationToken token = default) + public async Task GetStatByWellAsync(DateTime? GtDate, DateTime? LtDate, CancellationToken token = default) { var idCompany = User.GetCompanyId(); - if (idCompany.HasValue) - { - var subsystemResult = await subsystemOperationTimeService.GetStatByActiveWell(idCompany.Value, GtDate, LtDate, token); - return Ok(subsystemResult); - } - return Forbid(); - + if (!idCompany.HasValue) + return Forbid(); + var subsystemResult = await subsystemOperationTimeService.GetStatByActiveWell(idCompany.Value, GtDate, LtDate, token); + return Ok(subsystemResult); } ///