fix(templateMatcher): при каждой синхронизации неиспользуемых шаблонов шорткод %ТИКТАК% генерировал новое имя шаблона, что создавало лишнюю роботу роботам.

This commit is contained in:
Mikhail Kuznetsov
2026-01-26 10:13:42 +10:00
parent b3de8bfe4e
commit 53b6f037b8

View File

@@ -492,9 +492,13 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
// Генерируем ожидаемое имя один раз
var expectedName = await GenerateUnusedTemplateNameAsync(template, unusedJob);
// Извлекаем "базовые" имена
var currentBaseName = ExtractBaseName(template.Name);
var expectedBaseName = ExtractBaseName(expectedName);
// Проверяем, нужно ли обновление
bool needsUpdate = template.JobId != unusedJobId ||
!string.Equals(template.Name, expectedName, StringComparison.OrdinalIgnoreCase);
currentBaseName != expectedBaseName;
if (!needsUpdate)
{
@@ -612,4 +616,29 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
TimeSpan.FromMinutes(30)
);
}
private static string ExtractBaseName(string name)
{
var lastUnderscoreIndex = name.LastIndexOf('_');
if (lastUnderscoreIndex > 0)
{
var suffix = name.Substring(lastUnderscoreIndex + 1);
if (long.TryParse(suffix, out long unixTimestampMs))
{
try
{
// Проверяем, является ли это валидным временем
var dto = DateTimeOffset.FromUnixTimeMilliseconds(unixTimestampMs);
return name.Substring(0, lastUnderscoreIndex);
}
catch (ArgumentOutOfRangeException)
{
// Значение вне диапазона для DateTimeOffset
return name; // Не трогаем имя, если суффикс невалиден
}
}
}
return name;
}
}