feat(templateMatcher): Рефакторинг, основной метод синхронизации GroupedTemplateSynchronizer разбит на отдельные классы; Неиспользуемые шаблоны теперь привязываются к ЭК КОСМПЛЕКСЫ-[ЗО].

This commit is contained in:
Mikhail Kuznetsov
2026-05-14 16:47:27 +10:00
parent f7a74d315a
commit 90e6352117
30 changed files with 1150 additions and 864 deletions

View File

@@ -0,0 +1,18 @@
using PARR.Domain.Entities.Job;
using PARR.TemplateMatcher.Models;
namespace PARR.TemplateMatcher.Services.Interfaces;
public interface IGroupedTemplateBuilder
{
/// <summary>
/// Строит структуру групп для создания групповых шаблонов.
/// Трансформирует связи в пары (UnitId, UnitFieldValueId),
/// выполняет внутреннюю группировку и разбиение на подгруппы.
/// </summary>
Task<List<GroupedTemplateGroup>> BuildAsync(
Dictionary<Guid, List<Guid>> initialReverseMapping,
JobGroup jobGroup,
Job maxJob,
CancellationToken ct = default);
}

View File

@@ -0,0 +1,22 @@
using PARR.Domain.Entities.Base.History;
using PARR.Domain.Entities.Job;
using PARR.TemplateMatcher.Models;
namespace PARR.TemplateMatcher.Services.Interfaces;
public interface IGroupedTemplateProcessor
{
/// <summary>
/// Обрабатывает построенные группы шаблонов:
/// 1. Ищет существующие шаблоны.
/// 2. Сравнивает состав юнитов.
/// 3. Обновляет, переиспользует или создает новые шаблоны.
/// 4. Возвращает набор ключей ожидаемых шаблонов для последующей деактивации лишних.
/// </summary>
Task<HashSet<(Guid JobId, Guid UnitId, int Index)>> ProcessAsync(
List<GroupedTemplateGroup> groups,
List<Job> jobsInGroup,
Job maxJob,
HistoryInitiator initiator,
CancellationToken ct = default);
}

View File

@@ -0,0 +1,18 @@
using PARR.Core.Services.UnitFilterService.Models;
using PARR.Domain.Entities.Job;
namespace PARR.TemplateMatcher.Services.Interfaces
{
public interface IGroupedTemplateUnitFilter
{
/// <summary>
/// Применяет специфичные правила фильтрации для групповых шаблонов.
/// 1. Отбирает юниты, имеющие заполненное значение в GroupingUnitFieldId.
/// 2. Оставляет только юниты, значение которых в поле РАБОЧАЯ_ГР_ОТВ_ЗАК разрешено.
/// </summary>
Task<List<UnitFilterResultDto>> FilterAsync(
IEnumerable<UnitFilterResultDto> initialUnits,
JobGroup jobGroup,
CancellationToken ct = default);
}
}

View File

@@ -1,9 +1,9 @@
using PARR.Domain.Common.Rabbit.Messages;
using PARR.Domain.Common.Rabbit.Messages.TemplateMatching;
namespace PARR.TemplateMatcher.Services.Interfaces
{
public interface ITemplateUpdaterMqSender
{
Task SendTemplateUpdateMessageAsync(TemplateUpdaterMq updateRequest);
Task SendTemplateUpdateMessageAsync(TemplateUpdaterMessage updateRequest);
}
}