Из сервиса телеметрии удалён метод получения дат телеметрии, даты в бекграунд сервисе получаются из кэша.

This commit is contained in:
Степанов Дмитрий 2024-07-25 12:49:18 +03:00
parent e29f21c291
commit ccffb5e8e5
5 changed files with 23 additions and 36 deletions

View File

@ -56,4 +56,13 @@ public class TelemetryDataRequest
[Range(1, MaxTake)]
public int Take { get; set; } = 1024;
/// <summary>
/// Больше или равно высоте талевого блока
/// </summary>
public double? GeBlockPosition { get; set; }
/// <summary>
/// Меньше или равно высоте талевого блока
/// </summary>
public double? LeBlockPosition { get; set; }
}

View File

@ -45,12 +45,5 @@ namespace AsbCloudApp.Services
/// <param name="token"></param>
/// <returns></returns>
Task<Stream> GetZippedCsv(int idWell, DateTime beginDate, DateTime endDate, CancellationToken token);
/// <summary>
/// Получение диапозона дат телеметрий
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
Task<IDictionary<int, DatesRangeDto>> GetDateRangesAsync(CancellationToken token);
}
}

View File

@ -5,6 +5,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using AsbCloudApp.Data;
using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Repositories;
using AsbCloudApp.Requests;
using AsbCloudApp.Services;
@ -15,7 +16,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations;
public class WorkOperationDetection : Work
{
private static readonly IDictionary<int, DateTime> CacheOfStartDatesByTelemetryId = new Dictionary<int, DateTime>();
private static readonly IDictionary<int, DateTimeOffset> CacheOfStartDatesByTelemetryId = new Dictionary<int, DateTimeOffset>();
public WorkOperationDetection()
: base("Operation detection")
@ -37,28 +38,28 @@ public class WorkOperationDetection : Work
var telemetryRepository = services.GetRequiredService<ICrudRepository<TelemetryDto>>();
var detectedOperationRepository = services.GetRequiredService<IDetectedOperationRepository>();
var detectedOperationService = services.GetRequiredService<IDetectedOperationService>();
var telemetryDataSaubService = services.GetRequiredService<ITelemetryDataSaubService>();
var telemetryDataCache = services.GetRequiredService<ITelemetryDataCache<TelemetryDataSaubDto>>();
var idsTelemetry = (await telemetryRepository.GetAllAsync(token))
.Select(t => t.Id)
.ToArray();
var telemetriesDateRanges = await telemetryDataSaubService.GetDateRangesAsync(token);
var lastDetectedOperations = await detectedOperationRepository.GetLastDetectedOperationsAsync(token);
for (int i = 0; i < idsTelemetry.Length; i++)
{
var idTelemetry = idsTelemetry[i];
if (!telemetriesDateRanges.TryGetValue(idTelemetry, out var telemetryDateRange))
var telemetryDateRange = telemetryDataCache.GetOrDefaultWellDataDateRange(idTelemetry);
if(telemetryDateRange == null)
continue;
var dateBegin = telemetryDateRange.From.DateTime;
var dateEnd = telemetryDateRange.To.DateTime;
var dateBegin = telemetryDateRange.From;
var dateEnd = telemetryDateRange.To;
if (lastDetectedOperations.TryGetValue(idTelemetry, out var lastDetectedOperation))
dateBegin = lastDetectedOperation.DateEnd.UtcDateTime;
dateBegin = lastDetectedOperation.DateEnd;
if (CacheOfStartDatesByTelemetryId.TryGetValue(idTelemetry, out var dateBeginFromCahce))
dateBegin = dateBeginFromCahce;
@ -80,7 +81,7 @@ public class WorkOperationDetection : Work
var detectedOperations =
await detectedOperationService.DetectOperationsAsync(idTelemetry, request, lastDetectedOperation, token);
dateBegin = detectedOperations.LastDate.UtcDateTime;
dateBegin = detectedOperations.LastDate;
CacheOfStartDatesByTelemetryId[idTelemetry] = dateBegin;

View File

@ -152,9 +152,9 @@ public class TelemetryDataCache<TDto> : ITelemetryDataCache<TDto> where TDto : A
if (cacheItem.LastData.Count == 0)
return null;
var to = FromDate(cacheItem.FirstByDate.DateTime, cacheItem.TimezoneOffset);
var from = FromDate(cacheItem.LastData[^1].DateTime, cacheItem.TimezoneOffset);
var to = FromDate(cacheItem.LastData[^1].DateTime, cacheItem.TimezoneOffset);
var from = FromDate(cacheItem.FirstByDate.DateTime, cacheItem.TimezoneOffset);
return new DatesRangeDto { From = from, To = to };
}

View File

@ -177,22 +177,6 @@ public class TelemetryDataSaubService : TelemetryDataBaseService<TelemetryDataSa
return outStream;
}
public async Task<IDictionary<int, DatesRangeDto>> GetDateRangesAsync(CancellationToken token)
{
return await db.Set<TelemetryDataSaub>().GroupBy(x => x.IdTelemetry)
.Select(g => new
{
IdTelemetry = g.Key,
From = g.Min(x => x.DateTime),
To = g.Max(x => x.DateTime)
})
.ToDictionaryAsync(x => x.IdTelemetry, x => new DatesRangeDto
{
From = x.From,
To = x.To
}, token);
}
protected override IQueryable<TelemetryDataSaub> BuildQuery(int idTelemetry, TelemetryDataRequest request)
{
var query = base.BuildQuery(idTelemetry, request);