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

View File

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