From c6a49056bdbf2794edaada0910247909bf3c2cb6 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Sun, 18 Sep 2022 23:25:34 +0500 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8=D1=82=D0=BC?= =?UTF-8?q?=D0=B0=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B0=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D1=8B=20=D0=90=D0=9A?= =?UTF-8?q?=D0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...SubsystemOperationTimeBackgroundService.cs | 88 +++++++------------ 1 file changed, 33 insertions(+), 55 deletions(-) diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeBackgroundService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeBackgroundService.cs index 8ca42f46..db410433 100644 --- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeBackgroundService.cs +++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeBackgroundService.cs @@ -16,7 +16,7 @@ namespace AsbCloudInfrastructure.Services.Subsystems { #nullable enable internal class SubsystemOperationTimeBackgroundService : BackgroundService - { + { private readonly string connectionString; private readonly TimeSpan period = TimeSpan.FromHours(1); private const int idSubsytemTorqueMaster = 65537; @@ -112,12 +112,12 @@ namespace AsbCloudInfrastructure.Services.Subsystems { if (mode == 1 | mode == 3) return 1; - + return null; } static bool IsSubsystemMse(short state) - { + { if ((state & 1) > 0) return true; return false; @@ -137,79 +137,57 @@ namespace AsbCloudInfrastructure.Services.Subsystems $" order by date ) as tt " + $"where (tt.mode_prev is null or tt.mode != tt.mode_prev) and tt.date >= @begin " + $"order by tt.date;"; - + var idTelemetryParam = new NpgsqlParameter("@idTelemetry", idTelemetry); var beginParam = new NpgsqlParameter("@begin", begin); - + await db.Database.OpenConnectionAsync(token); - using var command = db.Database.GetDbConnection().CreateCommand(); - command.CommandText = query; - command.Parameters.Add(idTelemetryParam); + using var command = db.Database.GetDbConnection().CreateCommand(); + command.CommandText = query; + command.Parameters.Add(idTelemetryParam); command.Parameters.Add(beginParam); - + using var result = await command.ExecuteReaderAsync(token); var subsystemOperationTime = new List(32); - - var prevSubsystem1 = false; - DateTimeOffset? prevDate = null; + if (result.Read()) { var mode = result.GetFieldValue(1); - var mseState = result.GetFieldValue(3); + //var mseState = result.GetFieldValue(3); var idSubsystem = GetSubsytemId(mode); + var foundSubsystem = idSubsystem.HasValue; var dateStart = result.GetFieldValue(0); - var depthStart = result.GetFieldValue(2); + var depthStart = result.GetFieldValue(2); while (result.Read()) { var dateEnd = result.GetFieldValue(0); var depthEnd = result.GetFieldValue(2); - if (idSubsystem.HasValue) + var currentMode = result.GetFieldValue(1); + var currentSubsystemAkb = GetSubsytemId(currentMode); + var endSubsystemAkb = !currentSubsystemAkb.HasValue; + if (foundSubsystem && endSubsystemAkb) { - if (idSubsystem == 1) - { - prevSubsystem1 = true; - prevDate = dateStart; - } - else - { - prevSubsystem1 = false; - prevDate = null; - } - - var operationTimeItem = new SubsystemOperationTime() - { - IdTelemetry = idTelemetry, - IdSubsystem = idSubsystem.Value, - DateStart = (DateTimeOffset)(prevSubsystem1 ? prevDate : dateStart), - DateEnd = dateEnd, - DepthStart = depthStart, - DepthEnd = depthEnd - }; - subsystemOperationTime.Add(operationTimeItem); - if (IsSubsystemMse(mseState)) { - var operationTimeItemMse = new SubsystemOperationTime() - { - IdTelemetry = idTelemetry, - IdSubsystem = 2, - DateStart = (DateTimeOffset)(prevSubsystem1 ? prevDate : dateStart), - DateEnd = dateEnd, - DepthStart = depthStart, - DepthEnd = depthEnd - }; - subsystemOperationTime.Add(operationTimeItemMse); - } - + IdTelemetry = idTelemetry, + IdSubsystem = idSubsystem.Value, + DateStart = dateStart, + DateEnd = dateEnd, + DepthStart = depthStart, + DepthEnd = depthEnd + }; + subsystemOperationTime.Add(operationTimeItem); + foundSubsystem = false; } - - mode = result.GetFieldValue(1); - mseState = result.GetFieldValue(3); - idSubsystem = GetSubsytemId(mode); - dateStart = dateEnd; - depthStart = depthEnd; + if (currentSubsystemAkb.HasValue && !foundSubsystem) + { + idSubsystem = currentSubsystemAkb; + dateStart = dateEnd; + foundSubsystem = true; + depthStart = depthEnd; + } } } return subsystemOperationTime;