Merge branch 'dev' into feature/set-user-editor-to-operation

This commit is contained in:
on.nemtina 2023-04-04 12:54:42 +05:00
commit f1dc52c768
15 changed files with 218 additions and 182 deletions

View File

@ -1,13 +1,12 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace AsbCloudApp.Data.ProcessMap namespace AsbCloudApp.Data.ProcessMap
{ {
/// <summary> /// <summary>
/// РТК /// РТК
/// </summary> /// </summary>
public class ProcessMapDto : IId, IWellRelated public class ProcessMapPlanDto : IId, IWellRelated
{ {
/// <inheritdoc/> /// <inheritdoc/>
public int Id { get; set; } public int Id { get; set; }

View File

@ -13,16 +13,34 @@ namespace AsbCloudApp.Data.ProcessMap
public int IdWell { get; set; } public int IdWell { get; set; }
/// <summary> /// <summary>
/// Глубина по стволу, м /// название секции скважины
/// </summary>
public int IdWellSectionType { get; set; }
/// <summary>
/// название секции скважины
/// </summary>
public string WellSectionTypeName { get; set; } = null!;
/// <summary>
/// Глубина по стволу от, м
/// <para> /// <para>
/// на начало интервала /// на начало интервала
/// </para> /// </para>
/// </summary> /// </summary>
public double DepthStart { get; set; } public double DepthStart { get; set; }
/// <summary>
/// Глубина по стволу до, м
/// <para>
/// на конец интервала
/// </para>
/// </summary>
public double DepthEnd { get; set; }
/// <summary> /// <summary>
/// Дата/ время /// Дата/ время
/// <para> /// <para>
/// на начало интервала /// на начало интервала
/// </para> /// </para>
/// </summary> /// </summary>
@ -34,23 +52,43 @@ namespace AsbCloudApp.Data.ProcessMap
public double MechDrillingHours { get; set; } public double MechDrillingHours { get; set; }
/// <summary> /// <summary>
/// Слайд /// Режим бурения (Ротор/слайд/ручной)
/// </summary> /// </summary>
public ProcessMapReportRowDto Slide { get; set; } = null!; public string DrillingMode { get; set; } = null!;
/// <summary> /// <summary>
/// Ротор /// Проходка, м
/// </summary> /// </summary>
public ProcessMapReportRowDto Rotor { get; set; } = null!; public double? DeltaDepth { get; set; }
/// <summary> /// <summary>
/// название секции скважины /// Перепад давления, атм
/// </summary> /// </summary>
public int IdWellSectionType { get; set; } public ProcessMapReportParamsDto PressureDiff { get; set; } = new();
/// <summary> /// <summary>
/// название секции скважины /// Нагрузка, т
/// </summary> /// </summary>
public string WellSectionTypeName { get; set; } = null!; public ProcessMapReportParamsDto AxialLoad { get; set; } = new();
/// <summary>
/// Момент на ВСП, кНхМ
/// </summary>
public ProcessMapReportParamsDto TopDriveTorque { get; set; } = new();
/// <summary>
/// Ограничение скорости, м/ч
/// </summary>
public ProcessMapReportParamsDto SpeedLimit { get; set; } = new();
/// <summary>
/// Процент использования системы АПД, %
/// </summary>
public double Usage { get; set; }
/// <summary>
/// Фактическая механическая скорость, м/ч
/// </summary>
public double Rop { get; set; }
} }
} }

View File

@ -34,6 +34,6 @@ namespace AsbCloudApp.Data.ProcessMap
/// <summary> /// <summary>
/// Процент бурения по уставке, % /// Процент бурения по уставке, %
/// </summary> /// </summary>
public double? PercDrillingSetpoint { get; set; } public double? PercDrillingBySetpoint { get; set; }
} }
} }

View File

@ -1,43 +0,0 @@
namespace AsbCloudApp.Data.ProcessMap
{
/// <summary>
/// Строки РТК
/// </summary>
public class ProcessMapReportRowDto
{
/// <summary>
/// Проходка, м
/// </summary>
public double? DeltaDepth { get; set; }
/// <summary>
/// Перепад давления, атм
/// </summary>
public ProcessMapReportParamsDto PressureDiff { get; set; } = new();
/// <summary>
/// Нагрузка, т
/// </summary>
public ProcessMapReportParamsDto AxialLoad { get; set; } = new();
/// <summary>
/// Момент на ВСП, кНхМ
/// </summary>
public ProcessMapReportParamsDto TopDriveTorque { get; set; } = new();
/// <summary>
/// Ограничение скорости, м/ч
/// </summary>
public ProcessMapReportParamsDto SpeedLimit { get; set; } = new();
/// <summary>
/// Процент использования системы АПД, %
/// </summary>
public double Usage { get; set; }
/// <summary>
/// Фактическая механическая скорость, м/ч
/// </summary>
public double Rop { get; set; }
}
}

View File

@ -11,7 +11,7 @@ namespace AsbCloudApp.Repositories
/// <summary> /// <summary>
/// ÐÒÊ /// ÐÒÊ
/// </summary> /// </summary>
public interface IProcessMapRepository : IRepositoryWellRelated<ProcessMapDto> public interface IProcessMapRepository : IRepositoryWellRelated<ProcessMapPlanDto>
{ {
/// <summary> /// <summary>
/// Ïîëó÷èòü ïàðàìåòðû áóðåíèÿ íà÷èíàÿ ñ äàòû. /// Ïîëó÷èòü ïàðàìåòðû áóðåíèÿ íà÷èíàÿ ñ äàòû.
@ -20,7 +20,7 @@ namespace AsbCloudApp.Repositories
/// <param name="updateFrom"></param> /// <param name="updateFrom"></param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<IEnumerable<ProcessMapDto>> GetAllAsync(int idWell, Task<IEnumerable<ProcessMapPlanDto>> GetAllAsync(int idWell,
DateTime? updateFrom, CancellationToken token = default); DateTime? updateFrom, CancellationToken token = default);
/// <summary> /// <summary>
@ -29,6 +29,6 @@ namespace AsbCloudApp.Repositories
/// <param name="requests"></param> /// <param name="requests"></param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<IEnumerable<ProcessMapDto>> GetProcessMapAsync(IEnumerable<ProcessMapRequest> requests, CancellationToken token); Task<IEnumerable<ProcessMapPlanDto>> GetProcessMapAsync(IEnumerable<ProcessMapRequest> requests, CancellationToken token);
} }
} }

View File

@ -34,6 +34,6 @@ namespace AsbCloudApp.Repositories
/// <param name="idWell"></param> /// <param name="idWell"></param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<IEnumerable<ProcessMapDto>> GetCompositeProcessMap(int idWell, CancellationToken token); Task<IEnumerable<ProcessMapPlanDto>> GetCompositeProcessMap(int idWell, CancellationToken token);
} }
} }

View File

@ -18,7 +18,7 @@ using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Repository namespace AsbCloudInfrastructure.Repository
{ {
#nullable enable #nullable enable
public class ProcessMapRepository : CrudWellRelatedRepositoryBase<ProcessMapDto, ProcessMap>, public class ProcessMapRepository : CrudWellRelatedRepositoryBase<ProcessMapPlanDto, ProcessMap>,
IProcessMapRepository IProcessMapRepository
{ {
private readonly IWellService wellService; private readonly IWellService wellService;
@ -32,7 +32,7 @@ namespace AsbCloudInfrastructure.Repository
this.wellService = wellService; this.wellService = wellService;
} }
public async Task<IEnumerable<ProcessMapDto>> GetAllAsync(int idWell, public async Task<IEnumerable<ProcessMapPlanDto>> GetAllAsync(int idWell,
DateTime? updateFrom, CancellationToken token) DateTime? updateFrom, CancellationToken token)
{ {
var requests = new[] var requests = new[]
@ -53,7 +53,7 @@ namespace AsbCloudInfrastructure.Repository
return dtos; return dtos;
} }
public async Task<IEnumerable<ProcessMapDto>> GetProcessMapAsync(IEnumerable<ProcessMapRequest> requests, CancellationToken token) public async Task<IEnumerable<ProcessMapPlanDto>> GetProcessMapAsync(IEnumerable<ProcessMapRequest> requests, CancellationToken token)
{ {
var entities = await BuildQuery(requests) var entities = await BuildQuery(requests)
.ToListAsync(token) .ToListAsync(token)
@ -62,7 +62,7 @@ namespace AsbCloudInfrastructure.Repository
return dtos; return dtos;
} }
public override async Task<int> InsertAsync(ProcessMapDto dto, public override async Task<int> InsertAsync(ProcessMapPlanDto dto,
CancellationToken token) CancellationToken token)
{ {
dto.LastUpdate = DateTime.UtcNow; dto.LastUpdate = DateTime.UtcNow;
@ -70,7 +70,7 @@ namespace AsbCloudInfrastructure.Repository
return result; return result;
} }
public override async Task<int> UpdateAsync(ProcessMapDto dto, public override async Task<int> UpdateAsync(ProcessMapPlanDto dto,
CancellationToken token) CancellationToken token)
{ {
dto.LastUpdate = DateTime.UtcNow; dto.LastUpdate = DateTime.UtcNow;
@ -105,9 +105,9 @@ namespace AsbCloudInfrastructure.Repository
} }
return query; return query;
} }
protected override ProcessMapDto Convert(ProcessMap entity) protected override ProcessMapPlanDto Convert(ProcessMap entity)
{ {
var dto = entity.Adapt<ProcessMapDto>(); var dto = entity.Adapt<ProcessMapPlanDto>();
dto.LastUpdate = entity.LastUpdate.ToRemoteDateTime(entity.Well.Timezone.Hours); dto.LastUpdate = entity.LastUpdate.ToRemoteDateTime(entity.Well.Timezone.Hours);
dto.AxialLoad = new PlanLimitDto dto.AxialLoad = new PlanLimitDto
{ {
@ -137,7 +137,7 @@ namespace AsbCloudInfrastructure.Repository
return dto; return dto;
} }
protected override ProcessMap Convert(ProcessMapDto dto) protected override ProcessMap Convert(ProcessMapPlanDto dto)
{ {
var entity = dto.Adapt<ProcessMap>(); var entity = dto.Adapt<ProcessMap>();
entity.AxialLoadPlan = dto.AxialLoad.Plan; entity.AxialLoadPlan = dto.AxialLoad.Plan;

View File

@ -50,7 +50,7 @@ namespace AsbCloudInfrastructure.Repository
} }
/// <inheritdoc/> /// <inheritdoc/>
public async Task<IEnumerable<ProcessMapDto>> GetCompositeProcessMap(int idWell, CancellationToken token) public async Task<IEnumerable<ProcessMapPlanDto>> GetCompositeProcessMap(int idWell, CancellationToken token)
{ {
var dtos = await GetAsync(idWell, token); var dtos = await GetAsync(idWell, token);

View File

@ -107,45 +107,45 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
.Merge().FirstCell() .Merge().FirstCell()
.SetVal(interval.MechDrillingHours); .SetVal(interval.MechDrillingHours);
row = FillIntervalModeData(sheet, "Ротор", interval.Rotor, columnMode, row); //row = FillIntervalModeData(sheet, "Ротор", interval.Rotor, columnMode, row);
row = FillIntervalModeData(sheet, "Слайд", interval.Slide, columnMode, row); //row = FillIntervalModeData(sheet, "Слайд", interval.Slide, columnMode, row);
return row; return row;
} }
private static int FillIntervalModeData(IXLWorksheet sheet, string modeName, ProcessMapReportRowDto modeData, int column, int row) //private static int FillIntervalModeData(IXLWorksheet sheet, string modeName, ProcessMapReportRowDto modeData, int column, int row)
{ //{
int columnDeltaDepth = column + 1; // int columnDeltaDepth = column + 1;
int columnPressure = columnDeltaDepth + 1; // int columnPressure = columnDeltaDepth + 1;
int columnLoad = columnPressure + 5; // int columnLoad = columnPressure + 5;
int columnTorque = columnLoad + 5; // int columnTorque = columnLoad + 5;
int columnSpeed = columnTorque + 5; // int columnSpeed = columnTorque + 5;
int columnUsagePlan = columnSpeed + 5; // int columnUsagePlan = columnSpeed + 5;
int columnUsageFact = columnUsagePlan + 1; // int columnUsageFact = columnUsagePlan + 1;
int columnRop = columnUsageFact + 12; // int columnRop = columnUsageFact + 12;
sheet.Cell(row, column) // sheet.Cell(row, column)
.SetVal(modeName); // .SetVal(modeName);
sheet.Cell(row, columnDeltaDepth) // sheet.Cell(row, columnDeltaDepth)
.SetVal(modeData.DeltaDepth); // .SetVal(modeData.DeltaDepth);
FillIntervalModeDataParam(sheet, modeData.PressureDiff, columnPressure, row); // FillIntervalModeDataParam(sheet, modeData.PressureDiff, columnPressure, row);
FillIntervalModeDataParam(sheet, modeData.AxialLoad, columnLoad, row); // FillIntervalModeDataParam(sheet, modeData.AxialLoad, columnLoad, row);
FillIntervalModeDataParam(sheet, modeData.TopDriveTorque, columnTorque, row); // FillIntervalModeDataParam(sheet, modeData.TopDriveTorque, columnTorque, row);
FillIntervalModeDataSpeed(sheet, modeData.SpeedLimit, columnSpeed, row); // FillIntervalModeDataSpeed(sheet, modeData.SpeedLimit, columnSpeed, row);
sheet.Cell(row, columnUsagePlan) // sheet.Cell(row, columnUsagePlan)
.SetVal(100); // .SetVal(100);
sheet.Cell(row, columnUsageFact) // sheet.Cell(row, columnUsageFact)
.SetVal(modeData.Usage); // .SetVal(modeData.Usage);
sheet.Cell(row, columnRop) // sheet.Cell(row, columnRop)
.SetVal(modeData.Rop); // .SetVal(modeData.Rop);
return row + 1; // return row + 1;
} //}
private static void FillIntervalModeDataParam(IXLWorksheet sheet, ProcessMapReportParamsDto dataParam, int column, int row) private static void FillIntervalModeDataParam(IXLWorksheet sheet, ProcessMapReportParamsDto dataParam, int column, int row)
{ {
@ -168,7 +168,7 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
.SetVal(dataParam.Limit); .SetVal(dataParam.Limit);
sheet.Cell(row, column + columnOffsetPercent) sheet.Cell(row, column + columnOffsetPercent)
.SetVal(dataParam.PercDrillingSetpoint); .SetVal(dataParam.PercDrillingBySetpoint);
} }
private static void FillIntervalModeDataSpeed(IXLWorksheet sheet, ProcessMapReportParamsDto dataParam, int column, int row) private static void FillIntervalModeDataSpeed(IXLWorksheet sheet, ProcessMapReportParamsDto dataParam, int column, int row)
@ -192,7 +192,7 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
.SetVal(dataParam.Limit); .SetVal(dataParam.Limit);
sheet.Cell(row, column + columnOffsetPercent) sheet.Cell(row, column + columnOffsetPercent)
.SetVal(dataParam.PercDrillingSetpoint); .SetVal(dataParam.PercDrillingBySetpoint);
} }
private static Stream GetExcelTemplateStream() private static Stream GetExcelTemplateStream()

View File

@ -96,7 +96,7 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
private static IEnumerable<ProcessMapReportDto> HandleSection( private static IEnumerable<ProcessMapReportDto> HandleSection(
IEnumerable<WellOperationDto> sectionOperations, IEnumerable<WellOperationDto> sectionOperations,
IEnumerable<ProcessMapDto> sectionProcessMap, IEnumerable<ProcessMapPlanDto> sectionProcessMap,
IEnumerable<TelemetryDataSaubStatDto> telemetryDataStat, IEnumerable<TelemetryDataSaubStatDto> telemetryDataStat,
IEnumerable<LimitingParameterDataDto> limitingParameters, IEnumerable<LimitingParameterDataDto> limitingParameters,
IEnumerable<SubsystemOperationTimeDto> subsystemsOperationTime) IEnumerable<SubsystemOperationTimeDto> subsystemsOperationTime)
@ -116,7 +116,7 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
private static ProcessMapReportDto MakeProcessMapReportDto( private static ProcessMapReportDto MakeProcessMapReportDto(
(double min, double max) depthInterval, (double min, double max) depthInterval,
IEnumerable<WellOperationDto> sectionOperations, IEnumerable<WellOperationDto> sectionOperations,
IEnumerable<ProcessMapDto> sectionProcessMap, IEnumerable<ProcessMapPlanDto> sectionProcessMap,
IEnumerable<TelemetryDataSaubStatDto> telemetryDataStat, IEnumerable<TelemetryDataSaubStatDto> telemetryDataStat,
IEnumerable<LimitingParameterDataDto> limitingParameters, IEnumerable<LimitingParameterDataDto> limitingParameters,
IEnumerable<SubsystemOperationTimeDto> subsystemsOperationTime) IEnumerable<SubsystemOperationTimeDto> subsystemsOperationTime)
@ -146,8 +146,8 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
var slideOperations = intervalOperations.Where(o => o.IdCategory == WellOperationCategory.IdSlide); var slideOperations = intervalOperations.Where(o => o.IdCategory == WellOperationCategory.IdSlide);
var rotorOperations = intervalOperations.Where(o => o.IdCategory == WellOperationCategory.IdRotor); var rotorOperations = intervalOperations.Where(o => o.IdCategory == WellOperationCategory.IdRotor);
dto.Slide = CalcDrillModeStat(depthInterval, slideOperations, intervalProcessMap, intervalTelemetryDataStat, intervalLimitingParametrs, intervalSubsystemsOperationTime); //dto.Slide = CalcDrillModeStat(depthInterval, slideOperations, intervalProcessMap, intervalTelemetryDataStat, intervalLimitingParametrs, intervalSubsystemsOperationTime);
dto.Rotor = CalcDrillModeStat(depthInterval, rotorOperations, intervalProcessMap, intervalTelemetryDataStat, intervalLimitingParametrs, intervalSubsystemsOperationTime); //dto.Rotor = CalcDrillModeStat(depthInterval, rotorOperations, intervalProcessMap, intervalTelemetryDataStat, intervalLimitingParametrs, intervalSubsystemsOperationTime);
return dto; return dto;
} }
@ -201,91 +201,91 @@ namespace AsbCloudInfrastructure.Services.ProcessMap
return result; return result;
} }
private static ProcessMapReportRowDto CalcDrillModeStat( //private static ProcessMapReportRowDto CalcDrillModeStat(
(double min, double max) depthInterval, // (double min, double max) depthInterval,
IEnumerable<WellOperationDto> intervalModeOperations, // IEnumerable<WellOperationDto> intervalModeOperations,
IEnumerable<ProcessMapDto> intervalProcessMap, // IEnumerable<ProcessMapDto> intervalProcessMap,
TelemetryDataSaubStatDto? telemetryDataStat, // TelemetryDataSaubStatDto? telemetryDataStat,
IEnumerable<LimitingParameterDataDto> intervalLimitingParametrs, // IEnumerable<LimitingParameterDataDto> intervalLimitingParametrs,
IEnumerable<SubsystemOperationTimeDto> intervalSubsystemsOperationTime) // IEnumerable<SubsystemOperationTimeDto> intervalSubsystemsOperationTime)
{ //{
var dto = new ProcessMapReportRowDto(); // var dto = new ProcessMapReportRowDto();
if (intervalModeOperations.Any()) // if (intervalModeOperations.Any())
{ // {
var deltaDepth = CalcDeltaDepth(depthInterval, intervalModeOperations); // var deltaDepth = CalcDeltaDepth(depthInterval, intervalModeOperations);
dto.DeltaDepth = deltaDepth; // dto.DeltaDepth = deltaDepth;
dto.Rop = deltaDepth / CalcHours(depthInterval, intervalModeOperations); // dto.Rop = deltaDepth / CalcHours(depthInterval, intervalModeOperations);
}; // };
if (intervalProcessMap.Any()) // if (intervalProcessMap.Any())
{ // {
var processMapFirst = intervalProcessMap.First(); // var processMapFirst = intervalProcessMap.First();
dto.PressureDiff.SetpointPlan = processMapFirst.Pressure.Plan; // dto.PressureDiff.SetpointPlan = processMapFirst.Pressure.Plan;
dto.AxialLoad.SetpointPlan = processMapFirst.AxialLoad.Plan; // dto.AxialLoad.SetpointPlan = processMapFirst.AxialLoad.Plan;
dto.TopDriveTorque.SetpointPlan = processMapFirst.TopDriveTorque.Plan; // dto.TopDriveTorque.SetpointPlan = processMapFirst.TopDriveTorque.Plan;
//dto.SpeedLimit.SetpointPlan = null; // //dto.SpeedLimit.SetpointPlan = null;
} // }
if (telemetryDataStat is not null) // if (telemetryDataStat is not null)
{ // {
dto.PressureDiff.SetpointFact = telemetryDataStat.PressureSp; // dto.PressureDiff.SetpointFact = telemetryDataStat.PressureSp;
dto.PressureDiff.Fact = telemetryDataStat.PressureDelta; // dto.PressureDiff.Fact = telemetryDataStat.PressureDelta;
dto.PressureDiff.Limit = telemetryDataStat.PressureDeltaLimitMax; // dto.PressureDiff.Limit = telemetryDataStat.PressureDeltaLimitMax;
dto.AxialLoad.SetpointFact = telemetryDataStat.AxialLoadSp; // dto.AxialLoad.SetpointFact = telemetryDataStat.AxialLoadSp;
dto.AxialLoad.Fact = telemetryDataStat.AxialLoad; // dto.AxialLoad.Fact = telemetryDataStat.AxialLoad;
dto.AxialLoad.Limit = telemetryDataStat.AxialLoadLimitMax; // dto.AxialLoad.Limit = telemetryDataStat.AxialLoadLimitMax;
dto.TopDriveTorque.SetpointFact = telemetryDataStat.RotorTorqueSp; // dto.TopDriveTorque.SetpointFact = telemetryDataStat.RotorTorqueSp;
dto.TopDriveTorque.Fact = telemetryDataStat.RotorTorque; // dto.TopDriveTorque.Fact = telemetryDataStat.RotorTorque;
dto.TopDriveTorque.Limit = telemetryDataStat.RotorTorqueLimitMax; // dto.TopDriveTorque.Limit = telemetryDataStat.RotorTorqueLimitMax;
dto.SpeedLimit.SetpointFact = telemetryDataStat.BlockSpeedSp; // dto.SpeedLimit.SetpointFact = telemetryDataStat.BlockSpeedSp;
dto.SpeedLimit.Fact = telemetryDataStat.BlockSpeed; // dto.SpeedLimit.Fact = telemetryDataStat.BlockSpeed;
//dto.SpeedLimit.Limit = mull; // //dto.SpeedLimit.Limit = mull;
} // }
if(intervalLimitingParametrs.Any()) // if(intervalLimitingParametrs.Any())
{ // {
const int idLimParamRop = 1; // const int idLimParamRop = 1;
const int idLimParamPressure = 2; // const int idLimParamPressure = 2;
const int idLimParamAxialLoad = 3; // const int idLimParamAxialLoad = 3;
const int idLimParamTorque = 4; // const int idLimParamTorque = 4;
var intervalLimitingParametrsStat = intervalLimitingParametrs // var intervalLimitingParametrsStat = intervalLimitingParametrs
.GroupBy(p => p.IdFeedRegulator) // .GroupBy(p => p.IdFeedRegulator)
.Select(g => new // .Select(g => new
{ // {
IdLimParam = g.Key, // IdLimParam = g.Key,
SumDepth = g.Sum(p => p.DepthEnd - p.DepthStart), // SumDepth = g.Sum(p => p.DepthEnd - p.DepthStart),
}); // });
var totalDepth = intervalLimitingParametrsStat // var totalDepth = intervalLimitingParametrsStat
.Sum(s => s.SumDepth); // .Sum(s => s.SumDepth);
if (totalDepth > 0) // if (totalDepth > 0)
{ // {
dto.AxialLoad.PercDrillingSetpoint = intervalLimitingParametrsStat // dto.AxialLoad.PercDrillingSetpoint = intervalLimitingParametrsStat
.FirstOrDefault(s => s.IdLimParam == idLimParamAxialLoad)?.SumDepth / totalDepth; // .FirstOrDefault(s => s.IdLimParam == idLimParamAxialLoad)?.SumDepth / totalDepth;
dto.PressureDiff.PercDrillingSetpoint = intervalLimitingParametrsStat // dto.PressureDiff.PercDrillingSetpoint = intervalLimitingParametrsStat
.FirstOrDefault(s => s.IdLimParam == idLimParamPressure)?.SumDepth / totalDepth; // .FirstOrDefault(s => s.IdLimParam == idLimParamPressure)?.SumDepth / totalDepth;
dto.TopDriveTorque.PercDrillingSetpoint = intervalLimitingParametrsStat // dto.TopDriveTorque.PercDrillingSetpoint = intervalLimitingParametrsStat
.FirstOrDefault(s => s.IdLimParam == idLimParamTorque)?.SumDepth / totalDepth; // .FirstOrDefault(s => s.IdLimParam == idLimParamTorque)?.SumDepth / totalDepth;
dto.SpeedLimit.PercDrillingSetpoint = intervalLimitingParametrsStat // dto.SpeedLimit.PercDrillingSetpoint = intervalLimitingParametrsStat
.FirstOrDefault(s => s.IdLimParam == idLimParamRop)?.SumDepth / totalDepth; // .FirstOrDefault(s => s.IdLimParam == idLimParamRop)?.SumDepth / totalDepth;
} // }
} // }
if (intervalSubsystemsOperationTime.Any() && dto.DeltaDepth > 0) // if (intervalSubsystemsOperationTime.Any() && dto.DeltaDepth > 0)
{ // {
dto.Usage = intervalSubsystemsOperationTime.Sum(t => t.DepthEnd - t.DepthStart) / dto.DeltaDepth.Value; // dto.Usage = intervalSubsystemsOperationTime.Sum(t => t.DepthEnd - t.DepthStart) / dto.DeltaDepth.Value;
} // }
return dto; // return dto;
} //}
private static double CalcDeltaDepth((double min, double max) depthInterval, IEnumerable<WellOperationDto> intervalOperations) private static double CalcDeltaDepth((double min, double max) depthInterval, IEnumerable<WellOperationDto> intervalOperations)
{ {

View File

@ -105,7 +105,7 @@ namespace AsbCloudInfrastructure.Services
int? idSection = wellLastFactSection?.Id; int? idSection = wellLastFactSection?.Id;
ProcessMapDto? welllProcessMap; ProcessMapPlanDto? welllProcessMap;
if (idSection is not null) if (idSection is not null)
{ {
welllProcessMap = wellProcessMaps.FirstOrDefault(p => p.IdWellSectionType == idSection); welllProcessMap = wellProcessMaps.FirstOrDefault(p => p.IdWellSectionType == idSection);

View File

@ -18,7 +18,7 @@ namespace AsbCloudWebApi.Controllers
[ApiController] [ApiController]
[Route("api/[controller]")] [Route("api/[controller]")]
[Authorize] [Authorize]
public class ProcessMapController : CrudWellRelatedController<ProcessMapDto, IProcessMapRepository> public class ProcessMapController : CrudWellRelatedController<ProcessMapPlanDto, IProcessMapRepository>
{ {
private readonly ITelemetryService telemetryService; private readonly ITelemetryService telemetryService;
private readonly IProcessMapReportService processMapReportService; private readonly IProcessMapReportService processMapReportService;
@ -49,14 +49,14 @@ namespace AsbCloudWebApi.Controllers
[Obsolete("use GetByUidAsync(..) instead")] [Obsolete("use GetByUidAsync(..) instead")]
[Route("/api/telemetry/{uid}/drillFlowChart")] [Route("/api/telemetry/{uid}/drillFlowChart")]
[AllowAnonymous] [AllowAnonymous]
[ProducesResponseType(typeof(IEnumerable<ProcessMapDto>), (int)System.Net.HttpStatusCode.OK)] [ProducesResponseType(typeof(IEnumerable<ProcessMapPlanDto>), (int)System.Net.HttpStatusCode.OK)]
public IActionResult GetByTelemetry(string uid, DateTime updateFrom, CancellationToken token) public IActionResult GetByTelemetry(string uid, DateTime updateFrom, CancellationToken token)
{ {
var idWell = telemetryService.GetIdWellByTelemetryUid(uid); var idWell = telemetryService.GetIdWellByTelemetryUid(uid);
if (idWell is null) if (idWell is null)
return BadRequest($"Wrong uid {uid}"); return BadRequest($"Wrong uid {uid}");
var dto = Enumerable.Empty<ProcessMapDto>(); var dto = Enumerable.Empty<ProcessMapPlanDto>();
return Ok(dto); return Ok(dto);
} }
@ -70,7 +70,7 @@ namespace AsbCloudWebApi.Controllers
[HttpGet] [HttpGet]
[Route("/api/telemetry/{uid}/processMap")] [Route("/api/telemetry/{uid}/processMap")]
[AllowAnonymous] [AllowAnonymous]
[ProducesResponseType(typeof(IEnumerable<ProcessMapDto>), (int)System.Net.HttpStatusCode.OK)] [ProducesResponseType(typeof(IEnumerable<ProcessMapPlanDto>), (int)System.Net.HttpStatusCode.OK)]
public async Task<IActionResult> GetByUidAsync(string uid, DateTime updateFrom, CancellationToken token) public async Task<IActionResult> GetByUidAsync(string uid, DateTime updateFrom, CancellationToken token)
{ {
var idWell = telemetryService.GetIdWellByTelemetryUid(uid); var idWell = telemetryService.GetIdWellByTelemetryUid(uid);
@ -133,7 +133,7 @@ namespace AsbCloudWebApi.Controllers
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public override async Task<ActionResult<int>> InsertAsync([FromBody] ProcessMapDto value, CancellationToken token) public override async Task<ActionResult<int>> InsertAsync([FromBody] ProcessMapPlanDto value, CancellationToken token)
{ {
value.IdUser = User.GetUserId() ?? -1; value.IdUser = User.GetUserId() ?? -1;
return await base.InsertAsync(value, token); return await base.InsertAsync(value, token);
@ -146,7 +146,7 @@ namespace AsbCloudWebApi.Controllers
/// <param name="token"></param> /// <param name="token"></param>
/// <returns>1 - успешно отредактировано, 0 - нет</returns> /// <returns>1 - успешно отредактировано, 0 - нет</returns>
[HttpPut] [HttpPut]
public override async Task<ActionResult<int>> UpdateAsync([FromBody] ProcessMapDto value, CancellationToken token) public override async Task<ActionResult<int>> UpdateAsync([FromBody] ProcessMapPlanDto value, CancellationToken token)
{ {
value.IdUser = User.GetUserId() ?? -1; value.IdUser = User.GetUserId() ?? -1;
return await base.UpdateAsync(value, token); return await base.UpdateAsync(value, token);

View File

@ -73,7 +73,7 @@ namespace AsbCloudWebApi.Controllers
/// <returns></returns> /// <returns></returns>
[HttpGet("getCompositeProcessMap")] [HttpGet("getCompositeProcessMap")]
[Permission] [Permission]
[ProducesResponseType(typeof(IEnumerable<ProcessMapDto>), (int)System.Net.HttpStatusCode.OK)] [ProducesResponseType(typeof(IEnumerable<ProcessMapPlanDto>), (int)System.Net.HttpStatusCode.OK)]
public async Task<IActionResult> GetCompositeProcessMap(int idWell, CancellationToken token = default) public async Task<IActionResult> GetCompositeProcessMap(int idWell, CancellationToken token = default)
{ {
if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false)) if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false))

View File

@ -0,0 +1,35 @@
@baseUrl = http://127.0.0.1:5000
@contentType = application/json
@auth = Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6IkpXVCJ9.eyJpZCI6IjEiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiZGV2IiwiaWRDb21wYW55IjoiMSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6InJvb3QiLCJuYmYiOjE2NjI1NDgxNjIsImV4cCI6MTY5NDEwNTc2MiwiaXNzIjoiYSIsImF1ZCI6ImEifQ.OEAlNzxi7Jat6pzDBTAjTbChskc-tdJthJexyWwwUKE
# https://marketplace.visualstudio.com/items?itemName=humao.rest-client
###
GET {{baseUrl}}/api/schedule/test
Content-Type: {{contentType}}
accept: */*
Authorization: {{auth}}
###
POST {{baseUrl}}/api/schedule/test
Content-Type: {{contentType}}
accept: */*
Authorization: {{auth}}
{
"id": 0,
"items": [
{
"id": 1,
"value": 0.1
},
{
"id": 2,
"value": 1.
},
{
"id": 3,
"value": 2.0
}
]
}

View File

@ -0,0 +1,7 @@
# Эта папка предназначена для хранения файлов для отладки/проверки web-api.
Файлы *.http (или *.rest) позволяют вызывать endpoint api без swagger (или postman).
[Документация по созданию файлов](https://marketplace.visualstudio.com/items?itemName=humao.rest-client)
Желательно создавать 1 файл на 1 контроллер.