From 53b6f037b87dfe27c5b567f1bf12f62c3d258af9 Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Mon, 26 Jan 2026 10:13:42 +1000 Subject: [PATCH] =?UTF-8?q?fix(templateMatcher):=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=B0=D0=B6=D0=B4=D0=BE=D0=B9=20=D1=81=D0=B8=D0=BD=D1=85?= =?UTF-8?q?=D1=80=D0=BE=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B5=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=D0=B5?= =?UTF-8?q?=D0=BC=D1=8B=D1=85=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=20=D1=88=D0=BE=D1=80=D1=82=D0=BA=D0=BE=D0=B4=20%=D0=A2?= =?UTF-8?q?=D0=98=D0=9A=D0=A2=D0=90=D0=9A%=20=D0=B3=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D1=80=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BB=20=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BE=D0=B5=20=D0=B8=D0=BC=D1=8F=20=D1=88=D0=B0=D0=B1=D0=BB?= =?UTF-8?q?=D0=BE=D0=BD=D0=B0,=20=D1=87=D1=82=D0=BE=20=D1=81=D0=BE=D0=B7?= =?UTF-8?q?=D0=B4=D0=B0=D0=B2=D0=B0=D0=BB=D0=BE=20=D0=BB=D0=B8=D1=88=D0=BD?= =?UTF-8?q?=D1=8E=D1=8E=20=D1=80=D0=BE=D0=B1=D0=BE=D1=82=D1=83=20=D1=80?= =?UTF-8?q?=D0=BE=D0=B1=D0=BE=D1=82=D0=B0=D0=BC.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SimpleTemplateSynchronizer.cs | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs b/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs index c14d9ffe..1a0c4eae 100644 --- a/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs +++ b/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs @@ -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; + } } \ No newline at end of file