Изменение 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>
public double KUsage { get; set; }
/// <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 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<SubsystemOperationTime>? BuildQuery(SubsystemOperationTimeRequest request)
{