feat(esppOrderLoader): логика получение данных
This commit is contained in:
80
PARR.EsppOrderLoader/EsppOrderLoader.cs
Normal file
80
PARR.EsppOrderLoader/EsppOrderLoader.cs
Normal file
@@ -0,0 +1,80 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using PARR.DAL.Contracts;
|
||||
using PARR.EsppApi;
|
||||
using PARR.EsppApi.Models.Query;
|
||||
using PARR.EsppOrderLoader.Settings;
|
||||
|
||||
namespace PARR.EsppOrderLoader
|
||||
{
|
||||
internal class EsppOrderLoader : IEsppOrderLoader
|
||||
{
|
||||
private readonly WorkerSettings settings;
|
||||
private readonly ILogger<EsppOrderLoader> logger;
|
||||
private readonly IEsppApiService esppApiService;
|
||||
private readonly SettingsFromDb settingsFromDb;
|
||||
|
||||
public EsppOrderLoader(
|
||||
WorkerSettings settings,
|
||||
ILogger<EsppOrderLoader> logger,
|
||||
IEsppApiService esppApiService,
|
||||
SettingsFromDb settingsFromDb
|
||||
)
|
||||
{
|
||||
this.settings = settings;
|
||||
this.logger = logger;
|
||||
this.esppApiService = esppApiService;
|
||||
this.settingsFromDb = settingsFromDb;
|
||||
}
|
||||
|
||||
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("Загрузка списка нарядов из ЕСПП.");
|
||||
|
||||
await DownloadOrdersAsync();
|
||||
|
||||
nextStart = DateTime.Now.Add(settings.RepeatEvery);
|
||||
logger.LogInformation($"Следующая дата загрузки: {nextStart}");
|
||||
}
|
||||
|
||||
// Каждую минуту
|
||||
await Task.Delay(60 * 1000);
|
||||
}
|
||||
}
|
||||
|
||||
// получаю список из ЕСПП по фильтрам
|
||||
// В цикле проверяю каждый наряд, есть ли он в БД + по имени ищу есть ли такой шаблон
|
||||
// Если наряда такого нет в БД и есть шаблон, добавляю в БД
|
||||
// если в бд не добавляю, пишу в лог, что нет такого шаблона, в бд не добавляю
|
||||
|
||||
private async Task DownloadOrdersAsync()
|
||||
{
|
||||
var searchQuery = new FindOrdersQuery { ShortDescriptionContains = settingsFromDb.TemplatePrefixName, DateEnd = DateTime.Now.Add(settingsFromDb.OrderSearchDeltaDate) };
|
||||
var downloadResult = await esppApiService.FindOrdersAsync(searchQuery);
|
||||
|
||||
if (!downloadResult.IsSuccess)
|
||||
{
|
||||
logger.LogError(downloadResult.Exception, "Ошибка загрузки списка нарядов из ЕСПП");
|
||||
return;
|
||||
}
|
||||
|
||||
logger.LogInformation($"Получено нарядов из ЕСПП: {downloadResult.Data?.Count()}");
|
||||
|
||||
if (downloadResult.Data == null)
|
||||
return;
|
||||
|
||||
foreach (var item in downloadResult.Data)
|
||||
{
|
||||
//todo:
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
7
PARR.EsppOrderLoader/IEsppOrderLoader.cs
Normal file
7
PARR.EsppOrderLoader/IEsppOrderLoader.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace PARR.EsppOrderLoader
|
||||
{
|
||||
public interface IEsppOrderLoader
|
||||
{
|
||||
Task StartAsync();
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ using Microsoft.Extensions.DependencyInjection;
|
||||
using PARR.BLL;
|
||||
using PARR.DAL;
|
||||
using PARR.EsppApi;
|
||||
using PARR.EsppOrderLoader.Settings;
|
||||
|
||||
namespace PARR.EsppOrderLoader
|
||||
{
|
||||
@@ -14,14 +15,11 @@ namespace PARR.EsppOrderLoader
|
||||
services.InstallDalServices(configuration);
|
||||
services.InstallEsppApiServices(configuration);
|
||||
|
||||
// settings
|
||||
//SettingsFromDb configuration
|
||||
//var settingsFromDb = new SettingsFromDb();
|
||||
//configuration.GetSection(nameof(SettingsFromDb)).Bind(settingsFromDb);
|
||||
//services.AddSingleton(settingsFromDb);
|
||||
var settings = new WorkerSettings();
|
||||
configuration.GetSection(nameof(WorkerSettings)).Bind(settings);
|
||||
services.AddSingleton(settings);
|
||||
|
||||
//add other services
|
||||
//services.AddTransient<IEsppApiService, EsppApiService>();
|
||||
services.AddTransient<IEsppOrderLoader, EsppOrderLoader>();
|
||||
}
|
||||
|
||||
public static IConfigurationBuilder AddEsppOrderLoaderConfigurations(this IConfigurationBuilder builder, IServiceCollection services)
|
||||
|
||||
7
PARR.EsppOrderLoader/Settings/WorkerSettings.cs
Normal file
7
PARR.EsppOrderLoader/Settings/WorkerSettings.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace PARR.EsppOrderLoader.Settings
|
||||
{
|
||||
internal class WorkerSettings
|
||||
{
|
||||
public TimeSpan RepeatEvery { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user