Merge branch 'ol' into dev
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.ScheduleTimezone), Description = "Расписание регламентной работы - В каком часовом поясе", Value = "MSK" },
|
||||
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 =>
|
||||
{
|
||||
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 = "Агент завершил выполнение задания" }
|
||||
);
|
||||
});
|
||||
|
||||
@@ -53,5 +53,10 @@
|
||||
/// </summary>
|
||||
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",
|
||||
Description = "Расписание регламентной работы - Диапазн повторов",
|
||||
Value = "Отсутствует дата завершения"
|
||||
},
|
||||
new
|
||||
{
|
||||
Name = "OrderSearchDeltaDate",
|
||||
Description = "Промежуток времени для поиска нарядов в ЕСПП",
|
||||
Value = "01:30:00"
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace PARR.EsppApi
|
||||
this.espp = espp;
|
||||
}
|
||||
|
||||
public async Task<EsppResultBase<IEnumerable<EsppOrder>>> FindOrdersByPrefixAsync(FindOrdersQuery query)
|
||||
public async Task<EsppResultBase<IEnumerable<EsppOrder>>> FindOrdersAsync(FindOrdersQuery query)
|
||||
{
|
||||
logger.LogInformation("Привет!");
|
||||
|
||||
|
||||
@@ -6,9 +6,9 @@ namespace PARR.EsppApi
|
||||
public interface IEsppApiService
|
||||
{
|
||||
/// <summary>
|
||||
/// Найти наряды в ЕСПП по префиксу
|
||||
/// Найти наряды в ЕСПП
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<EsppResultBase<IEnumerable<EsppOrder>>> FindOrdersByPrefixAsync(FindOrdersQuery query);
|
||||
Task<EsppResultBase<IEnumerable<EsppOrder>>> FindOrdersAsync(FindOrdersQuery query);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,5 +5,8 @@
|
||||
/// </summary>
|
||||
public class EsppOrder
|
||||
{
|
||||
public string Number { get; set; } = string.Empty;
|
||||
|
||||
public string? WorkGroup { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,20 @@
|
||||
namespace PARR.EsppApi.Models.Query
|
||||
{
|
||||
/// <summary>
|
||||
/// Фильтр запроса в ЕСПП на поиск объектов
|
||||
/// </summary>
|
||||
public class FindOrdersQuery
|
||||
{
|
||||
//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.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; }
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,27 @@
|
||||
using PARR.EsppOrderLoader;
|
||||
|
||||
namespace PARR.EsppOrderLoaderWorker
|
||||
{
|
||||
public class Worker : BackgroundService
|
||||
{
|
||||
private readonly ILogger<Worker> _logger;
|
||||
private readonly IEsppOrderLoader esppOrderLoader;
|
||||
|
||||
public Worker(ILogger<Worker> logger)
|
||||
public Worker(ILogger<Worker> logger, IEsppOrderLoader esppOrderLoader)
|
||||
{
|
||||
_logger = logger;
|
||||
this.esppOrderLoader = esppOrderLoader;
|
||||
}
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
||||
//while (!stoppingToken.IsCancellationRequested)
|
||||
//{
|
||||
// _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
||||
// await Task.Delay(1000, stoppingToken);
|
||||
//}
|
||||
await esppOrderLoader.StartAsync();
|
||||
//_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
||||
////while (!stoppingToken.IsCancellationRequested)
|
||||
////{
|
||||
//// _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()
|
||||
{
|
||||
// var orders = await esppApiService.FindOrdersByPrefixAsync("ПАРР__");
|
||||
var result = await esppApiService.FindOrdersByPrefixAsync(new FindOrdersQuery { });
|
||||
var result = await esppApiService.FindOrdersAsync(new FindOrdersQuery { });
|
||||
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
<None Include="docker-compose.espp-order-manager.yml" />
|
||||
<None Include="docker-compose.espp-template-sync.yml" />
|
||||
<None Include="docker-compose.generator-templates.yml" />
|
||||
<None Include="docker-compose.master.yml" />
|
||||
<None Include="docker-compose.yml" />
|
||||
<None Include=".dockerignore" />
|
||||
<None Include="stack.yml" />
|
||||
|
||||
Reference in New Issue
Block a user