feat(esppOrderLoader): логика получение данных
This commit is contained in:
@@ -109,7 +109,8 @@ namespace PARR.DAL.Context
|
|||||||
new { Name = nameof(SettingsFromDb.RobotWaitTime), Description = "Время ожидания выполнения роботом задания", Value = "00:15:00" },
|
new { Name = nameof(SettingsFromDb.RobotWaitTime), Description = "Время ожидания выполнения роботом задания", Value = "00:15:00" },
|
||||||
new { Name = nameof(SettingsFromDb.ScheduleTimezone), Description = "Расписание регламентной работы - В каком часовом поясе", Value = "MSK" },
|
new { Name = nameof(SettingsFromDb.ScheduleTimezone), Description = "Расписание регламентной работы - В каком часовом поясе", Value = "MSK" },
|
||||||
new { Name = nameof(SettingsFromDb.ScheduleExclude), Description = "Расписание регламентной работы - Тип исключения", Value = "Нет исключений" },
|
new { Name = nameof(SettingsFromDb.ScheduleExclude), Description = "Расписание регламентной работы - Тип исключения", Value = "Нет исключений" },
|
||||||
new { Name = nameof(SettingsFromDb.ScheduleRepeatRange), Description = "Расписание регламентной работы - Диапазн повторов", Value = "Отсутствует дата завершения" }
|
new { Name = nameof(SettingsFromDb.ScheduleRepeatRange), Description = "Расписание регламентной работы - Диапазн повторов", Value = "Отсутствует дата завершения" },
|
||||||
|
new { Name = nameof(SettingsFromDb.OrderSearchDeltaDate), Description = "Промежуток времени для поиска нарядов в ЕСПП", Value = new TimeSpan(1, 30, 0).ToString() }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -324,7 +325,7 @@ namespace PARR.DAL.Context
|
|||||||
modelBuilder.Entity<AgentHistoryLevel>(f =>
|
modelBuilder.Entity<AgentHistoryLevel>(f =>
|
||||||
{
|
{
|
||||||
f.HasData(
|
f.HasData(
|
||||||
new { Id = (int)AgentHistoryLevelEnum.Start, Name = AgentHistoryLevelEnum.Start.ToString(), Description= "Агент начал выполнять задание" },
|
new { Id = (int)AgentHistoryLevelEnum.Start, Name = AgentHistoryLevelEnum.Start.ToString(), Description = "Агент начал выполнять задание" },
|
||||||
new { Id = (int)AgentHistoryLevelEnum.End, Name = AgentHistoryLevelEnum.End.ToString(), Description = "Агент завершил выполнение задания" }
|
new { Id = (int)AgentHistoryLevelEnum.End, Name = AgentHistoryLevelEnum.End.ToString(), Description = "Агент завершил выполнение задания" }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -53,5 +53,10 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string ScheduleRepeatRange { get; set; } = string.Empty;
|
public string ScheduleRepeatRange { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Промежуток времени для поиска нарядов в ЕСПП
|
||||||
|
/// </summary>
|
||||||
|
public TimeSpan OrderSearchDeltaDate { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
2517
PARR.DAL/Migrations/20231023033756_TblSettingsOrderSearchDeltaDate.Designer.cs
generated
Normal file
2517
PARR.DAL/Migrations/20231023033756_TblSettingsOrderSearchDeltaDate.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,28 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace PARR.DAL.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class TblSettingsOrderSearchDeltaDate : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
table: "Settings",
|
||||||
|
columns: new[] { "Name", "Description", "Value" },
|
||||||
|
values: new object[] { "OrderSearchDeltaDate", "Промежуток времени для поиска нарядов в ЕСПП", "01:30:00" });
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "Settings",
|
||||||
|
keyColumn: "Name",
|
||||||
|
keyValue: "OrderSearchDeltaDate");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1954,6 +1954,12 @@ namespace PARR.DAL.Migrations
|
|||||||
Name = "ScheduleRepeatRange",
|
Name = "ScheduleRepeatRange",
|
||||||
Description = "Расписание регламентной работы - Диапазн повторов",
|
Description = "Расписание регламентной работы - Диапазн повторов",
|
||||||
Value = "Отсутствует дата завершения"
|
Value = "Отсутствует дата завершения"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Name = "OrderSearchDeltaDate",
|
||||||
|
Description = "Промежуток времени для поиска нарядов в ЕСПП",
|
||||||
|
Value = "01:30:00"
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace PARR.EsppApi
|
|||||||
this.espp = espp;
|
this.espp = espp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<EsppResultBase<IEnumerable<EsppOrder>>> FindOrdersByPrefixAsync(FindOrdersQuery query)
|
public async Task<EsppResultBase<IEnumerable<EsppOrder>>> FindOrdersAsync(FindOrdersQuery query)
|
||||||
{
|
{
|
||||||
logger.LogInformation("Привет!");
|
logger.LogInformation("Привет!");
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ namespace PARR.EsppApi
|
|||||||
public interface IEsppApiService
|
public interface IEsppApiService
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Найти наряды в ЕСПП по префиксу
|
/// Найти наряды в ЕСПП
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<EsppResultBase<IEnumerable<EsppOrder>>> FindOrdersByPrefixAsync(FindOrdersQuery query);
|
Task<EsppResultBase<IEnumerable<EsppOrder>>> FindOrdersAsync(FindOrdersQuery query);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,5 +5,8 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class EsppOrder
|
public class EsppOrder
|
||||||
{
|
{
|
||||||
|
public string Number { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public string? WorkGroup { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,20 @@
|
|||||||
namespace PARR.EsppApi.Models.Query
|
namespace PARR.EsppApi.Models.Query
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Фильтр запроса в ЕСПП на поиск объектов
|
||||||
|
/// </summary>
|
||||||
public class FindOrdersQuery
|
public class FindOrdersQuery
|
||||||
{
|
{
|
||||||
//todo: тут поля для запроса списка нарядов из еспп
|
//todo: тут поля для запроса списка нарядов из еспп
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Краткое описание, содержит значение
|
||||||
|
/// </summary>
|
||||||
|
public string? ShortDescriptionContains { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Дата - "ПО"
|
||||||
|
/// </summary>
|
||||||
|
public DateTime? DateEnd { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
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.BLL;
|
||||||
using PARR.DAL;
|
using PARR.DAL;
|
||||||
using PARR.EsppApi;
|
using PARR.EsppApi;
|
||||||
|
using PARR.EsppOrderLoader.Settings;
|
||||||
|
|
||||||
namespace PARR.EsppOrderLoader
|
namespace PARR.EsppOrderLoader
|
||||||
{
|
{
|
||||||
@@ -14,14 +15,11 @@ namespace PARR.EsppOrderLoader
|
|||||||
services.InstallDalServices(configuration);
|
services.InstallDalServices(configuration);
|
||||||
services.InstallEsppApiServices(configuration);
|
services.InstallEsppApiServices(configuration);
|
||||||
|
|
||||||
// settings
|
var settings = new WorkerSettings();
|
||||||
//SettingsFromDb configuration
|
configuration.GetSection(nameof(WorkerSettings)).Bind(settings);
|
||||||
//var settingsFromDb = new SettingsFromDb();
|
services.AddSingleton(settings);
|
||||||
//configuration.GetSection(nameof(SettingsFromDb)).Bind(settingsFromDb);
|
|
||||||
//services.AddSingleton(settingsFromDb);
|
|
||||||
|
|
||||||
//add other services
|
services.AddTransient<IEsppOrderLoader, EsppOrderLoader>();
|
||||||
//services.AddTransient<IEsppApiService, EsppApiService>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IConfigurationBuilder AddEsppOrderLoaderConfigurations(this IConfigurationBuilder builder, IServiceCollection services)
|
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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,22 +1,27 @@
|
|||||||
|
using PARR.EsppOrderLoader;
|
||||||
|
|
||||||
namespace PARR.EsppOrderLoaderWorker
|
namespace PARR.EsppOrderLoaderWorker
|
||||||
{
|
{
|
||||||
public class Worker : BackgroundService
|
public class Worker : BackgroundService
|
||||||
{
|
{
|
||||||
private readonly ILogger<Worker> _logger;
|
private readonly ILogger<Worker> _logger;
|
||||||
|
private readonly IEsppOrderLoader esppOrderLoader;
|
||||||
|
|
||||||
public Worker(ILogger<Worker> logger)
|
public Worker(ILogger<Worker> logger, IEsppOrderLoader esppOrderLoader)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
this.esppOrderLoader = esppOrderLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
await esppOrderLoader.StartAsync();
|
||||||
//while (!stoppingToken.IsCancellationRequested)
|
//_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
||||||
//{
|
////while (!stoppingToken.IsCancellationRequested)
|
||||||
// _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
////{
|
||||||
// await Task.Delay(1000, stoppingToken);
|
//// _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
||||||
//}
|
//// await Task.Delay(1000, stoppingToken);
|
||||||
|
////}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -25,5 +25,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"WorkerSettings": {
|
||||||
|
"RepeatEvery": "1:00:00"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ namespace PARR.Test
|
|||||||
private async Task TestEsppApi()
|
private async Task TestEsppApi()
|
||||||
{
|
{
|
||||||
// var orders = await esppApiService.FindOrdersByPrefixAsync("ПАРР__");
|
// var orders = await esppApiService.FindOrdersByPrefixAsync("ПАРР__");
|
||||||
var result = await esppApiService.FindOrdersByPrefixAsync(new FindOrdersQuery { });
|
var result = await esppApiService.FindOrdersAsync(new FindOrdersQuery { });
|
||||||
|
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
<None Include="docker-compose.espp-order-manager.yml" />
|
<None Include="docker-compose.espp-order-manager.yml" />
|
||||||
<None Include="docker-compose.espp-template-sync.yml" />
|
<None Include="docker-compose.espp-template-sync.yml" />
|
||||||
<None Include="docker-compose.generator-templates.yml" />
|
<None Include="docker-compose.generator-templates.yml" />
|
||||||
|
<None Include="docker-compose.master.yml" />
|
||||||
<None Include="docker-compose.yml" />
|
<None Include="docker-compose.yml" />
|
||||||
<None Include=".dockerignore" />
|
<None Include=".dockerignore" />
|
||||||
<None Include="stack.yml" />
|
<None Include="stack.yml" />
|
||||||
|
|||||||
Reference in New Issue
Block a user