update wits rep

This commit is contained in:
eugeniy_ivanov 2023-04-07 02:53:57 +05:00
parent 9a0617adce
commit 75738b7712

View File

@ -4,7 +4,6 @@ using AsbCloudApp.Services.WITS;
using AsbCloudDb.Model; using AsbCloudDb.Model;
using AsbCloudDb.Model.GTR; using AsbCloudDb.Model.GTR;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -15,7 +14,7 @@ namespace AsbCloudInfrastructure.Repository
{ {
#nullable enable #nullable enable
public class GtrWitsRepository<T> : IGtrRepository public class GtrWitsRepository<T> : IGtrRepository
where T : WitsItemBase<T>, ITelemetryData where T : WitsItemBase<T>
{ {
private readonly IAsbCloudDbContext db; private readonly IAsbCloudDbContext db;
private readonly ITelemetryService telemetryService; private readonly ITelemetryService telemetryService;
@ -36,6 +35,7 @@ namespace AsbCloudInfrastructure.Repository
var telemetry = telemetryService.GetOrDefaultTelemetryByIdWell(idWell); var telemetry = telemetryService.GetOrDefaultTelemetryByIdWell(idWell);
if (telemetry is null) if (telemetry is null)
return Enumerable.Empty<WitsRecordDto>(); return Enumerable.Empty<WitsRecordDto>();
var timezone = telemetryService.GetTimezone(telemetry.Id); var timezone = telemetryService.GetTimezone(telemetry.Id);
var filterByDateEnd = dateBegin != default; var filterByDateEnd = dateBegin != default;
@ -54,10 +54,50 @@ namespace AsbCloudInfrastructure.Repository
if (dateBeginUtc == default) if (dateBeginUtc == default)
dateBeginUtc = DateTime.UtcNow.AddSeconds(-intervalSec); dateBeginUtc = DateTime.UtcNow.AddSeconds(-intervalSec);
var dateEnd = dateBeginUtc.AddSeconds(intervalSec);
//временная заглушка(для билда без ошибок) //var cacheData = telemetryDataCache.GetOrDefault(telemetry.Id, dateBeginUtc.ToRemoteDateTime(timezone.Hours), intervalSec, approxPointsCount);
return Enumerable.Empty<WitsRecordDto>(); //if (cacheData is not null)
// return cacheData;
var dateEnd = dateBeginUtc.AddSeconds(intervalSec);
var dbSet = db.Set<T>();
var query = dbSet
.Where(d => d.IdTelemetry == telemetry.Id
&& d.DateTime >= dateBeginUtc);
if (filterByDateEnd)
query = query.Where(d => d.DateTime <= dateEnd);
var fullDataCount = await query.CountAsync(token)
.ConfigureAwait(false);
if (fullDataCount == 0)
return Enumerable.Empty<WitsRecordDto>();
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);
var groupRecord = entities
.GroupBy(g => g.IdRecord)
.ToList();
var dtos = new List<WitsRecordDto>();
foreach(var group in groupRecord)
{
var dto = GetDto(group, telemetry.Id, timezone.Hours);
dtos.Add(dto);
}
return dtos;
} }
@ -104,7 +144,7 @@ namespace AsbCloudInfrastructure.Repository
{ {
var itemsCount = recordItems.Items.Count; var itemsCount = recordItems.Items.Count;
var entities = new List<WitsItemBase<T>>(itemsCount); var entities = new List<WitsItemBase<T>>(itemsCount);
foreach (var dtoItems in recordItems.Items) foreach (var dtoItems in recordItems.Items)
{ {
var entityItems = new WitsItemBase<T> var entityItems = new WitsItemBase<T>
@ -119,6 +159,24 @@ namespace AsbCloudInfrastructure.Repository
} }
return entities; return entities;
} }
private static WitsRecordDto GetDto(IEnumerable<WitsItemBase<T>> entities, int idTelemetry, double timezoneHours)
{
var entity = entities.First();
var dto = new WitsRecordDto
{
Id = entity.IdRecord,
Date = entity.DateTime.ToRemoteDateTime(timezoneHours),
IdTelemetry = idTelemetry
};
foreach (var entityItems in entities)
{
var valueItem = new JsonValue(entityItems.Value!);
dto.Items.Add(entityItems.IdItem, valueItem);
}
return dto;
}
} }
#nullable disable #nullable disable
} }