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
+ };
+ }
}
}