feat(aihitMainSyncer): Добавлен Replacement входных данных
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using PARR.AIHITMainSyncer.Settings;
|
||||
using PARR.BLL.Domain.Mq;
|
||||
using PARR.BLL.Services.Interfaces;
|
||||
using PARR.DAL.Models.Unit;
|
||||
@@ -15,13 +16,15 @@ namespace PARR.AIHITMainSyncer.Services
|
||||
private readonly IUnitService unitService;
|
||||
private readonly IUnitFieldService unitFieldService;
|
||||
private readonly IUnitFieldValueService unitFieldValueService;
|
||||
private readonly FieldValueReplacementsSettings fieldValueReplacementsSettings;
|
||||
|
||||
public SyncerService(
|
||||
ILogger<SyncerService> logger,
|
||||
ITransformService transformService,
|
||||
IUnitService unitService,
|
||||
IUnitFieldService unitFieldService,
|
||||
IUnitFieldValueService unitFieldValueService
|
||||
IUnitFieldValueService unitFieldValueService,
|
||||
FieldValueReplacementsSettings fieldValueReplacementsSettings
|
||||
)
|
||||
{
|
||||
this.logger = logger;
|
||||
@@ -29,6 +32,7 @@ namespace PARR.AIHITMainSyncer.Services
|
||||
this.unitService = unitService;
|
||||
this.unitFieldService = unitFieldService;
|
||||
this.unitFieldValueService = unitFieldValueService;
|
||||
this.fieldValueReplacementsSettings = fieldValueReplacementsSettings;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,17 +55,24 @@ namespace PARR.AIHITMainSyncer.Services
|
||||
if (!objFromQuery.Properties.Any())
|
||||
return;
|
||||
|
||||
foreach (var kvp in objFromQuery.Properties.ToList())
|
||||
objFromQuery.Properties[kvp.Key.Trim()] = kvp.Value?.Trim();
|
||||
// 1. Создаем копию и нормализуем свойства (удаляем лишние пробелы)
|
||||
var normalizedProperties = new Dictionary<string, string?>();
|
||||
foreach (var kvp in objFromQuery.Properties)
|
||||
normalizedProperties[kvp.Key.Trim()] = kvp.Value?.Trim();
|
||||
|
||||
// 2. Применяем замены значений к нормализованным свойствам
|
||||
ApplyFieldValueReplacements(normalizedProperties);
|
||||
|
||||
var listAihitData = new List<KeyValuePair<string, string?>>();
|
||||
|
||||
var propertisWithSimpleValues = objFromQuery.Properties
|
||||
// 3. Обрабатываем простые значения из нормализованных свойств
|
||||
var propertisWithSimpleValues = normalizedProperties
|
||||
.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();
|
||||
|
||||
listAihitData.AddRange(propertisWithSimpleValues);
|
||||
|
||||
// 4. Обрабатываем множественные значения из нормализованных свойств
|
||||
var propertiesWithMultipleValues = objFromQuery.Properties.Where(t => !propertisWithSimpleValues.Any(a => t.Key.Trim() == a.Key)).ToList();
|
||||
|
||||
propertiesWithMultipleValues.ForEach(p => listAihitData.AddRange(
|
||||
@@ -74,7 +85,7 @@ namespace PARR.AIHITMainSyncer.Services
|
||||
.Select(kv => new { kv.Key, kv.Value })
|
||||
.ToList();
|
||||
|
||||
// Определяем, какие ПОЛЯ обновляются этим сообщением
|
||||
// Определяем, какие ПОЛЯ обновляются этим сообщением чтобы случайно не удалить не наши
|
||||
var fieldsInMessage = listAihitData
|
||||
.Select(kv => kv.Key)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
@@ -321,5 +332,23 @@ namespace PARR.AIHITMainSyncer.Services
|
||||
.Include(t => t.UnitValues)
|
||||
.ThenInclude(uf => uf.Value);
|
||||
}
|
||||
|
||||
private void ApplyFieldValueReplacements(Dictionary<string, string?> properties)
|
||||
{
|
||||
foreach (var replacement in fieldValueReplacementsSettings.Replacements)
|
||||
{
|
||||
if (properties.ContainsKey(replacement.FieldName))
|
||||
{
|
||||
var currentValue = properties[replacement.FieldName];
|
||||
// Проверяем, содержится ли текущее значение в списке OldValues (с учетом регистра)
|
||||
if (replacement.OldValues.Contains(currentValue, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
logger.LogDebug("Заменяем значение поля '{FieldName}' с '{OldValue}' на '{NewValue}'",
|
||||
replacement.FieldName, currentValue, replacement.NewValue);
|
||||
properties[replacement.FieldName] = replacement.NewValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user