feat(bll): IntervalService - сервис для функций которые нужно выполнить в интервале, применена к Master, EsppOrderLoader.

This commit is contained in:
Mikhail Trubnikov
2023-11-29 15:59:27 +10:00
parent 42a8394193
commit 8d63a10581
5 changed files with 85 additions and 28 deletions

View File

@@ -19,6 +19,7 @@ namespace PARR.BLL
services.AddTransient<IFileService, FileService>(); services.AddTransient<IFileService, FileService>();
services.AddTransient<IMqService, MqService>(); services.AddTransient<IMqService, MqService>();
services.AddTransient<ITransformService, TransformService>(); services.AddTransient<ITransformService, TransformService>();
services.AddTransient<IIntervalService, IntervalService>();
} }
} }
} }

View File

@@ -0,0 +1,29 @@
using Microsoft.Extensions.Logging;
using PARR.BLL.Services.Interfaces;
namespace PARR.BLL.Services.Implementations
{
internal class IntervalService : IIntervalService
{
private readonly ILogger<IntervalService> logger;
public IntervalService(ILogger<IntervalService> logger)
{
this.logger = logger;
}
public async Task IntervalInitAsync(IntervalHandlerDelegate intervalHandler, TimeSpan interval)
{
while (true)
{
logger.LogInformation($"Запуск по расписанию. Интервал: {interval}");
await intervalHandler.Invoke();
logger.LogInformation($"Следующая дата запуска: {DateTimeOffset.Now.Add(interval)}");
await Task.Delay(interval);
}
}
}
}

View File

@@ -0,0 +1,15 @@
namespace PARR.BLL.Services.Interfaces
{
public delegate Task IntervalHandlerDelegate();
public interface IIntervalService
{
/// <summary>
/// Метод выполняется с интервалом
/// </summary>
/// <param name="intervalHandler">Метод который нужно выполнить</param>
/// <param name="interval">Интервал</param>
/// <returns></returns>
Task IntervalInitAsync(IntervalHandlerDelegate intervalHandler, TimeSpan interval);
}
}

View File

@@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using PARR.BLL.Services.Interfaces;
using PARR.DAL.Contracts; using PARR.DAL.Contracts;
using PARR.EsppApi; using PARR.EsppApi;
using PARR.EsppApi.Models; using PARR.EsppApi.Models;
@@ -16,13 +17,15 @@ namespace PARR.EsppOrderLoader
private readonly IEsppApiService esppApiService; private readonly IEsppApiService esppApiService;
private readonly SettingsFromDb settingsFromDb; private readonly SettingsFromDb settingsFromDb;
private readonly IServiceProvider serviceProvider; private readonly IServiceProvider serviceProvider;
private readonly IIntervalService intervalService;
public EsppOrderLoader( public EsppOrderLoader(
WorkerSettings settings, WorkerSettings settings,
ILogger<EsppOrderLoader> logger, ILogger<EsppOrderLoader> logger,
IEsppApiService esppApiService, IEsppApiService esppApiService,
SettingsFromDb settingsFromDb, SettingsFromDb settingsFromDb,
IServiceProvider serviceProvider IServiceProvider serviceProvider,
IIntervalService intervalService
) )
{ {
this.settings = settings; this.settings = settings;
@@ -30,6 +33,7 @@ namespace PARR.EsppOrderLoader
this.esppApiService = esppApiService; this.esppApiService = esppApiService;
this.settingsFromDb = settingsFromDb; this.settingsFromDb = settingsFromDb;
this.serviceProvider = serviceProvider; this.serviceProvider = serviceProvider;
this.intervalService = intervalService;
} }
@@ -37,23 +41,25 @@ namespace PARR.EsppOrderLoader
{ {
logger.LogInformation("Запуск сервиса загрузки нарядов из ЕСПП."); logger.LogInformation("Запуск сервиса загрузки нарядов из ЕСПП.");
var nextStart = DateTime.Now; await intervalService.IntervalInitAsync(DownloadOrdersAsync, settings.RepeatEvery);
while (true) //var nextStart = DateTime.Now;
{
if (nextStart.Hour == DateTime.Now.Hour && nextStart.Minute == DateTime.Now.Minute)
{
logger.LogInformation("Загрузка списка нарядов из ЕСПП.");
await DownloadOrdersAsync(); //while (true)
//{
// if (nextStart.Hour == DateTime.Now.Hour && nextStart.Minute == DateTime.Now.Minute)
// {
// logger.LogInformation("Загрузка списка нарядов из ЕСПП.");
nextStart = DateTime.Now.Add(settings.RepeatEvery); // await DownloadOrdersAsync();
logger.LogInformation($"Следующая дата загрузки: {nextStart}");
}
// Каждую минуту // nextStart = DateTime.Now.Add(settings.RepeatEvery);
await Task.Delay(60 * 1000); // logger.LogInformation($"Следующая дата загрузки: {nextStart}");
} // }
// // Каждую минуту
// await Task.Delay(60 * 1000);
//}
} }

View File

@@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using PARR.BLL.Services.Interfaces;
using PARR.Master.Services; using PARR.Master.Services;
using PARR.Master.Settings; using PARR.Master.Settings;
@@ -10,16 +11,19 @@ namespace PARR.Master
private readonly WorkerSettings settings; private readonly WorkerSettings settings;
private readonly ILogger<Master> logger; private readonly ILogger<Master> logger;
private readonly IServiceProvider serviceProvider; private readonly IServiceProvider serviceProvider;
private readonly IIntervalService intervalService;
public Master( public Master(
WorkerSettings settings, WorkerSettings settings,
ILogger<Master> logger, ILogger<Master> logger,
IServiceProvider serviceProvider IServiceProvider serviceProvider,
IIntervalService intervalService
) )
{ {
this.settings = settings; this.settings = settings;
this.logger = logger; this.logger = logger;
this.serviceProvider = serviceProvider; this.serviceProvider = serviceProvider;
this.intervalService = intervalService;
} }
@@ -27,23 +31,25 @@ namespace PARR.Master
{ {
logger.LogInformation("Запуск сервиса."); logger.LogInformation("Запуск сервиса.");
var nextStart = DateTime.Now; await intervalService.IntervalInitAsync(ManageOrdersAsync, settings.RepeatEvery);
while (true) //var nextStart = DateTime.Now;
{
if (nextStart.Hour == DateTime.Now.Hour && nextStart.Minute == DateTime.Now.Minute)
{
logger.LogInformation("Запуск по расписанию.");
await ManageOrdersAsync(); //while (true)
//{
// if (nextStart.Hour == DateTime.Now.Hour && nextStart.Minute == DateTime.Now.Minute)
// {
// logger.LogInformation("Запуск по расписанию.");
nextStart = DateTime.Now.Add(settings.RepeatEvery); // await ManageOrdersAsync();
logger.LogInformation($"Следующая дата запуска: {nextStart}");
}
// Каждую минуту // nextStart = DateTime.Now.Add(settings.RepeatEvery);
await Task.Delay(60 * 1000); // logger.LogInformation($"Следующая дата запуска: {nextStart}");
} // }
// // Каждую минуту
// await Task.Delay(60 * 1000);
// }
} }