Изменение SubsystemStatDTO

Изменение алгоритмов просчета статистики
This commit is contained in:
eugeniy_ivanov 2022-09-16 13:34:14 +05:00
parent 43f3a12651
commit eb987c6ff2
2 changed files with 53 additions and 4 deletions

View File

@ -23,8 +23,13 @@ namespace AsbCloudApp.Data.Subsystems
/// </summary> /// </summary>
public double KUsage { get; set; } public double KUsage { get; set; }
/// <summary> /// <summary>
/// коэффициент применения /// сумма изменения глубин
/// </summary> /// </summary>
public double K2 { get; set; } public double SumDepthChange { get; set; }
/// <summary>
/// количество операций
/// </summary>
public int OperationCount { get; set; }
} }
} }

View File

@ -122,19 +122,63 @@ namespace AsbCloudInfrastructure.Services.Subsystems
var result = groupedDataSubsystems.Select(item => var result = groupedDataSubsystems.Select(item =>
{ {
var periodGroup = item.Sum(o => (o.DateEnd - o.DateStart).TotalHours); 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() var subsystemStat = new SubsystemStatDto()
{ {
IdSubsystem = item.Key, IdSubsystem = item.Key,
SubsystemName = subsystemService.GetOrDefault(item.Key)?.Name ?? "unknown", SubsystemName = subsystemService.GetOrDefault(item.Key)?.Name ?? "unknown",
UsedTimeHours = periodGroup, 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 subsystemStat;
}); });
return result; 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<SubsystemOperationTime>? BuildQuery(SubsystemOperationTimeRequest request) private IQueryable<SubsystemOperationTime>? BuildQuery(SubsystemOperationTimeRequest request)
{ {