using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using PARR.Core.Common.Interfaces; using PARR.Domain.Entities.Base.History; using PARR.Domain.Enums; using PARR.NextRun.Services; using PARR.NextRun.Settings; namespace PARR.NextRun { /// /// Расчет nextRun по интервалу /// internal class NextRunIntervalService : INextRunIntervalService { private readonly WorkerSettings workerSettings; private readonly ILogger logger; private readonly IIntervalService intervalService; private readonly IServiceProvider serviceProvider; public NextRunIntervalService( WorkerSettings workerSettings, ILogger logger, IIntervalService intervalService, IServiceProvider serviceProvider ) { this.workerSettings = workerSettings; this.logger = logger; this.intervalService = intervalService; this.serviceProvider = serviceProvider; } public async Task StartAsync() { logger.LogInformation("Запуск сервиса рассчета времени следующего создания наряда (nextRun)"); await intervalService.IntervalInitAsync(async () => { using (var scope = serviceProvider.CreateScope()) { var nextRunUpdateService = scope.ServiceProvider.GetRequiredService(); await nextRunUpdateService.UpdateNextRunForTemplatesAsync( // фильтр, только просроченные шаблоны query => query.Where(t => t.NextRun < DateTimeOffset.UtcNow), () => new HistoryInitiator { InitiatorComment = "Обновлён NextRun (интервал)", InitiatorParrComponentId = ParrComponentsEnum.NextRun }, "Интервал" ); //var templateService = scope.ServiceProvider.GetRequiredService(); //var nextRunService = scope.ServiceProvider.GetRequiredService(); //var robotConfigurationService = scope.ServiceProvider.GetRequiredService(); //await HandlerAsync(templateService, nextRunService, robotConfigurationService); } }, workerSettings.RepeatEvery); } } }