fix(dal): ShortcodeService теперь возвращает значения мультиполей через запятую, NULL как "null". Добавлены отсутствующие навигационные данные
This commit is contained in:
@@ -218,23 +218,36 @@ namespace PARR.DAL.DomainServices.Implementations
|
||||
|
||||
private async Task<string> ReplaceFieldValues(Guid unitId, string resultName, List<Match> shortcodesInMask)
|
||||
{
|
||||
// 1. Извлекаем имена полей из шорткодов: %IP_АДРЕС% → "IP_АДРЕС"
|
||||
// 1. Извлекаем имена полей из шорткодов
|
||||
var requiredFieldNames = shortcodesInMask
|
||||
.Select(m => m.Value.Trim('%').ToUpper())
|
||||
.Select(m => m.Value.Trim('%').ToUpperInvariant())
|
||||
.ToList();
|
||||
|
||||
if (requiredFieldNames.Count == 0)
|
||||
return resultName;
|
||||
|
||||
// 2. Получаем только нужные значения
|
||||
var fieldValueMap = await unitInValueService.GetFieldValuesAsync(unitId, requiredFieldNames);
|
||||
// 2. Получаем значения (может быть дубль)
|
||||
var fieldValues = await unitInValueService.GetFieldValuesAsync(unitId, requiredFieldNames);
|
||||
|
||||
// 3. Подставляем значения
|
||||
// 3. Группируем по FieldName → список значений
|
||||
var fieldValuesMap = fieldValues
|
||||
.GroupBy(x => x.FieldName, StringComparer.OrdinalIgnoreCase)
|
||||
.ToDictionary(
|
||||
g => g.Key,
|
||||
g => g.Select(x => x.Value).ToList(), // список значений (может быть null)
|
||||
StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
// 4. Объединяем значения через запятую (null → "null") и подставляем
|
||||
foreach (var match in shortcodesInMask)
|
||||
{
|
||||
var fieldName = match.Value.Trim('%').ToUpper();
|
||||
if (fieldValueMap.TryGetValue(fieldName, out var fieldValue))
|
||||
resultName = resultName.Replace(match.Value, fieldValue);
|
||||
var fieldName = match.Value.Trim('%').ToUpperInvariant();
|
||||
|
||||
if (fieldValuesMap.TryGetValue(fieldName, out var values))
|
||||
{
|
||||
// Объединяем все значения через запятую, null заменяем на строку "null"
|
||||
var combinedValue = string.Join(", ", values.Select(v => v ?? "null"));
|
||||
resultName = resultName.Replace(match.Value, combinedValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogWarning("Поле '{FieldName}' не найдено для unitId={UnitId} при подстановке шорткода '{Shortcode}'",
|
||||
|
||||
Reference in New Issue
Block a user