TelemetryDataBaseService.GetAsync Add cache

This commit is contained in:
ngfrolov 2023-09-11 13:48:47 +05:00
parent 7293dc11e3
commit 1c1a33aeee
Signed by: ng.frolov
GPG Key ID: E99907A0357B29A7
2 changed files with 54 additions and 0 deletions

View File

@ -155,6 +155,10 @@ namespace AsbCloudInfrastructure.Services.SAUB
var timezone = telemetryService.GetTimezone(telemetry.Id);
var cache = telemetryDataCache.GetOrDefault(telemetry.Id, request);
if(cache is not null)
return cache;
var dbSet = db.Set<TEntity>();
var query = dbSet

View File

@ -11,6 +11,7 @@ using Microsoft.Extensions.DependencyInjection;
using AsbCloudInfrastructure.Background;
using System.Threading;
using AsbCloudApp.Data;
using AsbCloudApp.Requests;
namespace AsbCloudInfrastructure.Services.SAUB
{
@ -228,5 +229,54 @@ namespace AsbCloudInfrastructure.Services.SAUB
};
return item;
}
public IEnumerable<TDto>? GetOrDefault(int idTelemetry, TelemetryDataRequest request)
{
if (!caches.TryGetValue(idTelemetry, out TelemetryDataCacheItem? cacheItem))
return null;
IEnumerable<TDto> data = cacheItem.LastData;
if (!data.Any())
return null;
if (request.GeDate.HasValue)
{
if (data.First().DateTime > request.GeDate.Value)
return null;
data = data.Where(d => d.DateTime >= request.GeDate);
}
else
{
if (request.Order == 0)
return null;
}
if (request.LeDate.HasValue)
data = data.Where(d => d.DateTime >= request.LeDate);
if (request.Divider > 1)
data = data.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % request.Divider == 0);
switch (request.Order)
{
case 1: // Поздние вперед
data = data
.OrderByDescending(d => d.DateTime)
.Skip(request.Skip)
.Take(request.Take)
.OrderBy(d => d.DateTime);
break;
default: // Ранние вперед
data = data
.OrderBy(d => d.DateTime)
.Skip(request.Skip)
.Take(request.Take);
break;
}
return data;
}
}
}