diff --git a/AsbCloudApp/Data/Subsystems/SubsystemStatDto.cs b/AsbCloudApp/Data/Subsystems/SubsystemStatDto.cs
index d86c6bb3..c00a06ed 100644
--- a/AsbCloudApp/Data/Subsystems/SubsystemStatDto.cs
+++ b/AsbCloudApp/Data/Subsystems/SubsystemStatDto.cs
@@ -23,8 +23,13 @@ namespace AsbCloudApp.Data.Subsystems
///
public double KUsage { get; set; }
///
- /// коэффициент применения
+ /// сумма изменения глубин
///
- public double K2 { get; set; }
+ public double SumDepthChange { get; set; }
+ ///
+ /// количество операций
+ ///
+ public int OperationCount { get; set; }
+
}
}
diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs
index 9bfe0b85..8f24bcdc 100644
--- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs
+++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs
@@ -122,19 +122,63 @@ namespace AsbCloudInfrastructure.Services.Subsystems
var result = groupedDataSubsystems.Select(item =>
{
var periodGroup = item.Sum(o => (o.DateEnd - o.DateStart).TotalHours);
+ var periodGroupDepth = item.Sum(o => o.DepthEnd - o.DepthStart);
+ var depthChange = GetDepthChange(item.Key, gtDate, ltDate);
var subsystemStat = new SubsystemStatDto()
{
IdSubsystem = item.Key,
SubsystemName = subsystemService.GetOrDefault(item.Key)?.Name ?? "unknown",
UsedTimeHours = periodGroup,
- KUsage = 1d * periodGroup / periodRequest,
- K2 = 1d * periodGroup / periodGroupTotal,
+ //условие добавлено что бы избежать деление на ноль
+ //чисто теоретически такое событие может произойти только в случае
+ //если не было определенных операций по какому то из режимов
+ // тогда в этом поле статистики будет null
+ KUsage = depthChange==0? double.NaN : periodGroupDepth / depthChange,
+ SumDepthChange = periodGroupDepth,
+ OperationCount = item.Count()
};
return subsystemStat;
});
return result;
}
+ private double GetDepthChange (int idSubsystem, DateTime gtDate, DateTime ltDate)
+ {
+ double depthChange = 0;
+ var detectOperations = db.DetectedOperations
+ .Where(a => a.DateStart >= gtDate & a.DateEnd <= ltDate)
+ .ToList();
+ //AKB - Rotor+Slide
+ if (idSubsystem == 1)
+ {
+ depthChange = detectOperations.Where(a => a.IdCategory == 1 & a.IdCategory == 3)
+ .Sum(o => o.DepthEnd - o.DepthStart);
+ return depthChange;
+ }
+ //Mse - all detect operations
+ if (idSubsystem == 2)
+ {
+ depthChange = detectOperations
+ .Sum(o => o.DepthEnd - o.DepthStart);
+ return depthChange;
+ }
+ //Slide
+ if (idSubsystem == 65536)
+ {
+ depthChange = detectOperations.Where(o => o.IdCategory == 3)
+ .Sum(o => o.DepthEnd - o.DepthStart);
+ return depthChange;
+ }
+ //Rotor
+ if (idSubsystem == 65537)
+ {
+ depthChange = detectOperations.Where(o => o.IdCategory == 1)
+ .Sum(o => o.DepthEnd - o.DepthStart);
+ return depthChange;
+ }
+
+ return depthChange;
+ }
private IQueryable? BuildQuery(SubsystemOperationTimeRequest request)
{