feat(esppOrderLoader): логика получение данных

This commit is contained in:
Mikhail Trubnikov
2023-10-23 13:50:43 +10:00
parent 017d2c9d71
commit ea77bd43de
17 changed files with 2694 additions and 20 deletions

View 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:
}
}
}
}

View File

@@ -0,0 +1,7 @@
namespace PARR.EsppOrderLoader
{
public interface IEsppOrderLoader
{
Task StartAsync();
}
}

View File

@@ -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)

View File

@@ -0,0 +1,7 @@
namespace PARR.EsppOrderLoader.Settings
{
internal class WorkerSettings
{
public TimeSpan RepeatEvery { get; set; }
}
}