feat(aihitLoader): добавлено зона "ОБЩЕЕ", данные отправляются сразу в очередь после получения от хп, чтобы не копить в памяти данные.
This commit is contained in:
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,11 +2,14 @@
|
||||
"ConnectionStrings": {
|
||||
"AihitConnection": "Data Source=10.248.19.97; Initial Catalog=mao2;User ID=awhit-ipp-parr;pwd=ET3h$9y1LH#D;TrustServerCertificate=true;"
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Serilog": {
|
||||
"MinimumLevel": {
|
||||
"Default": "Information",
|
||||
"Override": {
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
}
|
||||
}
|
||||
},
|
||||
"WorkerSettings": {
|
||||
"RepeatEvery": "12:00:00"
|
||||
@@ -35,9 +38,10 @@
|
||||
"76-СВРД",
|
||||
"63-КБШ",
|
||||
"83-ЗСИБ",
|
||||
"94-ЗАБ"
|
||||
"94-ЗАБ",
|
||||
"ОБЩЕЕ"
|
||||
],
|
||||
"PackageSize": 100
|
||||
"PackageSize": 1000
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -55,37 +55,9 @@ namespace PARR.AIHITMainLoader
|
||||
using (var scope = serviceProvider.CreateScope())
|
||||
{
|
||||
var aihitService = scope.ServiceProvider.GetRequiredService<IAihitService>();
|
||||
|
||||
var services = GetServices(aihitService);
|
||||
|
||||
var listToMq = new List<AihitMainDataMq>();
|
||||
|
||||
|
||||
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<string>();
|
||||
int packageSize = loaderSettings.PackageSize;
|
||||
|
||||
if (packageSize <= 0)
|
||||
@@ -94,21 +66,39 @@ namespace PARR.AIHITMainLoader
|
||||
return;
|
||||
}
|
||||
|
||||
var parts = count == 0 ? 0 : (count + packageSize - 1) / packageSize;
|
||||
foreach (var service in services)
|
||||
{
|
||||
foreach (var responseArea in loaderSettings.ResponseAreas)
|
||||
{
|
||||
logger.LogDebug($"responseArea = {responseArea}");
|
||||
var EKs = service.Invoke(responseArea);
|
||||
|
||||
for (var i = 0; i < parts; i++)
|
||||
if (EKs?.Any() != true) continue;
|
||||
|
||||
foreach (var item in EKs)
|
||||
{
|
||||
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)
|
||||
if (item == null) continue;
|
||||
|
||||
var mainData = item.ToMainData();
|
||||
if (mainData == null) continue;
|
||||
|
||||
var json = JsonSerializer.Serialize(mainData);
|
||||
currentBatch.Add(json);
|
||||
|
||||
// Отправка, если набрали полный пакет
|
||||
if (currentBatch.Count >= packageSize)
|
||||
{
|
||||
logger.LogInformation($"Данные переданы в RabbitMQ: {batch.Count()}");
|
||||
logger.LogDebug($"Отправлено сообщений: {batch.Count()}, пример первого: {batch.FirstOrDefault()?.Substring(0, Math.Min(200, batch.FirstOrDefault()?.Length ?? 0))}...");
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -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 },
|
||||
}
|
||||
};
|
||||
|
||||
@@ -124,7 +124,7 @@ namespace PARR.AIHITMainLoader.Services
|
||||
|
||||
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())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user