feat(dal,templateMatcher): добавлена сортировка связанных юнитов группированного типа групп работ
This commit is contained in:
@@ -136,7 +136,7 @@ namespace PARR.DAL.DomainServices.Shortcodes
|
||||
resultName = await ReplaceLettersShortcodesAsync(template.UnitId, resultName, lettersShortcodes);
|
||||
}
|
||||
|
||||
// 2.7. %ГР_ПОЛЕ-ПН% — нумерованный список UnitsInTemplate с GroupingUnitFieldId
|
||||
// 2.7. %ГР_ПОЛЕ-ПН% — нумерованный список UnitsInTemplate с GroupingUnitFieldId, отсортированный по имени юнита
|
||||
if (shortcodesInMask.Any(m => string.Equals(m.Value, "%ГР_ПОЛЕ-ПН%", StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
var unitsInTemplate = template.UnitsInTemplate;
|
||||
@@ -154,6 +154,9 @@ namespace PARR.DAL.DomainServices.Shortcodes
|
||||
.Where(u => unitIds.Contains(u.Id))
|
||||
.ToListAsync();
|
||||
|
||||
// Словарь: UnitId -> Unit (для быстрого поиска)
|
||||
var unitDict = units.ToDictionary(u => u.Id, u => u);
|
||||
|
||||
var groupingFieldId = job.Group?.GroupingUnitFieldId;
|
||||
Dictionary<Guid, string> valuesByUnit = new();
|
||||
|
||||
@@ -161,7 +164,6 @@ namespace PARR.DAL.DomainServices.Shortcodes
|
||||
{
|
||||
var fieldValues = await unitInValueService.Get()
|
||||
.AsNoTracking()
|
||||
//.AsSplitQuery()
|
||||
.Include(uv => uv.Value)
|
||||
.Where(uv =>
|
||||
uv.FieldId == groupingFieldId.Value &&
|
||||
@@ -179,10 +181,15 @@ namespace PARR.DAL.DomainServices.Shortcodes
|
||||
);
|
||||
}
|
||||
|
||||
var lines = unitsInTemplate
|
||||
// Сортируем UnitsInTemplate по имени юнита
|
||||
var sortedUnitsInTemplate = unitsInTemplate
|
||||
.OrderBy(uit => unitDict.TryGetValue(uit.UnitId, out var unit) ? unit.Name : $"(UnitId={uit.UnitId})")
|
||||
.ToList();
|
||||
|
||||
var lines = sortedUnitsInTemplate
|
||||
.Select((uit, indexInList) =>
|
||||
{
|
||||
var unitInList = units.FirstOrDefault(u => u.Id == uit.UnitId);
|
||||
var unitInList = unitDict.TryGetValue(uit.UnitId, out var unit) ? unit : null;
|
||||
var unitName = unitInList?.Name ?? $"(UnitId={uit.UnitId})";
|
||||
var valuesStr = valuesByUnit.TryGetValue(uit.UnitId, out var vals) ? vals : "";
|
||||
return $"{indexInList + 1}. {unitName} ({valuesStr})";
|
||||
|
||||
Reference in New Issue
Block a user