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.GTR;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
@ -15,7 +14,7 @@ namespace AsbCloudInfrastructure.Repository
{
#nullable enable
public class GtrWitsRepository<T> : IGtrRepository
where T : WitsItemBase<T>, ITelemetryData
where T : WitsItemBase<T>
{
private readonly IAsbCloudDbContext db;
private readonly ITelemetryService telemetryService;
@ -36,6 +35,7 @@ namespace AsbCloudInfrastructure.Repository
var telemetry = telemetryService.GetOrDefaultTelemetryByIdWell(idWell);
if (telemetry is null)
return Enumerable.Empty<WitsRecordDto>();
var timezone = telemetryService.GetTimezone(telemetry.Id);
var filterByDateEnd = dateBegin != default;
@ -54,10 +54,50 @@ namespace AsbCloudInfrastructure.Repository
if (dateBeginUtc == default)
dateBeginUtc = DateTime.UtcNow.AddSeconds(-intervalSec);
var dateEnd = dateBeginUtc.AddSeconds(intervalSec);
//временная заглушка(для билда без ошибок)
return Enumerable.Empty<WitsRecordDto>();
//var cacheData = telemetryDataCache.GetOrDefault(telemetry.Id, dateBeginUtc.ToRemoteDateTime(timezone.Hours), intervalSec, approxPointsCount);
//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 entities = new List<WitsItemBase<T>>(itemsCount);
foreach (var dtoItems in recordItems.Items)
{
var entityItems = new WitsItemBase<T>
@ -119,6 +159,24 @@ namespace AsbCloudInfrastructure.Repository
}
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
}