Merge branch 'dev' of gitlab.dvgd.oao.rzd:devptk/parr/parr_api into dev

This commit is contained in:
Mikhail Trubnikov
2025-12-26 14:01:38 +10:00
5 changed files with 108 additions and 88 deletions

View File

@@ -1,8 +1,20 @@
{ {
"Logging": { "Serilog": {
"LogLevel": { "MinimumLevel": {
"Default": "Information", "Default": "Debug",
"Microsoft.Hosting.Lifetime": "Information" "Override": {
"Microsoft": "Debug",
"Microsoft.Hosting.Lifetime": "Debug"
}
},
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "log/log-.txt",
"rollingInterval": "Day"
}
}
]
} }
}
} }

View File

@@ -1,43 +1,47 @@
{ {
"ConnectionStrings": { "ConnectionStrings": {
"AihitConnection": "Data Source=10.248.19.97; Initial Catalog=mao2;User ID=awhit-ipp-parr;pwd=ET3h$9y1LH#D;TrustServerCertificate=true;" "AihitConnection": "Data Source=10.248.19.97; Initial Catalog=mao2;User ID=awhit-ipp-parr;pwd=ET3h$9y1LH#D;TrustServerCertificate=true;"
}, },
"Logging": { "Serilog": {
"LogLevel": { "MinimumLevel": {
"Default": "Information", "Default": "Information",
"Microsoft.Hosting.Lifetime": "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
}
} }

View File

@@ -55,37 +55,9 @@ namespace PARR.AIHITMainLoader
using (var scope = serviceProvider.CreateScope()) using (var scope = serviceProvider.CreateScope())
{ {
var aihitService = scope.ServiceProvider.GetRequiredService<IAihitService>(); var aihitService = scope.ServiceProvider.GetRequiredService<IAihitService>();
var services = GetServices(aihitService); var services = GetServices(aihitService);
var listToMq = new List<AihitMainDataMq>(); var currentBatch = new List<string>();
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;
int packageSize = loaderSettings.PackageSize; int packageSize = loaderSettings.PackageSize;
if (packageSize <= 0) if (packageSize <= 0)
@@ -94,21 +66,39 @@ namespace PARR.AIHITMainLoader
return; return;
} }
var parts = count == 0 ? 0 : (count + packageSize - 1) / packageSize; foreach (var service in services)
for (var i = 0; i < parts; i++)
{ {
int start = i * packageSize; foreach (var responseArea in loaderSettings.ResponseAreas)
int length = Math.Min(packageSize, count - start);
var batch = preparedDataList.GetRange(start, length).ToArray();
var sendResult = await mqService.SendAsync(mqSettings, batch);
if (sendResult.IsSuccess)
{ {
logger.LogInformation($"Данные переданы в RabbitMQ: {batch.Count()}"); logger.LogDebug($"responseArea = {responseArea}");
logger.LogDebug($"Отправлено сообщений: {batch.Count()}, пример первого: {batch.FirstOrDefault()?.Substring(0, Math.Min(200, batch.FirstOrDefault()?.Length ?? 0))}..."); 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<string> 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<Func<string, IEnumerable<IMainData>?>> GetServices(IAihitService service) private List<Func<string, IEnumerable<IMainData>?>> GetServices(IAihitService service)
{ {

View File

@@ -95,7 +95,7 @@ namespace PARR.AIHITMainLoader.Models
public string? IsNotUnique { get; set; } public string? IsNotUnique { get; set; }
[Column("Холодный резерв")] [Column("Холодный резерв")]
public string? ColdReserve { get; set; } public int? ColdReserve { get; set; }
[Column("ДОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ")] [Column("ДОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ")]
public string? AdditionalInformation { get; set; } public string? AdditionalInformation { get; set; }
@@ -135,7 +135,7 @@ namespace PARR.AIHITMainLoader.Models
{"Тип сервера мониторинга", MonitoringServerType }, {"Тип сервера мониторинга", MonitoringServerType },
{"ОС", OSType }, {"ОС", OSType },
{"ЗО_РГ", WorkGroupResponseArea }, {"ЗО_РГ", WorkGroupResponseArea },
{"Холодный резерв", ColdReserve }, {"Холодный резерв", ColdReserve.ToString() },
{ОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ", AdditionalInformation }, {ОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ", AdditionalInformation },
} }
}; };

View File

@@ -124,7 +124,7 @@ namespace PARR.AIHITMainLoader.Services
try try
{ {
var result = context.Set<StoData>().FromSqlRaw($"EXEC mao2.dbo.sp_IPP_PARR_PTK_get_EK_ORG @зо", parameters.ToArray()).AsEnumerable(); var result = context.Set<OrgData>().FromSqlRaw($"EXEC mao2.dbo.sp_IPP_PARR_PTK_get_EK_ORG @зо", parameters.ToArray()).AsEnumerable();
if (result == null || !result.Any()) if (result == null || !result.Any())
{ {