feat(dal,templateMatcher): Shortcodes добавлены %МАКС:ИМЯ АТРИБУТА%, %ГР_ПОЛЕ-ПН%, %БУКВЫ:ИМЯ АТРИБУТА%, исправлена фильтрация в UnitFilter, TemplateMatcher отдельные классы для типов работ, Shortcodes теперь работает по своим моделям Dto

This commit is contained in:
Mikhail Kuznetsov
2025-12-23 18:27:31 +10:00
parent 7ca536ce52
commit 00cace4255
32 changed files with 2471 additions and 1399 deletions

View File

@@ -76,7 +76,7 @@ namespace PARR.DAL.Services.Implementations.Unit
return await dataContext.UnitInValues
.AsNoTracking()
.Include(uv => uv.Value) // UnitFieldValue
.Include(uv => uv.Value)
.Where(uv => unitIdSet.Contains(uv.UnitId) && fieldIdSet.Contains(uv.FieldId))
.ToListAsync();
}
@@ -85,5 +85,48 @@ namespace PARR.DAL.Services.Implementations.Unit
{
return dataContext.UnitInValues;
}
public async Task<string?> GetMostFrequentValueForFieldAsync(List<Guid> unitIds, string fieldName)
{
if (unitIds == null || !unitIds.Any() || string.IsNullOrWhiteSpace(fieldName))
{
logger.LogDebug("GetMostFrequentValueForFieldAsync: пустой список юнитов или имя поля. unitIds count: {Count}, fieldName: {FieldName}", unitIds?.Count ?? 0, fieldName);
return null;
}
logger.LogDebug("Поиск наиболее частого значения для поля '{FieldName}' среди {Count} юнитов.", fieldName, unitIds.Count);
var result = await dataContext.UnitInValues
.AsNoTracking()
.Where(uv =>
unitIds.Contains(uv.UnitId)
)
.Join(
dataContext.UnitFields,
uv => uv.FieldId,
f => f.Id,
(uv, f) => new { uv, f }
)
.Where(x =>
EF.Functions.ILike(x.f.AihitName, fieldName)
)
.Join(
dataContext.UnitFieldValues,
x => x.uv.ValueId,
v => v.Id,
(x, v) => new { x.uv.UnitId, v.Value }
)
.Where(x => !string.IsNullOrWhiteSpace(x.Value))
.GroupBy(x => x.Value)
.Select(g => new { Value = g.Key, Count = g.Count() })
.OrderByDescending(x => x.Count)
.ThenBy(x => x.Value)
.FirstOrDefaultAsync();
var mostFrequentValue = result?.Value;
logger.LogDebug("Наиболее частое значение для поля '{FieldName}': {Value}", fieldName, mostFrequentValue);
return mostFrequentValue;
}
}
}