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);