diff --git a/AsbCloudInfrastructure/Background/PeriodicWorks/WorkDataSaubStat.cs b/AsbCloudInfrastructure/Background/PeriodicWorks/WorkDataSaubStat.cs index 3b3c25df..08f6f7d5 100644 --- a/AsbCloudInfrastructure/Background/PeriodicWorks/WorkDataSaubStat.cs +++ b/AsbCloudInfrastructure/Background/PeriodicWorks/WorkDataSaubStat.cs @@ -52,8 +52,8 @@ namespace AsbCloudInfrastructure.Background.PeriodicWorks foreach ( var idTelemetry in idTelemetries) { - var lastDate = stats.FirstOrDefault(s=>s.IdTelemetry == idTelemetry)?.DateEnd ?? DateTimeOffset.UnixEpoch; - await CreateStatForTelemetryFromDate(db, idTelemetry, lastDate, token); + var lastDate = stats.FirstOrDefault(s => s.IdTelemetry == idTelemetry)?.DateEnd ?? DateTimeOffset.UnixEpoch; + await CreateStatForTelemetryFromDate(db, idTelemetry, lastDate, token); } } @@ -78,6 +78,7 @@ namespace AsbCloudInfrastructure.Background.PeriodicWorks .Where(t => t.DateTime >= minDate) .Where(t => t.DateTime <= maxDate) .Where(t => Math.Abs(t.BitDepth - t.WellDepth) < 0.0001) + .OrderBy(t => t.DateTime) .ToArrayAsync(token); if (!telemetryDataSaub.Any()) @@ -94,24 +95,29 @@ namespace AsbCloudInfrastructure.Background.PeriodicWorks var indexStart = 0; var indexEnd = 0; var result = new List(); + + if (!telemetryDataSaub.Any()) + return result; + foreach (var operation in detectedOperations) { 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) - { - var length = indexEnd - indexStart; + indexEnd = Array.FindIndex(telemetryDataSaub, indexStart, t => t.DateTime > operation.DateEnd); - var subset = telemetryDataSaub.AsSpan(indexStart, length + 1); - var stats = CalcStats(operation, subset); - result.AddRange(stats); - } - else - { - indexStart = 0; - indexEnd = 0; - } + if (indexEnd < 0) + indexEnd = telemetryDataSaub.Length - 1; + + if (indexEnd == indexStart) + continue; + + var length = indexEnd - indexStart; + + var subset = telemetryDataSaub.AsSpan(indexStart, length); + var stats = CalcStats(operation, subset); + result.AddRange(stats); } return result; }