fix(core): Исправлена функция расчета кол-во работающих роботов

This commit is contained in:
Mikhail Trubnikov
2026-06-15 14:39:03 +10:00
parent c0720b38de
commit 1fb5cbd2e8

View File

@@ -150,6 +150,7 @@ namespace PARR.Core.Services.RobotSnapshotServices
MaxTemplateRobots = g.MaxTemplates,
MaxScheduleRobots = g.MaxSchedules,
// Считаем среднее количество роботов, деля поминутную сумму строго на 60 минут часа
//todo: тут не всегда нужно делить на 60, если час последний, то там может быть 50 минут или 20 и тп
AvgTemplateRobots = Math.Round(g.SumTemplates / 60.0, 1),
AvgScheduleRobots = Math.Round(g.SumSchedules / 60.0, 1)
})
@@ -258,12 +259,29 @@ namespace PARR.Core.Services.RobotSnapshotServices
if (!data.Any())
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(
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,
AvgRobots = Math.Round(v.Sum / 60.0, 1)
AvgRobots = Math.Round(v.Sum / minutesInHour, 1)
};
});
// Заполняем модель