forked from ddrilling/AsbCloudServer
update wits rep
This commit is contained in:
parent
9a0617adce
commit
75738b7712
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user