2023-11-15 16:34:28 +10:00
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
|
using PARR.Master.Services;
|
2023-10-24 12:14:22 +10:00
|
|
|
|
using PARR.Master.Settings;
|
|
|
|
|
|
|
|
|
|
|
|
namespace PARR.Master
|
|
|
|
|
|
{
|
|
|
|
|
|
internal class Master : IMaster
|
|
|
|
|
|
{
|
|
|
|
|
|
private readonly WorkerSettings settings;
|
|
|
|
|
|
private readonly ILogger<Master> logger;
|
2023-11-15 16:34:28 +10:00
|
|
|
|
private readonly IServiceProvider serviceProvider;
|
2023-10-24 12:14:22 +10:00
|
|
|
|
|
|
|
|
|
|
public Master(
|
|
|
|
|
|
WorkerSettings settings,
|
2023-11-15 16:34:28 +10:00
|
|
|
|
ILogger<Master> logger,
|
|
|
|
|
|
IServiceProvider serviceProvider
|
2023-10-24 12:14:22 +10:00
|
|
|
|
)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.settings = settings;
|
|
|
|
|
|
this.logger = logger;
|
2023-11-15 16:34:28 +10:00
|
|
|
|
this.serviceProvider = serviceProvider;
|
2023-10-24 12:14:22 +10:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public async Task StartAsync()
|
|
|
|
|
|
{
|
|
|
|
|
|
logger.LogInformation("Запуск сервиса.");
|
|
|
|
|
|
|
|
|
|
|
|
var nextStart = DateTime.Now;
|
|
|
|
|
|
|
|
|
|
|
|
while (true)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (nextStart.Hour == DateTime.Now.Hour && nextStart.Minute == DateTime.Now.Minute)
|
|
|
|
|
|
{
|
|
|
|
|
|
logger.LogInformation("Запуск по расписанию.");
|
|
|
|
|
|
|
2023-11-15 16:34:28 +10:00
|
|
|
|
await ManageOrdersAsync();
|
2023-10-24 12:14:22 +10:00
|
|
|
|
|
|
|
|
|
|
nextStart = DateTime.Now.Add(settings.RepeatEvery);
|
|
|
|
|
|
logger.LogInformation($"Следующая дата запуска: {nextStart}");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Каждую минуту
|
|
|
|
|
|
await Task.Delay(60 * 1000);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-11-15 16:34:28 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private async Task ManageOrdersAsync()
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var scope = serviceProvider.CreateScope())
|
|
|
|
|
|
{
|
|
|
|
|
|
var orderMasterService = scope.ServiceProvider.GetService<IOrderMasterService>();
|
|
|
|
|
|
if (orderMasterService == null)
|
|
|
|
|
|
throw new Exception("Не смог получить серивс IOrderMasterService, scope.ServiceProvider.GetService<IOrderMasterService>()");
|
|
|
|
|
|
|
|
|
|
|
|
await orderMasterService.ManageOrdersAsync();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-10-24 12:14:22 +10:00
|
|
|
|
}
|
|
|
|
|
|
}
|