Изменение алгоритма расчёта наработки АПД

This commit is contained in:
Степанов Дмитрий 2023-12-06 16:43:28 +05:00
parent 17c13b7a7b
commit 410ef56f18
3 changed files with 14 additions and 6 deletions

View File

@ -29,4 +29,9 @@ public class OperationsSummaryDto
/// Cумма продолжительностей операций
/// </summary>
public double SumDurationHours { get; set; }
/// <summary>
/// Флаг включенной подсистемы
/// </summary>
public int EnabledSubsystems { get; set; }
}

View File

@ -104,14 +104,15 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
query = query.Where(operation => operation.DepthEnd <= request.LeDepthEnd.Value);
var queryGroup = query
.GroupBy(operation => new { operation.IdTelemetry, operation.IdCategory })
.GroupBy(operation => new { operation.IdTelemetry, operation.IdCategory, operation.EnabledSubsystems })
.Select(group => new OperationsSummaryDto
{
IdTelemetry = group.Key.IdTelemetry,
IdCategory = group.Key.IdCategory,
EnabledSubsystems = group.Key.EnabledSubsystems,
Count = group.Count(),
SumDepthIntervals = group.Sum(operation => operation.DepthEnd - operation.DepthStart),
SumDurationHours = group.Sum(operation => (operation.DateEnd - operation.DateStart).TotalHours)
SumDurationHours = group.Sum(operation => (operation.DateEnd - operation.DateStart).TotalHours),
})
.OrderBy(summ => summ.IdTelemetry)
.ThenBy(summ => summ.IdCategory);

View File

@ -156,9 +156,7 @@ internal class SubsystemOperationTimeService : ISubsystemOperationTimeService
var groupedSubsystemsTimes = subsystemsTimes
.OrderBy(o => o.Id)
.GroupBy(o => o.IdSubsystem);
var periodGroupTotal = subsystemsTimes.Sum(o => (o.DateEnd - o.DateStart).TotalHours);
var result = groupedSubsystemsTimes.Select(g =>
{
var periodGroup = g.Sum(o => (o.DateEnd - o.DateStart).TotalHours);
@ -193,7 +191,11 @@ internal class SubsystemOperationTimeService : ISubsystemOperationTimeService
SumDepthInterval = apdParts.Sum(part => part.SumDepthInterval),
OperationCount = apdParts.Sum(part => part.OperationCount),
};
apdSum.KUsage = apdSum.SumDepthInterval / apdSum.SumOperationDepthInterval;
operationsSummaries = operationsSummaries.Where(o => o.EnabledSubsystems == 1);
var (_, sumOprationsDurationHours) = AggregateOperationsSummaries(IdSubsystemAKBRotor, operationsSummaries);
apdSum.KUsage = sumOprationsDurationHours / apdSum.SumOperationDurationHours;
if (apdSum.KUsage > 1)
apdSum.KUsage = 1;
result = result.Append(apdSum).OrderBy(m => m.IdSubsystem);