fix(core): Исправлена функция расчета кол-во работающих роботов
This commit is contained in:
@@ -150,6 +150,7 @@ namespace PARR.Core.Services.RobotSnapshotServices
|
|||||||
MaxTemplateRobots = g.MaxTemplates,
|
MaxTemplateRobots = g.MaxTemplates,
|
||||||
MaxScheduleRobots = g.MaxSchedules,
|
MaxScheduleRobots = g.MaxSchedules,
|
||||||
// Считаем среднее количество роботов, деля поминутную сумму строго на 60 минут часа
|
// Считаем среднее количество роботов, деля поминутную сумму строго на 60 минут часа
|
||||||
|
//todo: тут не всегда нужно делить на 60, если час последний, то там может быть 50 минут или 20 и тп
|
||||||
AvgTemplateRobots = Math.Round(g.SumTemplates / 60.0, 1),
|
AvgTemplateRobots = Math.Round(g.SumTemplates / 60.0, 1),
|
||||||
AvgScheduleRobots = Math.Round(g.SumSchedules / 60.0, 1)
|
AvgScheduleRobots = Math.Round(g.SumSchedules / 60.0, 1)
|
||||||
})
|
})
|
||||||
@@ -258,12 +259,29 @@ namespace PARR.Core.Services.RobotSnapshotServices
|
|||||||
if (!data.Any())
|
if (!data.Any())
|
||||||
return new List<HourlyRobotTypeAnalyticsDto>();
|
return new List<HourlyRobotTypeAnalyticsDto>();
|
||||||
|
|
||||||
|
// Фиксируем текущее время в UTC и «округляем» его до начала часа
|
||||||
|
var nowLocal = DateTimeOffset.UtcNow.ToOffset(queryDto.Offset);
|
||||||
|
var currentHourLocal = new DateTime(nowLocal.Year, nowLocal.Month, nowLocal.Day, nowLocal.Hour, 0, 0);
|
||||||
|
|
||||||
var dbDataDict = data.ToDictionary(
|
var dbDataDict = data.ToDictionary(
|
||||||
k => new DateTime(k.LocalYear, k.LocalMonth, k.LocalDay, k.LocalHour, 0, 0),
|
k => new DateTime(k.LocalYear, k.LocalMonth, k.LocalDay, k.LocalHour, 0, 0),
|
||||||
v => new
|
v =>
|
||||||
|
{
|
||||||
|
double minutesInHour = 60.0;
|
||||||
|
var dbLocalHour = new DateTime(v.LocalYear, v.LocalMonth, v.LocalDay, v.LocalHour, 0, 0);
|
||||||
|
// Строгая проверка: совпадает ли час из базы данных ИМЕННО с текущим часом сегодня?
|
||||||
|
// Если да, то нужно делить не на 60, а на прошедние минуты
|
||||||
|
if (dbLocalHour == currentHourLocal)
|
||||||
|
{
|
||||||
|
// Если идет первая минута часа, делим на 1, чтобы избежать деления на ноль
|
||||||
|
minutesInHour = nowLocal.Minute == 0 ? 1.0 : (double)nowLocal.Minute;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new
|
||||||
{
|
{
|
||||||
//MaxAllowedRobots = t.MaxAllowed,
|
//MaxAllowedRobots = t.MaxAllowed,
|
||||||
AvgRobots = Math.Round(v.Sum / 60.0, 1)
|
AvgRobots = Math.Round(v.Sum / minutesInHour, 1)
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
// Заполняем модель
|
// Заполняем модель
|
||||||
|
|||||||
Reference in New Issue
Block a user