diff --git a/PARR.EsppSync/IEsppObject.cs b/PARR.EsppSync/IEsppObject.cs
index 64f3f877..54862c3b 100644
--- a/PARR.EsppSync/IEsppObject.cs
+++ b/PARR.EsppSync/IEsppObject.cs
@@ -6,6 +6,6 @@ namespace PARR.EsppSync
{
public string TemplateName { get; set; }
- public RobotsEnum Robot { get; set; }
+ public RobotsEnum Robot { get; }
}
}
diff --git a/PARR.EsppSync/ISyncService.cs b/PARR.EsppSync/ISyncService.cs
index 6c46d060..73b027b2 100644
--- a/PARR.EsppSync/ISyncService.cs
+++ b/PARR.EsppSync/ISyncService.cs
@@ -1,5 +1,4 @@
-using PARR.Constants;
-using PARR.DAL.Models;
+using PARR.DAL.Models;
namespace PARR.EsppSync
{
@@ -9,7 +8,7 @@ namespace PARR.EsppSync
///
///
///
- public delegate EsppObject ParserHandlerDelegate(string str) where EsppObject : class, IEsppObject;
+ public delegate EsppObject? ParserHandlerDelegate(string str) where EsppObject : class, IEsppObject;
///
/// Конвертирует Template в модель для сравнения
diff --git a/PARR.EsppTemplateSync/Domain/EsppTemplate.cs b/PARR.EsppTemplateSync/Domain/EsppObjectTemplate.cs
similarity index 76%
rename from PARR.EsppTemplateSync/Domain/EsppTemplate.cs
rename to PARR.EsppTemplateSync/Domain/EsppObjectTemplate.cs
index 3adcc400..21c2f4ff 100644
--- a/PARR.EsppTemplateSync/Domain/EsppTemplate.cs
+++ b/PARR.EsppTemplateSync/Domain/EsppObjectTemplate.cs
@@ -1,8 +1,14 @@
-namespace PARR.EsppTemplateSync.Domain
+using PARR.Constants;
+using PARR.EsppSync;
+
+namespace PARR.EsppTemplateSync.Domain
{
- internal class EsppTemplate
+ internal class EsppObjectTemplate : IEsppObject
{
- public required string Name { get; set; }
+ public required string TemplateName { get; set; }
+
+ public RobotsEnum Robot => RobotsEnum.TemplateOrder;
+
public bool IsActive { get; set; }
public required string WorkGroup { get; set; }
public required string ShortDescription { get; set; }
diff --git a/PARR.EsppTemplateSync/EsppTemplateSyncInstaller.cs b/PARR.EsppTemplateSync/EsppTemplateSyncInstaller.cs
index 8e598819..b4ee4398 100644
--- a/PARR.EsppTemplateSync/EsppTemplateSyncInstaller.cs
+++ b/PARR.EsppTemplateSync/EsppTemplateSyncInstaller.cs
@@ -2,7 +2,8 @@
using Microsoft.Extensions.DependencyInjection;
using PARR.BLL;
using PARR.DAL;
-using PARR.EsppTemplateSync.Services;
+using PARR.EsppSync;
+using PARR.EsppTemplateSync.Domain;
using PARR.EsppTemplateSync.Settings;
namespace PARR.EsppTemplateSync
@@ -12,16 +13,14 @@ namespace PARR.EsppTemplateSync
public static void InstallEsppTemplateSyncServices(this IServiceCollection services, IConfiguration configuration)
{
services.InstallBllServices(configuration);
- services.InstallDalServices(configuration);
+ //services.InstallDalServices(configuration);
+ services.InstallEsppSyncServices(configuration);
var globalSettings = new GlobalSettings();
configuration.GetSection(nameof(GlobalSettings)).Bind(globalSettings);
services.AddSingleton(globalSettings);
- services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
services.AddTransient();
- services.AddTransient();
- services.AddTransient();
}
public static IConfigurationBuilder AddEsppTemplateConfigurations(this IConfigurationBuilder builder, IServiceCollection services)
diff --git a/PARR.EsppTemplateSync/MappingProfiles/DomainToDomainProfile.cs b/PARR.EsppTemplateSync/MappingProfiles/DomainToDomainProfile.cs
deleted file mode 100644
index c49240bc..00000000
--- a/PARR.EsppTemplateSync/MappingProfiles/DomainToDomainProfile.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using AutoMapper;
-using PARR.DAL.Models;
-using PARR.EsppTemplateSync.Domain;
-
-namespace PARR.EsppTemplateSync.MappingProfiles
-{
- public class DomainToDomainProfile : Profile
- {
- public DomainToDomainProfile()
- {
-
- CreateMap()
- .ForMember(d => d.Name, o => o.MapFrom(s => s.Name))
- .ForMember(d => d.IsActive, o => o.MapFrom(s => s.IsActiveTemplate))
- .ForMember(d => d.WorkGroup, o => o.MapFrom(s => s.Host!.WorkGroup))
- .ForMember(d => d.ShortDescription, o => o.MapFrom(s => s.ApplicationsInWork!.ShortDescription))
- .ForMember(d => d.ResponseArea, o => o.MapFrom(s => s.Host!.ResponseArea!.Name))
- .ForMember(d => d.Duration, o => o.MapFrom(s => s.ApplicationsInWork!.TemplateDuration))
- .ForMember(d => d.EK, o => o.MapFrom(s => s.Host!.Ek))
- //.ForMember(d => d.Initiator, o => o.MapFrom(s => )) TODO откуда то нужно брать инициатора
- .ForMember(d => d.FullDescription, o => o.MapFrom(s => s.ApplicationsInWork!.FullDescription))
- //.ForMember(d => d.ClosingCode, o => o.MapFrom(s => s.)) TODO toоda же к инициатору
- .ForMember(d => d.Solution, o => o.MapFrom(s => s.ApplicationsInWork!.Solution))
- .ForMember(d => d.Process, o => o.MapFrom(s => s.ApplicationsInWork!.Work!.Tnk!.Subprocess!.Process!.Name))
- .ForMember(d => d.SubProcess, o => o.MapFrom(s => s.ApplicationsInWork!.Work!.Tnk!.Subprocess!.Name))
- .ForMember(d => d.TNK, o => o.MapFrom(s => s.ApplicationsInWork!.Work!.Tnk!.Name))
- .ForMember(d => d.Work, o => o.MapFrom(s => s.ApplicationsInWork!.Work!.Name));
- }
- }
-}
diff --git a/PARR.EsppTemplateSync/PARR.EsppTemplateSync.csproj b/PARR.EsppTemplateSync/PARR.EsppTemplateSync.csproj
index 09175082..56c2b3ea 100644
--- a/PARR.EsppTemplateSync/PARR.EsppTemplateSync.csproj
+++ b/PARR.EsppTemplateSync/PARR.EsppTemplateSync.csproj
@@ -7,7 +7,6 @@
-
diff --git a/PARR.EsppTemplateSync/Services/IManager.cs b/PARR.EsppTemplateSync/Services/IManager.cs
deleted file mode 100644
index 31fff479..00000000
--- a/PARR.EsppTemplateSync/Services/IManager.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace PARR.EsppTemplateSync.Services
-{
- internal interface IManager
- {
- Task ManageFileAsync(string path);
- Task ManageStringAsync(string str);
- }
-}
diff --git a/PARR.EsppTemplateSync/Services/IParserService.cs b/PARR.EsppTemplateSync/Services/IParserService.cs
deleted file mode 100644
index 1dd1d75b..00000000
--- a/PARR.EsppTemplateSync/Services/IParserService.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using PARR.EsppTemplateSync.Domain;
-
-namespace PARR.EsppTemplateSync.Services
-{
- internal interface IParserService
- {
- EsppTemplate? ParseString(string str);
- }
-}
diff --git a/PARR.EsppTemplateSync/Services/Manager.cs b/PARR.EsppTemplateSync/Services/Manager.cs
deleted file mode 100644
index f3d30a0e..00000000
--- a/PARR.EsppTemplateSync/Services/Manager.cs
+++ /dev/null
@@ -1,180 +0,0 @@
-using AutoMapper;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using PARR.Constants;
-using PARR.DAL.Contracts;
-using PARR.DAL.Models;
-using PARR.DAL.Services.Interfaces;
-using PARR.EsppTemplateSync.Domain;
-using PARR.EsppTemplateSync.Settings;
-
-namespace PARR.EsppTemplateSync.Services
-{
- internal class Manager : IManager
- {
- private readonly ILogger logger;
- private readonly IServiceProvider serviceProvider;
- private readonly IParserService parserService;
- private readonly GlobalSettings globalSettings;
- private readonly IMapper mapper;
-
- public Manager(
- ILogger logger,
- IServiceProvider serviceProvider,
- IParserService parserService,
- GlobalSettings globalSettings,
- IMapper mapper
- )
- {
- this.logger = logger;
- this.serviceProvider = serviceProvider;
- this.parserService = parserService;
- this.globalSettings = globalSettings;
- this.mapper = mapper;
- }
-
- public Task ManageFileAsync(string path)
- {
- throw new NotImplementedException();
- }
-
- public async Task ManageStringAsync(string str)
- {
-
- // тут обязательно нужна проверка, если str не того формата, возникает exception в ParseStringAsync
- if (string.IsNullOrEmpty(str))
- return;
-
- var esppTemplate = parserService.ParseString(str);
-
- if (esppTemplate == null)
- {
- return;
- }
- else
- {
- //если шаблон не аквтивен, пропускаем
- //if (!esppTemplate.IsActive)
- //{
- // return isSuccess;
- //}
-
- await SyncTemplateAsync(esppTemplate);
-
- }
-
- return;
- }
-
-
- private async Task SyncTemplateAsync(EsppTemplate esppTemplate)
- {
- using (var scope = serviceProvider.CreateScope())
- {
- var services = scope.ServiceProvider;
-
- var templateService = services.GetService();
- if (templateService == null)
- throw new Exception($"Не найден сервис: {nameof(ITemplateService)}");
-
- var robotConfigurationService = services.GetService();
- if (robotConfigurationService == null)
- throw new Exception($"Не найден сервис: {nameof(IRobotConfigurationService)}");
-
- Template? template = await templateService.GetTemplateByNameAsync(esppTemplate.Name);
-
- //существует в ЕСПП но отсутствует в ПАРР.
- //TODO деактивируем и видимо ещё что-то нужно
- if (template == null)
- {
- // создает запись-шаблон из ЕСПП в ПАРР. Возможно избыточно так как эталон в ПАРР
- ////esppTemplate.StatusCode = "Deactivating";
- ////---
- //esppTemplate.StatusCode = (int)StatusTemplateEnum.Ok;
- //esppTemplate.IsActive = false;
- //if (!await templateService.CreateAsync(esppTemplate) || !await templateService.CommitAsync())
- //{
- // logger.LogError($"Не удалось создать запись Template {esppTemplate.Name}({esppTemplate.ShortDescription})");
- //}
- //else
- // logger.LogInformation($"----- Создана запись Template {esppTemplate.Name}({esppTemplate.ShortDescription}) -----");
- //---
- logger.LogWarning($"----- Найден шаблон ЕСПП незарегистрированный в ПАРР {esppTemplate.Name}({esppTemplate.ShortDescription}) -----");
-
- return;
- }
- else
- {
- var mappedTemplate = mapper.Map(template);
- if (mappedTemplate == null)
- return;
-
- var isChanged = IsChanged(mappedTemplate, esppTemplate);
- if (isChanged)
- {
- SetUpdateStatus(template, robotConfigurationService);
-
- if (!await templateService.CommitAsync())
- logger.LogError($"Не удалось изменить запись Template {template.Name}");
- else
- logger.LogInformation($"----- Установлен принудительный статус {TaskStatusEnum.Updating} Template {template.Name} -----");
-
- } //надо ли проверять если не изменился, но был статус Updating не понятно. Доверяем роботу пока, что после окончания работ он точно сообщит
- else
- {
- //если все поля совпали
- //проверяем, какой был статус у шаблона, если он был не Ок, то ставим ему ОК
- var robotConfig = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, ref template);
- if (robotConfig.TaskStatusCode != (int)TaskStatusEnum.Ok)
- {
- robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Ok, ref robotConfig);
- if (!await templateService.CommitAsync())
- logger.LogError($"Не удалось изменить запись Template {template.Name}");
- else
- logger.LogInformation($"----- Установлен принудительный статус {TaskStatusEnum.Ok.ToString()} Template {template.Name} -----");
- }
- }
- }
- }
-
- return;
- }
-
-
- private void SetUpdateStatus(Template template, IRobotConfigurationService robotConfigurationService)
- {
- var robotConfig = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, ref template);
- robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref robotConfig);
- }
-
-
- private bool IsChanged(EsppTemplate template, EsppTemplate esppTemplate)
- {
- foreach (var prop in template.GetType().GetProperties())
- {
- if (prop == null)
- continue;
-
- if (globalSettings.IgnoreTemplateFields != null && globalSettings.IgnoreTemplateFields.Contains(prop.Name))
- continue;
-
- var parrValue = template.GetType().GetProperty(prop.Name)?.GetValue(template, null);
- var esppValue = esppTemplate.GetType().GetProperty(prop.Name)?.GetValue(esppTemplate, null);
-
- if (parrValue == null || esppValue == null)
- continue;
-
- //Replace("\r","").Replace("\n","") - в подробном описании могут быть переносы строк, в Rabbit прилетает без переносов. Убираем переносы для стравнения
- var parrValueStr = parrValue!.ToString()!.ToLower().Replace("\r", "").Replace("\n", "");
- var esppValueStr = esppValue!.ToString()!.ToLower();
-
- if (parrValueStr != esppValueStr)
- {
- logger.LogDebug($"Не совпадают поля. parrValueStr: {parrValueStr}, esppValueStr: {esppValueStr}");
- return true;
- }
- }
- return false;
- }
- }
-}
\ No newline at end of file
diff --git a/PARR.EsppTemplateSync/Services/ParserService.cs b/PARR.EsppTemplateSync/Services/ParserService.cs
deleted file mode 100644
index 43635045..00000000
--- a/PARR.EsppTemplateSync/Services/ParserService.cs
+++ /dev/null
@@ -1,170 +0,0 @@
-using Microsoft.Extensions.Logging;
-using PARR.DAL.Contracts;
-using PARR.EsppTemplateSync.Domain;
-using PARR.EsppTemplateSync.Settings;
-using System.Globalization;
-
-namespace PARR.EsppTemplateSync.Services
-{
- internal class ParserService : IParserService
- {
- private readonly ILogger logger;
- private readonly GlobalSettings globalSettings;
- private readonly SettingsFromDb settingsFromDb;
-
- public ParserService(
- ILogger logger,
- GlobalSettings globalSettings,
- SettingsFromDb settingsFromDb
- )
- {
- this.logger = logger;
- this.globalSettings = globalSettings;
- this.settingsFromDb = settingsFromDb;
- }
- public async Task ParseFileAsync(string path)
- {
- //TODO:
-
- bool isSuccess = true;
-
-
- return isSuccess;
- }
-
- public EsppTemplate? ParseString(string str)
- {
- // TODO: а если формат нет тот? Все будет ок?
- var splittedContent = str.Split(globalSettings.ParsingSeparator);
- if (splittedContent.Length != 17)
- {
- return null;
- }
-
- //var name = splittedContent[0].Trim().Substring(1, splittedContent[0].Length - 2);
- var name = splittedContent[0].Trim();
-
- CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
- if (!string.IsNullOrEmpty(settingsFromDb.TemplatePrefixName)
- && !name.StartsWith(settingsFromDb.TemplatePrefixName, true, currentCulture)
- )
- {
- logger.LogWarning($"Имя шаблона не соответствует обязательному префиксу({settingsFromDb.TemplatePrefixName}). Шаблон {name} игнорирован");
- return null;
-
- }
-
- if (!bool.TryParse(splittedContent[1].Trim(), out var isActive))
- isActive = false;
- var workGroup = splittedContent[2].Trim();
- var shortDescription = splittedContent[3].Trim();
- var category = splittedContent[4].Trim();
- var responseArea = splittedContent[5].Trim();
- var duration = splittedContent[6].Trim();
- var ek = splittedContent[7].Trim();
- var initiator = splittedContent[8].Trim();
-
- var fullDescription = splittedContent[9].Trim();
- var closingCode = splittedContent[10].Trim();
- var solution = splittedContent[11].Trim();
- var process = splittedContent[12].Trim();
- var subProcess = splittedContent[13].Trim();
- var tnk = splittedContent[14].Trim();
- var work = splittedContent[15].Trim();
- var worker = splittedContent[16].Trim();
-
- var template = new EsppTemplate
- {
- Name = name,
- IsActive = isActive,
- WorkGroup = workGroup,
- ShortDescription = shortDescription,
- //Category = category,
- ResponseArea = responseArea,
- Duration = duration,
- EK = ek,
- //Initiator = initiator,
- FullDescription = fullDescription,
- //ClosingCode = closingCode,
- Solution = solution,
- Process = process,
- SubProcess = subProcess,
- TNK = tnk,
- Work = work,
- //Worker = worker
-
- };
-
- return template;
- }
-
-
-
- private DateTimeOffset? ConvertDateFromStr(string dateString)
- {
- var format = "dd/MM/yy HH:mm:ss";
- var provider = CultureInfo.CurrentCulture;
- try
- {
- var result = DateTimeOffset.ParseExact(dateString, format, provider).ToOffset(new TimeSpan(0));
- logger.LogInformation($"{dateString} было преобразовано в {result.ToString()}.");
- return result;
- }
- catch (FormatException)
- {
- logger.LogWarning($"{dateString} имеет некоррктный формат для преобразование в DateTimeOffset");
- }
- return null;
- }
- }
-
-
- //// dll
-
- //public delegate Dt CustomParserHandlerDelegate(string str);
-
- //public class Converter
- //{
- // public T ParseString(string str, CustomParserHandlerDelegate customParser)
- // {
- // var obj = customParser(str);
-
- // return obj;
- // }
- //}
-
- //public class RunConverter
- //{
- // public void Run(CustomParserHandlerDelegate customParser)
- // {
- // var conv = new Converter();
- // //var obj = conv.ParseString("sdfsdfsdf", SuperParser);
- // var obj = conv.ParseString("sdfsdfsdf", customParser);
- // }
- //}
-
-
- ////---
- //public class Xxx
- //{
- // void Test()
- // {
- // var rc = new RunConverter();
- // rc.Run(SuperParser);
- // }
-
-
- // Model1 SuperParser(string str)
- // {
- // // custom logic
-
- // return new Model1 { Field = str };
- // }
- //}
-
-
- //public class Model1
- //{
- // public string Field { get; set; } = "111";
- //}
-}
diff --git a/PARR.EsppTemplateSync/TemplateFileSyncer.cs b/PARR.EsppTemplateSync/TemplateFileSyncer.cs
index 60ed197c..1b44ac00 100644
--- a/PARR.EsppTemplateSync/TemplateFileSyncer.cs
+++ b/PARR.EsppTemplateSync/TemplateFileSyncer.cs
@@ -1,6 +1,5 @@
using Microsoft.Extensions.Logging;
using PARR.BLL.Services.Interfaces;
-using PARR.EsppTemplateSync.Services;
using PARR.EsppTemplateSync.Settings;
namespace PARR.EsppTemplateSync
@@ -10,7 +9,7 @@ namespace PARR.EsppTemplateSync
private readonly ILogger logger;
private readonly IFileService fileService;
private readonly GlobalSettings globalSettings;
- private readonly IManager manager;
+ //private readonly IManager manager;
private readonly string dirPath;
private readonly string filterExtensions;
@@ -20,14 +19,14 @@ namespace PARR.EsppTemplateSync
BLL.Settings.StorageSettings storageSettings,
ILogger logger,
IFileService fileService,
- GlobalSettings globalSettings,
- IManager manager
+ GlobalSettings globalSettings//,
+ // IManager manager
)
{
this.logger = logger;
this.fileService = fileService;
this.globalSettings = globalSettings;
- this.manager = manager;
+ //this.manager = manager;
if (storageSettings.EsppTemplates == null)
{
logger.LogError("Нет секции настроек хранилища. StorageSettings, EsppTemplates");
@@ -120,17 +119,17 @@ namespace PARR.EsppTemplateSync
private async Task ParseFileAsync(string path)
{
logger.LogInformation($"--- --- Найден файл. Готов для парсинга {path} --- ---");
- var parseResult = await manager.ManageFileAsync(path);//parserService.ParseFileAsync(path);
+ //var parseResult = await manager.ManageFileAsync(path);//parserService.ParseFileAsync(path);
- if (parseResult)
- {
- logger.LogInformation($"Парсинг успешно завершен. Удаляю файл {path}");
- var removeResult = fileService.DeleteFile(path);
- }
- else
- {
- logger.LogError($"Парсинг завершен c ошибкой. Файл не удален {path}");
- }
+ //if (parseResult)
+ //{
+ // logger.LogInformation($"Парсинг успешно завершен. Удаляю файл {path}");
+ // var removeResult = fileService.DeleteFile(path);
+ //}
+ //else
+ //{
+ // logger.LogError($"Парсинг завершен c ошибкой. Файл не удален {path}");
+ //}
}
}
diff --git a/PARR.EsppTemplateSync/TemplateMQSyncer.cs b/PARR.EsppTemplateSync/TemplateMQSyncer.cs
index fdce03be..a077f5d0 100644
--- a/PARR.EsppTemplateSync/TemplateMQSyncer.cs
+++ b/PARR.EsppTemplateSync/TemplateMQSyncer.cs
@@ -1,6 +1,9 @@
using Microsoft.Extensions.Logging;
using PARR.BLL.Services.Interfaces;
-using PARR.EsppTemplateSync.Services;
+using PARR.DAL.Contracts;
+using PARR.DAL.Models;
+using PARR.EsppSync;
+using PARR.EsppTemplateSync.Domain;
using PARR.EsppTemplateSync.Settings;
namespace PARR.EsppTemplateSync
@@ -8,22 +11,24 @@ namespace PARR.EsppTemplateSync
internal class TemplateMQSyncer : ITemplateSyncer
{
private readonly ILogger logger;
- private readonly IManager manager;
private readonly GlobalSettings globalSettings;
private readonly IMqService mqService;
+ private readonly ISyncService syncService;
+ private readonly SettingsFromDb settingsFromDb;
public TemplateMQSyncer(
ILogger logger,
- IManager manager,
GlobalSettings globalSettings,
- IMqService mqService
+ IMqService mqService,
+ ISyncService syncService,
+ SettingsFromDb settingsFromDb
)
{
this.logger = logger;
- this.manager = manager;
this.globalSettings = globalSettings;
this.mqService = mqService;
-
+ this.syncService = syncService;
+ this.settingsFromDb = settingsFromDb;
if (globalSettings.MqSettings == null)
{
logger.LogError("Нет секции настроек хранилища. MqSettings, EsppTemplates");
@@ -33,7 +38,7 @@ namespace PARR.EsppTemplateSync
public void Start()
{
- var isConnected = mqService.InitConsumer(globalSettings!.MqSettings!, manager.ManageStringAsync);
+ var isConnected = mqService.InitConsumer(globalSettings!.MqSettings!, SyncTemplateAsync);
if (!isConnected)
throw new Exception("Ошибка при подключении к RabbitMq");
@@ -48,6 +53,108 @@ namespace PARR.EsppTemplateSync
logger.LogInformation($"=== === === Соединение с очередью {globalSettings.MqSettings!.QueueName} закрыто === === ===");
}
+
+ private async Task SyncTemplateAsync(string str)
+ {
+ await syncService.SyncEsppObjectAsync(str, ParseStrToEsppObject, ConvertDbObjToEsppObj);
+ }
+
+
+ ///
+ /// Преобразование модели БД в модель для сравнения
+ ///
+ ///
+ ///
+ ///
+ private EsppObjectTemplate ConvertDbObjToEsppObj(Template template)
+ {
+ var templateFromDb = new EsppObjectTemplate
+ {
+ TemplateName = template.Name,
+ IsActive = template.IsActiveTemplate,
+ WorkGroup = template.Host!.WorkGroup!,
+ ShortDescription = template.ApplicationsInWork!.ShortDescription,
+ ResponseArea = template.Host!.ResponseArea!.Name,
+ Duration = template.ApplicationsInWork.TemplateDuration,
+ EK = template.Host.Ek,
+ FullDescription = template.ApplicationsInWork.FullDescription,
+ Solution = template.ApplicationsInWork.Solution,
+ Process = template.ApplicationsInWork.Work!.Tnk!.Subprocess!.Process!.Name,
+ SubProcess = template.ApplicationsInWork.Work.Tnk.Subprocess.Name,
+ TNK = template.ApplicationsInWork.Work.Tnk.Name,
+ Work = template.ApplicationsInWork.Work.Name
+ };
+
+ return templateFromDb;
+ }
+
+
+ ///
+ /// Парсинг из строки в модель для сравнения
+ ///
+ ///
+ ///
+ ///
+ private EsppObjectTemplate? ParseStrToEsppObject(string str)
+ {
+ var splittedContent = str.Split(globalSettings.ParsingSeparator);
+ if (splittedContent.Length != 17)
+ {
+ logger.LogError($"Входная строка после сплита не содержит 17 объектов (факт: {splittedContent.Length}).");
+ return null;
+ }
+
+ var templateName = splittedContent[0].Trim();
+
+ var currentCulture = Thread.CurrentThread.CurrentCulture;
+ if (!string.IsNullOrEmpty(settingsFromDb.TemplatePrefixName) && !templateName.StartsWith(settingsFromDb.TemplatePrefixName, true, currentCulture))
+ {
+ logger.LogWarning($"Имя шаблона не соответствует обязательному префиксу({settingsFromDb.TemplatePrefixName}). Шаблон {templateName} игнорирован");
+ return null;
+ }
+
+ bool.TryParse(splittedContent[1].Trim(), out var isActive);
+
+ var workGroup = splittedContent[2].Trim();
+ var shortDescription = splittedContent[3].Trim();
+ var category = splittedContent[4].Trim();
+ var responseArea = splittedContent[5].Trim();
+ var duration = splittedContent[6].Trim();
+ var ek = splittedContent[7].Trim();
+ var initiator = splittedContent[8].Trim();
+
+ var fullDescription = splittedContent[9].Trim();
+ var closingCode = splittedContent[10].Trim();
+ var solution = splittedContent[11].Trim();
+ var process = splittedContent[12].Trim();
+ var subProcess = splittedContent[13].Trim();
+ var tnk = splittedContent[14].Trim();
+ var work = splittedContent[15].Trim();
+ var worker = splittedContent[16].Trim();
+
+ var templateFromEspp = new EsppObjectTemplate
+ {
+ TemplateName = templateName,
+ IsActive = isActive,
+ WorkGroup = workGroup,
+ ShortDescription = shortDescription,
+ //Category = category,
+ ResponseArea = responseArea,
+ Duration = duration,
+ EK = ek,
+ //Initiator = initiator,
+ FullDescription = fullDescription,
+ //ClosingCode = closingCode,
+ Solution = solution,
+ Process = process,
+ SubProcess = subProcess,
+ TNK = tnk,
+ Work = work
+ //Worker = worker
+ };
+
+ return templateFromEspp;
+ }
}
}