From 23e6b9f3081283379b7115a7cf092171e7426ac2 Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Fri, 23 Jan 2026 11:29:42 +1000 Subject: [PATCH] =?UTF-8?q?feat(dal,=20templateMatcher):=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=BE=D0=B5=20=D1=83=D0=BB=D1=83?= =?UTF-8?q?=D1=87=D1=88=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B1=D1=8B=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8,=20ShortcodesService=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BF=D1=80=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=BE=D1=81=20unitInTemplates=20=D0=B4=D0=BB=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=88=D0=BE=D1=80=D1=82=D0=BA=D0=BE=D0=B4=D0=B0=20%?= =?UTF-8?q?=D0=9C=D0=90=D0=9A=D0=A1:...%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Shortcodes/ShortcodesService.cs | 77 ++++++--- .../GroupedTemplateSynchronizer.cs | 160 ++++++++---------- .../SimpleTemplateSynchronizer.cs | 23 +-- .../Implemetaions/TemplateUpdaterMqSender.cs | 6 +- 4 files changed, 133 insertions(+), 133 deletions(-) diff --git a/PARR.DAL/DomainServices/Shortcodes/ShortcodesService.cs b/PARR.DAL/DomainServices/Shortcodes/ShortcodesService.cs index 600f825a..cc9b2dc9 100644 --- a/PARR.DAL/DomainServices/Shortcodes/ShortcodesService.cs +++ b/PARR.DAL/DomainServices/Shortcodes/ShortcodesService.cs @@ -355,7 +355,7 @@ namespace PARR.DAL.DomainServices.Shortcodes var maxShortcodes = MaxShortcodeRegex.Matches(result); if (maxShortcodes.Count > 0) { - result = await ReplaceMaxShortcodesAsync(data.Job.Group.Id, data.UnitId, result, maxShortcodes, caller).ConfigureAwait(false); + result = await ReplaceMaxShortcodesAsync(data.Job.Group.Id, data.UnitId, result, maxShortcodes, caller, data.UnitsInTemplate).ConfigureAwait(false); } } @@ -675,7 +675,13 @@ namespace PARR.DAL.DomainServices.Shortcodes return resultName; } - private async Task ReplaceMaxShortcodesAsync(Guid jobGroupId, Guid unitId, string input, MatchCollection maxShortcodes, string caller) + private async Task ReplaceMaxShortcodesAsync( + Guid jobGroupId, + Guid unitId, + string input, + MatchCollection maxShortcodes, + string caller, + List unitsInTemplateForCurrentTemplate = null) { if (jobGroupId == Guid.Empty) { @@ -703,7 +709,7 @@ namespace PARR.DAL.DomainServices.Shortcodes logger.LogDebug("[{Caller}] Обработка {Shortcode} для JobGroup {JobGroupId}, Template.UnitId {UnitId}, fieldName {FieldName}", caller, fullShortcode, jobGroupId, unitId, fieldName); - var mostFrequentValue = await GetMaxShortCodeFromCacheOrDbAsync(jobGroupId, unitId, fullShortcode, fieldName, caller).ConfigureAwait(false); + var mostFrequentValue = await GetMaxShortCodeFromCacheOrDbAsync(jobGroupId, unitId, fullShortcode, fieldName, caller, unitsInTemplateForCurrentTemplate).ConfigureAwait(false); foreach (var match in matches) input = input.Replace(match.Value, mostFrequentValue); @@ -712,7 +718,13 @@ namespace PARR.DAL.DomainServices.Shortcodes return input; } - private async Task GetMaxShortCodeFromCacheOrDbAsync(Guid jobGroupId, Guid unitId, string fullShortcode, string fieldName, string caller) + private async Task GetMaxShortCodeFromCacheOrDbAsync( + Guid jobGroupId, + Guid unitId, + string fullShortcode, + string fieldName, + string caller, + List unitsInTemplateForCurrentTemplate = null) { if (jobGroupId == Guid.Empty) { @@ -737,21 +749,7 @@ namespace PARR.DAL.DomainServices.Shortcodes logger.LogDebug("[{Caller}] Кэш промахнут для GroupedShortCode '{Name}'. Запрашиваем из БД.", caller, fullShortcode); - // Загружаем юниты из БД - var effectiveUnitIds = await jobService.Get() - .Where(j => j.GroupId == jobGroupId) - .Join( - templateService.Get() - .Where(t => t.StatusTypeId == TemplateStatusTypeEnum.Used && t.UnitId == unitId) - .Include(t => t.UnitsInTemplate), - job => job.Id, - template => template.JobId, - (job, template) => template - ) - .SelectMany(template => template.UnitsInTemplate) - .Select(uit => uit.UnitId) - .Distinct() - .ToListAsync().ConfigureAwait(false); + var effectiveUnitIds = await GetEffectiveUnitIdsAsync(jobGroupId, unitId, unitsInTemplateForCurrentTemplate, caller).ConfigureAwait(false); logger.LogDebug("[{Caller}] EffectiveUnitIds: [{Ids}], Count: {Count}", caller, string.Join(", ", effectiveUnitIds), effectiveUnitIds.Count); @@ -778,6 +776,47 @@ namespace PARR.DAL.DomainServices.Shortcodes return NoContent; } + /// + /// Получает список UnitId для подстановки шорткода %МАКС:...%. + /// Сначала пробует использовать переданные юниты, затем загружает из БД. + /// + /// ID JobGroup, для которого ищутся юниты + /// ID ключевого юнита шаблона + /// Юниты, переданные с текущим шаблоном (опционально) + /// Имя вызывающего метода (для логирования) + /// Список UnitId + private async Task> GetEffectiveUnitIdsAsync( + Guid jobGroupId, + Guid unitId, + List unitsInTemplateForCurrentTemplate, + string caller) + { + if (unitsInTemplateForCurrentTemplate != null && unitsInTemplateForCurrentTemplate.Count > 0) + { + logger.LogDebug("[{Caller}] Используем UnitsInTemplate из входных данных.", caller); + return unitsInTemplateForCurrentTemplate.Select(uit => uit.UnitId).ToList(); + } + + logger.LogDebug("[{Caller}] Загружаем UnitsInTemplate из БД.", caller); + + var effectiveUnitIds = await jobService.Get() + .Where(j => j.GroupId == jobGroupId) + .Join( + templateService.Get() + .Where(t => t.StatusTypeId == TemplateStatusTypeEnum.Used && t.UnitId == unitId) + .Include(t => t.UnitsInTemplate), + job => job.Id, + template => template.JobId, + (job, template) => template + ) + .SelectMany(template => template.UnitsInTemplate) + .Select(uit => uit.UnitId) + .Distinct() + .ToListAsync().ConfigureAwait(false); + + return effectiveUnitIds; + } + private async Task ReplaceLettersShortcodesAsync(Guid unitId, string input, MatchCollection lettersShortcodes, string caller) { var shortcodeToMatches = lettersShortcodes diff --git a/PARR.TemplateMatcher/Services/Implemetaions/GroupedTemplateSynchronizer.cs b/PARR.TemplateMatcher/Services/Implemetaions/GroupedTemplateSynchronizer.cs index 0bb8deee..b8224da8 100644 --- a/PARR.TemplateMatcher/Services/Implemetaions/GroupedTemplateSynchronizer.cs +++ b/PARR.TemplateMatcher/Services/Implemetaions/GroupedTemplateSynchronizer.cs @@ -5,6 +5,7 @@ using PARR.BLL.Services.Interfaces; using PARR.Common.Domain; using PARR.Constants; using PARR.DAL.Cache.Models; + using PARR.DAL.DomainServices.Interfaces; using PARR.DAL.DomainServices.UnitFilterService; using PARR.DAL.Models; @@ -14,10 +15,9 @@ using PARR.DAL.NextRunServices; using PARR.DAL.Services.Interfaces; using PARR.DAL.Services.Interfaces.Job; using PARR.DAL.Services.Interfaces.Unit; -using PARR.DAL.TransformServices; + using PARR.TemplateMatcher.Services.Interfaces; using PARR.TemplateMatcher.Settings; -using System.Text.Json; namespace PARR.TemplateMatcher.Services.Implementations; @@ -36,7 +36,6 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer private readonly ITemplateService templateService; private readonly IJobGroupService jobGroupService; private readonly ITemplateReuser templateReuser; - //private readonly IEsppScheduleTransformService esppScheduleTransformService; private readonly IUnitRegionalEkPtkGroupService regionalEkPtkGroupService; private readonly IUnitFieldService unitFieldService; private readonly ITemplateDeactivator templateDeactivator; @@ -56,7 +55,6 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer ITemplateService templateService, IJobGroupService jobGroupService, ITemplateReuser templateReuser, - //IEsppScheduleTransformService esppScheduleTransformService, IUnitRegionalEkPtkGroupService regionalEkPtkGroupService, IUnitFieldService unitFieldService, ITemplateDeactivator templateDeactivator, @@ -76,7 +74,6 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer this.templateService = templateService; this.jobGroupService = jobGroupService; this.templateReuser = templateReuser; - //this.esppScheduleTransformService = esppScheduleTransformService; this.regionalEkPtkGroupService = regionalEkPtkGroupService; this.unitFieldService = unitFieldService; this.templateDeactivator = templateDeactivator; @@ -197,12 +194,14 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer var groupingFieldId = jobGroup.GroupingUnitFieldId.Value; - // Фильтруем юниты по GroupingUnitFieldId используя данные из DTO - var unitIdsWithValidGroupingFieldSet = filteredUnits - .Where(u => u.Values.Any(v => - v.FieldId == groupingFieldId && - !string.IsNullOrEmpty(v.Value))) - .Select(u => u.Id) + // --- ОПТИМИЗАЦИЯ: Загрузка значений поля GroupingUnitFieldId отдельно --- + logger.LogDebug("Загружаем значения поля GroupingUnitFieldId (FieldId={FieldId}) для {Count} юнитов.", groupingFieldId, expectedUnitIds.Count); + + var groupingUnitValues = await unitInValueService.GetByUnitIdsAndFieldIdsAsync(expectedUnitIds, new HashSet { groupingFieldId }); + + var unitIdsWithValidGroupingFieldSet = groupingUnitValues + .Where(uv => uv.Value != null && !string.IsNullOrEmpty(uv.Value.Value)) + .Select(uv => uv.UnitId) .ToList(); logger.LogDebug("После фильтрации по GroupingUnitFieldId осталось {Count} юнитов.", unitIdsWithValidGroupingFieldSet.Count); @@ -214,13 +213,17 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer return; } - // Аналогично для фильтрации по "РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК" - var unitIdsWithValidWorkGroupFieldSet = filteredUnits - .Where(u => u.Values.Any(v => - v.FieldId == workGroupFieldId && - relationshipGroupValueIds.Contains(v.FieldId) && - !string.IsNullOrEmpty(v.Value))) - .Select(u => u.Id) + // --- Аналогично для фильтрации по "РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК" --- + // var workGroupFieldId = workGroupField.Id; // УЖЕ ОПРЕДЕЛЕНО РАНЕЕ (строка 157) + // var relationshipGroupValueIds = regionalEkPtkGroupService.Get() // УДАЛИТЬ - УЖЕ ОПРЕДЕЛЕНО (строка 161) + + logger.LogDebug("Загружаем значения поля 'РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК' (FieldId={FieldId}) для {Count} юнитов.", workGroupFieldId, unitIdsWithValidGroupingFieldSet.Count); + + var workGroupValues = await unitInValueService.GetByUnitIdsAndFieldIdsAsync(unitIdsWithValidGroupingFieldSet, new HashSet { workGroupFieldId }); + + var unitIdsWithValidWorkGroupFieldSet = workGroupValues + .Where(uv => uv.Value != null && relationshipGroupValueIds.Contains(uv.Value.Id)) + .Select(uv => uv.UnitId) .ToList(); logger.LogDebug("После фильтрации по 'РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК' осталось {Count} юнитов.", unitIdsWithValidWorkGroupFieldSet.Count); @@ -232,41 +235,43 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer return; } - unitIdsWithValidGroupingFieldSet = unitIdsWithValidWorkGroupFieldSet; + // --- ИСПОЛЬЗУЕМ ПОСЛЕДНИЙ РЕЗУЛЬТАТ ДАЛЬШЕ --- + var finalUnitIds = unitIdsWithValidWorkGroupFieldSet; // Более понятное имя // 5. Получить RelationshipFilters из maxJob var relationshipFilters = maxJob.UnitFilters?.SelectMany(uf => uf.RelationshipFilters).ToList() ?? new List(); logger.LogDebug("Получение связей UnitInUnit для юнитов, прошедших фильтрацию..."); - - // Используем unitIdsWithValidGroupingFieldSet для получения связей var potentialUnitInUnitLinks = await unitInUnitService.Get() .AsNoTracking() - .Where(link => unitIdsWithValidGroupingFieldSet.Contains(link.ParentUnitId) || unitIdsWithValidGroupingFieldSet.Contains(link.ChildUnitId)) + .Where(link => finalUnitIds.Contains(link.ParentUnitId) || finalUnitIds.Contains(link.ChildUnitId)) .ToListAsync(); logger.LogDebug("Найдено {Count} потенциальных связей UnitInUnit.", potentialUnitInUnitLinks.Count); - // Подготавливаем данные для фильтрации связей var allParentIds = potentialUnitInUnitLinks.Select(l => l.ParentUnitId).ToHashSet(); var allChildIds = potentialUnitInUnitLinks.Select(l => l.ChildUnitId).ToHashSet(); - // Фильтруем юниты для получения родительских и дочерних значений - var parentUnits = filteredUnits.Where(u => allParentIds.Contains(u.Id)).ToList(); - var childUnits = filteredUnits.Where(u => allChildIds.Contains(u.Id)).ToList(); + // --- Оптимизация: Загрузка всех значений за ОДИН запрос --- + var allRelevantUnitIds = allParentIds.Concat(allChildIds).ToHashSet(); - // Создаем словари значений для родителей и детей - var parentValuesMap = parentUnits - .ToDictionary( - u => u.Id, - u => u.Values.ToDictionary(v => v.FieldId, v => v.Value) - ); + var allUnitValues = await unitInValueService.Get() + .AsNoTracking() + .Include(uv => uv.Field) + .Include(uv => uv.Value) + .Where(uv => allRelevantUnitIds.Contains(uv.UnitId)) + .ToListAsync(); - var childValuesMap = childUnits - .ToDictionary( - u => u.Id, - u => u.Values.ToDictionary(v => v.FieldId, v => v.Value) - ); + // --- Создание карт значений из одного списка --- + var parentValuesMap = allUnitValues + .Where(uv => allParentIds.Contains(uv.UnitId)) + .GroupBy(uv => uv.UnitId) + .ToDictionary(g => g.Key, g => g.ToList()); + + var childValuesMap = allUnitValues + .Where(uv => allChildIds.Contains(uv.UnitId)) + .GroupBy(uv => uv.UnitId) + .ToDictionary(g => g.Key, g => g.ToList()); logger.LogDebug("Применение {Count} RelationshipFilters к найденным связям.", relationshipFilters.Count); @@ -276,37 +281,15 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer bool linkMatchesAllFilters = true; foreach (var rf in relationshipFilters) { - bool filterMatch; - if (rf.IsParent) - { - // Родительские значения - if (parentValuesMap.TryGetValue(link.ParentUnitId, out var parentValues) && - parentValues.TryGetValue(rf.FieldId, out var parentValue) && - parentValue != null) - { - filterMatch = parentValue.Contains(rf.ValueMask ?? "", StringComparison.OrdinalIgnoreCase); - } - else - { - filterMatch = false; - } - } - else - { - // Дочерние значения - if (childValuesMap.TryGetValue(link.ChildUnitId, out var childValues) && - childValues.TryGetValue(rf.FieldId, out var childValue) && - childValue != null) - { - filterMatch = childValue.Contains(rf.ValueMask ?? "", StringComparison.OrdinalIgnoreCase); - } - else - { - filterMatch = false; - } - } + var valuesToCheck = rf.IsParent ? parentValuesMap.GetValueOrDefault(link.ParentUnitId, new List()) : childValuesMap.GetValueOrDefault(link.ChildUnitId, new List()); + + bool filterMatch = valuesToCheck.Any(uv => + uv.FieldId == rf.FieldId && + uv.Value != null && + uv.Value.Value != null && + uv.Value.Value.Contains(rf.ValueMask ?? "", StringComparison.OrdinalIgnoreCase) + ); - // Учитываем инверсию фильтра if (rf.IsInverse) filterMatch = !filterMatch; @@ -332,7 +315,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer var parentUnitId = link.ParentUnitId; var childUnitId = link.ChildUnitId; - if (unitIdsWithValidGroupingFieldSet.Contains(parentUnitId)) + if (finalUnitIds.Contains(parentUnitId)) { if (!groupedRelationships.ContainsKey(childUnitId)) { @@ -340,7 +323,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer } groupedRelationships[childUnitId].Add(parentUnitId); } - else if (unitIdsWithValidGroupingFieldSet.Contains(childUnitId)) + else if (finalUnitIds.Contains(childUnitId)) { if (!groupedRelationships.ContainsKey(parentUnitId)) { @@ -375,10 +358,9 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer .Distinct() .ToList(); - // Создаем словарь имен для конфликтующих ключей из отфильтрованных юнитов - var unitNamesMap = filteredUnits + var unitNamesMap = await unitService.Get() .Where(u => conflictKeys.Contains(u.Id)) - .ToDictionary(u => u.Id, u => u.Name); + .ToDictionaryAsync(u => u.Id, u => u.Name ?? string.Empty); foreach (var conflictedUnitEntry in unitToKeys.Where(kvp => kvp.Value.Count > 1)) { @@ -430,10 +412,10 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer logger.LogDebug("Обработка связанного юнита {RelationshipUnitId} с {Count} юнитами из списка.", relationshipUnitId, childUnitIds.Count); - // Получаем имена юнитов из отфильтрованных данных - var childUnitNameMap = filteredUnits + var childUnitNameMap = await unitService.Get() + .AsNoTracking() .Where(u => childUnitIds.Contains(u.Id)) - .ToDictionary(u => u.Id, u => u.Name); + .ToDictionaryAsync(u => u.Id, u => u.Name); var sortedChildUnitIds = childUnitIds .OrderBy(id => childUnitNameMap.GetValueOrDefault(id, id.ToString())) @@ -480,11 +462,10 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer // === 2. Сравниваем детерминированно с сортировкой по имени === var allUnitIdsForSort = currentUnitIds.Concat(proposedUnitIds).Distinct().ToList(); - - // Получаем имена юнитов из отфильтрованных данных - var unitNamesForSort = filteredUnits + var unitNamesForSort = await unitService.Get() + .AsNoTracking() .Where(u => allUnitIdsForSort.Contains(u.Id)) - .ToDictionary(u => u.Id, u => u.Name); + .ToDictionaryAsync(u => u.Id, u => u.Name ?? u.Id.ToString()); var sortedCurrentUnitIds = currentUnitIds .OrderBy(id => unitNamesForSort.GetValueOrDefault(id, id.ToString())) @@ -505,7 +486,6 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer if (!string.Equals(existingTemplateForSubGroup.Name, expectedName, StringComparison.OrdinalIgnoreCase)) { logger.LogDebug("Шаблон {TemplateId} требует обновления имени.", existingTemplateForSubGroup.Id); - //var nextRun = await GetNextRunAsync(targetJob, existingTemplateForSubGroup.NextRun); var nextRun = await nextRunService.GetNextRunForTemplateAsync(existingTemplateForSubGroup.Id, false); var updateRequest = new TemplateUpdaterMq { @@ -560,7 +540,6 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer }; var expectedName = await templateNameNormalizer.GetNormalizedTemplateNameAsync(tempTemplateForName); - //var nextRun = await GetNextRunAsync(targetJob); var nextRun = await nextRunService.GetNextRunForTemplateAsync(reusableTemplate.Id, true); var updateRequest = new TemplateUpdaterMq @@ -595,12 +574,10 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer { var relationshipUnitId = kvp.Key; var childUnitIds = kvp.Value; - - // Получаем имена юнитов из отфильтрованных данных - var childUnitNameMapForDeactivate = filteredUnits + var childUnitNameMapForDeactivate = await unitService.Get() + .AsNoTracking() .Where(u => childUnitIds.Contains(u.Id)) - .ToDictionary(u => u.Id, u => u.Name); - + .ToDictionaryAsync(u => u.Id, u => u.Name); var sortedChildUnitIdsForDeactivate = childUnitIds .OrderBy(id => childUnitNameMapForDeactivate.GetValueOrDefault(id, id.ToString())) .ToList(); @@ -711,7 +688,6 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer }; var expectedName = await templateNameNormalizer.GetNormalizedTemplateNameAsync(tempTemplateForName); - //var nextRun = await GetNextRunAsync(targetJob, template.NextRun); var nextRun = await nextRunService.GetNextRunForTemplateAsync(template.Id, false); var updateRequest = new TemplateUpdaterMq { @@ -745,18 +721,14 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer HistoryInitiator = initiator }; - var msg = JsonSerializer.Serialize(mqRequest); - var result = await mqService.SendAsync(mqSettings.TemplateGenerator, new[] { msg }); + //var msg = JsonSerializer.Serialize(mqRequest); + //var result = await mqService.SendAsync(mqSettings.TemplateGenerator, new[] { msg }); + var result = await mqService.SendAsync(mqSettings.TemplateGenerator, new List { mqRequest }); if (!result.IsSuccess) logger.LogError("Ошибка отправки команды создания группового шаблона для Job {JobId}, связанного юнита {RelationshipUnitId}, Index {Index}.", jobId, relationshipUnitId, index); } - //private async Task GetNextRunAsync(Job targetJob, DateTimeOffset? currentNextRun = null) - //{ - // var referenceDate = targetJob.Group?.ReferenceDate ?? DateTimeOffset.UtcNow; - // return await esppScheduleTransformService.GetNextDateAsync(targetJob.GroupId, referenceDate); - //} private async Task UpdateMatchingStatusAsync(Guid jobGroupId, string comment) { diff --git a/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs b/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs index f62f95ed..f7ade7bb 100644 --- a/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs +++ b/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs @@ -15,10 +15,8 @@ using PARR.DAL.NextRunServices; using PARR.DAL.Services.Interfaces; using PARR.DAL.Services.Interfaces.Job; using PARR.DAL.Services.Interfaces.Unit; -using PARR.DAL.TransformServices; using PARR.TemplateMatcher.Services.Interfaces; using PARR.TemplateMatcher.Settings; -using System.Text.Json; namespace PARR.TemplateMatcher.Services.Implementations; @@ -41,7 +39,6 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer private readonly ITemplateService templateService; private readonly IJobService jobService; private readonly ITemplateReuser templateReuser; - //private readonly IEsppScheduleTransformService esppScheduleTransformService; private readonly ITemplateDeactivator templateDeactivator; private readonly ITemplateNameNormalizer templateNameNormalizer; private readonly ITemplateUpdaterMqSender templateUpdaterMqSender; @@ -61,7 +58,6 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer IJobService jobService, ITemplateReuser templateReuser, IShortcodesService shortcodesService, - //IEsppScheduleTransformService esppScheduleTransformService, IUnitRegionalEkPtkGroupService regionalEkPtkGroupService, IUnitFieldService unitFieldService, ITemplateDeactivator templateDeactivator, @@ -79,7 +75,6 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer this.templateService = templateService; this.jobService = jobService; this.templateReuser = templateReuser; - //this.esppScheduleTransformService = esppScheduleTransformService; this.templateDeactivator = templateDeactivator; this.templateNameNormalizer = templateNameNormalizer; this.templateUpdaterMqSender = templateUpdaterMqSender; @@ -228,7 +223,6 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer }; var expectedName = await templateNameNormalizer.GetNormalizedTemplateNameAsync(tempTemplateForName); - //var nextRun = await GetNextRunAsync(job); var nextRun = await nextRunService.GetNextRunForTemplateAsync(reusableTemplate.Id, true); var updateRequest = new TemplateUpdaterMq @@ -264,7 +258,6 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer { logger.LogDebug("Шаблон {TemplateId} требует обновления имени: старое = '{OldName}', новое = '{NewName}'", template.Id, template.Name, expectedName); - //var nextRun = await GetNextRunAsync(job, template.NextRun); var nextRun = await nextRunService.GetNextRunForTemplateAsync(template.Id, false); var updateRequest = new TemplateUpdaterMq @@ -283,7 +276,7 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer UnitsInTemplate = new List() // для простого шаблона }; - await templateUpdaterMqSender.SendTemplateUpdateMessageAsync(updateRequest); + await templateUpdaterMqSender.SendTemplateUpdateMessageAsync(updateRequest) } } } @@ -403,7 +396,6 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer { logger.LogDebug("Шаблон {TemplateId} требует обновления имени: старое = '{OldName}', новое = '{NewName}'", template.Id, template.Name, expectedName); - //var nextRun = await GetNextRunAsync(job, template.NextRun); var nextRun = await nextRunService.GetNextRunForTemplateAsync(template.Id, false); var updateRequest = new TemplateUpdaterMq @@ -510,7 +502,6 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer continue; } - //var nextRun = await GetNextRunAsync(unusedJob); var nextRun = await nextRunService.GetNextRunForTemplateAsync(template.Id, false); var updateRequest = new TemplateUpdaterMq @@ -546,6 +537,7 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer } } + private async Task GenerateUnusedTemplateNameAsync(Template template, Job unusedJob) { var tempJob = new Job @@ -583,6 +575,7 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer return await templateNameNormalizer.GetNormalizedTemplateNameAsync(tempTemplateForName); } + private async Task CreateSimpleTemplateAsync(Guid jobId, Guid unitId, HistoryInitiator initiator) { logger.LogInformation("Создание нового простого шаблона для Job {JobId}, UnitId {UnitId}.", jobId, unitId); @@ -595,18 +588,14 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer HistoryInitiator = initiator }; - var msg = JsonSerializer.Serialize(mqRequest); - var result = await mqService.SendAsync(mqSettings.TemplateGenerator, new[] { msg }); + //var msg = JsonSerializer.Serialize(mqRequest); + //var result = await mqService.SendAsync(mqSettings.TemplateGenerator, new[] { msg }); + var result = await mqService.SendAsync(mqSettings.TemplateGenerator, new List { mqRequest }); if (!result.IsSuccess) logger.LogError("Ошибка отправки команды создания простого шаблона для Job {JobId}, UnitId {UnitId}.", jobId, unitId); } - //private async Task GetNextRunAsync(Job job, DateTimeOffset? currentNextRun = null) - //{ - // var referenceDate = job.Group?.ReferenceDate ?? DateTimeOffset.UtcNow; - // return await esppScheduleTransformService.GetNextDateAsync(job.GroupId, referenceDate); - //} private async Task UpdateMatchingStatusAsync(Guid jobId, string comment) { diff --git a/PARR.TemplateMatcher/Services/Implemetaions/TemplateUpdaterMqSender.cs b/PARR.TemplateMatcher/Services/Implemetaions/TemplateUpdaterMqSender.cs index d9cc5d5c..d60643bb 100644 --- a/PARR.TemplateMatcher/Services/Implemetaions/TemplateUpdaterMqSender.cs +++ b/PARR.TemplateMatcher/Services/Implemetaions/TemplateUpdaterMqSender.cs @@ -3,7 +3,6 @@ using PARR.BLL.Domain.Mq; using PARR.BLL.Services.Interfaces; using PARR.TemplateMatcher.Services.Interfaces; using PARR.TemplateMatcher.Settings; -using System.Text.Json; namespace PARR.TemplateMatcher.Services.Implementations; @@ -28,8 +27,9 @@ internal class TemplateUpdaterMqSender : ITemplateUpdaterMqSender logger.LogDebug("Отправка сообщения в очередь '{Queue}' для шаблона {TemplateId}", mqSettings.TemplateUpdater.QueueName, updateRequest.TemplateId); - var msg = JsonSerializer.Serialize(updateRequest); - var result = await mqService.SendAsync(mqSettings.TemplateUpdater, new[] { msg }); + //var msg = JsonSerializer.Serialize(updateRequest); + //var result = await mqService.SendAsync(mqSettings.TemplateUpdater, new[] { msg }); + var result = await mqService.SendAsync(mqSettings.TemplateUpdater, new List { updateRequest }); if (result.IsSuccess) {