Добавлен OrderBy при сортировке телеметрии + расчет indexStart и indexEnd в методе CreateDataSaubStat

This commit is contained in:
Olga Nemt 2024-02-02 13:51:58 +05:00
parent b9bbb06584
commit ba56bfe274

View File

@ -52,8 +52,8 @@ namespace AsbCloudInfrastructure.Background.PeriodicWorks
foreach ( var idTelemetry in idTelemetries) foreach ( var idTelemetry in idTelemetries)
{ {
var lastDate = stats.FirstOrDefault(s=>s.IdTelemetry == idTelemetry)?.DateEnd ?? DateTimeOffset.UnixEpoch; var lastDate = stats.FirstOrDefault(s => s.IdTelemetry == idTelemetry)?.DateEnd ?? DateTimeOffset.UnixEpoch;
await CreateStatForTelemetryFromDate(db, idTelemetry, lastDate, token); await CreateStatForTelemetryFromDate(db, idTelemetry, lastDate, token);
} }
} }
@ -78,6 +78,7 @@ namespace AsbCloudInfrastructure.Background.PeriodicWorks
.Where(t => t.DateTime >= minDate) .Where(t => t.DateTime >= minDate)
.Where(t => t.DateTime <= maxDate) .Where(t => t.DateTime <= maxDate)
.Where(t => Math.Abs(t.BitDepth - t.WellDepth) < 0.0001) .Where(t => Math.Abs(t.BitDepth - t.WellDepth) < 0.0001)
.OrderBy(t => t.DateTime)
.ToArrayAsync(token); .ToArrayAsync(token);
if (!telemetryDataSaub.Any()) if (!telemetryDataSaub.Any())
@ -94,24 +95,29 @@ namespace AsbCloudInfrastructure.Background.PeriodicWorks
var indexStart = 0; var indexStart = 0;
var indexEnd = 0; var indexEnd = 0;
var result = new List<DataSaubStat>(); var result = new List<DataSaubStat>();
if (!telemetryDataSaub.Any())
return result;
foreach (var operation in detectedOperations) foreach (var operation in detectedOperations)
{ {
indexStart = Array.FindIndex(telemetryDataSaub, indexEnd, t => t.DateTime >= operation.DateStart); indexStart = Array.FindIndex(telemetryDataSaub, indexEnd, t => t.DateTime >= operation.DateStart);
indexEnd = Array.FindIndex(telemetryDataSaub, indexStart, t => t.DateTime > operation.DateEnd) - 1; if (indexStart < 0)
break;
if (indexStart >= 0 && indexEnd >= indexStart) indexEnd = Array.FindIndex(telemetryDataSaub, indexStart, t => t.DateTime > operation.DateEnd);
{
var length = indexEnd - indexStart;
var subset = telemetryDataSaub.AsSpan(indexStart, length + 1); if (indexEnd < 0)
var stats = CalcStats(operation, subset); indexEnd = telemetryDataSaub.Length - 1;
result.AddRange(stats);
} if (indexEnd == indexStart)
else continue;
{
indexStart = 0; var length = indexEnd - indexStart;
indexEnd = 0;
} var subset = telemetryDataSaub.AsSpan(indexStart, length);
var stats = CalcStats(operation, subset);
result.AddRange(stats);
} }
return result; return result;
} }