feat(bll): IntervalService - сервис для функций которые нужно выполнить в интервале, применена к Master, EsppOrderLoader.
This commit is contained in:
@@ -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>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
29
PARR.BLL/Services/Implementations/IntervalService.cs
Normal file
29
PARR.BLL/Services/Implementations/IntervalService.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
15
PARR.BLL/Services/Interfaces/IIntervalService.cs
Normal file
15
PARR.BLL/Services/Interfaces/IIntervalService.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user