feat(aihitSyncer): Изменена логика обработки множественных значений, пришедших из АИХ ИТ в одном поле, добавлена обработка тегов.
This commit is contained in:
@@ -55,7 +55,7 @@ namespace PARR.AIHITMainSyncer.Services
|
|||||||
logger.LogDebug("Начинаем синхронизацию Unit для объекта с именем: {UnitName}", objFromQuery.Name);
|
logger.LogDebug("Начинаем синхронизацию Unit для объекта с именем: {UnitName}", objFromQuery.Name);
|
||||||
|
|
||||||
//Получаем сразу словарь атрибутов, чтобы не ходить каждый раз в базу
|
//Получаем сразу словарь атрибутов, чтобы не ходить каждый раз в базу
|
||||||
var fieldsFromDB = await unitFieldService.Get().AsNoTracking()/*.Select(t => new FieldDto { Id = t.Id, Name = t.AihitName, IsMultipleValue = t.IsMultipleValue })*/.ToListAsync();
|
var fieldsFromDB = await unitFieldService.Get().AsNoTracking().ToListAsync();
|
||||||
|
|
||||||
if (!objFromQuery.Properties.Any())
|
if (!objFromQuery.Properties.Any())
|
||||||
{
|
{
|
||||||
@@ -84,7 +84,7 @@ namespace PARR.AIHITMainSyncer.Services
|
|||||||
var propertiesWithMultipleValues = objFromQuery.Properties.Where(t => !propertisWithSimpleValues.Any(a => t.Key.Trim() == a.Key)).ToList();
|
var propertiesWithMultipleValues = objFromQuery.Properties.Where(t => !propertisWithSimpleValues.Any(a => t.Key.Trim() == a.Key)).ToList();
|
||||||
|
|
||||||
propertiesWithMultipleValues.ForEach(p => listAihitData.AddRange(
|
propertiesWithMultipleValues.ForEach(p => listAihitData.AddRange(
|
||||||
SplitValues(p).Distinct().Select(s => new KeyValuePair<string, string?>(s.Key.Trim(), s.Value?.Trim()))
|
SplitValues(p, fieldsFromDB).Distinct().Select(s => new KeyValuePair<string, string?>(s.Key.Trim(), s.Value?.Trim()))
|
||||||
));
|
));
|
||||||
|
|
||||||
var unit = await GetUnit(objFromQuery.Name);
|
var unit = await GetUnit(objFromQuery.Name);
|
||||||
@@ -174,21 +174,52 @@ namespace PARR.AIHITMainSyncer.Services
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static List<KeyValuePair<string, string?>> SplitValues(KeyValuePair<string, string?> multiValueProperty)
|
private List<KeyValuePair<string, string?>> SplitValues(KeyValuePair<string, string?> multiValueProperty, List<UnitField> fieldsFromDB)
|
||||||
{
|
{
|
||||||
var splitedProperties = new List<KeyValuePair<string, string?>>();
|
var result = new List<KeyValuePair<string, string?>>();
|
||||||
|
|
||||||
if (multiValueProperty.Value == null)
|
// Обработка null или пустой строки
|
||||||
splitedProperties.Add(new KeyValuePair<string, string?>(multiValueProperty.Key, multiValueProperty.Value));
|
if (string.IsNullOrEmpty(multiValueProperty.Value))
|
||||||
else
|
|
||||||
{
|
{
|
||||||
var values = multiValueProperty.Value.Split(',').Select(s => s.Trim());
|
result.Add(new KeyValuePair<string, string?>(multiValueProperty.Key, multiValueProperty.Value));
|
||||||
|
return result;
|
||||||
foreach (var value in values)
|
|
||||||
splitedProperties.Add(new KeyValuePair<string, string?>(multiValueProperty.Key, value));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return splitedProperties;
|
// Поиск конфигурации поля для тега
|
||||||
|
// Рекомендация: если метод вызывается в цикле, передавайте найденное поле внешним слоем
|
||||||
|
var tagUnitField = fieldsFromDB.FirstOrDefault(f => f.Code == "tag");
|
||||||
|
bool isTagProperty = tagUnitField != null && multiValueProperty.Key == tagUnitField.AihitName;
|
||||||
|
|
||||||
|
string[] splitValues;
|
||||||
|
|
||||||
|
if (isTagProperty)
|
||||||
|
{
|
||||||
|
// Для тегов нормализуем разделители до пробела
|
||||||
|
var normalizedValue = multiValueProperty.Value
|
||||||
|
.Replace(';', ' ')
|
||||||
|
.Replace('.', ' ')
|
||||||
|
.Replace(',', ' ');
|
||||||
|
|
||||||
|
splitValues = normalizedValue.Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Для остальных полей стандартный разделитель - запятая
|
||||||
|
splitValues = multiValueProperty.Value.Split(',', StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var value in splitValues)
|
||||||
|
{
|
||||||
|
var trimmedValue = value.Trim();
|
||||||
|
|
||||||
|
// Добавляем только непустые значения после обрезки пробелов
|
||||||
|
if (!string.IsNullOrEmpty(trimmedValue))
|
||||||
|
{
|
||||||
|
result.Add(new KeyValuePair<string, string?>(multiValueProperty.Key, trimmedValue));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -67,6 +67,11 @@
|
|||||||
"FieldName": "IP_АДРЕС",
|
"FieldName": "IP_АДРЕС",
|
||||||
"OldValues": [ "null" ],
|
"OldValues": [ "null" ],
|
||||||
"NewValue": "пусто"
|
"NewValue": "пусто"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"FieldName": "ПАРР тег",
|
||||||
|
"OldValues": [ "null" ],
|
||||||
|
"NewValue": "пусто"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,11 +102,11 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name": "TemplatesExport",
|
"Name": "TemplatesExport",
|
||||||
"InaccessibilityTime": "01:20:00"
|
"InaccessibilityTime": "02:30:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name": "ScheduleExport",
|
"Name": "ScheduleExport",
|
||||||
"InaccessibilityTime": "01:20:00"
|
"InaccessibilityTime": "02:30:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"RabbitMq": {
|
"RabbitMq": {
|
||||||
|
|||||||
Reference in New Issue
Block a user