diff --git a/AsbCloudApp/Data/SAUB/TelemetryDataSaubStatDto.cs b/AsbCloudApp/Data/SAUB/TelemetryDataSaubStatDto.cs
new file mode 100644
index 00000000..90bbd5f0
--- /dev/null
+++ b/AsbCloudApp/Data/SAUB/TelemetryDataSaubStatDto.cs
@@ -0,0 +1,117 @@
+using System;
+
+namespace AsbCloudApp.Data.SAUB
+{
+#nullable enable
+ ///
+ /// Статистика телеметрии САУБ (усредненные значения) по интервалам глубины
+ ///
+ public class TelemetryDataSaubStatDto
+ {
+ ///
+ /// Кол-во записей в интервале
+ ///
+ public int Count { get; set; }
+
+ ///
+ /// Дата начала интервала
+ ///
+ public DateTime DateMin { get; set; }
+
+ ///
+ /// Дата окончания интервала
+ ///
+ public DateTime DateMax { get; set; }
+
+ ///
+ /// Глубина начала интервала
+ ///
+ public float WellDepthMin { get; set; }
+
+ ///
+ /// Глубина окончания интервала
+ ///
+ public float WellDepthMax { get; set; }
+
+ ///
+ /// Давление
+ ///
+ public float Pressure { get; set; }
+
+ ///
+ /// действующее задание давления
+ ///
+ public float PressureSp { get; set; }
+
+ ///
+ /// Давление при холостом ходе.
+ ///
+ public float PressureIdle { get; set; }
+
+ ///
+ /// задание давления для роторного режима
+ ///
+ public float PressureSpRotor { get; set; }
+
+ ///
+ /// задание давления для режима слайда
+ ///
+ public float PressureSpSlide { get; set; }
+
+ ///
+ /// ограничение макс перепада давления
+ ///
+ public float PressureDeltaLimitMax { get; set; }
+
+ ///
+ /// осевая нагрузка
+ ///
+ public float AxialLoad { get; set; }
+
+ ///
+ /// задание осевой нагрузки
+ ///
+ public float AxialLoadSp { get; set; }
+
+ ///
+ /// ограничение макс. осевой нагрузки
+ ///
+ public float AxialLoadLimitMax { get; set; }
+
+ ///
+ /// момент ротора
+ ///
+ public float RotorTorque { get; set; }
+
+ ///
+ /// задание момента ротора
+ ///
+ public float RotorTorqueSp { get; set; }
+
+ ///
+ /// момент ротора на х.х.
+ ///
+ public float RotorTorqueLimitMax { get; set; }
+
+ ///
+ /// Талевый блок. Скорость
+ ///
+ public float BlockSpeed { get; set; }
+
+ ///
+ /// Талевый блок. Задание скорости
+ ///
+ public float BlockSpeedSp { get; set; }
+
+ ///
+ /// Талевый блок. Задание скорости для роторного бурения
+ ///
+ public float BlockSpeedSpRotor { get; set; }
+
+ ///
+ /// Талевый блок. Задание скорости для режима слайда
+ ///
+ public float BlockSpeedSpSlide { get; set; }
+ }
+#nullable disable
+}
diff --git a/AsbCloudApp/Services/ITelemetryDataSaubService.cs b/AsbCloudApp/Services/ITelemetryDataSaubService.cs
new file mode 100644
index 00000000..d6bdcb6f
--- /dev/null
+++ b/AsbCloudApp/Services/ITelemetryDataSaubService.cs
@@ -0,0 +1,26 @@
+using AsbCloudApp.Data.SAUB;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+#nullable enable
+namespace AsbCloudApp.Services
+{
+ ///
+ /// Телеметрия САУБ
+ ///
+ public interface ITelemetryDataSaubService : ITelemetryDataService
+ {
+ ///
+ /// усредненная статистика по 1м за весь период
+ ///
+ /// МЕДЛЕННЫЙ ЗАПРОС
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> GetTelemetryDataStatAsync(int idTelemetry, CancellationToken token);
+ }
+}
+#nullable disable
\ No newline at end of file
diff --git a/AsbCloudApp/Services/ITelemetryDataService.cs b/AsbCloudApp/Services/ITelemetryDataService.cs
index 8efc74ae..585843ff 100644
--- a/AsbCloudApp/Services/ITelemetryDataService.cs
+++ b/AsbCloudApp/Services/ITelemetryDataService.cs
@@ -3,6 +3,7 @@ using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
+
#nullable enable
namespace AsbCloudApp.Services
{
@@ -33,7 +34,7 @@ namespace AsbCloudApp.Services
///
///
///
- Task UpdateDataAsync(string uid, IEnumerable dtos, CancellationToken token = default);
+ Task UpdateDataAsync(string uid, IEnumerable dtos, CancellationToken token);
}
}
#nullable disable
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs
index 6a2f9fca..1b7b05d1 100644
--- a/AsbCloudInfrastructure/DependencyInjection.cs
+++ b/AsbCloudInfrastructure/DependencyInjection.cs
@@ -184,7 +184,7 @@ namespace AsbCloudInfrastructure
services.AddTransient, CrudCacheRepositoryBase>();
// TelemetryData services
- services.AddTransient, TelemetryDataSaubService>();
+ services.AddTransient();
services.AddTransient, TelemetryDataSpinService>();
// Wits
diff --git a/AsbCloudInfrastructure/Services/ProcessMap/ProcessMapReportService.cs b/AsbCloudInfrastructure/Services/ProcessMap/ProcessMapReportService.cs
index fa80efe4..c8357a2a 100644
--- a/AsbCloudInfrastructure/Services/ProcessMap/ProcessMapReportService.cs
+++ b/AsbCloudInfrastructure/Services/ProcessMap/ProcessMapReportService.cs
@@ -30,16 +30,9 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
var stream = GetExcelTemplateStream();
using var workbook = new XLWorkbook(stream, XLEventTracking.Disabled);
- var data = processMapService.GetProcessMapAsync(idWell, token);
+ var data = await processMapService.GetProcessMapAsync(idWell, token);
- //var dtos = await processMapRepository.GetByIdWellAsync(idWell, token).ConfigureAwait(false);
- //if (dtos is not null)
- //{
- // var processMapReportDto = await processMapService.GetProcessMapAsync(dtos, token).ConfigureAwait(false);
- // FillProcessMapToWorkbook(workbook, processMapReportDto);
- //}
-
- FillProcessMapToWorkbook(workbook, new List());
+ FillProcessMapToWorkbook(workbook, data);
MemoryStream memoryStream = new MemoryStream();
workbook.SaveAs(memoryStream, new SaveOptions { });
diff --git a/AsbCloudInfrastructure/Services/ProcessMap/ProcessMapService.cs b/AsbCloudInfrastructure/Services/ProcessMap/ProcessMapService.cs
index 13c0db9f..c29ffd8e 100644
--- a/AsbCloudInfrastructure/Services/ProcessMap/ProcessMapService.cs
+++ b/AsbCloudInfrastructure/Services/ProcessMap/ProcessMapService.cs
@@ -5,7 +5,6 @@ using AsbCloudApp.Repositories;
using AsbCloudApp.Requests;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
-using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -21,17 +20,23 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
private readonly IWellOperationRepository wellOperationRepository;
private readonly IProcessMapRepository processMapRepository;
private readonly ITelemetryService telemetryService;
+ private readonly ITelemetryDataSaubService telemetryDataSaubService;
+ private readonly ILimitingParameterRepository limitingParameterRepository;
public ProcessMapService(
IAsbCloudDbContext db,
IWellOperationRepository wellOperationService,
IProcessMapRepository processMapRepository,
- ITelemetryService telemetryService)
+ ITelemetryService telemetryService,
+ ITelemetryDataSaubService telemetryDataSaubService,
+ ILimitingParameterRepository limitingParameterRepository)
{
this.db = db;
this.wellOperationRepository = wellOperationService;
this.processMapRepository = processMapRepository;
this.telemetryService = telemetryService;
+ this.telemetryDataSaubService = telemetryDataSaubService;
+ this.limitingParameterRepository = limitingParameterRepository;
}
public async Task> GetProcessMapAsync(int idWell, CancellationToken token)
@@ -49,7 +54,7 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
var processMapDtos = (await processMapRepository.GetByIdWellAsync(idWell, token))!;
var idTelemetry = telemetryService.GetOrDefaultIdTelemetryByIdWell(idWell)!.Value;
- IEnumerable telemetryDataStat = await GetTelemetryDataAsync(idTelemetry, token);
+ IEnumerable telemetryDataStat = await telemetryDataSaubService.GetTelemetryDataStatAsync(idTelemetry, token);
var result = allFactDrillingOperations
.GroupBy(o => o.IdWellSectionType)
@@ -63,59 +68,10 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
return result;
}
- private async Task> GetTelemetryDataAsync(int idTelemetry, CancellationToken token)
- {
- var timezone = telemetryService.GetTimezone(idTelemetry);
- var timezoneOffset = TimeSpan.FromHours(timezone.Hours);
-
- var query = db.Set()
- .Where(t => t.IdTelemetry == idTelemetry)
- .Where(t => t.BlockPosition > 0.0001)
- .Where(t => t.WellDepth > 0.0001)
- .Where(t => t.WellDepth - t.BitDepth < 0.01)
- .GroupBy(t => new { H = t.DateTime.Hour, W = Math.Truncate(t.WellDepth!.Value) })
- .Select(g => new ProcessTelemetrySaubStat
- {
- Count = g.Count(),
-
- DateMin = g.Min(t => t.DateTime.UtcDateTime),
- DateMax = g.Max(t => t.DateTime.UtcDateTime),
-
- WellDepthMin = g.Min(t => t.WellDepth!.Value),
- WellDepthMax = g.Max(t => t.WellDepth!.Value),
-
- Pressure = g.Average(t => t.Pressure!.Value),
- PressureSp = g.Average(t => t.PressureSp!.Value),
- PressureSpRotor = g.Average(t => t.PressureSpRotor!.Value),
- PressureSpSlide = g.Average(t => t.PressureSpSlide!.Value),
- PressureIdle = g.Average(t => t.PressureIdle!.Value),
- PressureDeltaLimitMax = g.Average(t => t.PressureDeltaLimitMax!.Value),
-
- AxialLoad = g.Average(t => t.AxialLoad!.Value),
- AxialLoadSp = g.Average(t => t.AxialLoadSp!.Value),
- AxialLoadLimitMax = g.Average(t => t.AxialLoadLimitMax!.Value),
-
- RotorTorque = g.Average(t => t.RotorTorque!.Value),
- RotorTorqueSp = g.Average(t => t.RotorTorqueSp!.Value),
- RotorTorqueLimitMax = g.Average(t => t.RotorTorqueLimitMax!.Value),
-
- BlockSpeed = g.Average(t => t.BlockSpeed!.Value),
- BlockSpeedSp = g.Average(t => t.BlockSpeedSp!.Value),
- BlockSpeedSpRotor = g.Average(t => t.BlockSpeedSpRotor!.Value),
- BlockSpeedSpSlide = g.Average(t => t.BlockSpeedSpSlide!.Value),
- })
- .Where(s => s.WellDepthMin != s.WellDepthMax)
- .Where(s => s.Count > 3)
- .OrderBy(t => t.DateMin);
-
- var data = await query.ToArrayAsync(token);
- return data;
- }
-
private static IEnumerable HandleSections(
IEnumerable sectionOperations,
IEnumerable sectionProcessMap,
- IEnumerable telemetryDataStat)
+ IEnumerable telemetryDataStat)
{
var minDepth = sectionOperations.Min(o => o.DepthStart);
var maxDepth = sectionOperations.Max(o => o.DepthEnd);
@@ -133,7 +89,7 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
(double min, double max) depthInterval,
IEnumerable sectionOperations,
IEnumerable sectionProcessMap,
- IEnumerable telemetryDataStat)
+ IEnumerable telemetryDataStat)
{
var dto = new ProcessMapReportDto{
DepthStart = depthInterval.min
@@ -161,9 +117,9 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
return dto;
}
- private static ProcessTelemetrySaubStat? CalcIntervalTelemetryDataStat((double min, double max) depthInterval, IEnumerable telemetryDataStat)
+ private static TelemetryDataSaubStatDto? CalcIntervalTelemetryDataStat((double min, double max) depthInterval, IEnumerable telemetryDataStat)
{
- ProcessTelemetrySaubStat[] data = telemetryDataStat
+ TelemetryDataSaubStatDto[] data = telemetryDataStat
.Where(d => d.WellDepthMin <= depthInterval.max && d.WellDepthMax >= depthInterval.min)
.ToArray();
@@ -173,8 +129,7 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
if (data.Length == 1)
return data.First();
-
- var result = new ProcessTelemetrySaubStat
+ var result = new TelemetryDataSaubStatDto
{
WellDepthMin = data.Min(d => d.WellDepthMin),
WellDepthMax = data.Max(d => d.WellDepthMax),
@@ -200,7 +155,7 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
result.RotorTorque += item.RotorTorque * itemWeight;
result.RotorTorqueSp += item.RotorTorqueSp * itemWeight;
result.RotorTorqueLimitMax += item.RotorTorqueLimitMax * itemWeight;
-
+
result.BlockSpeed += item.BlockSpeed * itemWeight;
result.BlockSpeedSp += item.BlockSpeedSp * itemWeight;
result.BlockSpeedSpRotor += item.BlockSpeedSpRotor * itemWeight;
@@ -214,7 +169,7 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
(double min, double max) depthInterval,
IEnumerable intervalModeOperations,
IEnumerable intervalProcessMap,
- ProcessTelemetrySaubStat? telemetryDataStat)
+ TelemetryDataSaubStatDto? telemetryDataStat)
{
var dto = new ProcessMapReportRowDto();
if (intervalModeOperations.Any())
diff --git a/AsbCloudInfrastructure/Services/ProcessMap/ProcessTelemetrySaubStat.cs b/AsbCloudInfrastructure/Services/ProcessMap/ProcessTelemetrySaubStat.cs
deleted file mode 100644
index 9c09d2ea..00000000
--- a/AsbCloudInfrastructure/Services/ProcessMap/ProcessTelemetrySaubStat.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-
-namespace AsbCloudInfrastructure.Services.ProcessMap
-{
-#nullable enable
- class ProcessTelemetrySaubStat {
- public int Count { get; set; }
- public DateTime DateMin { get; set; }
- public DateTime DateMax { get; set; }
-
- public float WellDepthMin { get; set; }
- public float WellDepthMax { get; set; }
-
- public float Pressure { get; set; }
- public float PressureSp { get; set; }
- public float PressureIdle { get; set; }
- public float PressureSpRotor { get; set; }
- public float PressureSpSlide { get; set; }
- public float PressureDeltaLimitMax { get; set; }
-
- public float AxialLoad { get; set; }
- public float AxialLoadSp { get; set; }
- public float AxialLoadLimitMax { get; set; }
-
- public float RotorTorque { get; set; }
- public float RotorTorqueSp { get; set; }
- public float RotorTorqueLimitMax { get; set; }
-
- public float BlockSpeed { get; set; }
- public float BlockSpeedSp { get; set; }
- public float BlockSpeedSpRotor { get; set; }
- public float BlockSpeedSpSlide { get; set; }
- }
-#nullable disable
-}
diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs
index 941bc012..d8f7736c 100644
--- a/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs
+++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs
@@ -17,8 +17,8 @@ namespace AsbCloudInfrastructure.Services.SAUB
where TEntity : class, ITelemetryData
{
protected readonly IAsbCloudDbContext db;
- private readonly ITelemetryService telemetryService;
- private readonly TelemetryDataCache telemetryDataCache;
+ protected readonly ITelemetryService telemetryService;
+ protected readonly TelemetryDataCache telemetryDataCache;
public TelemetryDataBaseService(
IAsbCloudDbContext db,
diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryDataSaubService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryDataSaubService.cs
index 9d666c1c..7839b83b 100644
--- a/AsbCloudInfrastructure/Services/SAUB/TelemetryDataSaubService.cs
+++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryDataSaubService.cs
@@ -2,12 +2,17 @@
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using Mapster;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services.SAUB
{
#nullable enable
- public class TelemetryDataSaubService : TelemetryDataBaseService
+ public class TelemetryDataSaubService : TelemetryDataBaseService, ITelemetryDataSaubService
{
private readonly ITelemetryUserService telemetryUserService;
@@ -21,6 +26,54 @@ namespace AsbCloudInfrastructure.Services.SAUB
this.telemetryUserService = telemetryUserService;
}
+ public async Task> GetTelemetryDataStatAsync(int idTelemetry, CancellationToken token)
+ {
+ var timezone = telemetryService.GetTimezone(idTelemetry);
+ var timezoneOffset = TimeSpan.FromHours(timezone.Hours);
+
+ var query = db.Set()
+ .Where(t => t.IdTelemetry == idTelemetry)
+ .Where(t => t.BlockPosition > 0.0001)
+ .Where(t => t.WellDepth > 0.0001)
+ .Where(t => t.WellDepth - t.BitDepth < 0.01)
+ .GroupBy(t => new { H = t.DateTime.Hour, W = Math.Truncate(t.WellDepth!.Value) })
+ .Select(g => new TelemetryDataSaubStatDto
+ {
+ Count = g.Count(),
+
+ DateMin = g.Min(t => t.DateTime.UtcDateTime),
+ DateMax = g.Max(t => t.DateTime.UtcDateTime),
+
+ WellDepthMin = g.Min(t => t.WellDepth!.Value),
+ WellDepthMax = g.Max(t => t.WellDepth!.Value),
+
+ Pressure = g.Average(t => t.Pressure!.Value),
+ PressureSp = g.Average(t => t.PressureSp!.Value),
+ PressureSpRotor = g.Average(t => t.PressureSpRotor!.Value),
+ PressureSpSlide = g.Average(t => t.PressureSpSlide!.Value),
+ PressureIdle = g.Average(t => t.PressureIdle!.Value),
+ PressureDeltaLimitMax = g.Average(t => t.PressureDeltaLimitMax!.Value),
+
+ AxialLoad = g.Average(t => t.AxialLoad!.Value),
+ AxialLoadSp = g.Average(t => t.AxialLoadSp!.Value),
+ AxialLoadLimitMax = g.Average(t => t.AxialLoadLimitMax!.Value),
+
+ RotorTorque = g.Average(t => t.RotorTorque!.Value),
+ RotorTorqueSp = g.Average(t => t.RotorTorqueSp!.Value),
+ RotorTorqueLimitMax = g.Average(t => t.RotorTorqueLimitMax!.Value),
+
+ BlockSpeed = g.Average(t => t.BlockSpeed!.Value),
+ BlockSpeedSp = g.Average(t => t.BlockSpeedSp!.Value),
+ BlockSpeedSpRotor = g.Average(t => t.BlockSpeedSpRotor!.Value),
+ BlockSpeedSpSlide = g.Average(t => t.BlockSpeedSpSlide!.Value),
+ })
+ .Where(s => s.WellDepthMin != s.WellDepthMax)
+ .Where(s => s.Count > 3)
+ .OrderBy(t => t.DateMin);
+
+ return await query.ToArrayAsync(token);
+ }
+
public override TelemetryDataSaub Convert(TelemetryDataSaubDto src, double timezoneOffset)
{
var entity = src.Adapt();