From 9532ee848763067468211c6334015f8be020f872 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Tue, 21 Nov 2023 14:37:41 +1000 Subject: [PATCH] =?UTF-8?q?feat(esppOrderManager):=20=D0=B2=D1=8B=D0=BD?= =?UTF-8?q?=D0=B5=D1=81=D0=B5=D0=BD=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D1=8F=20=D0=A0=D0=B5=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B2=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PARR.EsppApi/EsppApiService.cs | 17 ++------- PARR.EsppOrderManager/EsppOrderManager.cs | 38 +++++++++++-------- .../ParrEsppOrderManagerInstaller.cs | 4 ++ .../Services/EsppOrderService.cs | 6 +-- .../Settings/ResultTemplateSettings.cs | 14 +++++++ PARR.EsppOrderManagerWorker/appsettings.json | 5 +++ README.md | 1 + 7 files changed, 54 insertions(+), 31 deletions(-) create mode 100644 PARR.EsppOrderManager/Settings/ResultTemplateSettings.cs diff --git a/PARR.EsppApi/EsppApiService.cs b/PARR.EsppApi/EsppApiService.cs index 03d55f42..433a3b52 100644 --- a/PARR.EsppApi/EsppApiService.cs +++ b/PARR.EsppApi/EsppApiService.cs @@ -4,7 +4,9 @@ using PARR.EsppApi.Models; using PARR.EsppApi.Models.Query; using PARR.EsppApi.Requests; using PARR.EsppApi.Settings; +using System.Text.Encodings.Web; using System.Text.Json; +using System.Text.Unicode; namespace PARR.EsppApi { @@ -138,18 +140,6 @@ namespace PARR.EsppApi } - /// - /// Убирает из запроса запрещенные символы - /// - /// - private string QuerySanitize(string str) - { - //str = str.Replace("\r\n", "
"); - - return str; - } - - /// /// Формирует запрос в ЕСПП из строки /// @@ -173,7 +163,8 @@ namespace PARR.EsppApi /// private string GenerateRequest(EsppOperationsEnum operation, T jsonQuery) { - var strQuery = JsonSerializer.Serialize(jsonQuery); + var jsonOptions = new JsonSerializerOptions { Encoder = JavaScriptEncoder.Create(UnicodeRanges.All, UnicodeRanges.Cyrillic) }; + var strQuery = JsonSerializer.Serialize(jsonQuery, jsonOptions); return GenerateRequest(operation, strQuery); } diff --git a/PARR.EsppOrderManager/EsppOrderManager.cs b/PARR.EsppOrderManager/EsppOrderManager.cs index 2bb877f2..491f89f3 100644 --- a/PARR.EsppOrderManager/EsppOrderManager.cs +++ b/PARR.EsppOrderManager/EsppOrderManager.cs @@ -19,6 +19,7 @@ namespace PARR.EsppOrderManager private readonly ITransformService transformService; private readonly IEsppOrderService esppOrderService; private readonly IServiceProvider serviceProvider; + private readonly ResultTemplateSettings resultTemplateSettings; public EsppOrderManager( MqSettings mqSettings, @@ -26,7 +27,8 @@ namespace PARR.EsppOrderManager ILogger logger, ITransformService transformService, IEsppOrderService esppOrderService, - IServiceProvider serviceProvider + IServiceProvider serviceProvider, + ResultTemplateSettings resultTemplateSettings ) { this.mqSettings = mqSettings; @@ -35,19 +37,20 @@ namespace PARR.EsppOrderManager this.transformService = transformService; this.esppOrderService = esppOrderService; this.serviceProvider = serviceProvider; + this.resultTemplateSettings = resultTemplateSettings; } - public async void Start() + public void Start() { // логика работы описана в документации - //var isConnected = mqService.InitConsumer(mqSettings, ManageOrderAsync); + var isConnected = mqService.InitConsumer(mqSettings, ManageOrderAsync); - //if (!isConnected) - // throw new Exception("Ошибка при подключении к RabbitMq"); + if (!isConnected) + throw new Exception("Ошибка при подключении к RabbitMq"); //test, and remove async in method name - await ManageOrderAsync("{\"OrderId\":\"dd04a997-e7b5-4326-b6e1-505719cc46fb\"}"); + //await ManageOrderAsync("{\"OrderId\":\"49191af5-c313-4388-9720-a61fd13f15a8\"}"); } public void Stop() @@ -58,7 +61,7 @@ namespace PARR.EsppOrderManager private async Task ManageOrderAsync(string msg) { - logger.LogDebug($"Получили сообщение: {msg}"); + //logger.LogDebug($"Получили сообщение: {msg}"); var objFromQuery = transformService.GetModelFromJson(msg); if (objFromQuery == null) @@ -149,17 +152,22 @@ namespace PARR.EsppOrderManager .OrderBy(t => t.DateCreated) .Select(t => $"{t.DateCreated} :: {t.AgentHistoryLevel?.Name} :: {t.Message}"); - var baseMsg = order.Template!.ApplicationsInWork!.Solution + "\n"; + //"Template": "{base}\n{msgAgent}", + //"MsgAgent": "Работы выполнены средствами автоматизации.\nЖурнал работы:\n{agentHistory}", + //"MsgAgentEmpty": "Работы должны были выполняться средствами автоматизации. От средств автоматизации не поступило сообщений. Работы не выполнены." - var msgAgent = "Работы выполнены средствами автоматизации. \n" + - "Журнал работы: \n" + - $"{string.Join("\n", agentHistory)}"; + //Шаблон поля Решение + var template = resultTemplateSettings.Template; - var msgAgentEmpty = "Работы должны были выполняться средствами автоматизации. " + - "От средств автоматизации не поступило сообщений. " + - "Работы не выполнены."; + //Поле решение из ApplicationsInWork + var baseMsg = order.Template!.ApplicationsInWork!.Solution; - return baseMsg + (agentHistory.Any() ? msgAgent : msgAgentEmpty); + //Формируем сообщения от Агента + var msgAgent = agentHistory.Any() + ? resultTemplateSettings.MsgAgent.Replace("{agentHistory}", string.Join("\n", agentHistory)) + : resultTemplateSettings.MsgAgentEmpty; + + return template.Replace("{base}", baseMsg).Replace("{msgAgent}", msgAgent); } diff --git a/PARR.EsppOrderManager/ParrEsppOrderManagerInstaller.cs b/PARR.EsppOrderManager/ParrEsppOrderManagerInstaller.cs index 72836bdb..3da7a910 100644 --- a/PARR.EsppOrderManager/ParrEsppOrderManagerInstaller.cs +++ b/PARR.EsppOrderManager/ParrEsppOrderManagerInstaller.cs @@ -24,6 +24,10 @@ namespace PARR.EsppOrderManager configuration.GetSection(nameof(EsppPoligonSettings)).Bind(esppPoligonSettings); services.AddSingleton(esppPoligonSettings); + var resultTemplateSettings = new ResultTemplateSettings(); + configuration.GetSection(nameof(ResultTemplateSettings)).Bind(resultTemplateSettings); + services.AddSingleton(resultTemplateSettings); + services.AddTransient(); services.AddTransient(); } diff --git a/PARR.EsppOrderManager/Services/EsppOrderService.cs b/PARR.EsppOrderManager/Services/EsppOrderService.cs index bfe64bc5..b8682820 100644 --- a/PARR.EsppOrderManager/Services/EsppOrderService.cs +++ b/PARR.EsppOrderManager/Services/EsppOrderService.cs @@ -54,7 +54,7 @@ namespace PARR.EsppOrderManager.Services // Установить статус 2-В работе if (order.NextStatusCode == (int)OrderStatusEnum.InWork) if (esppOrderResult.Data.StatusEnum == OrderStatusEnum.New || esppOrderResult.Data.StatusEnum == OrderStatusEnum.Stop) - return await SetInWorkStatusAsync(order.Number, resultMsg); + return await SetInWorkStatusAsync(order.Number, "");//resultMsg); // Списать трудозатраты и установить статус 4-Выполнен if (order.NextStatusCode == (int)OrderStatusEnum.Complete) @@ -63,7 +63,7 @@ namespace PARR.EsppOrderManager.Services // если текущий статус != 2-В работе, сначала меняем статус на 2-В работе, а затем уже списываем трудозатраты и меняем на 4-Выполнен if (!statusIsWork) - statusIsWork = await SetInWorkStatusAsync(order.Number, resultMsg); + statusIsWork = await SetInWorkStatusAsync(order.Number, "");//resultMsg); if (statusIsWork) { @@ -141,7 +141,7 @@ namespace PARR.EsppOrderManager.Services /// /// /// - private async Task SetInWorkStatusAsync(string orderNumber, string resultMsg) + private async Task SetInWorkStatusAsync(string orderNumber, string resultMsg = "") { var result = await esppApiService.SetStatusInWorkAsync(orderNumber, resultMsg); diff --git a/PARR.EsppOrderManager/Settings/ResultTemplateSettings.cs b/PARR.EsppOrderManager/Settings/ResultTemplateSettings.cs new file mode 100644 index 00000000..fbb482f3 --- /dev/null +++ b/PARR.EsppOrderManager/Settings/ResultTemplateSettings.cs @@ -0,0 +1,14 @@ +namespace PARR.EsppOrderManager.Settings +{ + /// + /// Настройки шаблона поля "решение" в ЕСПП + /// + internal class ResultTemplateSettings + { + public string Template { get; set; } = string.Empty; + + public string MsgAgent { get; set; } = string.Empty; + + public string MsgAgentEmpty { get; set; } = string.Empty; + } +} diff --git a/PARR.EsppOrderManagerWorker/appsettings.json b/PARR.EsppOrderManagerWorker/appsettings.json index 9d2e92bf..17e99efc 100644 --- a/PARR.EsppOrderManagerWorker/appsettings.json +++ b/PARR.EsppOrderManagerWorker/appsettings.json @@ -42,5 +42,10 @@ "EsppPoligonSettings": { "IsEnabled": true, "TnkValue": "Не учтена в перечне ТНК" + }, + "ResultTemplateSettings": { + "Template": "{base}\n{msgAgent}", + "MsgAgent": "Работы выполнены средствами автоматизации.\nЖурнал работы:\n{agentHistory}", + "MsgAgentEmpty": "Работы должны были выполняться средствами автоматизации. От средств автоматизации не поступило сообщений. Работы не выполнены." } } diff --git a/README.md b/README.md index f2bba018..f299d19b 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ - PARR.AIHITWorker - worker для PARR.AIHIT - PARR.API - API - PARR.BLL - общие методы и настройки для проектов +- PARR.Constants - глобальные константы - PARR.DAL - модели, сервисы по работе с БД PARR - PARR.EsppApi - сервисы по работе с Api ЕСПП - PARR.EsppOrderLoader - загрузка нарядов ПАРР из ЕСПП в БД