Files
parr_api/PARR.JobAutoControl/JobAutoControlManager.cs

93 lines
3.9 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.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using PARR.BLL.Domain.Mq;
using PARR.BLL.Services.Interfaces;
using PARR.DAL.Services.Interfaces.Job;
using PARR.JobAutoControl.Settings;
using System.Text.Json;
namespace PARR.JobAutoControl
{
internal class JobAutoControlManager : IJobAutoControlManager
{
private readonly WorkerSettings workerSettings;
private readonly ILogger<JobAutoControlManager> logger;
private readonly IIntervalService intervalService;
private readonly IServiceProvider serviceProvider;
private readonly MqSettings mqSettings;
public JobAutoControlManager(
WorkerSettings workerSettings,
ILogger<JobAutoControlManager> logger,
IIntervalService intervalService,
IServiceProvider serviceProvider,
MqSettings mqSettings
)
{
this.workerSettings = workerSettings;
this.logger = logger;
this.intervalService = intervalService;
this.serviceProvider = serviceProvider;
this.mqSettings = mqSettings;
}
public async Task StartAsync()
{
logger.LogInformation("Запуск сервиса управления авто-контролем РР (JobAutoControl)");
await intervalService.IntervalInitAsync(async () =>
{
await using (var scope = serviceProvider.CreateAsyncScope())
//using (var scope = serviceProvider.CreateScope())
{
var jobAutoControlService = scope.ServiceProvider.GetService<IJobAutoControlService>();
var mqService = scope.ServiceProvider.GetService<IMqService>();
if (jobAutoControlService == null || mqService == null)
throw new Exception($"Не смог получить серивс {nameof(IJobAutoControlService)} или {nameof(IMqService)}");
await HandlerAsync(jobAutoControlService, mqService);
}
}, workerSettings.RepeatEvery);
}
private async Task HandlerAsync(IJobAutoControlService jobAutoControlService, IMqService mqService)
{
var jobsWithAutoControl = await jobAutoControlService.Get().Where(t => t.IsEnable).ToListAsync();
logger.LogInformation($"Работ с включенным авто-контролем: {jobsWithAutoControl.Count} шт.");
if (jobsWithAutoControl.Count == 0)
return;
// формируем сообщения
var msgList = jobsWithAutoControl.Select(t => new TemplateMatcherMq
{
Action = Constants.TemplateMatcherActionEnum.Sync,
EntityType = Constants.SyncTaskEntityTypeEnum.Job,
Id = t.JobId,
Initiator = new Common.Domain.HistoryInitiator
{
InitiatorComment = $"Инициатор авто-контроль, периодичность: {workerSettings.RepeatEvery}",
InitiatorIp = null,
InitiatorParrComponentId = Constants.ParrComponentsEnum.JobAutoControl
}
});
var msgStrList = msgList.Select(t => JsonSerializer.Serialize(t));
// отправляем задания в очередь template matcher`a
var sendResult = await mqService.SendAsync(mqSettings.TemplateMatcher, msgStrList.ToArray());
if (!sendResult.IsSuccess)
logger.LogError($"Ошибка при отправке сообщений ({msgStrList.Count()} шт.) в очередь.");
else
logger.LogInformation($"Выполнена отправка сообщений в очередь, {msgStrList.Count()} шт.");
}
}
}