From 76c845a705cc898e534b211345f1fadd75ad807f Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Wed, 17 Apr 2024 09:18:08 +0500 Subject: [PATCH] Fix GtrWitsRepository.GetAsync() --- .../Repository/GtrWitsRepository.cs | 27 +++++++++---------- .../Controllers/SAUB/GtrWitsController.cs | 4 +-- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs index 57b36ef2..cbf87456 100644 --- a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs +++ b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs @@ -94,15 +94,8 @@ namespace AsbCloudInfrastructure.Repository if (telemetry.TimeZone is null) throw new ArgumentInvalidException(nameof(idWell),$"Telemetry id: {telemetry.Id} can't find timezone"); - var timezoneOffset = TimeSpan.FromHours(telemetry.TimeZone.Hours); - var query = BuildQuery(telemetry.Id, request); - if (!await query.AnyAsync(token)) - return Enumerable.Empty(); - - var interval = TimeSpan.FromSeconds(10); - var idsRecord = WitsParameters.Select(p => p.Key.IdRecord); var entities = await query @@ -111,6 +104,12 @@ namespace AsbCloudInfrastructure.Repository .AsNoTracking() .ToArrayAsync(token); + if (!entities.Any()) + return Enumerable.Empty(); + + var interval = TimeSpan.FromSeconds(10); + var timezoneOffset = TimeSpan.FromHours(telemetry.TimeZone.Hours); + var dtos = entities .GroupBy(e => e.DateTime.Ticks / interval.Ticks) .Select(groupByInterval => @@ -131,17 +130,17 @@ namespace AsbCloudInfrastructure.Repository private IQueryable BuildQuery(int idTelemetry, GtrRequest request) where TEntity : WitsItemBase where TType : notnull - { - var dateIntervalStart = DateTime.UtcNow.AddSeconds(-request.IntervalSec); - + { var query = db.Set() - .Where(e => e.IdTelemetry == idTelemetry) - .Where(e => e.DateTime >= dateIntervalStart); + .Where(e => e.IdTelemetry == idTelemetry); if (request.Begin.HasValue) { - var dateBeginUtc = request.Begin.Value.ToUniversalTime(); - query = query.Where(e => e.DateTime >= dateBeginUtc); + var dateBegin = request.Begin.Value.ToUniversalTime(); + var dateEnd = dateBegin.AddSeconds(request.IntervalSec); + query = query + .Where(e => e.DateTime >= dateBegin) + .Where(e => e.DateTime <= dateEnd); } return query; diff --git a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs index 8f38b2ad..a339f1b8 100644 --- a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs @@ -38,7 +38,7 @@ namespace AsbCloudWebApi.Controllers.SAUB this.wellService = wellService; this.telemetryHubContext = telemetryHubContext; } - + /// /// Получить значение от ГТИ /// @@ -49,7 +49,7 @@ namespace AsbCloudWebApi.Controllers.SAUB [HttpGet] [Permission] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] - public async Task GetAllAsync(int idWell, [FromQuery] GtrRequest request, CancellationToken token) + public async Task GetAllAsync([Required] int idWell, [FromQuery] GtrRequest request, CancellationToken token) { await AssertUserHasAccessToWellAsync(idWell, token);