From 1fb5cbd2e86a8588d860043ad53420e496c46e70 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Mon, 15 Jun 2026 14:39:03 +1000 Subject: [PATCH] =?UTF-8?q?fix(core):=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=80=D0=B0=D1=81=D1=87=D0=B5=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BB-=D0=B2=D0=BE=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D1=8E=D1=89=D0=B8=D1=85=20=D1=80=D0=BE=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RobotSnapshotService.cs | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/PARR.Core/Services/RobotSnapshotServices/RobotSnapshotService.cs b/PARR.Core/Services/RobotSnapshotServices/RobotSnapshotService.cs index 32156387..6439f409 100644 --- a/PARR.Core/Services/RobotSnapshotServices/RobotSnapshotService.cs +++ b/PARR.Core/Services/RobotSnapshotServices/RobotSnapshotService.cs @@ -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(); + // Фиксируем текущее время в 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) + }; }); // Заполняем модель