Files
parr_api/PARR.AIHITSyncer/AihitSyncer.cs

161 lines
5.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using PARR.AIHITSyncer.Services;
using PARR.AIHITSyncer.Settings;
using PARR.BLL.Services.Interfaces;
using PARR.DAL.Models;
namespace PARR.AIHITSyncer
{
internal class AihitSyncer : IAihitSyncer
{
private readonly ILogger<AihitSyncer> logger;
private readonly IMqService mqService;
private readonly MqSettings mqSettings;
private readonly IServiceProvider serviceProvider;
public AihitSyncer(
ILogger<AihitSyncer> logger,
IMqService mqService,
MqSettings mqSettings,
IServiceProvider serviceProvider
)
{
this.logger = logger;
this.mqService = mqService;
this.mqSettings = mqSettings;
this.serviceProvider = serviceProvider;
}
public void Start()
{
logger.LogInformation("Запуск сервиса синхронизации данных из АИХИТ и ПАРР.");
//var isConnected = mqService.InitConsumer(mqSettings, SyncDataAsync);
var isConnected = mqService.InitConsumer(mqSettings, async (string msg) =>
{
using (var scope = serviceProvider.CreateScope())
{
var syncerService = scope.ServiceProvider.GetService<ISyncerService>();
if (syncerService == null)
throw new Exception("Не смог получить серивс ISyncerService, scope.ServiceProvider.GetService<ISyncerService>()");
await syncerService.SyncAsync(msg);
//await Task.CompletedTask;
}
});
if (!isConnected)
throw new Exception("Ошибка при подключении к RabbitMq");
}
public void Stop()
{
mqService.Dispose();
}
//private async Task SyncDataAsync(string msg)
//{
// //SyncService
// using (var scope = serviceProvider.CreateScope())
// {
// var service = scope.ServiceProvider.GetService<SyncerService>();
// //if (service == null)
// // throw new Exception("Не смог получить серивс IHostService, scope.ServiceProvider.GetService<IHostService>()");
// await service.StartAsync(msg);
// //await SyncHostToScopeAsync(hostService, objFromQuery);
// //await GetAppTypesAsync();
// }
//var objFromQuery = transformService.GetModelFromJson<AihitDataMq>(msg);
//if (objFromQuery == null)
// return;
//using (var scope = serviceProvider.CreateScope())
//{
// var hostService = scope.ServiceProvider.GetService<IHostService>();
// if (hostService == null)
// throw new Exception("Не смог получить серивс IHostService, scope.ServiceProvider.GetService<IHostService>()");
// await SyncHostToScopeAsync(hostService, objFromQuery);
// await GetAppTypesAsync();
//}
//logger.LogDebug($"Закончил работу с сообщением: {msg}");
//await Task.CompletedTask;
//}
//private async Task SyncHostToScopeAsync(IHostService hostService, AihitDataMq objFromQuery)
//{
// //ищем существующий хост в БД
// var host = await hostService.GetHostWithAppsAsync(objFromQuery.IP);
// var isNew = false;
// //если не нашли - создаём
// if (host == null)
// {
// isNew = true;
// host = await CreateHostAsync(hostService, objFromQuery);
// }
// else
// {
// logger.LogDebug($"Найден хост в БД: {host!.Ek}({host.IP})");
// //проверям и обновляем поля
// await SyncHostFieldsAsync(hostService, host, objFromQuery);
// }
// //получаем лист ПО из объекта
// var appsInObj = await GetAppInObjectAsync(host, objFromQuery);
// await SyncApplicationInHostAsync(host, appsInObj, !isNew);
//}
//private async Task<Host?> CreateHostAsync(IHostService hostService, AihitDataMq objFromQuery)
//{
// var id = Guid.NewGuid();
// var host = new Host
// {
// Id = id,
// Ek = objFromQuery.EK,
// IP = objFromQuery.IP,
// EkStatusCode = ResolveCode(objFromQuery.Status),
// WorkGroup = objFromQuery.WorkGroup,
// ResponseAreaCode = ResolveCode(objFromQuery.ResponseArea)
// };
// if (!await hostService.CreateAsync(host) || !await hostService.CommitAsync())
// logger.LogError($"Не удалось создать узел {host.Ek}({host.IP})");
// else
// logger.LogInformation($"----- Создан узел: {host.Id} -----");
// return await hostService.GetHostWithAppsAsync(host.IP);
//}
//private int ResolveCode(string field)
//{
// var pattern = "\\d+";
// var regex = new Regex(pattern);
// int.TryParse(regex.Match(field).Value, out int result);
// return result;
//}
}
}