fix(core): NextRun расчет ЕСПП, исправлен метод регулярного расчета

This commit is contained in:
Mikhail Trubnikov
2026-07-08 14:47:59 +10:00
parent 4af552b29e
commit d7d4713953

View File

@@ -162,7 +162,7 @@ namespace PARR.Core.Services.NextRunServices.Subservices
}; };
var key = values[0].Value.Value; var key = values[0].Value.Value;
if (!regDict.TryGetValue(key, out int regMinutes)) if (!regDict.TryGetValue(key, out int regHours))
{ {
logger.LogError("Неизвестное значение: {Value}", key); logger.LogError("Неизвестное значение: {Value}", key);
throw new ArgumentException($"Неизвестное значение: {key}"); throw new ArgumentException($"Неизвестное значение: {key}");
@@ -175,7 +175,7 @@ namespace PARR.Core.Services.NextRunServices.Subservices
////TODO: вот это повторяется от метода к методу ////TODO: вот это повторяется от метода к методу
////Если итоговая дата указывает на прошлое, то повторяем расчёт и уходим в рекурсию ////Если итоговая дата указывает на прошлое, то повторяем расчёт и уходим в рекурсию
//if (calcDay < DateTimeOffset.UtcNow /* || calcDay <= referenceDate*/) //if (calcDay < DateTimeOffset.UtcNow /* || calcDay <= referenceDate*/)
// calcDay = GetNextDateRegularly(values, calcDay.AddHours(regMinutes)); // calcDay = GetNextDateRegularly(values, calcDay.AddHours(regHours));
//return calcDay; //return calcDay;
@@ -189,12 +189,12 @@ namespace PARR.Core.Services.NextRunServices.Subservices
// Сразу вычисляем, сколько целых интервалов нужно прибавить, чтобы догнать текущее время. // Сразу вычисляем, сколько целых интервалов нужно прибавить, чтобы догнать текущее время.
if (calcDay < nowInTargetZone) if (calcDay < nowInTargetZone)
{ {
double totalMinutesPast = (nowInTargetZone - calcDay).TotalMinutes; double totalHoursPast = (nowInTargetZone - calcDay).TotalHours;
// Считаем, сколько полных интервалов помещается в этот отрезок времени // Считаем, сколько полных интервалов помещается в этот отрезок времени
long intervalsToSkip = (long)Math.Ceiling(totalMinutesPast / regMinutes); long intervalsToSkip = (long)Math.Ceiling(totalHoursPast / regHours);
calcDay = calcDay.AddMinutes(intervalsToSkip * regMinutes); calcDay = calcDay.AddHours(intervalsToSkip * regHours);
} }
// Проверяем условия и делаем микро-шаги, если необходимо // Проверяем условия и делаем микро-шаги, если необходимо
@@ -204,7 +204,7 @@ namespace PARR.Core.Services.NextRunServices.Subservices
{ {
return calcDay; return calcDay;
} }
calcDay = calcDay.AddMinutes(regMinutes); calcDay = calcDay.AddHours(regHours);
} }
} }