feat(templateMatcher): Рефакторинг
This commit is contained in:
@@ -299,6 +299,8 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
|
||||
.ToDictionary(uv => uv.UnitId, uv => uv.Value.Value);
|
||||
|
||||
// 7. Основной цикл обработки: итерируемся по potentialUnitIds (UnitId шаблонов)
|
||||
var expectedTemplateKeys = new HashSet<(Guid JobId, Guid UnitId, int Index)>();
|
||||
|
||||
foreach (var kvpOuter in reverseMapping)
|
||||
{
|
||||
var potentialUnitId = kvpOuter.Key;
|
||||
@@ -309,7 +311,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
|
||||
// --- ВНУТРЕННЯЯ ГРУППИРОВКА ---
|
||||
// Сгруппируем *юниты из UnitsInTemplate* для *этого* potentialUnitId по значению поля
|
||||
var innerGroupedUnitsInTemplate = unitsInTemplateForThisPotentialUnitId
|
||||
.GroupBy(unitId => unitInTemplateToInnerGroupingValueMap.GetValueOrDefault(unitId, "Нет данных")) // Используем маппинг
|
||||
.GroupBy(unitId => unitInTemplateToInnerGroupingValueMap.GetValueOrDefault(unitId, "Нет данных"))
|
||||
.ToList();
|
||||
|
||||
logger.LogDebug("Для UnitId {PotentialUnitId}: сформировано {Count} внутренних групп UnitsInTemplate.", potentialUnitId, innerGroupedUnitsInTemplate.Count);
|
||||
@@ -317,7 +319,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
|
||||
// 8. Цикл по внутренним группам UnitsInTemplate
|
||||
foreach (var innerGroup in innerGroupedUnitsInTemplate)
|
||||
{
|
||||
var groupingValueName = innerGroup.Key; // Значение поля
|
||||
var groupingValueName = innerGroup.Key;
|
||||
var unitsInTemplateInInnerGroup = innerGroup.ToList(); // Список юнитов (UnitId), связанных с potentialUnitId и имеющих одно и то же значение поля
|
||||
|
||||
logger.LogDebug("Обработка внутренней группы '{GroupingValue}' для UnitId {PotentialUnitId} с {Count} юнитами.", groupingValueName, potentialUnitId, unitsInTemplateInInnerGroup.Count);
|
||||
@@ -341,6 +343,9 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
|
||||
|
||||
Job? targetJob = SelectTargetJob(jobsInGroup, subGroupSize, maxJob);
|
||||
|
||||
// --- Добавляем ключ в список ожидаемых прямо здесь ---
|
||||
expectedTemplateKeys.Add((targetJob.Id, potentialUnitId, i)); // potentialUnitId - это UnitId шаблона
|
||||
|
||||
var existingTemplatesForRelationship = await templateService.Get()
|
||||
.AsNoTracking()
|
||||
.Include(t => t.Unit)
|
||||
@@ -469,42 +474,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
|
||||
}
|
||||
|
||||
// === Деактивация ===
|
||||
// Собираем ожидаемые ключи шаблонов на основе внутренне сгруппированных результатов
|
||||
var expectedTemplateKeys = new HashSet<(Guid JobId, Guid UnitId, int Index)>();
|
||||
foreach (var kvpOuter in reverseMapping)
|
||||
{
|
||||
var potentialUnitId = kvpOuter.Key;
|
||||
var unitsInTemplateForThisPotentialUnitId = kvpOuter.Value;
|
||||
|
||||
// Сгруппируем *юниты из UnitsInTemplate* для *этого* potentialUnitId по значению поля
|
||||
var innerGroupedUnitsInTemplate = unitsInTemplateForThisPotentialUnitId
|
||||
.GroupBy(unitId => unitInTemplateToInnerGroupingValueMap.GetValueOrDefault(unitId, "Нет данных"))
|
||||
.ToList();
|
||||
|
||||
foreach (var innerGroup in innerGroupedUnitsInTemplate)
|
||||
{
|
||||
var groupingValueName = innerGroup.Key;
|
||||
var unitsInTemplateInInnerGroup = innerGroup.ToList();
|
||||
|
||||
// Разбиваем юниты из *этой* внутренней группы на подгруппы по maxJob.MaxValueRelationships
|
||||
int maxValueForSplitting = maxJob.MaxValueRelationships!.Value;
|
||||
var unitsInTemplateSubGroups = unitsInTemplateInInnerGroup
|
||||
.Select((id, index) => new { id, groupIndex = index / maxValueForSplitting })
|
||||
.GroupBy(x => x.groupIndex)
|
||||
.Select(g => g.Select(x => x.id).ToList())
|
||||
.ToList();
|
||||
|
||||
// Для каждой подгруппы UnitsInTemplate
|
||||
for (int i = 1; i <= unitsInTemplateSubGroups.Count; i++) // Индекс начинается с 1
|
||||
{
|
||||
var unitsInTemplateSubGroup = unitsInTemplateSubGroups[i - 1]; // корректируем индекс для доступа к коллекции
|
||||
var subGroupSize = unitsInTemplateSubGroup.Count;
|
||||
Job? targetJobForExpectedKey = SelectTargetJob(jobsInGroup, subGroupSize, maxJob);
|
||||
|
||||
expectedTemplateKeys.Add((targetJobForExpectedKey.Id, potentialUnitId, i)); // potentialUnitId - это UnitId шаблона
|
||||
}
|
||||
}
|
||||
}
|
||||
// Теперь expectedTemplateKeys уже собран
|
||||
|
||||
// Получаем ВСЕ шаблоны для JobGroup (не только для текущих potentialUnitIds)
|
||||
var allJobIdsInGroup = jobsInGroup.Select(j => j.Id).ToHashSet();
|
||||
|
||||
Reference in New Issue
Block a user