diff --git a/PARR.AIHITLoaderWorker/appsettings.Development.json b/PARR.AIHITLoaderWorker/appsettings.Development.json index b2dcdb67..e66ab5d1 100644 --- a/PARR.AIHITLoaderWorker/appsettings.Development.json +++ b/PARR.AIHITLoaderWorker/appsettings.Development.json @@ -1,8 +1,20 @@ { - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.Hosting.Lifetime": "Information" + "Serilog": { + "MinimumLevel": { + "Default": "Debug", + "Override": { + "Microsoft": "Debug", + "Microsoft.Hosting.Lifetime": "Debug" + } + }, + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "log/log-.txt", + "rollingInterval": "Day" + } + } + ] } - } } diff --git a/PARR.AIHITLoaderWorker/appsettings.json b/PARR.AIHITLoaderWorker/appsettings.json index b978397a..bb95fe59 100644 --- a/PARR.AIHITLoaderWorker/appsettings.json +++ b/PARR.AIHITLoaderWorker/appsettings.json @@ -1,43 +1,47 @@ { - "ConnectionStrings": { - "AihitConnection": "Data Source=10.248.19.97; Initial Catalog=mao2;User ID=awhit-ipp-parr;pwd=ET3h$9y1LH#D;TrustServerCertificate=true;" - }, - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.Hosting.Lifetime": "Information" + "ConnectionStrings": { + "AihitConnection": "Data Source=10.248.19.97; Initial Catalog=mao2;User ID=awhit-ipp-parr;pwd=ET3h$9y1LH#D;TrustServerCertificate=true;" + }, + "Serilog": { + "MinimumLevel": { + "Default": "Information", + "Override": { + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } + }, + "WorkerSettings": { + "RepeatEvery": "12:00:00" + }, + "MqSettings": { + "HostName": "10.99.253.216", + "QueueName": "parr-aihit-data", + "User": "aihit_loader", + "Password": "123fsdf&78sd9534dsfD" + }, + "LoaderSettings": { + "ResponseAreas": [ + "96-ДВС", + "10-КЛГ", + "58-ЮВСТ", + "01-ОКТ", + "61-ПРИВ", + "17-МСК", + "28-СЕВ", + "92-ВСИБ", + "00-ГВЦ", + "88-КРАСН", + "24-ГОР", + "80-ЮУР", + "51-СКВ", + "76-СВРД", + "63-КБШ", + "83-ЗСИБ", + "94-ЗАБ", + "ОБЩЕЕ" + ], + "PackageSize": 1000 } - }, - "WorkerSettings": { - "RepeatEvery": "12:00:00" - }, - "MqSettings": { - "HostName": "10.99.253.216", - "QueueName": "parr-aihit-data", - "User": "aihit_loader", - "Password": "123fsdf&78sd9534dsfD" - }, - "LoaderSettings": { - "ResponseAreas": [ - "96-ДВС", - "10-КЛГ", - "58-ЮВСТ", - "01-ОКТ", - "61-ПРИВ", - "17-МСК", - "28-СЕВ", - "92-ВСИБ", - "00-ГВЦ", - "88-КРАСН", - "24-ГОР", - "80-ЮУР", - "51-СКВ", - "76-СВРД", - "63-КБШ", - "83-ЗСИБ", - "94-ЗАБ" - ], - "PackageSize": 100 - } } diff --git a/PARR.AIHITMainLoader/AihitMainLoader.cs b/PARR.AIHITMainLoader/AihitMainLoader.cs index 20429b74..4d25c645 100644 --- a/PARR.AIHITMainLoader/AihitMainLoader.cs +++ b/PARR.AIHITMainLoader/AihitMainLoader.cs @@ -55,37 +55,9 @@ namespace PARR.AIHITMainLoader using (var scope = serviceProvider.CreateScope()) { var aihitService = scope.ServiceProvider.GetRequiredService(); - var services = GetServices(aihitService); - var listToMq = new List(); - - - foreach (var service in services) - { - foreach (var responseArea in loaderSettings.ResponseAreas) - { - logger.LogDebug($"responseArea = {responseArea}"); - var EKs = service.Invoke(responseArea); - - if (EKs?.Any() == true) - { - foreach (var item in EKs) - { - if (item != null) - { - var mainData = item.ToMainData(); - if (mainData != null) - listToMq.Add(mainData); - } - } - } - } - } - - var preparedDataList = listToMq.Select(d => JsonSerializer.Serialize(d)).ToList(); - - int count = preparedDataList.Count; + var currentBatch = new List(); int packageSize = loaderSettings.PackageSize; if (packageSize <= 0) @@ -94,21 +66,39 @@ namespace PARR.AIHITMainLoader return; } - var parts = count == 0 ? 0 : (count + packageSize - 1) / packageSize; - - for (var i = 0; i < parts; i++) + foreach (var service in services) { - int start = i * packageSize; - int length = Math.Min(packageSize, count - start); - var batch = preparedDataList.GetRange(start, length).ToArray(); - var sendResult = await mqService.SendAsync(mqSettings, batch); - if (sendResult.IsSuccess) + foreach (var responseArea in loaderSettings.ResponseAreas) { - logger.LogInformation($"Данные переданы в RabbitMQ: {batch.Count()}"); - logger.LogDebug($"Отправлено сообщений: {batch.Count()}, пример первого: {batch.FirstOrDefault()?.Substring(0, Math.Min(200, batch.FirstOrDefault()?.Length ?? 0))}..."); + logger.LogDebug($"responseArea = {responseArea}"); + var EKs = service.Invoke(responseArea); + + if (EKs?.Any() != true) continue; + + foreach (var item in EKs) + { + if (item == null) continue; + + var mainData = item.ToMainData(); + if (mainData == null) continue; + + var json = JsonSerializer.Serialize(mainData); + currentBatch.Add(json); + + // Отправка, если набрали полный пакет + if (currentBatch.Count >= packageSize) + { + await SendBatchAsync(currentBatch); + currentBatch.Clear(); + } + } } - else - logger.LogError($"Ошибка при передаче данных в Rabbit, не переданные сообщения: {string.Join(", ", sendResult.NotSendMessages!)}"); + } + + // Отправка остатка + if (currentBatch.Count > 0) + { + await SendBatchAsync(currentBatch); } } } @@ -118,6 +108,20 @@ namespace PARR.AIHITMainLoader } } + private async Task SendBatchAsync(List batch) + { + var sendResult = await mqService.SendAsync(mqSettings, batch.ToArray()); + if (sendResult.IsSuccess) + { + logger.LogInformation($"Данные переданы в RabbitMQ: {batch.Count}"); + logger.LogDebug($"Отправлено сообщений: {batch.Count}, пример первого: {batch.FirstOrDefault()?.Substring(0, Math.Min(200, batch.FirstOrDefault()?.Length ?? 0))}..."); + } + else + { + logger.LogError($"Ошибка при передаче данных в RabbitMQ. Не переданные сообщения: {string.Join(", ", sendResult.NotSendMessages!)}"); + } + } + private List?>> GetServices(IAihitService service) { diff --git a/PARR.AIHITMainLoader/Models/PtkData.cs b/PARR.AIHITMainLoader/Models/PtkData.cs index 8f3c1e74..7c0a1236 100644 --- a/PARR.AIHITMainLoader/Models/PtkData.cs +++ b/PARR.AIHITMainLoader/Models/PtkData.cs @@ -95,7 +95,7 @@ namespace PARR.AIHITMainLoader.Models public string? IsNotUnique { get; set; } [Column("Холодный резерв")] - public string? ColdReserve { get; set; } + public int? ColdReserve { get; set; } [Column("ДОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ")] public string? AdditionalInformation { get; set; } @@ -135,7 +135,7 @@ namespace PARR.AIHITMainLoader.Models {"Тип сервера мониторинга", MonitoringServerType }, {"ОС", OSType }, {"ЗО_РГ", WorkGroupResponseArea }, - {"Холодный резерв", ColdReserve }, + {"Холодный резерв", ColdReserve.ToString() }, {"ДОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ", AdditionalInformation }, } }; diff --git a/PARR.AIHITMainLoader/Services/AihitService.cs b/PARR.AIHITMainLoader/Services/AihitService.cs index f7c22e7a..a36fb37a 100644 --- a/PARR.AIHITMainLoader/Services/AihitService.cs +++ b/PARR.AIHITMainLoader/Services/AihitService.cs @@ -124,7 +124,7 @@ namespace PARR.AIHITMainLoader.Services try { - var result = context.Set().FromSqlRaw($"EXEC mao2.dbo.sp_IPP_PARR_PTK_get_EK_ORG @зо", parameters.ToArray()).AsEnumerable(); + var result = context.Set().FromSqlRaw($"EXEC mao2.dbo.sp_IPP_PARR_PTK_get_EK_ORG @зо", parameters.ToArray()).AsEnumerable(); if (result == null || !result.Any()) {