From 84a783a76b1491b0378f0c5346cf353460e37898 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Tue, 11 Apr 2023 13:49:51 +0500 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?=20Get?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repository/GtrWitsRepository.cs | 164 ++++-------------- 1 file changed, 35 insertions(+), 129 deletions(-) diff --git a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs index 9d9fefe3..44b05a61 100644 --- a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs +++ b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs @@ -61,91 +61,28 @@ namespace AsbCloudInfrastructure.Repository var queryWitsInt = db.WitsItemInt .Where(d => d.IdTelemetry == telemetry.Id && d.DateTime >= dateBeginUtc); - var queryWitsStr = db.WitsItemString + var queryWitsString = db.WitsItemString .Where(d => d.IdTelemetry == telemetry.Id && d.DateTime >= dateBeginUtc); var queryWitsFloat = db.WitsItemFloat .Where(d => d.IdTelemetry == telemetry.Id && d.DateTime >= dateBeginUtc); - var recordAllInt = await GetEntityIntAsync(queryWitsInt, dateEnd, filterByDateEnd, approxPointsCount, token); - var recordAllFloat = await GetEntityFloatAsync(queryWitsFloat, dateEnd, filterByDateEnd, approxPointsCount, token); - var recordAllStr = await GetEntityStrAsync(queryWitsStr, dateEnd, filterByDateEnd, approxPointsCount, token); + var recordAllInt = await GetEntityAsync(queryWitsInt, dateEnd, filterByDateEnd, approxPointsCount, token); + var recordAllFloat = await GetEntityAsync(queryWitsFloat, dateEnd, filterByDateEnd, approxPointsCount, token); + var recordAllString = await GetEntityAsync(queryWitsString, dateEnd, filterByDateEnd, approxPointsCount, token); var dtos = new List(); if (recordAllInt.Any()) { - foreach (var record in recordAllInt) - { - var existingDto = dtos.Where(r => r.Id == record.IdRecord) - .Where(r => r.Date.ToUtcDateTimeOffset(timezone.Hours) == record.DateTime) - .FirstOrDefault(); - if (existingDto is null) - { - var dto = new WitsRecordDto - { - - IdTelemetry = record.IdTelemetry, - Id = record.IdRecord, - Date = record.DateTime.ToRemoteDateTime(timezone.Hours), - }; - dto.Items.Add(record.IdItem, new JsonValue(record.Value!)); - dtos.Add(dto); - } - else - { - existingDto.Items.Add(record.IdItem, new JsonValue(record.Value!)); - } - } + WriteItem(dtos, recordAllInt, timezone.Hours); } - if (recordAllStr.Any()) + if (recordAllString.Any()) { - foreach (var record in recordAllStr) - { - var existingDto = dtos.Where(r => r.Id == record.IdRecord) - .Where(r => r.Date.ToUtcDateTimeOffset(timezone.Hours) == record.DateTime) - .FirstOrDefault(); - if (existingDto is null) - { - var dto = new WitsRecordDto - { - IdTelemetry = record.IdTelemetry, - Id = record.IdRecord, - Date = record.DateTime.ToRemoteDateTime(timezone.Hours), - }; - dto.Items.Add(record.IdItem, new JsonValue(record.Value!)); - dtos.Add(dto); - } - else - { - existingDto.Items.Add(record.IdItem, new JsonValue(record.Value!)); - } - } + WriteItem(dtos, recordAllString, timezone.Hours); } if (recordAllFloat.Any()) { - foreach (var record in recordAllFloat) - { - var existingDto = dtos - .Where(r => r.Id == record.IdRecord) - .Where(r => r.Date.ToUtcDateTimeOffset(timezone.Hours) == record.DateTime) - .FirstOrDefault(); - if (existingDto is null) - { - var dto = new WitsRecordDto - { - - IdTelemetry = record.IdTelemetry, - Id = record.IdRecord, - Date = record.DateTime.ToRemoteDateTime(timezone.Hours), - }; - dto.Items.Add(record.IdItem, new JsonValue(record.Value!)); - dtos.Add(dto); - } - else - { - existingDto.Items.Add(record.IdItem, new JsonValue(record.Value!)); - } - } + WriteItem(dtos, recordAllFloat, timezone.Hours); } return dtos; } @@ -177,35 +114,7 @@ namespace AsbCloudInfrastructure.Repository await db.SaveChangesAsync(token); } - private static async Task> GetEntityIntAsync(IQueryable query, - DateTimeOffset dateEnd, bool filterByDateEnd, int approxPointsCount - , CancellationToken token) - { - //if (filterByDateEnd) - // query = query.Where(d => d.DateTime <= dateEnd); - - //var fullDataCount = await query.CountAsync(token) - // .ConfigureAwait(false); - - //if (fullDataCount == 0) - // return Enumerable.Empty(); - - //if (fullDataCount > 1.75 * approxPointsCount) - //{ - // var m = (int)Math.Round(1d * fullDataCount / approxPointsCount); - // if (m > 1) - // query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0); - //} - - var entities = await query - .OrderBy(d => d.DateTime) - .AsNoTracking() - .ToListAsync(token) - .ConfigureAwait(false); - return entities; - } - - private static async Task> GetEntityFloatAsync(IQueryable query, + private static async Task>> GetEntityAsync(IQueryable> query, DateTimeOffset dateEnd, bool filterByDateEnd, int approxPointsCount , CancellationToken token) { @@ -232,35 +141,6 @@ namespace AsbCloudInfrastructure.Repository .ConfigureAwait(false); return entities; } - - private static async Task> GetEntityStrAsync(IQueryable query, - DateTimeOffset dateEnd, bool filterByDateEnd, int approxPointsCount - , CancellationToken token) - { - //if (filterByDateEnd) - // query = query.Where(d => d.DateTime <= dateEnd); - - //var fullDataCount = await query.CountAsync(token) - // .ConfigureAwait(false); - - //if (fullDataCount == 0) - // return Enumerable.Empty(); - - //if (fullDataCount > 1.75 * approxPointsCount) - //{ - // var m = (int)Math.Round(1d * fullDataCount / approxPointsCount); - // if (m > 1) - // query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0); - //} - - var entities = await query - .OrderBy(d => d.DateTime) - .AsNoTracking() - .ToListAsync(token) - .ConfigureAwait(false); - return entities; - } - private static WitsItemBase GetEntity(WitsRecordDto record, Tvalue value, int idItems, double timezoneHours) { var entity = new WitsItemBase @@ -273,6 +153,32 @@ namespace AsbCloudInfrastructure.Repository }; return entity; } + + private static void WriteItem (List dtos, IEnumerable> recordAll, double timezoneHours) + { + foreach (var record in recordAll) + { + var existingDto = dtos.Where(r => r.Id == record.IdRecord) + .Where(r => r.Date.ToUtcDateTimeOffset(timezoneHours) == record.DateTime) + .FirstOrDefault(); + if (existingDto is null) + { + var dto = new WitsRecordDto + { + + IdTelemetry = record.IdTelemetry, + Id = record.IdRecord, + Date = record.DateTime.ToRemoteDateTime(timezoneHours), + }; + dto.Items.Add(record.IdItem, new JsonValue(record.Value!)); + dtos.Add(dto); + } + else + { + existingDto.Items.Add(record.IdItem, new JsonValue(record.Value!)); + } + } + } } #nullable disable }