Рефактор

This commit is contained in:
Olga Nemt 2023-05-18 15:37:21 +05:00
parent 7514e3132a
commit c137358e79

View File

@ -112,39 +112,6 @@ namespace AsbCloudInfrastructure.Repository
CancellationToken token) CancellationToken token)
where TEntity : WitsItemBase<TValue> where TEntity : WitsItemBase<TValue>
where TValue : notnull where TValue : notnull
{
var query = BuildQuery<TEntity, TValue>(request, token);
var fullDataCount = await query.CountAsync(token);
if (fullDataCount == 0)
return Enumerable.Empty<ItemRecord>();
if (request.ApproxPointsCount is not null && fullDataCount > 1.75 * request.ApproxPointsCount)
{
var m = (int)Math.Round(1d * fullDataCount / request.ApproxPointsCount!.Value);
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
.AsNoTracking()
.ToListAsync(token)
.ConfigureAwait(false);
var items = entities.Select(e => new ItemRecord
{
IdRecord = e.IdRecord,
IdTelemetry = e.IdTelemetry,
Date = e.DateTime.ToRemoteDateTime(request.TimezoneHours),
IdItem = e.IdItem,
Item = new JsonValue(e.Value)
});
return items;
}
private IQueryable<TEntity> BuildQuery<TEntity, TValue>(WitsRequest request, CancellationToken token)
where TEntity : WitsItemBase<TValue>
where TValue : notnull
{ {
var query = db.Set<TEntity>().Where(i => i.IdTelemetry == request.IdTelemetry); var query = db.Set<TEntity>().Where(i => i.IdTelemetry == request.IdTelemetry);
@ -160,9 +127,33 @@ namespace AsbCloudInfrastructure.Repository
query = query query = query
.Where(d => d.DateTime <= request.DateEnd); .Where(d => d.DateTime <= request.DateEnd);
return query.OrderBy(d => d.DateTime); var fullDataCount = await query.CountAsync(token);
} if (fullDataCount == 0)
return Enumerable.Empty<ItemRecord>();
if (request.ApproxPointsCount is not null && fullDataCount > 1.75 * request.ApproxPointsCount)
{
var m = (int)Math.Round(1d * fullDataCount / request.ApproxPointsCount!.Value);
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 items = entities.Select(e => new ItemRecord
{
IdRecord = e.IdRecord,
IdTelemetry = e.IdTelemetry,
Date = e.DateTime.ToRemoteDateTime(request.TimezoneHours),
IdItem = e.IdItem,
Item = new JsonValue(e.Value)
});
return items;
}
public async Task SaveDataAsync(int idTelemetry, WitsRecordDto dto, CancellationToken token) public async Task SaveDataAsync(int idTelemetry, WitsRecordDto dto, CancellationToken token)
{ {