fix(core): Исправлена функция расчета кол-во работающих роботов
This commit is contained in:
@@ -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 =>
|
||||
{
|
||||
//MaxAllowedRobots = t.MaxAllowed,
|
||||
AvgRobots = Math.Round(v.Sum / 60.0, 1)
|
||||
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 / minutesInHour, 1)
|
||||
};
|
||||
});
|
||||
|
||||
// Заполняем модель
|
||||
|
||||
Reference in New Issue
Block a user