From 1c02f9978ac78b01d87378e489f55d6bbd18a7e6 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Fri, 17 Nov 2023 16:25:12 +1000 Subject: [PATCH] =?UTF-8?q?feat(esppOrderManager):=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D1=83=D1=81=D0=B0=20=D0=BD=D0=B0=D1=80=D1=8F=D0=B4=D0=B0=20?= =?UTF-8?q?=D0=B2=20=D0=B5=D1=81=D0=BF=D0=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PARR.EsppApi/IEsppApiService.cs | 4 +++ PARR.EsppOrderManager/EsppOrderManager.cs | 37 +++++++++++++++++--- PARR.EsppOrderManagerWorker/Program.cs | 2 ++ PARR.EsppOrderManagerWorker/appsettings.json | 7 ++++ 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/PARR.EsppApi/IEsppApiService.cs b/PARR.EsppApi/IEsppApiService.cs index 819017c3..ceb5160f 100644 --- a/PARR.EsppApi/IEsppApiService.cs +++ b/PARR.EsppApi/IEsppApiService.cs @@ -10,21 +10,25 @@ namespace PARR.EsppApi /// /// Task>> FindOrdersAsync(FindOrdersQuery query); + /// /// Поиск наряда по номеру /// /// Task> FindOrderByRecordIdAsync(string recordId); + /// /// Взять наряд в работу /// /// Task> SetStatusInWorkAsync(string recordId); + /// /// Установить статус наряда как выполнен /// /// Task> SetStatusIsDone(string recordId); + /// /// Списание трудозатрат по модульным ТНК /// diff --git a/PARR.EsppOrderManager/EsppOrderManager.cs b/PARR.EsppOrderManager/EsppOrderManager.cs index 89ce2323..3db37191 100644 --- a/PARR.EsppOrderManager/EsppOrderManager.cs +++ b/PARR.EsppOrderManager/EsppOrderManager.cs @@ -2,8 +2,10 @@ using Microsoft.Extensions.Logging; using PARR.BLL.Domain.Mq; using PARR.BLL.Services.Interfaces; +using PARR.DAL.Contracts; using PARR.DAL.Models; using PARR.DAL.Services.Interfaces; +using PARR.EsppApi; using PARR.EsppOrderManager.Settings; namespace PARR.EsppOrderManager @@ -15,13 +17,15 @@ namespace PARR.EsppOrderManager private readonly ILogger logger; private readonly ITransformService transformService; private readonly IOrderService orderService; + private readonly IEsppApiService esppApiService; public EsppOrderManager( MqSettings mqSettings, IMqService mqService, ILogger logger, ITransformService transformService, - IOrderService orderService + IOrderService orderService, + IEsppApiService esppApiService ) { this.mqSettings = mqSettings; @@ -29,6 +33,7 @@ namespace PARR.EsppOrderManager this.logger = logger; this.transformService = transformService; this.orderService = orderService; + this.esppApiService = esppApiService; } public async void Start() @@ -77,8 +82,9 @@ namespace PARR.EsppOrderManager } var resultMsg = GenerateResultMsg(order); + var workDuration = CalcWorkDuration(order); - //todo:!!! + //todo:!!! менять статус наряда. Можн ли закрыть не беря в работу? } @@ -93,16 +99,39 @@ namespace PARR.EsppOrderManager .OrderBy(t => t.DateCreated) .Select(t => $"{t.DateCreated} :: {t.AgentHistoryLevel?.Name} :: {t.Message}"); - string msgAgent = "Работы выполнены средствами автоматизации. \r\n" + + var msgAgent = "Работы выполнены средствами автоматизации. \r\n" + "Журнал работы: \r\n" + $"{string.Join("\r\n", agentHistory)}"; - string msgAgentEmpty = "Работы должны были выполниться средствами автоматизации. " + + var msgAgentEmpty = "Работы должны были выполниться средствами автоматизации. " + "Но от средств автоматизации не поступило сообщений. " + "Работы не выполнены."; return agentHistory.Any() ? msgAgent : msgAgentEmpty; } + + /// + /// Рассчиать трудозатраты + /// + /// + /// + private TimeSpan CalcWorkDuration(Order order) + { + var agentHistory = order.AgentHistories + .OrderBy(t => t.DateCreated); + + if (!agentHistory.Any()) + return TimeSpan.Zero; + + var dateStart = agentHistory.LastOrDefault(t => t.HistoryLevelId == (int)AgentHistoryLevelEnum.Start)?.DateCreated; + var dateEnd = agentHistory.LastOrDefault(t => t.HistoryLevelId == (int)AgentHistoryLevelEnum.End)?.DateCreated; + + if (dateStart.HasValue && dateEnd.HasValue) + return dateEnd.Value - dateStart.Value; + + return TimeSpan.Zero; + } + } } diff --git a/PARR.EsppOrderManagerWorker/Program.cs b/PARR.EsppOrderManagerWorker/Program.cs index 271e8644..e7f99edb 100644 --- a/PARR.EsppOrderManagerWorker/Program.cs +++ b/PARR.EsppOrderManagerWorker/Program.cs @@ -1,4 +1,5 @@ using Elastic.CommonSchema.Serilog; +using PARR.EsppApi; using PARR.EsppOrderManager; using PARR.EsppOrderManagerWorker; using Serilog; @@ -24,6 +25,7 @@ builder.Services.AddLogging(config => builder.Services.InstallEsppOrderManagerServices(builder.Configuration); builder.Configuration.AddEsppOrderManagerConfigurations(builder.Services); builder.Services.AddEsppOrderManagerSettings(builder.Configuration); +builder.Services.InstallEsppApiServices(builder.Configuration); builder.Services.AddHostedService(); diff --git a/PARR.EsppOrderManagerWorker/appsettings.json b/PARR.EsppOrderManagerWorker/appsettings.json index 2b3068b4..a907daf7 100644 --- a/PARR.EsppOrderManagerWorker/appsettings.json +++ b/PARR.EsppOrderManagerWorker/appsettings.json @@ -31,5 +31,12 @@ "QueueName": "parr-orders", "User": "espp_orders_manager", "Password": "Lfhsdkfg*&%9sdfgf23" + }, + "EsppOrderSettings": { + "Url": "http://rzd-espp-t-rpa-app-1.gvc.oao.rzd:8080/espp_api/OperationExecutor/", + "UserName": "Auto-PTK-DVS", + "AccountName": "АВТО ТЕХНОЛОГ ПТК-ДВС (AUTO-PTK-DVS)", + "Password": "123456789", + "EsppUserTimeZone": 10 } }