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

@@ -18,7 +18,6 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\PARR.AIHITLoader\PARR.AIHITLoader.csproj" />
<ProjectReference Include="..\PARR.AIHITMainLoader\PARR.AIHITMainLoader.csproj" /> <ProjectReference Include="..\PARR.AIHITMainLoader\PARR.AIHITMainLoader.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

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

View File

@@ -1,4 +1,12 @@
{ {
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft.EntityFrameworkCore": "Debug",
"Microsoft.EntityFrameworkCore.Database.Command": "Warning",
"Microsoft.AspNetCore": "Warning"
}
},
"Serilog": { "Serilog": {
"MinimumLevel": { "MinimumLevel": {
"Default": "Debug", "Default": "Debug",

View File

@@ -1,58 +1,63 @@
{ {
"ConnectionStrings": { "ConnectionStrings": {
"DefaultConnection": "Server=10.99.253.184;Database=parr;User Id=app_parr; Password=PosdfkhT&)%sdfligL&%5546;" "DefaultConnection": "Server=10.99.253.184;Database=parr;User Id=app_parr; Password=PosdfkhT&)%sdfligL&%5546;"
}, },
"Logging": { "Logging": {
"LogLevel": { "LogLevel": {
"Default": "Information", "Default": "Information",
"Microsoft.EntityFrameworkCore": "Error", "Microsoft.EntityFrameworkCore": "Error",
"Microsoft.EntityFrameworkCore.Database.Command": "Warning", "Microsoft.EntityFrameworkCore.Database.Command": "Warning",
"Microsoft.AspNetCore": "Warning" "Microsoft.AspNetCore": "Warning"
}
},
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"Microsoft.EntityFrameworkCore": "Error",
"Microsoft.EntityFrameworkCore.Database.Command": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
},
"WorkerSettings": {
"RepeatEvery": "00:10:00"
},
"MqSettings": {
"HostName": "parr-rabbitmq",
"QueueName": "parr-aihit-data",
"User": "aihit_syncer",
"Password": "afsdgDGjhfiU76496as42!@",
"PrefetchCount": 100
},
"FieldValueReplacementsSettings": {
"Replacements": [
{
"FieldName": "АКТИВЕН",
"OldValues": [ "t" ],
"NewValue": "1"
},
{
"FieldName": "АКТИВЕН",
"OldValues": [ "f" ],
"NewValue": "0"
},
{
"FieldName": "НЕУНИКАЛЬНЫЙ_ЭК",
"OldValues": [ "t" ],
"NewValue": "1"
},
{
"FieldName": "НЕУНИКАЛЬНЫЙ_ЭК",
"OldValues": [ "f" ],
"NewValue": "0"
}
]
} }
},
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"Microsoft.EntityFrameworkCore": "Error",
"Microsoft.EntityFrameworkCore.Database.Command": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
},
"WorkerSettings": {
"RepeatEvery": "00:10:00"
},
"MqSettings": {
"HostName": "parr-rabbitmq",
"QueueName": "parr-aihit-data",
"User": "aihit_syncer",
"Password": "afsdgDGjhfiU76496as42!@",
"PrefetchCount": 100
},
"FieldValueReplacementsSettings": {
"Replacements": [
{
"FieldName": "АКТИВЕН",
"OldValues": [ "t" ],
"NewValue": "1"
},
{
"FieldName": "АКТИВЕН",
"OldValues": [ "f" ],
"NewValue": "0"
},
{
"FieldName": "НЕУНИКАЛЬНЫЙ_ЭК",
"OldValues": [ "t" ],
"NewValue": "1"
},
{
"FieldName": "НЕУНИКАЛЬНЫЙ_ЭК",
"OldValues": [ "f" ],
"NewValue": "0"
},
{
"FieldName": "НЕУНИКАЛЬНЫЙ_ЭК",
"OldValues": [ "null" ],
"NewValue": "пусто"
}
]
}
} }

View File

@@ -56,12 +56,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.EsppScheduleSync", "PA
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.EsppScheduleSyncWorker", "PARR.EsppScheduleSyncWorker\PARR.EsppScheduleSyncWorker.csproj", "{C597A1D7-1BC5-493B-BC29-03EC830FB090}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.EsppScheduleSyncWorker", "PARR.EsppScheduleSyncWorker\PARR.EsppScheduleSyncWorker.csproj", "{C597A1D7-1BC5-493B-BC29-03EC830FB090}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.AIHITLoader", "PARR.AIHITLoader\PARR.AIHITLoader.csproj", "{E7F3C8FB-445B-4711-8F89-0B7DA7DB4537}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.AIHITLoaderWorker", "PARR.AIHITLoaderWorker\PARR.AIHITLoaderWorker.csproj", "{E9434123-E697-42E2-B7C0-FE08766B98D1}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.AIHITLoaderWorker", "PARR.AIHITLoaderWorker\PARR.AIHITLoaderWorker.csproj", "{E9434123-E697-42E2-B7C0-FE08766B98D1}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.AIHITSyncer", "PARR.AIHITSyncer\PARR.AIHITSyncer.csproj", "{4177B13B-585C-44C7-B3C1-6B6E46D6BABC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.AIHITSyncerWorker", "PARR.AIHITSyncerWorker\PARR.AIHITSyncerWorker.csproj", "{4FA79176-F833-4879-8437-37EA053BAA94}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.AIHITSyncerWorker", "PARR.AIHITSyncerWorker\PARR.AIHITSyncerWorker.csproj", "{4FA79176-F833-4879-8437-37EA053BAA94}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.NextRun", "PARR.NextRun\PARR.NextRun.csproj", "{92400205-B781-4C6C-BDA3-6D3652C2B62F}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.NextRun", "PARR.NextRun\PARR.NextRun.csproj", "{92400205-B781-4C6C-BDA3-6D3652C2B62F}"
@@ -200,18 +196,10 @@ Global
{C597A1D7-1BC5-493B-BC29-03EC830FB090}.Debug|Any CPU.Build.0 = Debug|Any CPU {C597A1D7-1BC5-493B-BC29-03EC830FB090}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C597A1D7-1BC5-493B-BC29-03EC830FB090}.Release|Any CPU.ActiveCfg = Release|Any CPU {C597A1D7-1BC5-493B-BC29-03EC830FB090}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C597A1D7-1BC5-493B-BC29-03EC830FB090}.Release|Any CPU.Build.0 = Release|Any CPU {C597A1D7-1BC5-493B-BC29-03EC830FB090}.Release|Any CPU.Build.0 = Release|Any CPU
{E7F3C8FB-445B-4711-8F89-0B7DA7DB4537}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E7F3C8FB-445B-4711-8F89-0B7DA7DB4537}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E7F3C8FB-445B-4711-8F89-0B7DA7DB4537}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E7F3C8FB-445B-4711-8F89-0B7DA7DB4537}.Release|Any CPU.Build.0 = Release|Any CPU
{E9434123-E697-42E2-B7C0-FE08766B98D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E9434123-E697-42E2-B7C0-FE08766B98D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E9434123-E697-42E2-B7C0-FE08766B98D1}.Debug|Any CPU.Build.0 = Debug|Any CPU {E9434123-E697-42E2-B7C0-FE08766B98D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E9434123-E697-42E2-B7C0-FE08766B98D1}.Release|Any CPU.ActiveCfg = Release|Any CPU {E9434123-E697-42E2-B7C0-FE08766B98D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E9434123-E697-42E2-B7C0-FE08766B98D1}.Release|Any CPU.Build.0 = Release|Any CPU {E9434123-E697-42E2-B7C0-FE08766B98D1}.Release|Any CPU.Build.0 = Release|Any CPU
{4177B13B-585C-44C7-B3C1-6B6E46D6BABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4177B13B-585C-44C7-B3C1-6B6E46D6BABC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4177B13B-585C-44C7-B3C1-6B6E46D6BABC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4177B13B-585C-44C7-B3C1-6B6E46D6BABC}.Release|Any CPU.Build.0 = Release|Any CPU
{4FA79176-F833-4879-8437-37EA053BAA94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4FA79176-F833-4879-8437-37EA053BAA94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4FA79176-F833-4879-8437-37EA053BAA94}.Debug|Any CPU.Build.0 = Debug|Any CPU {4FA79176-F833-4879-8437-37EA053BAA94}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4FA79176-F833-4879-8437-37EA053BAA94}.Release|Any CPU.ActiveCfg = Release|Any CPU {4FA79176-F833-4879-8437-37EA053BAA94}.Release|Any CPU.ActiveCfg = Release|Any CPU

View File

@@ -25,7 +25,7 @@ namespace PARR.BLL.Services.Implementations
public async Task<bool> InitConsumerAsync(IMqSettings mqSettings, MqMessageHandlerDelegate messageHandler) public async Task<bool> InitConsumerAsync(IMqSettings mqSettings, MqMessageHandlerDelegate messageHandler)
{ {
logger.LogInformation($"Устанавливаю соединение с RabbitMQ: {mqSettings.HostName}, {mqSettings.QueueName}"); logger.LogInformation("Устанавливаю соединение с RabbitMQ. HostName: {HostName}, QueueName: {QueueName}", mqSettings.HostName, mqSettings.QueueName);
var factory = new ConnectionFactory var factory = new ConnectionFactory
{ {
@@ -77,7 +77,7 @@ namespace PARR.BLL.Services.Implementations
{ {
//var content = Encoding.UTF8.GetString(ea.Body.ToArray()); //var content = Encoding.UTF8.GetString(ea.Body.ToArray());
var content = Encoding.UTF8.GetString(ea.Body.Span); var content = Encoding.UTF8.GetString(ea.Body.Span);
logger.LogDebug($"Получено сообщение: {content}"); logger.LogDebug("Получено сообщение: {content}", content);
try try
{ {