From 8dfb2587b2e5ec75990e965a405bef706f86e125 Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Thu, 25 Jun 2026 12:19:32 +1000 Subject: [PATCH] =?UTF-8?q?fix(aihitMainSyncer):=20=D0=94=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20commit=20=D0=BF=D0=BE=D1=81?= =?UTF-8?q?=D0=BB=D0=B5=20=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BD=D0=BE=D0=B2=D1=8B=D1=85?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9=20=D0=B8=20=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D1=8B=D1=85=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9:=20=D1=80=D0=B0=D0=BD=D1=8C?= =?UTF-8?q?=D1=88=D0=B5=20=D0=B2=D1=8B=D0=B7=D1=8B=D0=B2=D0=B0=D0=BB=20nul?= =?UTF-8?q?l=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D0=B8=20Id?= =?UTF-8?q?=20=D0=BD=D0=BE=D0=B2=D1=8B=D1=85=20=D0=B7=D0=BD=D0=B0=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PARR.AIHITMainLoader.csproj | 2 +- .../Services/SyncerService.cs | 26 +++++++--- .../PARR.AIHITRelationshipsSyncer.csproj | 2 +- .../appsettings.Development.json | 52 +++++++++---------- PARR.AIHITSyncerWorker/appsettings.json | 3 +- 5 files changed, 46 insertions(+), 39 deletions(-) diff --git a/PARR.AIHITMainLoader/PARR.AIHITMainLoader.csproj b/PARR.AIHITMainLoader/PARR.AIHITMainLoader.csproj index bab09d97..2c1edbff 100644 --- a/PARR.AIHITMainLoader/PARR.AIHITMainLoader.csproj +++ b/PARR.AIHITMainLoader/PARR.AIHITMainLoader.csproj @@ -7,7 +7,7 @@ - + diff --git a/PARR.AIHITMainSyncer/Services/SyncerService.cs b/PARR.AIHITMainSyncer/Services/SyncerService.cs index 8e826530..70dc91b5 100644 --- a/PARR.AIHITMainSyncer/Services/SyncerService.cs +++ b/PARR.AIHITMainSyncer/Services/SyncerService.cs @@ -288,6 +288,7 @@ private async Task SyncValuesAsync(List values) if (hasNull && !existingValuesInDb.Contains(null)) newValuesToInsert.Add(null); + // Если нет новых значений, выходим БЕЗ вызова CommitAsync if (newValuesToInsert.Count == 0) { logger.LogDebug("Нет новых значений для добавления в базу данных"); @@ -302,15 +303,19 @@ private async Task SyncValuesAsync(List values) }) .ToList(); - // Только добавляем в контекст, НЕ коммитим if (!await unitFieldValueRepository.AddRangeAsync(newFieldValues)) { logger.LogError("Не удалось добавить {Count} новых значений FieldValues в контекст", newValuesToInsert.Count); + return; } - else + // Коммит выполняется ТОЛЬКО если были добавлены новые сущности + if (!await unitFieldValueRepository.CommitAsync()) { - logger.LogDebug("Подготовлено {Count} новых значений FieldValues для сохранения", newValuesToInsert.Count); + logger.LogError("Не удалось сохранить {Count} новых значений FieldValues в базу данных", newValuesToInsert.Count); + return; } + + logger.LogDebug("Успешно сохранено {Count} новых значений FieldValues", newValuesToInsert.Count); } @@ -318,6 +323,7 @@ private async Task SyncValuesAsync(List values) { var newFields = fieldsFromAihit.Where(t => !fieldsFromDB.Any(f => IsStringEqual(f.AihitName, t))).ToList(); + // Если нет новых полей, выходим БЕЗ вызова CommitAsync if (!newFields.Any()) { logger.LogDebug("Нет новых полей для добавления в базу данных"); @@ -335,18 +341,22 @@ private async Task SyncValuesAsync(List values) EsppName = null, }; - // Только добавляем в контекст, НЕ коммитим if (!await unitFieldRepository.CreateAsync(field)) { logger.LogError("Не удалось добавить поле в контекст: {FieldName}", item); + continue; + } + + // Коммит выполняется ТОЛЬКО после успешного добавления конкретного поля + if (!await unitFieldRepository.CommitAsync()) + { + logger.LogError("Не удалось сохранить поле в базу данных: {FieldName}", item); } else { - logger.LogDebug("Подготовлено поле для сохранения: {FieldName}", item); + logger.LogDebug("Успешно сохранено поле: {FieldName}", item); } - } - } - + } } private bool IsStringEqual(string? value1, string? value2) { diff --git a/PARR.AIHITRelationshipsSyncer/PARR.AIHITRelationshipsSyncer.csproj b/PARR.AIHITRelationshipsSyncer/PARR.AIHITRelationshipsSyncer.csproj index 86d1269e..d753153b 100644 --- a/PARR.AIHITRelationshipsSyncer/PARR.AIHITRelationshipsSyncer.csproj +++ b/PARR.AIHITRelationshipsSyncer/PARR.AIHITRelationshipsSyncer.csproj @@ -7,7 +7,7 @@ - + diff --git a/PARR.AIHITSyncerWorker/appsettings.Development.json b/PARR.AIHITSyncerWorker/appsettings.Development.json index 6a9c166d..0a2fa9e5 100644 --- a/PARR.AIHITSyncerWorker/appsettings.Development.json +++ b/PARR.AIHITSyncerWorker/appsettings.Development.json @@ -1,31 +1,27 @@ { - "Logging": { - "LogLevel": { - "Default": "Debug", - "Microsoft.EntityFrameworkCore": "Debug", - "Microsoft.EntityFrameworkCore.Database.Command": "Warning", - "Microsoft.AspNetCore": "Warning" - } - }, - "Serilog": { - "MinimumLevel": { - "Default": "Debug", - "Override": { - //"Microsoft": "Information", - "Microsoft.Hosting.Lifetime": "Information" - } + "ConnectionStrings": { + "RedisConnection": "10.99.253.216:6379,password=ParrP@ssPtk202MMdevDvs" }, - "WriteTo": [ - { - "Name": "File", - "Args": { - "path": "log/log-.txt", - "rollingInterval": "Day" - } - } - ] - }, - "MqSettings": { - "HostName": "10.99.253.216" - } + "Serilog": { + "MinimumLevel": { + "Default": "Debug", + "Override": { + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Debug", + "PARR.DAL": "Information" + } + }, + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "log/log-.txt", + "rollingInterval": "Day" + } + } + ] + }, + "MqSettings": { + "HostName": "10.99.253.216" + } } \ No newline at end of file diff --git a/PARR.AIHITSyncerWorker/appsettings.json b/PARR.AIHITSyncerWorker/appsettings.json index 1ba9c4ca..9360a6da 100644 --- a/PARR.AIHITSyncerWorker/appsettings.json +++ b/PARR.AIHITSyncerWorker/appsettings.json @@ -1,6 +1,7 @@ { "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;", + "RedisConnection": "parr-redis:6379,password=ParrP@ssPtk202MMdevDvs" }, "Logging": { "LogLevel": {