From 866cc4c0667bef1d3f4ff7b911076781b1c5a633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=94?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sat, 16 Dec 2023 12:31:42 +0500 Subject: [PATCH] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Фикс расчетов 2. Добавлен новый флаг включенной подсистемы --- AsbCloudDb/Model/DetectedOperation.cs | 4 +++ .../DetectedOperationExportService.cs | 3 +-- .../Detectors/DetectorAbstract.cs | 14 +++++++--- .../Detectors/DetectorDrilling.cs | 26 ++++++++++++++----- 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/AsbCloudDb/Model/DetectedOperation.cs b/AsbCloudDb/Model/DetectedOperation.cs index 7300eb59..d2498ece 100644 --- a/AsbCloudDb/Model/DetectedOperation.cs +++ b/AsbCloudDb/Model/DetectedOperation.cs @@ -92,6 +92,10 @@ namespace AsbCloudDb.Model /// блокировка /// AutoBlocknig = 1 << 6, + /// + /// Спин-мастер + /// + AutoSpin = 1 << 7, } /// diff --git a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationExportService.cs b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationExportService.cs index 15dab40f..f833ae7d 100644 --- a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationExportService.cs +++ b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationExportService.cs @@ -152,8 +152,7 @@ public class DetectedOperationExportService { var idCategory = current.IdCategory; if (idCategory == WellOperationCategory.IdSlide - && current.ExtraData[DetectorDrilling.ExtraDataKeyHasOscillation] is bool hasOscillation - && hasOscillation) + && current.HasSubsystemFlag(DetectedOperation.EnabledSubsystemsFlags.AutoSpin)) return "Бурение в слайде с осцилляцией"; var category = wellOperationCategories.FirstOrDefault(o => o.Id == current.IdCategory); diff --git a/AsbCloudInfrastructure/Services/DetectOperations/Detectors/DetectorAbstract.cs b/AsbCloudInfrastructure/Services/DetectOperations/Detectors/DetectorAbstract.cs index 6da769bf..0fde1096 100644 --- a/AsbCloudInfrastructure/Services/DetectOperations/Detectors/DetectorAbstract.cs +++ b/AsbCloudInfrastructure/Services/DetectOperations/Detectors/DetectorAbstract.cs @@ -1,7 +1,6 @@ using AsbCloudDb.Model; using System; using System.Collections.Generic; -using System.Linq; namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors { @@ -126,7 +125,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors DepthEnd = (double)pEnd.WellDepth, ExtraData = ExtraData, Value = CalcValue(telemetry, begin, end), - EnabledSubsystems = DetectEnabledSubsystems(telemetry, begin, end) + EnabledSubsystems = DetectEnabledSubsystems(telemetry, begin, end, ExtraData) }; return operation; @@ -155,10 +154,19 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors /// /// /// + /// /// - private static int DetectEnabledSubsystems(DetectableTelemetry[] telemetry, int begin, int end) + private static int DetectEnabledSubsystems(DetectableTelemetry[] telemetry, int begin, int end, IDictionary extraData) { var enabledSubsystems = 0; + + if(extraData.TryGetValue(DetectorDrilling.ExtraDataKeyHasOscillation, out var hasOscillation) + && hasOscillation is true) + { + enabledSubsystems |= (int)DetectedOperation.EnabledSubsystemsFlags.AutoSpin; + + return enabledSubsystems; + } for (var i = begin; i < end; i += 2) { diff --git a/AsbCloudInfrastructure/Services/DetectOperations/Detectors/DetectorDrilling.cs b/AsbCloudInfrastructure/Services/DetectOperations/Detectors/DetectorDrilling.cs index 56aa2fd4..a26d04af 100644 --- a/AsbCloudInfrastructure/Services/DetectOperations/Detectors/DetectorDrilling.cs +++ b/AsbCloudInfrastructure/Services/DetectOperations/Detectors/DetectorDrilling.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Drawing; using System.Linq; using AsbCloudDb.Model; @@ -65,14 +64,27 @@ public class DetectorDrilling : DetectorAbstract { [ExtraDataKeyAvgRotorSpeed] = avgRotorSpeed, [ExtraDataKeyDispersionOfNormalizedRotorSpeed] = dispersionOfNormalizedRotorSpeed, - [ExtraDataKeyHasOscillation] = dispersionOfNormalizedRotorSpeed > dispersionOfNormalizedRotorSpeedThreshold + [ExtraDataKeyHasOscillation] = avgRotorSpeed > 5 && dispersionOfNormalizedRotorSpeed > dispersionOfNormalizedRotorSpeedThreshold }; return (idCategory, extraData); } private static (double avgRotorSpeed, double dispersionOfNormalizedRotorSpeed) CalcCriteries(DetectableTelemetry[] telemetry, int begin, int end) { - var telemetryRange = telemetry[begin..end]; + var telemetryRange = telemetry[begin..end] + .OrderBy(t => t.DateTime).ToList(); + + for (var i = telemetryRange.Count - 1; i >= 0 && telemetryRange.Count > 1; i--) + { + if (Math.Abs(telemetryRange[i].WellDepth - telemetryRange[i - 1].WellDepth) < 0.001d) + { + telemetryRange.RemoveAt(i); + continue; + } + + break; + } + var avgRotorSpeed = telemetryRange.Average(t => t.RotorSpeed); var dispersion = telemetryRange.Average(t => Math.Pow(t.RotorSpeed / avgRotorSpeed - 1, 2)); return (avgRotorSpeed, dispersion); @@ -85,10 +97,10 @@ public class DetectorDrilling : DetectorAbstract if (avgRotorSpeed < 5) return WellOperationCategory.IdSlide; - if (dispersionOfNormalizedRotorSpeed < dispersionOfNormalizedRotorSpeedThreshold) + if(dispersionOfNormalizedRotorSpeed < dispersionOfNormalizedRotorSpeedThreshold) return WellOperationCategory.IdRotor; - else - return idSlideWithOscillation; - } + + return idSlideWithOscillation; + } } \ No newline at end of file