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) {