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