feat(AIHITMainSyncer): обработка правил замены значений пришедших из АИХИТ для null

This commit is contained in:
Mikhail Trubnikov
2025-12-30 11:57:15 +10:00
parent 860d7d4840
commit aaf349cd22
6 changed files with 80 additions and 75 deletions

View File

@@ -87,15 +87,15 @@ namespace PARR.AIHITMainSyncer.Services
// Определяем, какие ПОЛЯ обновляются этим сообщением чтобы случайно не удалить не наши
var fieldsInMessage = listAihitData
.Select(kv => kv.Key)
.Distinct(StringComparer.OrdinalIgnoreCase)
.Select(kv => kv.Key)
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToHashSet();
var unitValuesToRemove = unit.UnitValues
.Where(uv =>
uv.Field != null &&
fieldsInMessage.Contains(uv.Field.AihitName) &&
!listAihitData.Any(kv =>
fieldsInMessage.Contains(uv.Field.AihitName) &&
!listAihitData.Any(kv =>
IsStringEqual(uv.Field.AihitName, kv.Key) &&
IsStringEqual(uv.Value?.Value, kv.Value)
)
@@ -340,13 +340,18 @@ namespace PARR.AIHITMainSyncer.Services
if (properties.ContainsKey(replacement.FieldName))
{
var currentValue = properties[replacement.FieldName];
// Это костыль, List<string?> не может хранить null, вместо null он хранит ""
var stringNull = "null";
// Проверяем, содержится ли текущее значение в списке OldValues (с учетом регистра)
if (replacement.OldValues.Contains(currentValue, StringComparer.OrdinalIgnoreCase))
if (replacement.OldValues.Contains(currentValue ?? stringNull, StringComparer.OrdinalIgnoreCase))
{
logger.LogDebug("Заменяем значение поля '{FieldName}' с '{OldValue}' на '{NewValue}'",
replacement.FieldName, currentValue, replacement.NewValue);
properties[replacement.FieldName] = replacement.NewValue;
}
}
}
}