diff --git a/PARR.API/MappingProfiles/DomainToResponseProfile.cs b/PARR.API/MappingProfiles/DomainToResponseProfile.cs index 8e19f808..d5e4389e 100644 --- a/PARR.API/MappingProfiles/DomainToResponseProfile.cs +++ b/PARR.API/MappingProfiles/DomainToResponseProfile.cs @@ -77,6 +77,7 @@ namespace PARR.API.MappingProfiles CreateMap() .ForMember(d => d.IsActive, o => o.MapFrom(s => s.Template!.IsActiveTemplate)) .ForMember(d => d.ClosingCode, o => o.MapFrom()) + //todo .ForMember(d => d.FullDescription, o => o.MapFrom(s => s.Template!.ApplicationsInWork!.FullDescription)) .ForMember(d => d.ShortDescription, o => o.MapFrom(s => s.Template!.ApplicationsInWork!.ShortDescription)) .ForMember(d => d.Solution, o => o.MapFrom(s => s.Template!.ApplicationsInWork!.Solution)) diff --git a/PARR.DAL/Contracts/SettingsFromDb.cs b/PARR.DAL/Contracts/SettingsFromDb.cs index 469f9a28..32dfcb46 100644 --- a/PARR.DAL/Contracts/SettingsFromDb.cs +++ b/PARR.DAL/Contracts/SettingsFromDb.cs @@ -59,4 +59,5 @@ public TimeSpan OrderSearchDeltaDate { get; set; } } + } diff --git a/PARR.DAL/Migrations/DataContextModelSnapshot.cs b/PARR.DAL/Migrations/DataContextModelSnapshot.cs index a9d98ea7..48c86d1f 100644 --- a/PARR.DAL/Migrations/DataContextModelSnapshot.cs +++ b/PARR.DAL/Migrations/DataContextModelSnapshot.cs @@ -398,7 +398,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TemplateId"); - b.ToTable("AgentHistories"); + b.ToTable("AgentHistories", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.AgentHistoryLevel", b => @@ -419,7 +419,7 @@ namespace PARR.DAL.Migrations b.HasKey("Id"); - b.ToTable("AgentHistoryLevels"); + b.ToTable("AgentHistoryLevels", (string)null); b.HasData( new @@ -459,7 +459,7 @@ namespace PARR.DAL.Migrations b.HasIndex("ApplicationTypeId"); - b.ToTable("Applications"); + b.ToTable("Applications", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.ApplicationInHost", b => @@ -486,7 +486,7 @@ namespace PARR.DAL.Migrations b.HasIndex("HostId"); - b.ToTable("ApplicationsInHost"); + b.ToTable("ApplicationsInHost", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.ApplicationType", b => @@ -510,7 +510,7 @@ namespace PARR.DAL.Migrations b.HasKey("Id"); - b.ToTable("ApplicationTypes"); + b.ToTable("ApplicationTypes", (string)null); b.HasData( new @@ -595,7 +595,7 @@ namespace PARR.DAL.Migrations b.HasIndex("WorkId", "ApplicationId") .IsUnique(); - b.ToTable("ApplicationsInWorks"); + b.ToTable("ApplicationsInWorks", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.EkStatus", b => @@ -612,7 +612,7 @@ namespace PARR.DAL.Migrations b.HasKey("Code"); - b.ToTable("EkStatuses"); + b.ToTable("EkStatuses", (string)null); b.HasData( new @@ -675,7 +675,7 @@ namespace PARR.DAL.Migrations b.HasKey("Id"); - b.ToTable("EsppSchTypes"); + b.ToTable("EsppSchTypes", (string)null); b.HasData( new @@ -744,7 +744,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TypeScheduleId", "TypeId") .IsUnique(); - b.ToTable("EsppSchTypeConfigs"); + b.ToTable("EsppSchTypeConfigs", (string)null); b.HasData( new @@ -847,7 +847,7 @@ namespace PARR.DAL.Migrations b.HasKey("Id"); - b.ToTable("EsppSchTypeSchedules"); + b.ToTable("EsppSchTypeSchedules", (string)null); b.HasData( new @@ -908,7 +908,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TypeId"); - b.ToTable("EsppSchTypeValues"); + b.ToTable("EsppSchTypeValues", (string)null); b.HasData( new @@ -1511,7 +1511,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TypeValueId"); - b.ToTable("EsppSchValues"); + b.ToTable("EsppSchValues", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.Host", b => @@ -1549,7 +1549,7 @@ namespace PARR.DAL.Migrations b.HasIndex("ResponseAreaCode"); - b.ToTable("Hosts"); + b.ToTable("Hosts", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.Order", b => @@ -1587,7 +1587,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TemplateId"); - b.ToTable("Orders"); + b.ToTable("Orders", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.OrderStatus", b => @@ -1608,7 +1608,7 @@ namespace PARR.DAL.Migrations b.HasKey("Code"); - b.ToTable("OrderStatuses"); + b.ToTable("OrderStatuses", (string)null); b.HasData( new @@ -1664,7 +1664,7 @@ namespace PARR.DAL.Migrations b.HasKey("Id"); - b.ToTable("Processes"); + b.ToTable("Processes", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.ResponseArea", b => @@ -1681,7 +1681,7 @@ namespace PARR.DAL.Migrations b.HasKey("Code"); - b.ToTable("ResponseAreas"); + b.ToTable("ResponseAreas", (string)null); b.HasData( new @@ -1792,7 +1792,7 @@ namespace PARR.DAL.Migrations b.HasIndex("Name") .IsUnique(); - b.ToTable("Robots"); + b.ToTable("Robots", (string)null); b.HasData( new @@ -1847,7 +1847,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TemplateId", "RobotCode") .IsUnique(); - b.ToTable("RobotConfigurations"); + b.ToTable("RobotConfigurations", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.RobotHistory", b => @@ -1882,7 +1882,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TaskStatusCode"); - b.ToTable("RobotHistories"); + b.ToTable("RobotHistories", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.RobotHistoryLevel", b => @@ -1903,7 +1903,7 @@ namespace PARR.DAL.Migrations b.HasKey("Level"); - b.ToTable("RobotHistoryLevels"); + b.ToTable("RobotHistoryLevels", (string)null); b.HasData( new @@ -1950,7 +1950,7 @@ namespace PARR.DAL.Migrations b.HasKey("Code"); - b.ToTable("RobotStatuses"); + b.ToTable("RobotStatuses", (string)null); b.HasData( new @@ -1994,7 +1994,7 @@ namespace PARR.DAL.Migrations b.HasKey("Name"); - b.ToTable("Settings"); + b.ToTable("Settings", (string)null); b.HasData( new @@ -2085,7 +2085,7 @@ namespace PARR.DAL.Migrations b.HasIndex("ProcessId"); - b.ToTable("Subprocesses"); + b.ToTable("Subprocesses", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.TaskStatus", b => @@ -2106,7 +2106,7 @@ namespace PARR.DAL.Migrations b.HasKey("Code"); - b.ToTable("TaskStatuses"); + b.ToTable("TaskStatuses", (string)null); b.HasData( new @@ -2169,7 +2169,7 @@ namespace PARR.DAL.Migrations b.HasIndex("Name") .IsUnique(); - b.ToTable("Templates"); + b.ToTable("Templates", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.Tnk", b => @@ -2198,7 +2198,7 @@ namespace PARR.DAL.Migrations b.HasIndex("SubprocessId"); - b.ToTable("Tnks"); + b.ToTable("Tnks", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.Work", b => @@ -2227,7 +2227,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TnkId"); - b.ToTable("Works"); + b.ToTable("Works", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.AgentHistory", b => diff --git a/PARR.DAL/Models/ApplicationsInWork.cs b/PARR.DAL/Models/ApplicationsInWork.cs index 86b997fe..0ccbc4d2 100644 --- a/PARR.DAL/Models/ApplicationsInWork.cs +++ b/PARR.DAL/Models/ApplicationsInWork.cs @@ -1,5 +1,7 @@ using Microsoft.EntityFrameworkCore; +using PARR.DAL.Contracts; using PARR.DAL.Models.Base; +using PARR.DAL.Settings; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; @@ -24,35 +26,25 @@ namespace PARR.DAL.Models public required string ShortDescription { get; set; } - public required string FullDescription { get; set; } + //public required string FullDescription { get; set; } + + private string _fullDescription = string.Empty; + public required string FullDescription + { + get + { + //В полное описание подставляем префикс, для дальнейшего поиска наряда + return $"{_fullDescription} \r\n{PrefixSettings.Prefix}"; + } + set + { + //удаляем префикс, если он есть + _fullDescription = value.Replace($"\r\n{PrefixSettings.Prefix}", ""); + } + } public required string Solution { get; set; } - ///// - ///// Выполняется автоматически агентом на сервере, скриптами - ///// - //public bool? IsAutomatic { get; set; } - - ///// - ///// Скрипт для автоматического выполнения - ///// - //public string AgentScript { get; set; } = string.Empty; - - ///// - ///// Какое-то имя которое мы передаем агенту, пока непонятно что это такое. - ///// - //public string AgentName { get; set; } = string.Empty; - - ///// - ///// Расписание: Время создания наряда и выполнения скрипта (чч:мм:сс) - ///// - //public TimeSpan ScheduleGenerationTime { get; set; } - - ///// - ///// Расписание: Первое срабатывание - ///// - //public DateOnly ScheduleStartDate { get; set; } - /// /// Время последнего запуска скрипта/генерации наряда /// diff --git a/PARR.DAL/ParrDalInstaller.cs b/PARR.DAL/ParrDalInstaller.cs index fa3f6069..f444992a 100644 --- a/PARR.DAL/ParrDalInstaller.cs +++ b/PARR.DAL/ParrDalInstaller.cs @@ -9,6 +9,7 @@ using PARR.DAL.Services.Implementations; using PARR.DAL.Services.Implementations.AIHIT; using PARR.DAL.Services.Interfaces; using PARR.DAL.Services.Interfaces.AIHIT; +using PARR.DAL.Settings; using PARR.DAL.TransformServices; namespace PARR.DAL @@ -83,9 +84,9 @@ namespace PARR.DAL var settingsFromDb = new SettingsFromDb(); configuration.GetSection(nameof(SettingsFromDb)).Bind(settingsFromDb); services.AddSingleton(settingsFromDb); + + PrefixSettings.Prefix = settingsFromDb.TemplatePrefixName; } - - } } diff --git a/PARR.DAL/Settings/PrefixSettings.cs b/PARR.DAL/Settings/PrefixSettings.cs new file mode 100644 index 00000000..ab016935 --- /dev/null +++ b/PARR.DAL/Settings/PrefixSettings.cs @@ -0,0 +1,10 @@ +namespace PARR.DAL.Settings +{ + /// + /// Для использования в моделе, в геттере, ApplicationInWork + /// + internal static class PrefixSettings + { + public static string Prefix = "default value"; + } +} diff --git a/PARR.EsppApi/EsppApiService.cs b/PARR.EsppApi/EsppApiService.cs index 1646b26d..603e00ff 100644 --- a/PARR.EsppApi/EsppApiService.cs +++ b/PARR.EsppApi/EsppApiService.cs @@ -20,18 +20,23 @@ namespace PARR.EsppApi public async Task>> FindOrdersAsync(FindOrdersQuery query) { + DateTime? generateDateStartWOTimeZone = query.GenerateDateStart.HasValue ? query.GenerateDateStart.Value.AddHours(esppOrderSettings.EsppUserTimeZone) : null; + DateTime? generateDateEndWOTimeZone = query.GenerateDateEnd.HasValue ? query.GenerateDateEnd.Value.AddHours(esppOrderSettings.EsppUserTimeZone) : null; + var conditions = new List(); if (!string.IsNullOrEmpty(query.DescriptionContains)) conditions.Add($"description like \"*{query.DescriptionContains}*\""); //if (!string.IsNullOrEmpty(query.TemplateNameContains)) // conditions.Add($"templateName like \"*{query.TemplateNameContains}*\""); - if (query.GenerateDateStart.HasValue) - conditions.Add($"open.time>='{query.GenerateDateStart.Value.Day}/{query.GenerateDateStart.Value.Month}/{query.GenerateDateStart.Value.Year}" + - $" {query.GenerateDateStart.Value.Hour}:{query.GenerateDateStart.Value.Minute}:{query.GenerateDateStart.Value.Second}'"); - if (query.GenerateDateEnd.HasValue) - conditions.Add($"open.time<='{query.GenerateDateEnd.Value.Day}/{query.GenerateDateEnd.Value.Month}/{query.GenerateDateEnd.Value.Year}" + - $" {query.GenerateDateEnd.Value.Hour}:{query.GenerateDateEnd.Value.Minute}:{query.GenerateDateEnd.Value.Second}'"); + + if (generateDateStartWOTimeZone.HasValue) + conditions.Add($"open.time>='{generateDateStartWOTimeZone.Value.Day}/{generateDateStartWOTimeZone.Value.Month}/{generateDateStartWOTimeZone.Value.Year}" + + $" {generateDateStartWOTimeZone.Value.Hour}:{generateDateStartWOTimeZone.Value.Minute}:{generateDateStartWOTimeZone.Value.Second}'"); + + if (generateDateEndWOTimeZone.HasValue) + conditions.Add($"open.time<='{generateDateEndWOTimeZone.Value.Day}/{generateDateEndWOTimeZone.Value.Month}/{generateDateEndWOTimeZone.Value.Year}" + + $" {generateDateEndWOTimeZone.Value.Hour}:{generateDateEndWOTimeZone.Value.Minute}:{generateDateEndWOTimeZone.Value.Second}'"); if (conditions.Count < 1) { diff --git a/PARR.EsppApi/Models/Query/FindOrdersQuery.cs b/PARR.EsppApi/Models/Query/FindOrdersQuery.cs index ae918f5b..1e3262fd 100644 --- a/PARR.EsppApi/Models/Query/FindOrdersQuery.cs +++ b/PARR.EsppApi/Models/Query/FindOrdersQuery.cs @@ -5,20 +5,22 @@ /// public class FindOrdersQuery { - //todo: тут поля для запроса списка нарядов из еспп + /// /// Подробное описание, содержит значение /// public string? DescriptionContains { get; set; } + private DateTime? _generateDateStart; + /// - /// Дата сначала которой выбирать созданные наряды + /// Дата сначала которой выбирать созданные наряды, UTC /// public DateTime? GenerateDateStart { get; set; } /// - /// Дата конца периода до которого создавались наряды + /// Дата конца периода до которого создавались наряды, UTC /// public DateTime? GenerateDateEnd { get; set; } } diff --git a/PARR.EsppApi/Settings/EsppOrderSettings.cs b/PARR.EsppApi/Settings/EsppOrderSettings.cs index 48d1cf71..9c2eeba9 100644 --- a/PARR.EsppApi/Settings/EsppOrderSettings.cs +++ b/PARR.EsppApi/Settings/EsppOrderSettings.cs @@ -1,4 +1,6 @@ -namespace PARR.EsppApi.Settings +using System.Security; + +namespace PARR.EsppApi.Settings { internal class EsppOrderSettings { @@ -6,5 +8,9 @@ public string UserName { get; set; } = string.Empty; public string Password { get; set; } = string.Empty; + /// + /// Часовая зона пользователя в ЕСПП относительно UTC + /// + public int EsppUserTimeZone { get; set; } } } diff --git a/PARR.EsppOrderLoader/EsppOrderLoader.cs b/PARR.EsppOrderLoader/EsppOrderLoader.cs index 01c9acfa..72f171af 100644 --- a/PARR.EsppOrderLoader/EsppOrderLoader.cs +++ b/PARR.EsppOrderLoader/EsppOrderLoader.cs @@ -84,7 +84,12 @@ namespace PARR.EsppOrderLoader private async Task?> GetOrdersAsync() { - var searchQuery = new FindOrdersQuery { ShortDescriptionContains = settingsFromDb.TemplatePrefixName, DateEnd = DateTime.Now.Add(settingsFromDb.OrderSearchDeltaDate) }; + var searchQuery = new FindOrdersQuery { + DescriptionContains = settingsFromDb.TemplatePrefixName, + GenerateDateStart = DateTimeOffset.UtcNow.DateTime.Add(-settingsFromDb.OrderSearchDeltaDate).AddDays(-30), + GenerateDateEnd = DateTimeOffset.UtcNow.DateTime + }; + var downloadResult = await esppApiService.FindOrdersAsync(searchQuery); if (!downloadResult.IsSuccess) diff --git a/PARR.EsppOrderLoaderWorker/appsettings.json b/PARR.EsppOrderLoaderWorker/appsettings.json index 0eb47618..7f195c1e 100644 --- a/PARR.EsppOrderLoaderWorker/appsettings.json +++ b/PARR.EsppOrderLoaderWorker/appsettings.json @@ -28,5 +28,11 @@ }, "WorkerSettings": { "RepeatEvery": "1:00:00" + }, + "EsppOrderSettings": { + "Url": "http://rzd-espp-t-rpa-app-1.gvc.oao.rzd:8080/espp_api/OperationExecutor/", + "UserName": "Auto-PTK-DVS", + "Password": "123456789", + "EsppUserTimeZone": -10 } } diff --git a/PARR.Test/appsettings.json b/PARR.Test/appsettings.json index 558b1f03..c66159c7 100644 --- a/PARR.Test/appsettings.json +++ b/PARR.Test/appsettings.json @@ -26,6 +26,7 @@ "EsppOrderSettings": { "Url": "http://rzd-espp-t-rpa-app-1.gvc.oao.rzd:8080/espp_api/OperationExecutor/", "UserName": "Auto-PTK-DVS", - "Password": "123456789" + "Password": "123456789", + "EsppUserTimeZone": -10 } }