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 logger; private readonly IEsppApiService esppApiService; private readonly SettingsFromDb settingsFromDb; public EsppOrderLoader( WorkerSettings settings, ILogger 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: } } } }