feat(aihitMainSyncer): исключено удаление полей не приходивиших в сообщении
This commit is contained in:
@@ -57,7 +57,6 @@ namespace PARR.AIHITMainSyncer.Services
|
||||
var listAihitData = new List<KeyValuePair<string, string?>>();
|
||||
|
||||
var propertisWithSimpleValues = objFromQuery.Properties
|
||||
//.Where(t => fieldsFromDB.Any(a => IsStringEqual(t.Key.Trim(), a.Name) && a.IsMultipleValue != true))
|
||||
.Where(t => fieldsFromDB.Any(a => IsStringEqual(t.Key.Trim(), a.AihitName) && a.IsMultipleValue != true))
|
||||
.Select(s => new KeyValuePair<string, string?>(s.Key.Trim(), s.Value?.Trim())).ToList();
|
||||
|
||||
@@ -75,10 +74,21 @@ namespace PARR.AIHITMainSyncer.Services
|
||||
.Select(kv => new { kv.Key, kv.Value })
|
||||
.ToList();
|
||||
|
||||
// Определяем, какие ПОЛЯ обновляются этим сообщением
|
||||
var fieldsInMessage = listAihitData
|
||||
.Select(kv => kv.Key)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.ToHashSet();
|
||||
|
||||
var unitValuesToRemove = unit.UnitValues
|
||||
.Where(uv => !incomingPairs.Any(ip =>
|
||||
IsStringEqual(uv.Field!.AihitName, ip.Key) &&
|
||||
IsStringEqual(uv.Value!.Value, ip.Value)))
|
||||
.Where(uv =>
|
||||
uv.Field != null &&
|
||||
fieldsInMessage.Contains(uv.Field.AihitName) &&
|
||||
!listAihitData.Any(kv =>
|
||||
IsStringEqual(uv.Field.AihitName, kv.Key) &&
|
||||
IsStringEqual(uv.Value?.Value, kv.Value)
|
||||
)
|
||||
)
|
||||
.ToList();
|
||||
|
||||
unitValuesToRemove.ForEach(uv => unit.UnitValues.Remove(uv));
|
||||
|
||||
Reference in New Issue
Block a user