From 2334beb9714f42167b2b9d7993f80272c5e78bca Mon Sep 17 00:00:00 2001 From: "ai.astrakhantsev" Date: Mon, 19 Sep 2022 15:55:53 +0500 Subject: [PATCH] =?UTF-8?q?#5996638=20=D0=9F=D0=BE=D0=B4=D1=81=D0=B2=D0=B5?= =?UTF-8?q?=D1=87=D0=B8=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BD=D0=B5=20=D0=BE?= =?UTF-8?q?=D0=BF=D1=82=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudApp/Data/DrillParamsDto.cs | 25 ++++++++ AsbCloudApp/Data/MinMaxDto.cs | 26 +++++++++ AsbCloudApp/Data/MinMaxExtendedViewDto.cs | 31 ++++++++++ .../Services/DrillParamsService.cs | 58 ++++++++++++++++++- 4 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 AsbCloudApp/Data/MinMaxDto.cs create mode 100644 AsbCloudApp/Data/MinMaxExtendedViewDto.cs diff --git a/AsbCloudApp/Data/DrillParamsDto.cs b/AsbCloudApp/Data/DrillParamsDto.cs index 0d667a58..76a39b71 100644 --- a/AsbCloudApp/Data/DrillParamsDto.cs +++ b/AsbCloudApp/Data/DrillParamsDto.cs @@ -42,6 +42,11 @@ namespace AsbCloudApp.Data /// public double AxialLoadMax { get; set; } + /// + /// axial load + /// + public MinMaxExtendedViewDto AxialLoad { get; set; } + /// /// pressure min. /// @@ -57,6 +62,11 @@ namespace AsbCloudApp.Data /// public double PressureMax { get; set; } + /// + /// pressure + /// + public MinMaxExtendedViewDto Pressure { get; set; } + /// /// rotor torque min. /// @@ -72,6 +82,11 @@ namespace AsbCloudApp.Data /// public double RotorTorqueMax { get; set; } + /// + /// rotor torque + /// + public MinMaxExtendedViewDto RotorTorque { get; set; } + /// /// rotor speed min. /// @@ -87,6 +102,11 @@ namespace AsbCloudApp.Data /// public double RotorSpeedMax { get; set; } + /// + /// rotor speed + /// + public MinMaxExtendedViewDto RotorSpeed { get; set; } + /// /// flow min. /// @@ -101,5 +121,10 @@ namespace AsbCloudApp.Data /// flow max. /// public double FlowMax { get; set; } + + /// + /// flow + /// + public MinMaxExtendedViewDto Flow { get; set; } } } \ No newline at end of file diff --git a/AsbCloudApp/Data/MinMaxDto.cs b/AsbCloudApp/Data/MinMaxDto.cs new file mode 100644 index 00000000..59ba90b0 --- /dev/null +++ b/AsbCloudApp/Data/MinMaxDto.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AsbCloudApp.Data +{ +#nullable enable + /// + /// Минимальное и максимальное значение + /// + public class MinMaxDto + { + /// + /// Минимальное значение + /// + public double Min { get; set; } + + /// + /// максимальное значение + /// + public double Max { get; set; } + } +#nullable disable +} diff --git a/AsbCloudApp/Data/MinMaxExtendedViewDto.cs b/AsbCloudApp/Data/MinMaxExtendedViewDto.cs new file mode 100644 index 00000000..f3e91b88 --- /dev/null +++ b/AsbCloudApp/Data/MinMaxExtendedViewDto.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AsbCloudApp.Data +{ +#nullable enable + /// + /// Расширение для класса MinMaxDto + /// + public class MinMaxExtendedViewDto : MinMaxDto + { + /// + /// Среднее значение + /// + public double Avg { get; set; } + + /// + /// Является максимальным + /// + public bool IsMax { get; set; } + + /// + /// Является минимальным + /// + public bool IsMin { get; set; } + } +#nullable disable +} diff --git a/AsbCloudInfrastructure/Services/DrillParamsService.cs b/AsbCloudInfrastructure/Services/DrillParamsService.cs index 1af54956..5eb813c8 100644 --- a/AsbCloudInfrastructure/Services/DrillParamsService.cs +++ b/AsbCloudInfrastructure/Services/DrillParamsService.cs @@ -4,6 +4,7 @@ using AsbCloudDb.Model; using AsbCloudInfrastructure.Repository; using Mapster; using Microsoft.EntityFrameworkCore; +using Org.BouncyCastle.Crypto; using System.Collections.Generic; using System.Linq; using System.Threading; @@ -85,6 +86,16 @@ namespace AsbCloudInfrastructure.Services public async Task> GetCompositeAllAsync(int idWell, CancellationToken token = default) { + var allDrillParams = + await (from p in db.DrillParams + from c in db.WellComposites + where p.IdWell == c.IdWellSrc && + p.IdWellSectionType == c.IdWellSectionType + select p) + .AsNoTracking() + .ToListAsync(token) + .ConfigureAwait(false); + var compositeWellDrillParams = await (from p in db.DrillParams from c in db.WellComposites @@ -98,7 +109,8 @@ namespace AsbCloudInfrastructure.Services var compositeDrillParamsDtos = compositeWellDrillParams.Adapt>(); - return compositeDrillParamsDtos; + var result = compositeDrillParamsDtos.Select(x => Convert(x, allDrillParams)); + return result; } public async Task InsertAsync(int idWell, DrillParamsDto dto, @@ -143,5 +155,49 @@ namespace AsbCloudInfrastructure.Services var result = await base.UpdateAsync(dto, token).ConfigureAwait(false); return result; } + + private static DrillParamsDto Convert(DrillParamsDto dto, IEnumerable drillParams) + { + return new DrillParamsDto + { + Id = dto.Id, + IdWellSectionType = dto.IdWellSectionType, + AxialLoad = GetMinMaxExtended(dto, drillParams.Select(x => (x.AxialLoadMin, x.AxialLoadMax))), + AxialLoadAvg = dto.AxialLoadAvg, + AxialLoadMax = dto.AxialLoadMax, + AxialLoadMin = dto.AxialLoadMin, + DepthEnd = dto.DepthEnd, + DepthStart = dto.DepthStart, + Flow = GetMinMaxExtended(dto, drillParams.Select(x => (x.FlowMin, x.FlowMax))), + FlowAvg = dto.FlowAvg, + FlowMax = dto.FlowMax, + FlowMin = dto.FlowMin, + IdWell = dto.IdWell, + Pressure = GetMinMaxExtended(dto, drillParams.Select(x => (x.PressureMin, x.PressureMax))), + PressureAvg = dto.PressureAvg, + PressureMax = dto.PressureMax, + PressureMin = dto.PressureMin, + RotorSpeed = GetMinMaxExtended(dto, drillParams.Select(x => (x.RotorSpeedMin, x.RotorSpeedMax))), + RotorSpeedAvg = dto.RotorSpeedAvg, + RotorSpeedMax = dto.RotorSpeedMax, + RotorSpeedMin = dto.RotorSpeedMin, + RotorTorque = GetMinMaxExtended(dto, drillParams.Select(x => (x.RotorTorqueMin, x.RotorTorqueMax))), + RotorTorqueAvg = dto.RotorTorqueAvg, + RotorTorqueMax = dto.RotorTorqueMax, + RotorTorqueMin = dto.RotorTorqueMin + }; + } + + private static MinMaxExtendedViewDto GetMinMaxExtended(DrillParamsDto x, IEnumerable<(double min, double max)> allDrillParams) + { + return new MinMaxExtendedViewDto + { + Avg = x.AxialLoadAvg, + Max = x.AxialLoadMax, + Min = x.AxialLoadMin, + IsMax = allDrillParams.Max(mx => mx.max) < x.AxialLoadMax, + IsMin = allDrillParams.Min(mn => mn.min) > x.AxialLoadMin + }; + } } }