forked from ddrilling/AsbCloudServer
TelemetryDataBaseService.GetAsync Add cache
This commit is contained in:
parent
7293dc11e3
commit
1c1a33aeee
@ -155,6 +155,10 @@ namespace AsbCloudInfrastructure.Services.SAUB
|
|||||||
|
|
||||||
var timezone = telemetryService.GetTimezone(telemetry.Id);
|
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 dbSet = db.Set<TEntity>();
|
||||||
|
|
||||||
var query = dbSet
|
var query = dbSet
|
||||||
|
@ -11,6 +11,7 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
using AsbCloudInfrastructure.Background;
|
using AsbCloudInfrastructure.Background;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using AsbCloudApp.Data;
|
using AsbCloudApp.Data;
|
||||||
|
using AsbCloudApp.Requests;
|
||||||
|
|
||||||
namespace AsbCloudInfrastructure.Services.SAUB
|
namespace AsbCloudInfrastructure.Services.SAUB
|
||||||
{
|
{
|
||||||
@ -228,5 +229,54 @@ namespace AsbCloudInfrastructure.Services.SAUB
|
|||||||
};
|
};
|
||||||
return item;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user