Files
parr_api/PARR.EsppOrderLoader/EsppOrderLoader.cs

81 lines
3.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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