diff --git a/PARR.Constants/TemplateMatcherActionEnum.cs b/PARR.Constants/TemplateMatcherActionEnum.cs
index 54c0e553..a5ab2625 100644
--- a/PARR.Constants/TemplateMatcherActionEnum.cs
+++ b/PARR.Constants/TemplateMatcherActionEnum.cs
@@ -7,13 +7,13 @@ namespace PARR.Constants
{
///
/// Только сгенерировать недостающие шаблоны(можно использовать IsUnused).
- /// Создать недостающие шаблоны, перепривязать к нужному Job в маках одного JobGroup.
+ /// Создать недостающие шаблоны, перепривязать к нужному Job в рамках одного JobGroup.
/// Выключить+включить в соответствии с настройками фильтров.
/// Полное соответвие Template к Job.
///
Sync = 0,
///
- /// Только меняет имя шаблона и деактивирует шаблон и расписание, в случае когда ЭК не соответсвует Job+ставит статус Unused
+ /// Только меняет имя шаблона
///
Update = 1
}
diff --git a/PARR.TemplateMatcher/Services/Implemetaions/GroupedTemplateSynchronizer.cs b/PARR.TemplateMatcher/Services/Implemetaions/GroupedTemplateSynchronizer.cs
index 3188a6e5..44cce2a9 100644
--- a/PARR.TemplateMatcher/Services/Implemetaions/GroupedTemplateSynchronizer.cs
+++ b/PARR.TemplateMatcher/Services/Implemetaions/GroupedTemplateSynchronizer.cs
@@ -4,7 +4,6 @@ using PARR.BLL.Domain.Mq;
using PARR.BLL.Services.Interfaces;
using PARR.Common.Domain;
using PARR.Constants;
-using PARR.DAL.Contracts;
using PARR.DAL.DomainServices.Interfaces;
using PARR.DAL.Models;
using PARR.DAL.Models.Job;
@@ -61,8 +60,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
IUnitFieldService unitFieldService,
ITemplateDeactivator templateDeactivator,
ITemplateNameNormalizer templateNameNormalizer,
- ITemplateUpdaterMqSender templateUpdaterMqSender,
- SettingsFromDb settingsFromDb
+ ITemplateUpdaterMqSender templateUpdaterMqSender
)
{
this.logger = logger;
@@ -113,7 +111,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
var jobsInGroup = jobGroup.Jobs.ToList();
- // --- НОВАЯ ЛОГИКА: Получение FieldId и разрешённых значений для "РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК" ---
+ // --- Получение FieldId и разрешённых значений для "РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК" ---
var workGroupField = await unitFieldService.GetByAihitNameAsync("РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК");
if (workGroupField == null)
{
@@ -479,7 +477,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
else
{
logger.LogDebug("Юнит {TargetUnitId} НЕ найден в groupedRelationships.Values после разрешения конфликтов.", targetUnitId);
- // ❌ юнит отсеялся на этапе разрешения конфликтов
+ // юнит отсеялся на этапе разрешения конфликтов
}
#endif
@@ -705,7 +703,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
var key = (existingTemplate.JobId, existingTemplate.UnitId, existingTemplate.Index ?? -1);
if (!expectedTemplateKeys.Contains(key))
{
- logger.LogInformation("Деактивация лишнего шаблона {TemplateId} (Job {JobId}, Regional {UnitId}, Index {Index}).", existingTemplate.Id, existingTemplate.JobId, existingTemplate.UnitId, existingTemplate.Index);
+ logger.LogInformation("Деактивация лишнего шаблона {TemplateId} (Job {JobId}, Relationship {UnitId}, Index {Index}).", existingTemplate.Id, existingTemplate.JobId, existingTemplate.UnitId, existingTemplate.Index);
await templateDeactivator.DeactivateTemplateAsync(existingTemplate, initiator);
}
}
diff --git a/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs b/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs
index ee0c43e1..6a96edc6 100644
--- a/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs
+++ b/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs
@@ -130,16 +130,20 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
.Where(t => t.JobId == jobId)
.ToListAsync();
- var existingUnitIds = existingTemplates
+ var existingUsedTemplates = existingTemplates
.Where(t => t.StatusTypeId == TemplateStatusTypeEnum.Used)
+ .ToList();
+
+ var existingUnitIds = existingUsedTemplates
.Select(t => t.UnitId)
.ToHashSet();
var newUnitIds = unitIds.Except(existingUnitIds).ToList();
- var unusedTemplates = existingTemplates
- .Where(t => t.StatusTypeId == TemplateStatusTypeEnum.Used && !unitIds.Contains(t.UnitId))
+ var unusedTemplates = existingUsedTemplates
+ .Where(t => !unitIds.Contains(t.UnitId))
.ToList();
+ // Обработка новых юнитов
foreach (var unitId in newUnitIds)
{
var reusableTemplate = await templateReuser.TryReuseOneUnusedTemplateAsync(jobId, unitId, initiator);
@@ -174,6 +178,40 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
}
}
+ // Обработка существующих шаблонов (проверка имени)
+ foreach (var template in existingUsedTemplates)
+ {
+ if (unitIds.Contains(template.UnitId))
+ {
+ var expectedName = await templateNameNormalizer.GetNormalizedTemplateNameAsync(job, template.UnitId);
+ if (!string.Equals(template.Name, expectedName, StringComparison.OrdinalIgnoreCase))
+ {
+ logger.LogDebug("Шаблон {TemplateId} требует обновления имени: старое = '{OldName}', новое = '{NewName}'", template.Id, template.Name, expectedName);
+
+ var nextRun = await GetNextRunAsync(job, template.NextRun);
+
+ var updateRequest = new TemplateUpdaterMq
+ {
+ TemplateId = template.Id,
+ JobId = jobId,
+ UnitId = template.UnitId,
+ Name = expectedName,
+ IsActiveTemplate = template.IsActiveTemplate,
+ IsActiveSchedule = template.IsActiveSchedule,
+ LastRun = template.LastRun,
+ NextRun = nextRun,
+ Index = template.Index,
+ StatusTypeId = TemplateStatusTypeEnum.Used,
+ Initiator = initiator,
+ UnitsInTemplate = new List() // для простого шаблона
+ };
+
+ await templateUpdaterMqSender.SendTemplateUpdateMessageAsync(updateRequest);
+ }
+ }
+ }
+
+ // Деактивация лишних шаблонов
foreach (var unusedTemplate in unusedTemplates)
{
logger.LogInformation("Деактивация лишнего шаблона {TemplateId} (Job {JobId}, UnitId {UnitId}).", unusedTemplate.Id, jobId, unusedTemplate.UnitId);