2026-03-11 12:10:11 +10:00
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
2024-02-05 16:05:02 +10:00
|
|
|
|
using Microsoft.Extensions.Logging;
|
2026-04-14 16:27:27 +10:00
|
|
|
|
using PARR.Core.Common.Interfaces;
|
2026-04-13 16:58:30 +10:00
|
|
|
|
using PARR.Domain.Entities.Base.History;
|
|
|
|
|
|
using PARR.Domain.Enums;
|
2026-03-11 12:10:11 +10:00
|
|
|
|
using PARR.NextRun.Services;
|
2024-02-05 16:05:02 +10:00
|
|
|
|
using PARR.NextRun.Settings;
|
|
|
|
|
|
|
|
|
|
|
|
namespace PARR.NextRun
|
|
|
|
|
|
{
|
2026-02-27 14:05:25 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Расчет nextRun по интервалу
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
internal class NextRunIntervalService : INextRunIntervalService
|
2024-02-05 16:05:02 +10:00
|
|
|
|
{
|
|
|
|
|
|
private readonly WorkerSettings workerSettings;
|
2026-02-27 14:05:25 +10:00
|
|
|
|
private readonly ILogger<NextRunIntervalService> logger;
|
2024-02-05 16:05:02 +10:00
|
|
|
|
private readonly IIntervalService intervalService;
|
|
|
|
|
|
private readonly IServiceProvider serviceProvider;
|
|
|
|
|
|
|
2026-02-27 14:05:25 +10:00
|
|
|
|
public NextRunIntervalService(
|
2024-02-05 16:05:02 +10:00
|
|
|
|
WorkerSettings workerSettings,
|
2026-02-27 14:05:25 +10:00
|
|
|
|
ILogger<NextRunIntervalService> logger,
|
2024-02-05 16:05:02 +10:00
|
|
|
|
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())
|
|
|
|
|
|
{
|
2026-03-11 12:10:11 +10:00
|
|
|
|
var nextRunUpdateService = scope.ServiceProvider.GetRequiredService<INextRunUpdateService>();
|
|
|
|
|
|
|
|
|
|
|
|
await nextRunUpdateService.UpdateNextRunForTemplatesAsync(
|
|
|
|
|
|
// фильтр, только просроченные шаблоны
|
|
|
|
|
|
query => query.Where(t => t.NextRun < DateTimeOffset.UtcNow),
|
|
|
|
|
|
() => new HistoryInitiator
|
|
|
|
|
|
{
|
|
|
|
|
|
InitiatorComment = "Обновлён NextRun (интервал)",
|
|
|
|
|
|
InitiatorParrComponentId = ParrComponentsEnum.NextRun
|
|
|
|
|
|
},
|
|
|
|
|
|
"Интервал"
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
//var templateService = scope.ServiceProvider.GetRequiredService<ITemplateService>();
|
|
|
|
|
|
//var nextRunService = scope.ServiceProvider.GetRequiredService<INextRunService>();
|
|
|
|
|
|
//var robotConfigurationService = scope.ServiceProvider.GetRequiredService<IRobotConfigurationService>();
|
|
|
|
|
|
|
|
|
|
|
|
//await HandlerAsync(templateService, nextRunService, robotConfigurationService);
|
2024-02-05 16:05:02 +10:00
|
|
|
|
}
|
|
|
|
|
|
}, workerSettings.RepeatEvery);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|