Merge branch 'dev'

This commit is contained in:
ngfrolov 2024-07-30 15:57:33 +05:00
commit fcd77dfead
Signed by: ng.frolov
GPG Key ID: E99907A0357B29A7
1092 changed files with 122040 additions and 10581 deletions

View File

@ -1,4 +1,4 @@
using AsbCloudApp.Data; using AsbCloudApp.Data;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;

View File

@ -1,4 +1,4 @@
using AsbCloudApp.Data.SAUB; using AsbCloudApp.Data.SAUB;
using System.Collections.Generic; using System.Collections.Generic;
namespace AsbCloudApp.Comparators namespace AsbCloudApp.Comparators

View File

@ -1,4 +1,4 @@
using System.Linq; using System.Linq;
namespace System.Collections.Generic namespace System.Collections.Generic
{ {

View File

@ -1,4 +1,4 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {

View File

@ -1,4 +1,4 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data

View File

@ -1,4 +1,4 @@
using AsbCloudApp.Data.User; using AsbCloudApp.Data.User;
using System; using System;
namespace AsbCloudApp.Data; namespace AsbCloudApp.Data;
@ -6,12 +6,12 @@ namespace AsbCloudApp.Data;
/// <summary> /// <summary>
/// Часть записи описывающая изменение /// Часть записи описывающая изменение
/// </summary> /// </summary>
public abstract class ChangeLogAbstract public class ChangeLogDto<T> where T: IId
{ {
/// <summary> /// <summary>
/// ИД записи /// Запись
/// </summary> /// </summary>
public int Id { get; set; } public required T Item { get; set; }
/// <summary> /// <summary>
/// Автор /// Автор

View File

@ -1,4 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;

View File

@ -3,18 +3,18 @@ using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {
/// <summary> /// <summary>
/// Статистика механической скорости проходки (МСП) по кусту /// Статистика механической скорости проходки (МСП) по кусту
/// </summary> /// </summary>
public class ClusterRopStatDto public class ClusterRopStatDto
{ {
/// <summary> /// <summary>
/// Макс. механическая скорость проходки по кусту /// Макс. механическая скорость проходки по кусту
/// </summary> /// </summary>
[Required] [Required]
public double RopMax { get; set; } public double RopMax { get; set; }
/// <summary> /// <summary>
/// Средняя механическая скорость проходки по кусту /// Средняя механическая скорость проходки по кусту
/// </summary> /// </summary>
[Required] [Required]
public double RopAverage { get; set; } public double RopAverage { get; set; }

View File

@ -1,4 +1,4 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {

View File

@ -1,4 +1,4 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {

View File

@ -7,22 +7,22 @@ namespace AsbCloudApp.Data.DailyReport.Blocks;
/// </summary> /// </summary>
public class ProcessMapWellDrillingRecordDto public class ProcessMapWellDrillingRecordDto
{ {
/// <summary> /// <summary>
/// Режим бурения /// Режим бурения
/// </summary> /// </summary>
[Required] [Required]
public string DrillingMode { get; set; } = null!; public string DrillingMode { get; set; } = null!;
/// <summary> /// <summary>
/// Мех. скорость /// Мех. скорость
/// </summary> /// </summary>
[Required] [Required]
public PlanFactDto<double?> Rop { get; set; } = new(); public PlanFactDto<double?> Rop { get; set; } = new();
/// <summary> /// <summary>
/// Глубина ствола /// Глубина ствола
/// </summary> /// </summary>
public double? WellBoreDepth { get; set; } public double? WellBoreDepth { get; set; }
/// <summary> /// <summary>
/// Часы бурения /// Часы бурения

View File

@ -5,28 +5,28 @@ namespace AsbCloudApp.Data.DailyReport.Blocks;
/// </summary> /// </summary>
public class ScheduleRecordDto public class ScheduleRecordDto
{ {
/// <summary> /// <summary>
/// Начало смены /// Начало смены
/// </summary> /// </summary>
public TimeDto? ShiftStart { get; set; } public TimeDto? ShiftStart { get; set; }
/// <summary> /// <summary>
/// Конец смены /// Конец смены
/// </summary> /// </summary>
public TimeDto? ShiftEnd { get; set; } public TimeDto? ShiftEnd { get; set; }
/// <summary> /// <summary>
/// Имя бурильщика /// Имя бурильщика
/// </summary> /// </summary>
public string? Name { get; set; } public string? Name { get; set; }
/// <summary> /// <summary>
/// Фамилия бурильщика /// Фамилия бурильщика
/// </summary> /// </summary>
public string? Surname { get; set; } public string? Surname { get; set; }
/// <summary> /// <summary>
/// Отчество бурильщика /// Отчество бурильщика
/// </summary> /// </summary>
public string? Patronymic { get; set; } public string? Patronymic { get; set; }
} }

View File

@ -5,13 +5,13 @@ namespace AsbCloudApp.Data.DailyReport.Blocks.Sign;
/// </summary> /// </summary>
public class SignBlockDto : ItemInfoDto public class SignBlockDto : ItemInfoDto
{ {
/// <summary> /// <summary>
/// Подпись мастера буровой /// Подпись мастера буровой
/// </summary> /// </summary>
public SignRecordDto? DrillingMaster { get; set; } public SignRecordDto? DrillingMaster { get; set; }
/// <summary> /// <summary>
/// Подпись супервайзера /// Подпись супервайзера
/// </summary> /// </summary>
public SignRecordDto? Supervisor { get; set; } public SignRecordDto? Supervisor { get; set; }
} }

View File

@ -7,11 +7,11 @@ namespace AsbCloudApp.Data.DailyReport.Blocks.Sign;
/// </summary> /// </summary>
public class SignRecordDto public class SignRecordDto
{ {
/// <summary> /// <summary>
/// Имя /// Имя
/// </summary> /// </summary>
[Required] [Required]
public string Name { get; set; } = null!; public string Name { get; set; } = null!;
/// <summary> /// <summary>
/// Фамилия /// Фамилия
@ -19,14 +19,14 @@ public class SignRecordDto
[Required] [Required]
public string Surname { get; set; } = null!; public string Surname { get; set; } = null!;
/// <summary> /// <summary>
/// Отчество /// Отчество
/// </summary> /// </summary>
public string? Patronymic { get; set; } public string? Patronymic { get; set; }
/// <inheritdoc /> /// <inheritdoc />
public override string ToString() public override string ToString()
{ {
return $"{Surname} {Name} {Patronymic}"; return $"{Surname} {Name} {Patronymic}";
} }
} }

View File

@ -9,34 +9,34 @@ namespace AsbCloudApp.Data.DailyReport.Blocks.Subsystems;
/// </summary> /// </summary>
public class SubsystemBlockDto : ItemInfoDto public class SubsystemBlockDto : ItemInfoDto
{ {
/// <summary> /// <summary>
/// Длина ствола скважины /// Длина ствола скважины
/// </summary> /// </summary>
public double? Wellbore { get; set; } public double? Wellbore { get; set; }
/// <summary> /// <summary>
/// Кол-во замеров за сутки /// Кол-во замеров за сутки
/// </summary> /// </summary>
public double? MeasurementsPerDay { get; set; } public double? MeasurementsPerDay { get; set; }
/// <summary> /// <summary>
/// Общая плановая мех. скорость /// Общая плановая мех. скорость
/// </summary> /// </summary>
public double? TotalRopPlan { get; set; } public double? TotalRopPlan { get; set; }
/// <summary> /// <summary>
/// Отклонение по ГГД, сут /// Отклонение по ГГД, сут
/// </summary> /// </summary>
public double? TvgLagDays { get; set; } public double? TvgLagDays { get; set; }
/// <summary> /// <summary>
/// Рекомендации специалиста /// Рекомендации специалиста
/// </summary> /// </summary>
public string? Comment { get; set; } public string? Comment { get; set; }
/// <summary> /// <summary>
/// Подсистемы /// Подсистемы
/// </summary> /// </summary>
[Required] [Required]
public IEnumerable<SubsystemRecordDto> Subsystems { get; set; } = Enumerable.Empty<SubsystemRecordDto>(); public IEnumerable<SubsystemRecordDto> Subsystems { get; set; } = Enumerable.Empty<SubsystemRecordDto>();
} }

View File

@ -7,19 +7,19 @@ namespace AsbCloudApp.Data.DailyReport.Blocks.Subsystems;
/// </summary> /// </summary>
public class SubsystemParametersDto public class SubsystemParametersDto
{ {
/// <summary> /// <summary>
/// Сумма изменения глубин при включенной подсистеме /// Сумма изменения глубин при включенной подсистеме
/// </summary> /// </summary>
public double? SumDepthInterval { get; set; } public double? SumDepthInterval { get; set; }
/// <summary> /// <summary>
/// Наработка подсистемы /// Наработка подсистемы
/// </summary> /// </summary>
public double? UsedTimeHours { get; set; } public double? UsedTimeHours { get; set; }
/// <summary> /// <summary>
/// Коэффициент использования /// Коэффициент использования
/// </summary> /// </summary>
[Range(0, 1)] [Range(0, 1)]
public double? KUsage { get; set; } public double? KUsage { get; set; }
} }

View File

@ -7,19 +7,19 @@ namespace AsbCloudApp.Data.DailyReport.Blocks.Subsystems;
/// </summary> /// </summary>
public class SubsystemRecordDto public class SubsystemRecordDto
{ {
/// <summary> /// <summary>
/// Название подсистемы /// Название подсистемы
/// </summary> /// </summary>
[Required] [Required]
public string Name { get; set; } = null!; public string Name { get; set; } = null!;
/// <summary> /// <summary>
/// Использование подсистемы за сутки /// Использование подсистемы за сутки
/// </summary> /// </summary>
public SubsystemParametersDto? UsagePerDay { get; set; } public SubsystemParametersDto? UsagePerDay { get; set; }
/// <summary> /// <summary>
/// Использование подсистемы за скважину /// Использование подсистемы за скважину
/// </summary> /// </summary>
public SubsystemParametersDto? UsagePerWell { get; set; } public SubsystemParametersDto? UsagePerWell { get; set; }
} }

View File

@ -9,29 +9,29 @@ namespace AsbCloudApp.Data.DailyReport.Blocks.TimeBalance;
/// </summary> /// </summary>
public class TimeBalanceBlockDto : ItemInfoDto public class TimeBalanceBlockDto : ItemInfoDto
{ {
/// <summary> /// <summary>
/// Идентификатор секции /// Идентификатор секции
/// </summary> /// </summary>
[Range(1, int.MaxValue)] [Range(1, int.MaxValue)]
public int IdSection { get; set; } public int IdSection { get; set; }
/// <summary> /// <summary>
/// Название секции /// Название секции
/// </summary> /// </summary>
public string? SectionName { get; set; } public string? SectionName { get; set; }
/// <summary> /// <summary>
/// Проходка скважины /// Проходка скважины
/// </summary> /// </summary>
public PlanFactDto<double?> WellDepth { get; set; } = new(); public PlanFactDto<double?> WellDepth { get; set; } = new();
/// <summary> /// <summary>
/// Кол-во наращиваний за сутки /// Кол-во наращиваний за сутки
/// </summary> /// </summary>
public double? WellOperationSlipsTimeCount { get; set; } public double? WellOperationSlipsTimeCount { get; set; }
/// <summary> /// <summary>
/// Операции на скважине /// Операции на скважине
/// </summary> /// </summary>
public IEnumerable<TimeBalanceRecordDto> WellOperations { get; set; } = Enumerable.Empty<TimeBalanceRecordDto>(); public IEnumerable<TimeBalanceRecordDto> WellOperations { get; set; } = Enumerable.Empty<TimeBalanceRecordDto>();
} }

View File

@ -5,31 +5,31 @@ namespace AsbCloudApp.Data.DailyReport.Blocks.TimeBalance;
/// </summary> /// </summary>
public class TimeBalanceRecordDto public class TimeBalanceRecordDto
{ {
/// <summary> /// <summary>
/// Мех. бурение - 1 /// Мех. бурение - 1
/// Снятие замера, ориентирование - 2 /// Снятие замера, ориентирование - 2
/// Наращивание, выход на режим - 3 /// Наращивание, выход на режим - 3
/// Промывка, проработка - 4 /// Промывка, проработка - 4
/// </summary> /// </summary>
public int IdWellOperation { get; set; } public int IdWellOperation { get; set; }
/// <summary> /// <summary>
/// Продолжительность операции, ч /// Продолжительность операции, ч
/// </summary> /// </summary>
public PlanFactDto<double?> DurationHours { get; set; } = new(); public PlanFactDto<double?> DurationHours { get; set; } = new();
/// <summary> /// <summary>
/// Отклонение за секцию /// Отклонение за секцию
/// </summary> /// </summary>
public double? DrillingDeviationPerSection { get; set; } public double? DrillingDeviationPerSection { get; set; }
/// <summary> /// <summary>
/// Отклонение за сутки /// Отклонение за сутки
/// </summary> /// </summary>
public double? DrillingDeviationPerDay { get; set; } public double? DrillingDeviationPerDay { get; set; }
/// <summary> /// <summary>
/// Причина отклонения /// Причина отклонения
/// </summary> /// </summary>
public string? ReasonDeviation { get; set; } public string? ReasonDeviation { get; set; }
} }

View File

@ -5,23 +5,23 @@ namespace AsbCloudApp.Data.DailyReport.Blocks;
/// </summary> /// </summary>
public class TrajectoryBlockDto public class TrajectoryBlockDto
{ {
/// <summary> /// <summary>
/// Глубина по стволу /// Глубина по стволу
/// </summary> /// </summary>
public double? WellboreDepth { get; set; } public double? WellboreDepth { get; set; }
/// <summary> /// <summary>
/// Глубина вертикальная /// Глубина вертикальная
/// </summary> /// </summary>
public double? VerticalDepth { get; set; } public double? VerticalDepth { get; set; }
/// <summary> /// <summary>
/// Угол зенитный /// Угол зенитный
/// </summary> /// </summary>
public double? ZenithAngle { get; set; } public double? ZenithAngle { get; set; }
/// <summary> /// <summary>
/// Азимут Географ. /// Азимут Географ.
/// </summary> /// </summary>
public double? AzimuthGeo { get; set; } public double? AzimuthGeo { get; set; }
} }

View File

@ -13,11 +13,11 @@ public class WellOperationBlockDto
/// Продолжительность бурения за секцию /// Продолжительность бурения за секцию
/// </summary> /// </summary>
[Required] [Required]
public double SectionDrillingHours { get; set; } public double SectionDrillingHours { get; set; }
/// <summary> /// <summary>
/// Операции проводимые на скважине /// Операции проводимые на скважине
/// </summary> /// </summary>
[Required] [Required]
public IEnumerable<WellOperationRecordDto> WellOperations { get; set; } = Enumerable.Empty<WellOperationRecordDto>(); public IEnumerable<WellOperationRecordDto> WellOperations { get; set; } = Enumerable.Empty<WellOperationRecordDto>();
} }

View File

@ -5,13 +5,13 @@ namespace AsbCloudApp.Data.DailyReport.Blocks.WellOperation;
/// </summary> /// </summary>
public class WellOperationRecordDto public class WellOperationRecordDto
{ {
/// <summary> /// <summary>
/// Название категории /// Название категории
/// </summary> /// </summary>
public string? CategoryName { get; set; } public string? CategoryName { get; set; }
/// <summary> /// <summary>
/// Продолжительность операции /// Продолжительность операции
/// </summary> /// </summary>
public double? DurationHours { get; set; } public double? DurationHours { get; set; }
} }

View File

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
@ -14,15 +14,15 @@ namespace AsbCloudApp.Data.DailyReport;
/// Суточный отчёт /// Суточный отчёт
/// </summary> /// </summary>
public class DailyReportDto : IId, public class DailyReportDto : IId,
IWellRelated IWellRelated
{ {
/// <inheritdoc/> /// <inheritdoc/>
[Required] [Required]
public int Id { get; set; } public int Id { get; set; }
/// <inheritdoc/> /// <inheritdoc/>
[Required] [Required]
public int IdWell { get; set; } public int IdWell { get; set; }
/// <summary> /// <summary>
/// Название скважины /// Название скважины
@ -30,51 +30,51 @@ public class DailyReportDto : IId,
[Required] [Required]
public string WellCaption { get; set; } = null!; public string WellCaption { get; set; } = null!;
/// <summary> /// <summary>
/// Название типа скважины /// Название типа скважины
/// </summary> /// </summary>
public string? WellType { get; set; } public string? WellType { get; set; }
/// <summary> /// <summary>
/// Название куста /// Название куста
/// </summary> /// </summary>
public string? Cluster { get; set; } public string? Cluster { get; set; }
/// <summary> /// <summary>
/// Заказчик /// Заказчик
/// </summary> /// </summary>
public string? Customer { get; set; } public string? Customer { get; set; }
/// <summary> /// <summary>
/// Подрядчик /// Подрядчик
/// </summary> /// </summary>
public string? Contractor { get; set; } public string? Contractor { get; set; }
/// <summary> /// <summary>
/// Месторождение /// Месторождение
/// </summary> /// </summary>
public string? Deposit { get; set; } public string? Deposit { get; set; }
/// <summary> /// <summary>
/// Глубина забоя на дату начала интервала /// Глубина забоя на дату начала интервала
/// </summary> /// </summary>
public double? DepthStart { get; set; } public double? DepthStart { get; set; }
/// <summary> /// <summary>
/// Глубина забоя на дату окончания интервала /// Глубина забоя на дату окончания интервала
/// </summary> /// </summary>
public double? DepthEnd { get; set; } public double? DepthEnd { get; set; }
/// <summary> /// <summary>
/// Дата формирования отчёта /// Дата формирования отчёта
/// </summary> /// </summary>
[Required] [Required]
public DateOnly Date { get; set; } public DateOnly Date { get; set; }
/// <summary> /// <summary>
/// Дата последнего обновления /// Дата последнего обновления
/// </summary> /// </summary>
public DateTimeOffset? DateLastUpdate { get; set; } public DateTimeOffset? DateLastUpdate { get; set; }
/// <summary> /// <summary>
/// Блок фактической траектории /// Блок фактической траектории
@ -88,20 +88,20 @@ public class DailyReportDto : IId,
[Required] [Required]
public WellOperationBlockDto FactWellOperationBlock { get; set; } = null!; public WellOperationBlockDto FactWellOperationBlock { get; set; } = null!;
/// <summary> /// <summary>
/// Баланс времени /// Баланс времени
/// </summary> /// </summary>
public TimeBalanceBlockDto? TimeBalanceBlock { get; set; } public TimeBalanceBlockDto? TimeBalanceBlock { get; set; }
/// <summary> /// <summary>
/// Наработка подсистем /// Наработка подсистем
/// </summary> /// </summary>
public SubsystemBlockDto? SubsystemBlock { get; set; } public SubsystemBlockDto? SubsystemBlock { get; set; }
/// <summary> /// <summary>
/// Подпись /// Подпись
/// </summary> /// </summary>
public SignBlockDto? SignBlock { get; set; } public SignBlockDto? SignBlock { get; set; }
/// <summary> /// <summary>
/// Блок расписания /// Блок расписания

View File

@ -1,8 +1,11 @@
using System; using System;
using AsbCloudApp.Data.WellOperation; using AsbCloudApp.Data.WellOperation;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {
/// <summary>
/// dto для хранения данных статистики сауб
/// </summary>
public class DataSaubStatDto:IId public class DataSaubStatDto:IId
{ {
/// <summary> /// <summary>

View File

@ -1,4 +1,4 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data

View File

@ -1,4 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;

View File

@ -1,4 +1,4 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DetectedOperation namespace AsbCloudApp.Data.DetectedOperation
{ {

View File

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using AsbCloudApp.Data.WellOperation; using AsbCloudApp.Data.WellOperation;
@ -10,82 +10,82 @@ namespace AsbCloudApp.Data.DetectedOperation;
/// </summary> /// </summary>
public class DetectedOperationDto : IId public class DetectedOperationDto : IId
{ {
/// <inheritdoc/> /// <inheritdoc/>
[Required] [Required]
public int Id { get; set; } public int Id { get; set; }
/// <summary> /// <summary>
/// Id телеметрии /// Id телеметрии
/// </summary> /// </summary>
[Required] [Required]
public int IdTelemetry { get; set; } public int IdTelemetry { get; set; }
/// <summary> /// <summary>
/// Id названия/описания операции /// Id названия/описания операции
/// </summary> /// </summary>
[Required] [Required]
public int IdCategory { get; set; } public int IdCategory { get; set; }
/// <summary> /// <summary>
/// Id пользователя панели на момент начала операции /// Id пользователя панели на момент начала операции
/// </summary> /// </summary>
public int? IdUserAtStart { get; set; } public int? IdUserAtStart { get; set; }
/// <summary> /// <summary>
/// Id пользователя изменившего операцию /// Id пользователя изменившего операцию
/// </summary> /// </summary>
public int? IdEditor { get; set; } public int? IdEditor { get; set; }
/// <summary> /// <summary>
/// Дата завершения операции в часовом поясе скважины /// Дата завершения операции в часовом поясе скважины
/// </summary> /// </summary>
[Required] [Required]
public DateTimeOffset DateEnd { get; set; } public DateTimeOffset DateEnd { get; set; }
/// <summary> /// <summary>
/// Дата начала операции в часовом поясе скважины /// Дата начала операции в часовом поясе скважины
/// </summary> /// </summary>
[Required] [Required]
public DateTimeOffset DateStart { get; set; } public DateTimeOffset DateStart { get; set; }
/// <summary> /// <summary>
/// глубина на завершения операции, м /// глубина на завершения операции, м
/// </summary> /// </summary>
[Required] [Required]
public double DepthEnd { get; set; } public double DepthEnd { get; set; }
/// <summary> /// <summary>
/// глубина на начало операции, м /// глубина на начало операции, м
/// </summary> /// </summary>
[Required] [Required]
public double DepthStart { get; set; } public double DepthStart { get; set; }
/// <summary> /// <summary>
/// Продолжительность операции в минутах /// Продолжительность операции в минутах
/// </summary> /// </summary>
[Required] [Required]
public double DurationMinutes => (DateEnd - DateStart).TotalMinutes; public double DurationMinutes => (DateEnd - DateStart).TotalMinutes;
/// <summary> /// <summary>
/// название/описание операции /// название/описание операции
/// </summary> /// </summary>
[Required] [Required]
public WellOperationCategoryDto OperationCategory { get; set; } = null!; public WellOperationCategoryDto OperationCategory { get; set; } = null!;
/// <summary> /// <summary>
/// Включенные подсистемы /// Включенные подсистемы
/// </summary> /// </summary>
[Required] [Required]
public EnabledSubsystems EnabledSubsystems { get; set; } public EnabledSubsystems EnabledSubsystems { get; set; }
/// <summary> /// <summary>
/// Значение ключевой параметра операции /// Значение ключевой параметра операции
/// </summary> /// </summary>
[Required] [Required]
public double Value { get; set; } public double Value { get; set; }
/// <summary> /// <summary>
/// Доп. инфо по операции /// Доп. инфо по операции
/// </summary> /// </summary>
public IDictionary<string, object> ExtraData { get; set; } = new Dictionary<string, object>(); public IDictionary<string, object> ExtraData { get; set; } = new Dictionary<string, object>();
} }

View File

@ -1,4 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;

View File

@ -1,4 +1,4 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DetectedOperation namespace AsbCloudApp.Data.DetectedOperation
{ {

View File

@ -1,4 +1,4 @@
namespace AsbCloudApp.Data.DetectedOperation namespace AsbCloudApp.Data.DetectedOperation
{ {
/// <summary> /// <summary>
/// Автоматически определяемая операция /// Автоматически определяемая операция

View File

@ -5,101 +5,101 @@ namespace AsbCloudApp.Data.DetectedOperation;
/// </summary> /// </summary>
public struct EnabledSubsystems public struct EnabledSubsystems
{ {
private int value; private int value;
private EnabledSubsystems(int value) private EnabledSubsystems(int value)
{ {
this.value = value; this.value = value;
} }
/// <inheritdoc/> /// <inheritdoc/>
public static implicit operator int(EnabledSubsystems param) => public static implicit operator int(EnabledSubsystems param) =>
param.value; param.value;
/// <inheritdoc/> /// <inheritdoc/>
public static implicit operator EnabledSubsystems(int param) => public static implicit operator EnabledSubsystems(int param) =>
new(param); new(param);
/// <summary> /// <summary>
/// Бурение ротором /// Бурение ротором
/// </summary> /// </summary>
public bool IsAutoRotor public bool IsAutoRotor
{ {
get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoRotor); get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoRotor);
set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoRotor); set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoRotor);
} }
/// <summary> /// <summary>
/// Бурение слайдом /// Бурение слайдом
/// </summary> /// </summary>
public bool IsAutoSlide public bool IsAutoSlide
{ {
get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoSlide); get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoSlide);
set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoSlide); set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoSlide);
} }
/// <summary> /// <summary>
/// ПРОРАБОТКА /// ПРОРАБОТКА
/// </summary> /// </summary>
public bool IsAutoConditionig public bool IsAutoConditionig
{ {
get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoConditionig); get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoConditionig);
set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoConditionig); set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoConditionig);
} }
/// <summary> /// <summary>
/// СПУСК СПО /// СПУСК СПО
/// </summary> /// </summary>
public bool IsAutoSinking public bool IsAutoSinking
{ {
get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoSinking); get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoSinking);
set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoSinking); set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoSinking);
} }
/// <summary> /// <summary>
/// ПОДЪЕМ СПО /// ПОДЪЕМ СПО
/// </summary> /// </summary>
public bool IsAutoLifting public bool IsAutoLifting
{ {
get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoLifting); get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoLifting);
set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoLifting); set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoLifting);
} }
/// <summary> /// <summary>
/// ПОДЪЕМ С ПРОРАБОТКОЙ /// ПОДЪЕМ С ПРОРАБОТКОЙ
/// </summary> /// </summary>
public bool IsAutoLiftingWithConditionig public bool IsAutoLiftingWithConditionig
{ {
get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoLiftingWithConditionig); get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoLiftingWithConditionig);
set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoLiftingWithConditionig); set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoLiftingWithConditionig);
} }
/// <summary> /// <summary>
/// Блокировка /// Блокировка
/// </summary> /// </summary>
public bool IsAutoBlocknig public bool IsAutoBlocknig
{ {
get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoBlocknig); get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoBlocknig);
set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoBlocknig); set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoBlocknig);
} }
/// <summary> /// <summary>
/// Осцилляция /// Осцилляция
/// </summary> /// </summary>
public bool IsAutoOscillation public bool IsAutoOscillation
{ {
get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoOscillation); get => IsEnabledSubsystem(EnabledSubsystemsFlags.AutoOscillation);
set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoOscillation); set => UpdateEnabledSubsystems(value, EnabledSubsystemsFlags.AutoOscillation);
} }
private bool IsEnabledSubsystem(EnabledSubsystemsFlags flag) => private bool IsEnabledSubsystem(EnabledSubsystemsFlags flag) =>
(value & (int)flag) > 0; (value & (int)flag) > 0;
private void UpdateEnabledSubsystems(bool isEnable, EnabledSubsystemsFlags flag) private void UpdateEnabledSubsystems(bool isEnable, EnabledSubsystemsFlags flag)
{ {
if (isEnable) if (isEnable)
value |= (int)flag; value |= (int)flag;
else else
value &= ~(int)flag; value &= ~(int)flag;
} }
} }

View File

@ -8,43 +8,43 @@ namespace AsbCloudApp.Data.DetectedOperation;
[Flags] [Flags]
public enum EnabledSubsystemsFlags public enum EnabledSubsystemsFlags
{ {
/// <summary> /// <summary>
/// Автоподача долота /// Автоподача долота
/// </summary> /// </summary>
AutoRotor = 1 << 0, AutoRotor = 1 << 0,
/// <summary> /// <summary>
/// БУРЕНИЕ В СЛАЙДЕ /// БУРЕНИЕ В СЛАЙДЕ
/// </summary> /// </summary>
AutoSlide = 1 << 1, AutoSlide = 1 << 1,
/// <summary> /// <summary>
/// ПРОРАБОТКА /// ПРОРАБОТКА
/// </summary> /// </summary>
AutoConditionig = 1 << 2, AutoConditionig = 1 << 2,
/// <summary> /// <summary>
/// СПУСК СПО /// СПУСК СПО
/// </summary> /// </summary>
AutoSinking = 1 << 3, AutoSinking = 1 << 3,
/// <summary> /// <summary>
/// ПОДЪЕМ СПО /// ПОДЪЕМ СПО
/// </summary> /// </summary>
AutoLifting = 1 << 4, AutoLifting = 1 << 4,
/// <summary> /// <summary>
/// ПОДЪЕМ С ПРОРАБОТКОЙ /// ПОДЪЕМ С ПРОРАБОТКОЙ
/// </summary> /// </summary>
AutoLiftingWithConditionig = 1 << 5, AutoLiftingWithConditionig = 1 << 5,
/// <summary> /// <summary>
/// блокировка /// блокировка
/// </summary> /// </summary>
AutoBlocknig = 1 << 6, AutoBlocknig = 1 << 6,
/// <summary> /// <summary>
/// осцилляция /// осцилляция
/// </summary> /// </summary>
AutoOscillation = 1 << 7, AutoOscillation = 1 << 7,
} }

View File

@ -4,7 +4,7 @@ namespace AsbCloudApp.Data
{ {
/// <summary> /// <summary>
/// DTO параметров бурения /// DTO параметров бурения
/// </summary> /// </summary>
public class DrillParamsDto : IId, IWellRelated public class DrillParamsDto : IId, IWellRelated
{ {
@ -15,7 +15,7 @@ namespace AsbCloudApp.Data
public int IdWell { get; set; } public int IdWell { get; set; }
/// <summary> /// <summary>
/// Глубина интервала /// Глубина интервала
/// </summary> /// </summary>
public MinMaxDto<double> Depth { get; set; } = null!; public MinMaxDto<double> Depth { get; set; } = null!;

View File

@ -1,4 +1,4 @@
using AsbCloudApp.Data.SAUB; using AsbCloudApp.Data.SAUB;
using System; using System;
namespace AsbCloudApp.Data.DrillTestReport namespace AsbCloudApp.Data.DrillTestReport

View File

@ -1,4 +1,4 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DrillTestReport namespace AsbCloudApp.Data.DrillTestReport

View File

@ -4,22 +4,22 @@ using AsbCloudApp.Data.Subsystems;
namespace AsbCloudApp.Data; namespace AsbCloudApp.Data;
/// <summary> /// <summary>
/// статистика наработки по бурильщикам /// статистика наработки по бурильщикам
/// </summary> /// </summary>
public class DrillerDetectedOperationStatDto public class DrillerDetectedOperationStatDto
{ {
/// <summary> /// <summary>
/// Статистики подсистем /// Статистики подсистем
/// </summary> /// </summary>
public IEnumerable<SubsystemStatDto> Statistic { get; set; } = null!; public IEnumerable<SubsystemStatDto> Statistic { get; set; } = null!;
/// <summary> /// <summary>
/// Расписание бурильщика /// Расписание бурильщика
/// </summary> /// </summary>
public ScheduleDto Schedule { get; set; } = null!; public ScheduleDto Schedule { get; set; } = null!;
/// <summary> /// <summary>
/// Скважина /// Скважина
/// </summary> /// </summary>
public WellDto Well { get; set; } = null!; public WellDto Well { get; set; } = null!;
} }

View File

@ -1,4 +1,4 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {

View File

@ -1,4 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using AsbCloudApp.Data.User; using AsbCloudApp.Data.User;

View File

@ -1,4 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;

View File

@ -1,4 +1,4 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data

View File

@ -1,4 +1,4 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {

View File

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;

View File

@ -5,7 +5,7 @@ using AsbCloudApp.Data.User;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {
/// <summary> /// <summary>
/// Отметка для файла /// Отметка для файла
/// </summary> /// </summary>
public class FileMarkDto: IId public class FileMarkDto: IId
{ {
@ -14,42 +14,42 @@ namespace AsbCloudApp.Data
public int Id { get; set; } public int Id { get; set; }
/// <summary> /// <summary>
/// id файла /// id файла
/// </summary> /// </summary>
[Required] [Required]
[Range(1, int.MaxValue, ErrorMessage = "Id файла не может быть меньше 1")] [Range(1, int.MaxValue, ErrorMessage = "Id файла не может быть меньше 1")]
public int IdFile { get; set; } public int IdFile { get; set; }
/// <summary> /// <summary>
/// 0 - отклонен /// 0 - отклонен
/// 1 - согласован /// 1 - согласован
/// </summary> /// </summary>
[Required] [Required]
[Range(0, int.MaxValue, ErrorMessage = "Id категории действия с файлом не может быть меньше 1")] [Range(0, int.MaxValue, ErrorMessage = "Id категории действия с файлом не может быть меньше 1")]
public int IdMarkType { get; set; } public int IdMarkType { get; set; }
/// <summary> /// <summary>
/// дата/время добавления. /// дата/время добавления.
/// Необязательно указывать в запросе на создание. /// Необязательно указывать в запросе на создание.
/// </summary> /// </summary>
[Required] [Required]
public DateTimeOffset DateCreated { get; set; } public DateTimeOffset DateCreated { get; set; }
/// <summary> /// <summary>
/// Полезный комментарий /// Полезный комментарий
/// </summary> /// </summary>
[StringLength(4096, MinimumLength = 1, ErrorMessage = "Допустимое имя компании от 1 до 4096 символов")] [StringLength(4096, MinimumLength = 1, ErrorMessage = "Допустимое имя компании от 1 до 4096 символов")]
public string? Comment { get; set; } public string? Comment { get; set; }
/// <summary> /// <summary>
/// признак удаления отметки /// признак удаления отметки
/// </summary> /// </summary>
[Required] [Required]
public bool IsDeleted { get; set; } public bool IsDeleted { get; set; }
/// <summary> /// <summary>
/// Пользователь создающий отметку. /// Пользователь создающий отметку.
/// Необязательно указывать в запросе на создание. /// Необязательно указывать в запросе на создание.
/// </summary> /// </summary>
public UserDto? User { get; set; } public UserDto? User { get; set; }
} }

View File

@ -7,228 +7,228 @@ namespace AsbCloudApp.Data.GTR;
/// </summary> /// </summary>
public class GtrWitsDto public class GtrWitsDto
{ {
/// <summary> /// <summary>
/// Дата получения записи /// Дата получения записи
/// </summary> /// </summary>
public DateTimeOffset DateTime { get; set; } public DateTimeOffset DateTime { get; set; }
/// <summary> /// <summary>
/// Забой (скважины), м /// Забой (скважины), м
/// </summary> /// </summary>
public float? DEPTMEAS { get; set; } public float? DEPTMEAS { get; set; }
/// <summary> /// <summary>
/// Долото, м /// Долото, м
/// </summary> /// </summary>
public float DEPTBITM { get; set; } public float DEPTBITM { get; set; }
/// <summary> /// <summary>
/// Вес на крюке /// Вес на крюке
/// </summary> /// </summary>
public float? HKLA { get; set; } public float? HKLA { get; set; }
/// <summary> /// <summary>
/// Высота крюка /// Высота крюка
/// </summary> /// </summary>
public float? BLKPOS { get; set; } public float? BLKPOS { get; set; }
/// <summary> /// <summary>
/// Нагрузка на долото /// Нагрузка на долото
/// </summary> /// </summary>
public float? WOBA { get; set; } public float? WOBA { get; set; }
/// <summary> /// <summary>
/// Момент на роторе/ВСП /// Момент на роторе/ВСП
/// </summary> /// </summary>
public float? TORQA { get; set; } public float? TORQA { get; set; }
/// <summary> /// <summary>
/// Давление на входе (на стояке) /// Давление на входе (на стояке)
/// </summary> /// </summary>
public float? SPPA { get; set; } public float? SPPA { get; set; }
/// <summary> /// <summary>
/// Обороты ротора/ВСП /// Обороты ротора/ВСП
/// </summary> /// </summary>
public float? RPMA { get; set; } public float? RPMA { get; set; }
/// <summary> /// <summary>
/// Механическая скорость /// Механическая скорость
/// </summary> /// </summary>
public float? ROPA { get; set; } public float? ROPA { get; set; }
/// <summary> /// <summary>
/// Скорость инструмента вверх /// Скорость инструмента вверх
/// </summary> /// </summary>
public float? RSUX { get; set; } public float? RSUX { get; set; }
/// <summary> /// <summary>
/// Скорость инструмента вниз /// Скорость инструмента вниз
/// </summary> /// </summary>
public float? RSDX { get; set; } public float? RSDX { get; set; }
/// <summary> /// <summary>
/// Расход на входе /// Расход на входе
/// </summary> /// </summary>
public float? MFIA { get; set; } public float? MFIA { get; set; }
/// <summary> /// <summary>
/// Расход на выходе /// Расход на выходе
/// </summary> /// </summary>
public float? MFOA { get; set; } public float? MFOA { get; set; }
/// <summary> /// <summary>
/// Температура на входе /// Температура на входе
/// </summary> /// </summary>
public float? MTIA { get; set; } public float? MTIA { get; set; }
/// <summary> /// <summary>
/// Температура на выходе /// Температура на выходе
/// </summary> /// </summary>
public float? MTOA { get; set; } public float? MTOA { get; set; }
/// <summary> /// <summary>
/// Ходы насоса №1 /// Ходы насоса №1
/// </summary> /// </summary>
public float? SPM1 { get; set; } public float? SPM1 { get; set; }
/// <summary> /// <summary>
/// Ходы насоса №2 /// Ходы насоса №2
/// </summary> /// </summary>
public float? SPM2 { get; set; } public float? SPM2 { get; set; }
/// <summary> /// <summary>
/// Ходы насоса №3 /// Ходы насоса №3
/// </summary> /// </summary>
public float? SPM3 { get; set; } public float? SPM3 { get; set; }
/// <summary> /// <summary>
/// Общий объем бурового раствора на поверхности /// Общий объем бурового раствора на поверхности
/// </summary> /// </summary>
public float? TVOLACT { get; set; } public float? TVOLACT { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в доливной емкости №1 /// Объем бурового раствора в доливной емкости №1
/// </summary> /// </summary>
public float? TTVOL1 { get; set; } public float? TTVOL1 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в доливной емкости №2 /// Объем бурового раствора в доливной емкости №2
/// </summary> /// </summary>
public float? TTVOL2 { get; set; } public float? TTVOL2 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №1 /// Объем бурового раствора в емкости №1
/// </summary> /// </summary>
public float? TVOL01 { get; set; } public float? TVOL01 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №2 /// Объем бурового раствора в емкости №2
/// </summary> /// </summary>
public float? TVOL02 { get; set; } public float? TVOL02 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №3 /// Объем бурового раствора в емкости №3
/// </summary> /// </summary>
public float? TVOL03 { get; set; } public float? TVOL03 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №4 /// Объем бурового раствора в емкости №4
/// </summary> /// </summary>
public float? TVOL04 { get; set; } public float? TVOL04 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №5 /// Объем бурового раствора в емкости №5
/// </summary> /// </summary>
public float? TVOL05 { get; set; } public float? TVOL05 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №6 /// Объем бурового раствора в емкости №6
/// </summary> /// </summary>
public float? TVOL06 { get; set; } public float? TVOL06 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №7 /// Объем бурового раствора в емкости №7
/// </summary> /// </summary>
public float? TVOL07 { get; set; } public float? TVOL07 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №8 /// Объем бурового раствора в емкости №8
/// </summary> /// </summary>
public float? TVOL08 { get; set; } public float? TVOL08 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №9 /// Объем бурового раствора в емкости №9
/// </summary> /// </summary>
public float? TVOL09 { get; set; } public float? TVOL09 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №10 /// Объем бурового раствора в емкости №10
/// </summary> /// </summary>
public float? TVOL10 { get; set; } public float? TVOL10 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №11 /// Объем бурового раствора в емкости №11
/// </summary> /// </summary>
public float? TVOL11 { get; set; } public float? TVOL11 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №12 /// Объем бурового раствора в емкости №12
/// </summary> /// </summary>
public float? TVOL12 { get; set; } public float? TVOL12 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №13 /// Объем бурового раствора в емкости №13
/// </summary> /// </summary>
public float? TVOL13 { get; set; } public float? TVOL13 { get; set; }
/// <summary> /// <summary>
/// Объем бурового раствора в емкости №14 /// Объем бурового раствора в емкости №14
/// </summary> /// </summary>
public float? TVOL14 { get; set; } public float? TVOL14 { get; set; }
/// <summary> /// <summary>
/// Плотность (удельный вес) бурового раствора на выходе /// Плотность (удельный вес) бурового раствора на выходе
/// </summary> /// </summary>
public float? MDOA { get; set; } public float? MDOA { get; set; }
/// <summary> /// <summary>
/// Плотность (удельный вес) бурового раствора на входе /// Плотность (удельный вес) бурового раствора на входе
/// </summary> /// </summary>
public float? MDIA { get; set; } public float? MDIA { get; set; }
/// <summary> /// <summary>
/// Процентное содержание метана /// Процентное содержание метана
/// </summary> /// </summary>
public float? METHANE { get; set; } public float? METHANE { get; set; }
/// <summary> /// <summary>
/// Процентное содержание этана /// Процентное содержание этана
/// </summary> /// </summary>
public float? ETHANE { get; set; } public float? ETHANE { get; set; }
/// <summary> /// <summary>
/// Процентное содержание пропана /// Процентное содержание пропана
/// </summary> /// </summary>
public float? PROPANE { get; set; } public float? PROPANE { get; set; }
/// <summary> /// <summary>
/// Процентное содержание бутана /// Процентное содержание бутана
/// </summary> /// </summary>
public float? IBUTANE { get; set; } public float? IBUTANE { get; set; }
/// <summary> /// <summary>
/// Процентное содержание пентана /// Процентное содержание пентана
/// </summary> /// </summary>
public float? NBUTANE { get; set; } public float? NBUTANE { get; set; }
/// <summary> /// <summary>
/// Процентное содержание углеводородов /// Процентное содержание углеводородов
/// </summary> /// </summary>
public float? HydrocarbonPercentage => METHANE + ETHANE + PROPANE + IBUTANE + NBUTANE; public float? HydrocarbonPercentage => METHANE + ETHANE + PROPANE + IBUTANE + NBUTANE;
/// <summary> /// <summary>
/// Процентное содержание газов /// Процентное содержание газов
/// </summary> /// </summary>
public float? GASA { get; set; } public float? GASA { get; set; }
} }

View File

@ -1,4 +1,4 @@
namespace AsbCloudApp.Data.GTR namespace AsbCloudApp.Data.GTR
{ {
/// <summary> /// <summary>
/// Класс позволяющий хранить значение неопределенного типа. /// Класс позволяющий хранить значение неопределенного типа.

View File

@ -1,4 +1,4 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.GTR namespace AsbCloudApp.Data.GTR

View File

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;

View File

@ -1,4 +1,4 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data; namespace AsbCloudApp.Data;

View File

@ -1,4 +1,4 @@
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {
/// <summary> /// <summary>
/// Интерфейс данных с Id /// Интерфейс данных с Id

View File

@ -1,4 +1,4 @@
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {
/// <summary> /// <summary>
/// точка на карте /// точка на карте

View File

@ -1,4 +1,4 @@
using System; using System;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {

View File

@ -1,4 +1,4 @@
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {
/// <summary> /// <summary>
/// Well related DTO /// Well related DTO

View File

@ -1,4 +1,4 @@
using System; using System;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {

View File

@ -1,4 +1,4 @@
using System.Collections; using System.Collections;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data

View File

@ -1,4 +1,4 @@
using System; using System;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {

View File

@ -1,4 +1,4 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data

View File

@ -8,26 +8,26 @@ namespace AsbCloudApp.Data.Manuals;
/// </summary> /// </summary>
public class ManualDirectoryDto : IId public class ManualDirectoryDto : IId
{ {
/// <inheritdoc/> /// <inheritdoc/>
public int Id { get; set; } public int Id { get; set; }
/// <summary> /// <summary>
/// Название /// Название
/// </summary> /// </summary>
public string Name { get; set; } = null!; public string Name { get; set; } = null!;
/// <summary> /// <summary>
/// Id родительской директории /// Id родительской директории
/// </summary> /// </summary>
public int? IdParent { get; set; } public int? IdParent { get; set; }
/// <summary> /// <summary>
/// Вложенные директории /// Вложенные директории
/// </summary> /// </summary>
public IEnumerable<ManualDirectoryDto> Children { get; set; } = Enumerable.Empty<ManualDirectoryDto>(); public IEnumerable<ManualDirectoryDto> Children { get; set; } = Enumerable.Empty<ManualDirectoryDto>();
/// <summary> /// <summary>
/// Хранимые инструкции /// Хранимые инструкции
/// </summary> /// </summary>
public IEnumerable<ManualDto> Manuals { get; set; } = Enumerable.Empty<ManualDto>(); public IEnumerable<ManualDto> Manuals { get; set; } = Enumerable.Empty<ManualDto>();
} }

View File

@ -7,31 +7,31 @@ namespace AsbCloudApp.Data.Manuals;
/// </summary> /// </summary>
public class ManualDto : IId public class ManualDto : IId
{ {
/// <inheritdoc/> /// <inheritdoc/>
public int Id { get; set; } public int Id { get; set; }
/// <summary> /// <summary>
/// Название /// Название
/// </summary> /// </summary>
public string Name { get; set; } = null!; public string Name { get; set; } = null!;
/// <summary> /// <summary>
/// Дата загрузки /// Дата загрузки
/// </summary> /// </summary>
public DateTimeOffset DateDownload { get; set; } public DateTimeOffset DateDownload { get; set; }
/// <summary> /// <summary>
/// Id автора /// Id автора
/// </summary> /// </summary>
public int IdAuthor { get; set; } public int IdAuthor { get; set; }
/// <summary> /// <summary>
/// Id директории /// Id директории
/// </summary> /// </summary>
public int IdDirectory { get; set; } public int IdDirectory { get; set; }
/// <summary> /// <summary>
/// Id категории файла /// Id категории файла
/// </summary> /// </summary>
public int IdCategory { get; set; } public int IdCategory { get; set; }
} }

View File

@ -1,4 +1,4 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {

View File

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;

View File

@ -1,4 +1,4 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data

View File

@ -1,4 +1,4 @@
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {
/// <summary> /// <summary>
/// Минимальное и максимальное значение /// Минимальное и максимальное значение

View File

@ -1,4 +1,4 @@
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {
/// <summary> /// <summary>
/// Расширение для класса MinMaxDto /// Расширение для класса MinMaxDto

View File

@ -7,11 +7,11 @@ namespace AsbCloudApp.Data;
/// </summary> /// </summary>
public class NotificationCategoryDto : IId public class NotificationCategoryDto : IId
{ {
/// <summary> /// <summary>
/// Id категории /// Id категории
/// </summary> /// </summary>
[Required] [Required]
public int Id { get; set; } public int Id { get; set; }
/// <summary> /// <summary>
/// Название категории /// Название категории

View File

@ -8,11 +8,11 @@ namespace AsbCloudApp.Data;
/// </summary> /// </summary>
public class NotificationDto : IId public class NotificationDto : IId
{ {
/// <summary> /// <summary>
/// Id уведомления /// Id уведомления
/// </summary> /// </summary>
[Required] [Required]
public int Id { get; set; } public int Id { get; set; }
/// <summary> /// <summary>
/// Id получателя уведомления /// Id получателя уведомления
@ -26,11 +26,11 @@ public class NotificationDto : IId
[Required] [Required]
public int IdNotificationCategory { get; set; } public int IdNotificationCategory { get; set; }
/// <summary> /// <summary>
/// Заголовок уведомления /// Заголовок уведомления
/// </summary> /// </summary>
[Required, StringLength(300, MinimumLength = 1, ErrorMessage = "Заголовок должен мыть не меньше 1-го знака и не больше 300")] [Required, StringLength(300, MinimumLength = 1, ErrorMessage = "Заголовок должен мыть не меньше 1-го знака и не больше 300")]
public string Title { get; set; } = null!; public string Title { get; set; } = null!;
/// <summary> /// <summary>
/// Сообщение уведомления /// Сообщение уведомления
@ -44,15 +44,15 @@ public class NotificationDto : IId
[Required] [Required]
public DateTimeOffset RegistrationDate { get; set; } public DateTimeOffset RegistrationDate { get; set; }
/// <summary> /// <summary>
/// Дата отправки уведомления /// Дата отправки уведомления
/// </summary> /// </summary>
public DateTimeOffset? SentDate { get; set; } public DateTimeOffset? SentDate { get; set; }
/// <summary> /// <summary>
/// Дата прочтения уведомления /// Дата прочтения уведомления
/// </summary> /// </summary>
public DateTimeOffset? ReadDate { get; set; } public DateTimeOffset? ReadDate { get; set; }
/// <summary> /// <summary>
/// Состояние уведомления /// Состояние уведомления
@ -62,36 +62,36 @@ public class NotificationDto : IId
/// </summary> /// </summary>
[Required] [Required]
public int IdState public int IdState
{ {
get get
{ {
if (SentDate is not null && ReadDate is not null) if (SentDate is not null && ReadDate is not null)
return 2; return 2;
if (SentDate is not null) if (SentDate is not null)
return 1; return 1;
return 0; return 0;
} }
set set
{ {
switch (value) switch (value)
{ {
case 0: case 0:
SentDate = null; SentDate = null;
ReadDate = null; ReadDate = null;
break; break;
case 1: case 1:
SentDate = DateTimeOffset.UtcNow; SentDate = DateTimeOffset.UtcNow;
ReadDate = null; ReadDate = null;
break; break;
case 2: case 2:
SentDate = DateTimeOffset.UtcNow; SentDate = DateTimeOffset.UtcNow;
ReadDate = DateTimeOffset.UtcNow; ReadDate = DateTimeOffset.UtcNow;
break; break;
} }
} }
} }
/// <summary> /// <summary>
/// Id типа доставки уведомления /// Id типа доставки уведомления
@ -100,7 +100,7 @@ public class NotificationDto : IId
/// </summary> /// </summary>
[Required] [Required]
[Range(0,1)] [Range(0,1)]
public int IdTransportType { get; set; } public int IdTransportType { get; set; }
/// <summary> /// <summary>
/// DTO категории уведомления /// DTO категории уведомления

View File

@ -1,4 +1,4 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {

View File

@ -1,4 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data

View File

@ -8,10 +8,10 @@ namespace AsbCloudApp.Data;
/// </summary> /// </summary>
/// <typeparam name="TDto"></typeparam> /// <typeparam name="TDto"></typeparam>
public class ParserResultDto<TDto> : ValidationResultDto<IEnumerable<ValidationResultDto<TDto>>> public class ParserResultDto<TDto> : ValidationResultDto<IEnumerable<ValidationResultDto<TDto>>>
where TDto : class, IId where TDto : class, IId
{ {
/// <summary> /// <summary>
/// Объекты полученные из файла /// Объекты полученные из файла
/// </summary> /// </summary>
public override IEnumerable<ValidationResultDto<TDto>> Item { get; set; } = Enumerable.Empty<ValidationResultDto<TDto>>(); public override IEnumerable<ValidationResultDto<TDto>> Item { get; set; } = Enumerable.Empty<ValidationResultDto<TDto>>();
} }

View File

@ -1,4 +1,4 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {

View File

@ -1,4 +1,4 @@
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {
/// <summary> /// <summary>
/// DTO объединяющее плановые и фактические значения /// DTO объединяющее плановые и фактические значения

View File

@ -1,4 +1,4 @@
namespace AsbCloudApp.Data namespace AsbCloudApp.Data
{ {
/// <summary> /// <summary>
/// Lines container for Time Vs Depth chart /// Lines container for Time Vs Depth chart

View File

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;

View File

@ -0,0 +1,33 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Functions;
/// <summary>
/// РТК план противоаварийное вращение
/// </summary>
public class ProcessMapPlanAntiCrashRotationDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Минимальные обороты ВСП, об/мин
/// </summary>
[Range(0.0, 250.0, ErrorMessage = "Минимальные обороты ВСП, об/мин., должно быть в пределах от 0 до 250")]
public double TopDriveRpmMin { get; set; }
/// <summary>
/// Минимальный расход для запуска оборотов ВСП, л/сек
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Минимальный расход для запуска оборотов ВСП, л/сек., должно быть в пределах от 0 до 100")]
public double TopDriveStartMinFlowRate { get; set; }
/// <summary>
/// Максимально допустимый момент на ВСП при противоаварийном вращении, кН*м
/// </summary>
[Range(1.0, 35.0, ErrorMessage = "Максимально допустимый момент на ВСП при противоаварийном вращении, кН*м., должно быть в пределах от 1 до 35")]
public double TopDriveTorqueMax { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string Note { get; set; } = string.Empty;
}

View File

@ -0,0 +1,21 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Functions;
/// <summary>
/// РТК план авто удержание TF
/// </summary>
public class ProcessMapPlanAutoHoldTFDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Зенитный угол, градусы
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Зенитный угол, градусы, должно быть в пределах от 0 до 100")]
public double ZenithAngle { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string? Note { get; set; }
}

View File

@ -0,0 +1,21 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Functions;
/// <summary>
/// РТК план демпфер
/// </summary>
public class ProcessMapPlanDamperDto : ProcessMapPlanBaseDto
{
/// <summary>
/// StickSlip
/// </summary>
[Range(0.0, 1000.0, ErrorMessage = "StickSlip, должно быть в пределах от 0 до 1000")]
public double StickSlip { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string? Note { get; set; }
}

View File

@ -0,0 +1,45 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Functions;
/// <summary>
/// РТК план дрил тест
/// </summary>
public class ProcessMapPlanDrillTestDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Нагрузка минимальная, т
/// </summary>
[Range(1.0, 30.0, ErrorMessage = "Нагрузка минимальная, т., должно быть в пределах от 1 до 30")]
public double WeightOnBitMin { get; set; }
/// <summary>
/// Количество шагов по нагрузке
/// </summary>
[Range(1, 5, ErrorMessage = "Количество шагов по нагрузке, должно быть в пределах от 1 до 5")]
public int WeightOnBitStepsCount { get; set; }
/// <summary>
/// Минимальные обороты на ВСП, об/мин.
/// </summary>
[Range(5, 200, ErrorMessage = "Минимальные обороты на ВСП, об/мин., должно быть в пределах от 5 до 200")]
public int RpmMin { get; set; }
/// <summary>
/// Количество шагов оборотов на ВСП, шт.
/// </summary>
[Range(1, 5, ErrorMessage = "Количество шагов оборотов на ВСП, шт., должно быть в пределах от 1 до 5")]
public int RpmStepsCount { get; set; }
/// <summary>
/// Величина проходки шага, м.
/// </summary>
[Range(0.1, 2.0, ErrorMessage = "Величина проходки шага, м., должно быть в пределах от 0.1 до 2")]
public double LengthStep { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символа")]
public string? Note { get; set; }
}

View File

@ -0,0 +1,51 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Functions;
/// <summary>
/// РТК план осцилляция
/// </summary>
public class ProcessMapPlanOscillationDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Оптимальный угол осцилляции, градусы
/// </summary>
[Range(0.0, 6000.0, ErrorMessage = "Оптимальный угол осцилляции, градусы, должно быть в пределах от 0 до 6000")]
public double OptimalOscillationAngle { get; set; }
/// <summary>
/// Скорость вправо, об/мин
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Скорость вправо, об/мин, должно быть в пределах от 0 до 270")]
public double RpmRight { get; set; }
/// <summary>
/// Скорость влево, об/мин
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Скорость влево, об/мин, должно быть в пределах от 0 до 270")]
public double RpmLeft { get; set; }
/// <summary>
/// Ограничение момента вправо, кН*м
/// </summary>
[Range(0.0, 35.0, ErrorMessage = "Ограничение момента вправо, кН*м., должно быть в пределах от 0 до 35")]
public double TorqueMaxRight { get; set; }
/// <summary>
/// Ограничение момента влево, кН*м
/// </summary>
[Range(0.0, 35.0, ErrorMessage = "Ограничение момента влево, кН*м., должно быть в пределах от 0 до 35")]
public double TorqueMaxLeft { get; set; }
/// <summary>
/// Режим Авто/Руч
/// </summary>
[Range(0, 1, ErrorMessage = "Режим Авто/Руч, должен быть либо 0, либо 1")]
public int Mode { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string? Note { get; set; }
}

View File

@ -0,0 +1,51 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Functions;
/// <summary>
/// РТК план shocktest
/// </summary>
public class ProcessMapPlanShockTestDto : ProcessMapPlanBaseDto
{
/// <summary>
/// StickSlip
/// </summary>
[Range(0.0, 1000.0, ErrorMessage = "StickSlip, должно быть в пределах от 0 до 1000")]
public double StickSlip { get; set; }
/// <summary>
/// Whirl
/// </summary>
[Range(0.0, 1000.0, ErrorMessage = "Whirl, должно быть в пределах от 0 до 1000")]
public double Whirl { get; set; }
/// <summary>
/// Осевые вибрации
/// </summary>
[Range(0.0, 1000.0, ErrorMessage = "Осевые вибрации, должно быть в пределах от 0 до 1000")]
public double AxialVibrations { get; set; }
/// <summary>
/// Комбинированные вибрации
/// </summary>
[Range(0.0, 1000.0, ErrorMessage = "Комбинированные вибрации, должно быть в пределах от 0 до 1000")]
public double CombinedVibrations { get; set; }
/// <summary>
/// Нагрузка минимальная, т
/// </summary>
[Range(0.0, 30.0, ErrorMessage = "Комбинированные вибрации, должно быть в пределах от 1 до 30")]
public double WeightOnBitMin { get; set; }
/// <summary>
/// Минимальные обороты на ВСП, об/мин.
/// </summary>
[Range(5, 200, ErrorMessage = "Минимальные обороты на ВСП, об/мин., должно быть в пределах от 5 до 200")]
public double RpmMin { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string? Note { get; set; }
}

View File

@ -0,0 +1,21 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Functions;
/// <summary>
/// РТК план выход статического замера
/// </summary>
public class ProcessMapPlanStaticMeasurementOutputDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Время ожидания выхода сигнала с ТМС, сек.
/// </summary>
[Range(0.0, 1800.0, ErrorMessage = "Время ожидания выхода сигнала с ТМС, сек., должно быть в пределах от 0 до 1800")]
public double SignalWaitingTime { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string Note { get; set; } = string.Empty;
}

View File

@ -0,0 +1,35 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Operations;
/// <summary>
/// РТК план выработка нагрузки
/// </summary>
public class ProcessMapPlanLoadCapacityDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Время выработки минимальное, сек
/// </summary>
[Range(0.0, 800.0, ErrorMessage = "Время выработки минимальное, сек., должно быть в пределах от 0 до 800")]
public double TimeLoadCapacityMin { get; set; }
/// <summary>
/// Перепад давления минимальный, атм
/// </summary>
[Range(0.1, 400.0, ErrorMessage = "Перепад давления минимальный, атм., должно быть в пределах от 0.1 до 400")]
public double DifferentialPressureMin { get; set; }
/// <summary>
/// Нагрузка минимальная, т
/// </summary>
[Range(0.1, 99.0, ErrorMessage = "Нагрузка минимальная, т, должно быть в пределах от 0.1 до 99")]
public double WeightOnBitMin { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string Note { get; set; } = string.Empty;
}

View File

@ -0,0 +1,39 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Operations;
/// <summary>
/// РТК план определения углов осцилляции
/// </summary>
public class ProcessMapPlanOscillationAnglesDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Момент на ВСП, кН*м., Уставка
/// </summary>
[Range(0.0, 35.0, ErrorMessage = "Момент на ВСП, кН*м., Уставка, должно быть в пределах от 0 до 35")]
public double TopDriveTorque { get; set; }
/// <summary>
/// Момент на ВСП, кН*м., Ограничение
/// </summary>
[Range(0.0, 35.0, ErrorMessage = "Момент на ВСП, кН*м., Ограничение, должно быть в пределах от 0 до 35")]
public double TopDriveTorqueMax { get; set; }
/// <summary>
/// Обороты на ВСП, об/мин., Уставка
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Обороты на ВСП, об/мин., Уставка, должно быть в пределах от 0 до 270")]
public double Rpm { get; set; }
/// <summary>
/// Обороты на ВСП, об/мин., Ограничение
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Обороты на ВСП, об/мин., Ограничение, должно быть в пределах от 0 до 270")]
public double RpmMax { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string Note { get; set; } = string.Empty;
}

View File

@ -0,0 +1,88 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace AsbCloudApp.Data.ProcessMaps.Operations;
/// <summary>
/// РТК план позиционирования над забоем
/// </summary>
public class ProcessMapPlanPositioningOffTheBottomDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Остановка над забоем, м.
/// </summary>
[Range(0.0, 30.0, ErrorMessage = "Остановка над забоем, м., должно быть в пределах от 0 до 30")]
public double StopOffTheBottom { get; set; }
/// <summary>
/// Максимально допустимое давление, атм.
/// </summary>
[Range(0.0, 400.0, ErrorMessage = "Максимально допустимое давление, атм., должно быть в пределах от 0 до 400")]
public double PressureMax { get; set; }
/// <summary>
/// Перепад давления уставка, атм.
/// </summary>
[Range(0.0, 60.0, ErrorMessage = "Перепад давления уставка, атм., должно быть в пределах от 0 до 60")]
public double DifferentialPressure { get; set; }
/// <summary>
/// Затяжка, т.
/// </summary>
[Range(0.0, 20.0, ErrorMessage = "Затяжка, т., должно быть в пределах от 0 до 20")]
public double Tight { get; set; }
/// <summary>
/// Посадка, т.
/// </summary>
[Range(0.0, 20.0, ErrorMessage = "Посадка, т., должно быть в пределах от 0 до 20")]
public double SlackingOff { get; set; }
/// <summary>
/// Максимально допустимый момент, кН*м.
/// </summary>
[Range(0.0, 35.0, ErrorMessage = "Максимально допустимый момент, кН*м., должно быть в пределах от 0 до 35")]
public double TorqueMax { get; set; }
/// <summary>
/// Скорость вверх, м/ч.
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Скорость вверх, м/ч., должно быть в пределах от 0 до 999")]
public double RopUp { get; set; }
/// <summary>
/// Скорость вниз, м/ч.
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Скорость вниз, м/ч., должно быть в пределах от 0 до 999")]
public double RopDown { get; set; }
/// <summary>
/// Обороты вверх, об/мин.
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Обороты вверх, об/мин., должно быть в пределах от 0 до 270")]
public double RpmUp { get; set; }
/// <summary>
/// Обороты вниз, об/мин.
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Обороты вниз, об/мин., должно быть в пределах от 0 до 270")]
public double RpmDown { get; set; }
/// <summary>
/// Расход вверх, л/с.
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Расход вверх, л/с., должно быть в пределах от 0 до 100")]
public double FlowRateUp { get; set; }
/// <summary>
/// Расход вниз, л/с.
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Расход вниз, л/с., должно быть в пределах от 0 до 100")]
public double FlowRateDown { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string Note { get; set; } = string.Empty;
}

View File

@ -0,0 +1,207 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Operations;
/// <summary>
/// РТК план проработка для ротора
/// </summary>
public class ProcessMapPlanReamingRotorDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Максимально допустимое давление, атм.
/// </summary>
[Range(0.0, 400.0, ErrorMessage = "Максимально допустимое давление, атм., должно быть в пределах от 0 до 400")]
public double PressureMax { get; set; }
/// <summary>
/// Перепад давления уставка, атм.
/// </summary>
[Range(0.0, 60.0, ErrorMessage = "Перепад давления уставка, атм., должно быть в пределах от 0 до 60")]
public double DifferentialPressure { get; set; }
/// <summary>
/// Затяжка, т.
/// </summary>
[Range(0.0, 20.0, ErrorMessage = "Затяжка, т., должно быть в пределах от 0 до 20")]
public double Tight { get; set; }
/// <summary>
/// Посадка, т.
/// </summary>
[Range(0.0, 20.0, ErrorMessage = "Посадка, т., должно быть в пределах от 0 до 20")]
public double SlackingOff { get; set; }
/// <summary>
/// Максимально допустимый момент, кН*м.
/// </summary>
[Range(0.0, 35.0, ErrorMessage = "Максимально допустимый момент, кН*м., посадка, должно быть в пределах от 0 до 35")]
public double TorqueMax { get; set; }
/// <summary>
/// Проработка 1. Количество повторений, шт.
/// </summary>
[Range(0, 99, ErrorMessage = "Проработка 1. Количество повторений, шт., должно быть в пределах от 0 до 99")]
public int Reaming1RepetitionsCount { get; set; }
/// <summary>
/// Проработка 1, Скорость, м/ч., Вверх
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Проработка 1, Скорость, м/ч., Вверх, должно быть в пределах от 0 до 999")]
public double Reaming1RopUp { get; set; }
/// <summary>
/// Проработка 1, Скорость, м/ч., Вниз
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Проработка 1, Скорость, м/ч., Вниз, должно быть в пределах от 0 до 999")]
public double Reaming1RopDown { get; set; }
/// <summary>
/// Проработка 1, Обороты, об/мин., Вверх
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Проработка 1, Обороты, об/мин., Вверх, должно быть в пределах от 0 до 270")]
public double Reaming1RpmUp { get; set; }
/// <summary>
/// Проработка 1, Обороты, об/мин., Вниз
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Проработка 1, Обороты, об/мин., Вниз, должно быть в пределах от 0 до 270")]
public double Reaming1RpmDown { get; set; }
/// <summary>
/// Проработка 1, Расход, л/с., Вверх
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Проработка 1, Расход, л/с., Вверх, должно быть в пределах от 0 до 100")]
public double Reaming1FlowRateUp { get; set; }
/// <summary>
/// Проработка 1, Расход, л/с., Вниз
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Проработка 1, Расход, л/с., Вниз, должно быть в пределах от 0 до 100")]
public double Reaming1FlowRateDown { get; set; }
/// <summary>
/// Проработка 1, Интервал проработки, м.
/// </summary>
[Range(0.0, 30.0, ErrorMessage = "Проработка 1, Интервал проработки, м., должно быть в пределах от 0 до 30")]
public double Reaming1Interval { get; set; }
/// <summary>
/// Остановка над забоем, м.
/// </summary>
[Range(0.0, 10.0, ErrorMessage = "Остановка над забоем, м., должно быть в пределах от 0 до 10")]
public double Reaming1StopPointOffBottom { get; set; }
/// <summary>
/// Проработка 2, Количество повторений, шт.
/// </summary>
[Range(0, 99, ErrorMessage = "Проработка 2, Количество повторений, шт., должно быть в пределах от 0 до 99")]
public int Reaming2RepetitionsCount { get; set; }
/// <summary>
/// Проработка 2, Скорость, м/ч., Вверх
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Проработка 2, Скорость, м/ч., Вверх, должно быть в пределах от 0 до 999")]
public double Reaming2RopUp { get; set; }
/// <summary>
/// Проработка 2, Скорость, м/ч., Вниз
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Проработка 2, Скорость, м/ч., Вниз, должно быть в пределах от 0 до 999")]
public double Reaming2RopDown { get; set; }
/// <summary>
/// Проработка 2, Обороты, об/мин., Вверх
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Проработка 2, Обороты, об/мин., Вверх, должно быть в пределах от 0 до 270")]
public double Reaming2RpmUp { get; set; }
/// <summary>
/// Проработка 2, Обороты, об/мин., Вниз
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Проработка 2, Обороты, об/мин., Вниз, должно быть в пределах от 0 до 270")]
public double Reaming2RpmDown { get; set; }
/// <summary>
/// Проработка 2, Расход, л/с., Вверх
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Проработка 2, Расход, л/с., Вверх, должно быть в пределах от 0 до 100")]
public double Reaming2FlowRateUp { get; set; }
/// <summary>
/// Проработка 2, Расход, л/с., Вниз
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Проработка 2, Расход, л/с., Вниз, должно быть в пределах от 0 до 100")]
public double Reaming2FlowRateDown { get; set; }
/// <summary>
/// Проработка 2, Интервал проработки, м.
/// </summary>
[Range(0.0, 30.0, ErrorMessage = "Проработка 2, Интервал проработки, м., должно быть в пределах от 0 до 30")]
public double Reaming2Interval { get; set; }
/// <summary>
/// Остановка над забоем, м.
/// </summary>
[Range(0.0, 10.0, ErrorMessage = "Остановка над забоем, м., должно быть в пределах от 0 до 10")]
public double Reaming2StopPointOffBottom { get; set; }
/// <summary>
/// Проработка 3, Количество повторений, шт.
/// </summary>
[Range(0, 99, ErrorMessage = "Проработка 3, Количество повторений, шт., должно быть в пределах от 0 до 99")]
public int Reaming3RepetitionsCount { get; set; }
/// <summary>
/// Проработка 3, Скорость, м/ч., Вверх
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Проработка 3, Скорость, м/ч., Вверх, должно быть в пределах от 0 до 999")]
public double Reaming3RopUp { get; set; }
/// <summary>
/// Проработка 3, Скорость, м/ч., Вниз
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Проработка 3, Скорость, м/ч., Вниз, должно быть в пределах от 0 до 999")]
public double Reaming3RopDown { get; set; }
/// <summary>
/// Проработка 3, Обороты, об/мин., Вверх
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Проработка 3, Обороты, об/мин., Вверх, должно быть в пределах от 0 до 270")]
public double Reaming3RpmUp { get; set; }
/// <summary>
/// Проработка 3, Обороты, об/мин., Вниз
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Проработка 3, Обороты, об/мин., Вниз, должно быть в пределах от 0 до 270")]
public double Reaming3RpmDown { get; set; }
/// <summary>
/// Проработка 3, Расход, л/с., Вверх
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Проработка 3, Расход, л/с., Вверх, должно быть в пределах от 0 до 100")]
public double Reaming3FlowRateUp { get; set; }
/// <summary>
/// Проработка 3, Расход, л/с., Вниз
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Проработка 3, Расход, л/с., Вниз, должно быть в пределах от 0 до 100")]
public double Reaming3FlowRateDown { get; set; }
/// <summary>
/// Проработка 3, Интервал проработки, м.
/// </summary>
[Range(0.0, 30.0, ErrorMessage = "Проработка 3, Интервал проработки, м., должно быть в пределах от 0 до 30")]
public double Reaming3Interval { get; set; }
/// <summary>
/// Остановка над забоем, м.
/// </summary>
[Range(0.0, 10.0, ErrorMessage = "Остановка над забоем, м., должно быть в пределах от 0 до 10")]
public double Reaming3StopPointOffBottom { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string? Note { get; set; }
}

View File

@ -0,0 +1,209 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Operations;
/// <summary>
/// РТК план проработка для слайда
/// </summary>
public class ProcessMapPlanReamingSlideDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Максимально допустимое давление, атм
/// </summary>
[Range(0.0, 400.0, ErrorMessage = "Максимально допустимое давление, атм., должно быть в пределах от 0 до 400")]
public double PressureMax { get; set; }
/// <summary>
/// Перепад давления уставка, атм
/// </summary>
[Range(0.0, 60.0, ErrorMessage = "Перепад давления уставка, атм., должно быть в пределах от 0 до 60")]
public double DifferentialPressure { get; set; }
/// <summary>
/// Затяжка
/// </summary>
[Range(0.0, 20.0, ErrorMessage = "Затяжка, должно быть в пределах от 0 до 20")]
public double Tight { get; set; }
/// <summary>
/// Посадка
/// </summary>
[Range(0.0, 20.0, ErrorMessage = "Посадка, должно быть в пределах от 0 до 20")]
public double SlackingOff { get; set; }
/// <summary>
/// Максимально допустимый момент, кН*м.
/// </summary>
[Range(0.0, 35.0, ErrorMessage = "Максимально допустимый момент, кН*м., должно быть в пределах от 0 до 35")]
public double TorqueMax { get; set; }
/// <summary>
/// Проработка 1, Количество повторений, шт.
/// </summary>
[Range(0.0, 99.0, ErrorMessage = "Проработка 1, Количество повторений, шт., должно быть в пределах от 0 до 99")]
public int Reaming1RepetitionsCount { get; set; }
/// <summary>
/// Проработка 1, Скорость, м/ч., Вверх
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Проработка 1, Скорость, м/ч., Вверх, должно быть в пределах от 0 до 999")]
public double Reaming1RopUp { get; set; }
/// <summary>
/// Проработка 1, Скорость, м/ч., Вниз
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Проработка 1, Скорость, м/ч., Вниз, должно быть в пределах от 0 до 999")]
public double Reaming1RopDown { get; set; }
/// <summary>
/// Проработка 1, Обороты, об/мин., Вверх
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Проработка 1, Обороты, об/мин., Вверх, должно быть в пределах от 0 до 270")]
public double Reaming1RpmUp { get; set; }
/// <summary>
/// Проработка 1, Обороты, об/мин., Вниз
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Проработка 1, Обороты, об/мин., Вниз, должно быть в пределах от 0 до 270")]
public double Reaming1RpmDown { get; set; }
/// <summary>
/// Проработка 1, Расход, л/с., Вверх
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Проработка 1, Расход, л/с., Вверх, должно быть в пределах от 0 до 100")]
public double Reaming1FlowRateUp { get; set; }
/// <summary>
/// Проработка 1, Расход, л/с., Вниз
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Проработка 1, Расход, л/с., Вниз, должно быть в пределах от 0 до 100")]
public double Reaming1FlowRateDown { get; set; }
/// <summary>
/// Проработка 1, Интервал проработки, м.
/// </summary>
[Range(0.0, 30.0, ErrorMessage = "Проработка 1, Интервал проработки, м., должно быть в пределах от 0 до 30")]
public double Reaming1Interval { get; set; }
/// <summary>
/// Остановка над забоем, м.
/// </summary>
[Range(0.0, 10.0, ErrorMessage = "Остановка над забоем, м., должно быть в пределах от 0 до 10")]
public double Reaming1StopPointOffBottom { get; set; }
/// <summary>
/// Проработка 2, Количество повторений, шт.
/// </summary>
[Range(0.0, 99.0, ErrorMessage = "Проработка 2, Количество повторений, шт., должно быть в пределах от 0 до 99")]
public int Reaming2RepetitionsCount { get; set; }
/// <summary>
/// Проработка 2, Скорость, м/ч., Вверх
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Проработка 2, Скорость, м/ч., Вверх, должно быть в пределах от 0 до 999")]
public double Reaming2RopUp { get; set; }
/// <summary>
/// Проработка 2, Скорость, м/ч., Вниз
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Проработка 2, Скорость, м/ч., Вниз, должно быть в пределах от 0 до 999")]
public double Reaming2RopDown { get; set; }
/// <summary>
/// Проработка 2, Обороты, об/мин., Вверх
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Проработка 2, Обороты, об/мин., Вверх, должно быть в пределах от 0 до 270")]
public double Reaming2RpmUp { get; set; }
/// <summary>
/// Проработка 2, Обороты, об/мин., Вниз
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Проработка 2, Обороты, об/мин., Вниз, должно быть в пределах от 0 до 270")]
public double Reaming2RpmDown { get; set; }
/// <summary>
/// Проработка 2, Расход, л/с., Вверх
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Проработка 2, Расход, л/с., Вверх, должно быть в пределах от 0 до 100")]
public double Reaming2FlowRateUp { get; set; }
/// <summary>
/// Проработка 2, Расход, л/с., Вниз
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Проработка 2, Расход, л/с., Вниз, должно быть в пределах от 0 до 100")]
public double Reaming2FlowRateDown { get; set; }
/// <summary>
/// Проработка 2, Интервал проработки, м.
/// </summary>
[Range(0.0, 30.0, ErrorMessage = "Проработка 2, Интервал проработки, м., должно быть в пределах от 0 до 30")]
public double Reaming2Interval { get; set; }
/// <summary>
/// Остановка над забоем, м.
/// </summary>
[Range(0.0, 10.0, ErrorMessage = "Остановка над забоем, м., должно быть в пределах от 0 до 10")]
public double Reaming2StopPointOffBottom { get; set; }
/// <summary>
/// Проработка 3, Количество повторений, шт.
/// </summary>
[Range(0.0, 99.0, ErrorMessage = "Проработка 3, Количество повторений, шт., должно быть в пределах от 0 до 99")]
public int? Reaming3RepetitionsCount { get; set; }
/// <summary>
/// Проработка 3, Скорость, м/ч., Вверх
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Проработка 3, Скорость, м/ч., Вверх, должно быть в пределах от 0 до 999")]
public double Reaming3RopUp { get; set; }
/// <summary>
/// Проработка 3, Скорость, м/ч., Вниз
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Проработка 3, Скорость, м/ч., Вниз, должно быть в пределах от 0 до 999")]
public double Reaming3RopDown { get; set; }
/// <summary>
/// Проработка 3, Обороты, об/мин., Вверх
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Проработка 3, Обороты, об/мин., Вверх, должно быть в пределах от 0 до 270")]
public double Reaming3RpmUp { get; set; }
/// <summary>
/// Проработка 3, Обороты, об/мин., Вниз
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Проработка 3, Обороты, об/мин., Вниз, должно быть в пределах от 0 до 270")]
public double Reaming3RpmDown { get; set; }
/// <summary>
/// Проработка 3, Расход, л/с., Вверх
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Проработка 3, Расход, л/с., Вверх, должно быть в пределах от 0 до 100")]
public double Reaming3FlowRateUp { get; set; }
/// <summary>
/// Проработка 3, Расход, л/с., Вниз
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Проработка 3, Расход, л/с., Вниз, должно быть в пределах от 0 до 100")]
public double Reaming3FlowRateDown { get; set; }
/// <summary>
/// Проработка 3, Интервал проработки, м.
/// </summary>
[Range(0.0, 30.0, ErrorMessage = "Проработка 3, Интервал проработки, м., должно быть в пределах от 0 до 30")]
public double Reaming3Interval { get; set; }
/// <summary>
/// Остановка над забоем, м.
/// </summary>
[Range(0.0, 10.0, ErrorMessage = "Остановка над забоем, м., должно быть в пределах от 0 до 10")]
public double Reaming3StopPointOffBottom { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string? Note { get; set; }
}

View File

@ -0,0 +1,21 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Operations;
/// <summary>
/// РТК план записи статического замера
/// </summary>
public class ProcessMapPlanRecordingStaticMeasurementDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Время записи замера, сек
/// </summary>
[Range(0.0, 1800.0, ErrorMessage = "Время записи замера, сек., должно быть в пределах от 0 до 1800")]
public double MeasurementRecordingTime { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, не должно превышать 1024 символов")]
public string Note { get; set; } = string.Empty;
}

View File

@ -0,0 +1,88 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Operations;
/// <summary>
/// РТК план бурение скважины в роторе
/// </summary>
public class ProcessMapPlanRotorDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Максимально допустимая скорость, м/ч
/// </summary>
[Range(0, 800.0, ErrorMessage = "Максимально допустимая скорость, м/ч., должно быть в пределах от 0 до 800.0")]
public double RopMax { get; set; }
/// <summary>
/// Максимально допустимое давление, атм
/// </summary>
[Range(0.0, 400.0, ErrorMessage = "Максимально допустимое давление, атм., должно быть в пределах от 0 до 400.0")]
public double PressureMax { get; set; }
/// <summary>
/// Перепад давления, атм. Уставка
/// </summary>
[Range(0.0, 60.0, ErrorMessage = "Перепад давления, атм., уставка, должно быть в пределах от 0 до 60.0")]
public double DifferentialPressure { get; set; }
/// <summary>
/// Перепад давления, атм. Ограничение
/// </summary>
[Range(0.0, 60.0, ErrorMessage = "Перепад давления, атм., ограничение, должно быть в пределах от 0 до 60.0")]
public double DifferentialPressureMax { get; set; }
/// <summary>
/// Нагрузка, т. Уставка
/// </summary>
[Range(0.0, 99.0, ErrorMessage = "Нагрузка, т., уставка, должно быть в пределах от 0 до 99.0")]
public double WeightOnBit { get; set; }
/// <summary>
/// Нагрузка, т. Ограничение
/// </summary>
[Range(0.0, 99.0, ErrorMessage = "Нагрузка, т., ограничение, должно быть в пределах от 0 до 99.0")]
public double WeightOnBitMax { get; set; }
/// <summary>
/// Момент на ВСП, кН*м. Уставка
/// </summary>
[Range(0.0, 35.0, ErrorMessage = "Момент на ВСП, кН*м., уставка, должно быть в пределах от 0 до 35.0")]
public double TopDriveTorque { get; set; }
/// <summary>
/// Момент на ВСП, кН*м. Ограничение
/// </summary>
[Range(0.0, 35.0, ErrorMessage = "Момент на ВСП, кН*м., ограничение, должно быть в пределах от 0 до 35.0")]
public double TopDriveTorqueMax { get; set; }
/// <summary>
/// Обороты на ВСП, об/мин. Уставка
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Обороты на ВСП, об/мин., уставка, должно быть в пределах от 0 до 270.0")]
public double Rpm { get; set; }
/// <summary>
/// Обороты на ВСП, об/мин. Ограничение
/// </summary>
[Range(0.0, 270.0, ErrorMessage = "Обороты на ВСП, об/мин., ограничение, должно быть в пределах от 0 до 270.0")]
public double RpmMax { get; set; }
/// <summary>
/// Расход л/с. Уставка
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Расход л/с., уставка, должно быть в пределах от 0 до 100.0")]
public double FlowRate { get; set; }
/// <summary>
/// Расход л/с. Ограничение
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Расход л/с., ограничение, должно быть в пределах от 0 до 100.0")]
public double FlowRateMax { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, не должно превышать 1024 символов")]
public string Note { get; set; } = string.Empty;
}

View File

@ -0,0 +1,75 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Operations;
/// <summary>
/// РТК план бурение скважины в слайде
/// </summary>
public class ProcessMapPlanSlideDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Максимально допустимая скорость, м/ч
/// </summary>
[Range(0, 800, ErrorMessage = "Максимально допустимая скорость, м/ч., должно быть в пределах от 0 до 800")]
public double RopMax { get; set; }
/// <summary>
/// Максимально допустимое давление, атм
/// </summary>
[Range(0, 400, ErrorMessage = "Максимально допустимое давление, атм., должно быть в пределах от 0 до 400")]
public double PressureMax { get; set; }
/// <summary>
/// Перепад давления уставка, атм
/// </summary>
[Range(0, 60, ErrorMessage = "Перепад давления уставка, атм., должно быть в пределах от 0 до 60")]
public double DifferentialPressure { get; set; }
/// <summary>
/// Перепад давления ограничение, атм
/// </summary>
[Range(0, 60, ErrorMessage = "Перепад давления ограничение, атм., должно быть в пределах от 0 до 60")]
public double DifferentialPressureMax { get; set; }
/// <summary>
/// Нагрузка уставка, т
/// </summary>
[Range(0, 99, ErrorMessage = "Нагрузка уставка, т., должно быть в пределах от 0 до 99")]
public double WeightOnBit { get; set; }
/// <summary>
/// Нагрузка ограничение, т
/// </summary>
[Range(0, 99, ErrorMessage = "Нагрузка ограничение, т., должно быть в пределах от 0 до 99")]
public double WeightOnBitMax { get; set; }
/// <summary>
/// Расход уставка л/с
/// </summary>
[Range(0, 100, ErrorMessage = "Расход уставка л/с., должно быть в пределах от 0 до 100")]
public double FlowRate { get; set; }
/// <summary>
/// Расход ограничение л/с
/// </summary>
[Range(0, 100, ErrorMessage = "Расход ограничение л/с., должно быть в пределах от 0 до 100")]
public double FlowRateMax { get; set; }
/// <summary>
/// Расчётная пружина, градус
/// </summary>
[Range(0, 9999, ErrorMessage = "Расчётная пружина, градус, должно быть в пределах от 0 до 9999")]
public double Spring { get; set; }
/// <summary>
/// Складывание инструмента, м
/// </summary>
[Range(0, 9999, ErrorMessage = "Складывание инструмента, м., должно быть в пределах от 0 до 9999")]
public double Buckling { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, не должно превышать 1024 символов")]
public string Note { get; set; } = string.Empty;
}

View File

@ -0,0 +1,27 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Operations;
/// <summary>
/// РТК план выключение насоса
/// </summary>
public class ProcessMapPlanSwitchingOffThePumpDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Продолжительность, сек.
/// </summary>
[Range(0.0, 1800.0, ErrorMessage = "Продолжительность, сек., должно быть в пределах от 0 до 1800")]
public double Duration { get; set; }
/// <summary>
/// Лимит остаточного давления, атм.
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Лимит остаточного давления, атм., должно быть в пределах от 0 до 100")]
public double ResidualPressureLimit { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string Note { get; set; } = string.Empty;
}

View File

@ -0,0 +1,34 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace AsbCloudApp.Data.ProcessMaps.Operations;
/// <summary>
/// РТК план выход на плановый расход
/// </summary>
public class ProcessMapPlanSwitchingToTheModeDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Время выхода буровых насосов на плановый расход, сек.
/// </summary>
[Range(0.0, 3600.0, ErrorMessage = "Время выхода буровых насосов на плановый расход, сек., должно быть в пределах от 0 до 3600")]
public double RampTime { get; set; }
/// <summary>
/// Расход, л/с
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Расход, л/с., должно быть в пределах от 0 до 100")]
public double FlowRate { get; set; }
/// <summary>
/// Максимально допустимое давление, атм.
/// </summary>
[Range(0.0, 400.0, ErrorMessage = "Максимально допустимое давление, атм., должно быть в пределах от 0 до 400")]
public double PressureMax { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string Note { get; set; } = string.Empty;
}

View File

@ -0,0 +1,99 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps.Operations;
/// <summary>
/// РТК план выставление
/// </summary>
public class ProcessMapPlanTFOrientationDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Задание TF, град.
/// </summary>
[Range(0.0, 360.0, ErrorMessage = "Задание TF, град., должно быть в пределах от 0 до 360")]
public double TFSetpoint { get; set; }
/// <summary>
/// Пружина, град.
/// </summary>
[Range(0.0, 10000.0, ErrorMessage = "Пружина, град., должно быть в пределах от 0 до 10000")]
public double Spring { get; set; }
/// <summary>
/// Максимальное давление, атм.
/// </summary>
[Range(0.0, 400.0, ErrorMessage = "Максимальное давление, атм., должно быть в пределах от 0 до 400")]
public double PressureMax { get; set; }
/// <summary>
/// Перепад давления, атм.
/// </summary>
[Range(0.0, 60.0, ErrorMessage = "Перепад давления, атм., должно быть в пределах от 0 до 60")]
public double DifferentialPressure { get; set; }
/// <summary>
/// Затяжка, т.
/// </summary>
[Range(0.0, 20.0, ErrorMessage = "Затяжка, т., должно быть в пределах от 0 до 20")]
public double Tight { get; set; }
/// <summary>
/// Посадка, т.
/// </summary>
[Range(0.0, 20.0, ErrorMessage = "Посадка, т., должно быть в пределах от 0 до 20")]
public double SlackingOff { get; set; }
/// <summary>
/// Максимально допустимый момент, кН*м.
/// </summary>
[Range(0.0, 35.0, ErrorMessage = "Максимально допустимый момент, кН*м., должно быть в пределах от 0 до 35")]
public double TorqueMax { get; set; }
/// <summary>
/// Количество расхаживаний, шт.
/// </summary>
[Range(0.0, 99.0, ErrorMessage = "Количество расхаживаний, шт., должно быть в пределах от 0 до 99")]
public int RepetitionsCount { get; set; }
/// <summary>
/// Скорость вверх, м/ч.
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Скорость вверх, м/ч., должно быть в пределах от 0 до 999")]
public double RopUp { get; set; }
/// <summary>
/// Скорость вниз, м/ч.
/// </summary>
[Range(0.0, 999.0, ErrorMessage = "Скорость вниз, м/ч., должно быть в пределах от 0 до 999")]
public double RopDown { get; set; }
/// <summary>
/// Расход вверх, л/с.
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Расход вверх, л/с., должно быть в пределах от 0 до 100")]
public double FlowRateUp { get; set; }
/// <summary>
/// Расход вниз, л/с.
/// </summary>
[Range(0.0, 100.0, ErrorMessage = "Расход вниз, л/с., должно быть в пределах от 0 до 100")]
public double FlowRateDown { get; set; }
/// <summary>
/// Интервал расхаживания, м.
/// </summary>
[Range(0.0, 30.0, ErrorMessage = "Интервал расхаживания, м., должно быть в пределах от 0 до 30")]
public double Interval { get; set; }
/// <summary>
/// Остановка над забоем, м.
/// </summary>
[Range(0.0, 10.0, ErrorMessage = "Остановка над забоем, м., должно быть в пределах от 0 до 10")]
public double StopPointOffBottom { get; set; }
/// <summary>
/// Примечание
/// </summary>
[StringLength(1024, ErrorMessage = "Примечание, должно быть не более 1024 символов")]
public string Note { get; set; } = string.Empty;
}

View File

@ -1,17 +1,22 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps; namespace AsbCloudApp.Data.ProcessMaps;
/// <inheritdoc/> /// <inheritdoc/>
public abstract class ProcessMapPlanBaseDto : ChangeLogAbstract, IId, IWellRelated, IValidatableObject public abstract class ProcessMapPlanBaseDto : IId, IWellRelated, IValidatableObject
{ {
/// <summary> /// <summary>
/// Id скважины /// Id скважины
/// </summary> /// </summary>
public int IdWell { get; set; } public int IdWell { get; set; }
/// <summary>
/// Id записи
/// </summary>
public int Id { get; set; }
/// <summary> /// <summary>
/// Тип секции /// Тип секции
/// </summary> /// </summary>

View File

@ -1,103 +0,0 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps;
/// <summary>
/// РТК план бурение скважины
/// </summary>
public class ProcessMapPlanDrillingDto : ProcessMapPlanBaseDto
{
/// <summary>
/// Id режима 1-ротор, 2 - слайд
/// </summary>
[Range(1, 2, ErrorMessage = "Id режима должен быть либо 1-ротор либо 2-слайд")]
public int IdMode { get; set; }
/// <summary>
/// Название режима бурения
/// </summary>
public string? Mode { get; set; }
/// <summary>
/// Осевая нагрузка, т план
/// </summary>
[Range(0, 99999.9, ErrorMessage = "Осевая нагрузка, т должна быть в пределах от 0 до 99999.9")]
public double AxialLoadPlan { get; set; }
/// <summary>
/// Осевая нагрузка, т ограничение
/// </summary>
[Range(0, 99999.9, ErrorMessage = "Осевая нагрузка, т должна быть в пределах от 0 до 99999.9")]
public double AxialLoadLimitMax { get; set; }
/// <summary>
/// Перепад давления, атм план
/// </summary>
[Range(0, 99999.9, ErrorMessage = "Перепад давления, атм должна быть в пределах от 0 до 99999.9")]
public double DeltaPressurePlan { get; set; }
/// <summary>
/// Перепад давления, атм ограничение
/// </summary>
[Range(0, 99999.9, ErrorMessage = "Перепад давления, атм должна быть в пределах от 0 до 99999.9")]
public double DeltaPressureLimitMax { get; set; }
/// <summary>
/// Момент на ВСП, кН*м план
/// </summary>
[Range(0, 99999.9, ErrorMessage = "Момент на ВСП, кН*м должна быть в пределах от 0 до 99999.9")]
public double TopDriveTorquePlan { get; set; }
/// <summary>
/// Момент на ВСП, кН*м ограничение
/// </summary>
[Range(0, 99999.9, ErrorMessage = "Момент на ВСП, кН*м должна быть в пределах от 0 до 99999.9")]
public double TopDriveTorqueLimitMax { get; set; }
/// <summary>
/// Обороты на ВСП, об/мин план
/// </summary>
[Range(0, 99999.9, ErrorMessage = "Обороты на ВСП, об/мин должна быть в пределах от 0 до 99999.9")]
public double TopDriveSpeedPlan { get; set; }
/// <summary>
/// Обороты на ВСП, об/мин ограничение
/// </summary>
[Range(0, 99999.9, ErrorMessage = "Обороты на ВСП, об/мин должна быть в пределах от 0 до 99999.9")]
public double TopDriveSpeedLimitMax { get; set; }
/// <summary>
/// Расход, л/с план
/// </summary>
[Range(0, 99999.9, ErrorMessage = "Расход, л/с должна быть в пределах от 0 до 99999.9")]
public double FlowPlan { get; set; }
/// <summary>
/// Расход, л/с ограничение
/// </summary>
[Range(0, 99999.9, ErrorMessage = "Расход, л/с должна быть в пределах от 0 до 99999.9")]
public double FlowLimitMax { get; set; }
/// <summary>
/// Плановая механическая скорость, м/ч
/// </summary>
[Range(0, 99999.9, ErrorMessage = "Плановая механическая скорость, м/ч должно быть в пределах от 0 до 99999.9")]
public double RopPlan { get; set; }
/// <summary>
/// Плановый процент использования АКБ
/// </summary>
[Range(0, 100, ErrorMessage = "Процент использования АКБ должен быть в пределах от 0 до 100")]
public double UsageSaub { get; set; }
/// <summary>
/// Плановый процент использования spin master
/// </summary>
[Range(0, 100, ErrorMessage = "Процент использования spin master должен быть в пределах от 0 до 100")]
public double UsageSpin { get; set; }
/// <summary>
/// Комментарий
/// </summary>
public string Comment { get; set; } = string.Empty;
}

View File

@ -1,82 +0,0 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps;
/// <summary>
/// РТК план проработка скважины
/// </summary>
public class ProcessMapPlanReamDto : ProcessMapPlanBaseDto, IValidatableObject
{
/// <summary>
/// Количество повторений
/// </summary>
[Required]
[Range(0, 100, ErrorMessage = "Количество повторений должно быть в пределах от 0 до 100")]
public double Repeats { get; set; }
/// <summary>
/// Вращение при движении вверх, об/мин
/// </summary>
[Required]
[Range(0, 99999.9, ErrorMessage = "Количество вращений вверх должно быть в пределах от 0 до 99999.9")]
public double SpinUpward { get; set; }
/// <summary>
/// Вращение при движении вниз, об/мин
/// </summary>
[Required]
[Range(0, 99999.9, ErrorMessage = "Количество вращений вниз должно быть в пределах от 0 до 99999.9")]
public double SpinDownward { get; set; }
/// <summary>
/// Скорость подъёма, м/ч
/// </summary>
[Required]
[Range(0, 99999.9, ErrorMessage = "Скорость подъёма должна быть в пределах от 0 до 99999.9")]
public double SpeedUpward { get; set; }
/// <summary>
/// Скорость спуска, м/ч
/// </summary>
[Required]
[Range(0, 99999.9, ErrorMessage = "Скорость спуска должна быть в пределах от 0 до 99999.9")]
public double SpeedDownward { get; set; }
/// <summary>
/// Уставка зятяжки, т
/// </summary>
[Required]
[Range(0, 99999.9, ErrorMessage = "Значение затяжек уставки должно быть в пределах от 0 до 99999.9")]
public double SetpointDrag { get; set; }
/// <summary>
/// Уставка посадки, т
/// </summary>
[Required]
[Range(0, 99999.9, ErrorMessage = "Значение посадки уставки должно быть в пределах от 0 до 99999.9")]
public double SetpointTight { get; set; }
/// <summary>
/// Давление, атм
/// </summary>
[Required]
[Range(0, 99999.9, ErrorMessage = "Давление должно быть в пределах от 0 до 99999.9")]
public double Pressure { get; set; }
/// <summary>
/// Момент, кН*м
/// </summary>
[Required]
[Range(0, 99999.9, ErrorMessage = "Крутящий момент должен быть в пределах от 0 до 99999.9")]
public double Torque { get; set; }
/// <inheritdoc/>
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (DepthEnd < DepthStart)
yield return new ValidationResult(
$"{nameof(DepthEnd)}:{DepthEnd:#0.0} меньше {nameof(DepthStart)}:{DepthStart:#0.0}",
new[] { nameof(DepthEnd), nameof(DepthStart) });
}
}

View File

@ -1,4 +1,4 @@
using System; using System;
namespace AsbCloudApp.Data.ProcessMaps.Report; namespace AsbCloudApp.Data.ProcessMaps.Report;
@ -12,69 +12,69 @@ public class ProcessMapReportDataSaubStatDto
/// </summary> /// </summary>
public double DrilledTime { get; set; } = 0; public double DrilledTime { get; set; } = 0;
/// <summary> /// <summary>
/// Id секции скважины /// Id секции скважины
/// </summary> /// </summary>
public int IdWellSectionType { get; set; } public int IdWellSectionType { get; set; }
/// <summary> /// <summary>
/// Название секции скважины /// Название секции скважины
/// </summary> /// </summary>
public string WellSectionTypeName { get; set; } = null!; public string WellSectionTypeName { get; set; } = null!;
/// <summary> /// <summary>
/// Глубина по стволу от, м /// Глубина по стволу от, м
/// <para> /// <para>
/// на начало интервала /// на начало интервала
/// </para> /// </para>
/// </summary> /// </summary>
public double DepthStart { get; set; } public double DepthStart { get; set; }
/// <summary> /// <summary>
/// Глубина по стволу до, м /// Глубина по стволу до, м
/// <para> /// <para>
/// на конец интервала /// на конец интервала
/// </para> /// </para>
/// </summary> /// </summary>
public double DepthEnd { get; set; } public double DepthEnd { get; set; }
/// <summary> /// <summary>
/// Дата/ время /// Дата/ время
/// <para> /// <para>
/// на начало интервала /// на начало интервала
/// </para> /// </para>
/// </summary> /// </summary>
public DateTimeOffset DateStart { get; set; } public DateTimeOffset DateStart { get; set; }
/// <summary> /// <summary>
/// Режим бурения (Ротор/слайд/ручной) /// Режим бурения (Ротор/слайд/ручной)
/// </summary> /// </summary>
public string DrillingMode { get; set; } = null!; public string DrillingMode { get; set; } = null!;
/// <summary> /// <summary>
/// Проходка, м /// Проходка, м
/// </summary> /// </summary>
public double? DeltaDepth { get; set; } public double? DeltaDepth { get; set; }
/// <summary> /// <summary>
/// Перепад давления, атм /// Перепад давления, атм
/// </summary> /// </summary>
public ProcessMapReportDataSaubStatParamsDto PressureDiff { get; set; } = new(); public ProcessMapReportDataSaubStatParamsDto PressureDiff { get; set; } = new();
/// <summary> /// <summary>
/// Нагрузка, т /// Нагрузка, т
/// </summary> /// </summary>
public ProcessMapReportDataSaubStatParamsDto AxialLoad { get; set; } = new(); public ProcessMapReportDataSaubStatParamsDto AxialLoad { get; set; } = new();
/// <summary> /// <summary>
/// Момент на ВСП, кНхМ /// Момент на ВСП, кНхМ
/// </summary> /// </summary>
public ProcessMapReportDataSaubStatParamsDto TopDriveTorque { get; set; } = new(); public ProcessMapReportDataSaubStatParamsDto TopDriveTorque { get; set; } = new();
/// <summary> /// <summary>
/// Ограничение скорости, м/ч /// Ограничение скорости, м/ч
/// </summary> /// </summary>
public ProcessMapReportDataSaubStatParamsDto SpeedLimit { get; set; } = new(); public ProcessMapReportDataSaubStatParamsDto SpeedLimit { get; set; } = new();
/// <summary> /// <summary>
/// Обороты ВСП, об/мин /// Обороты ВСП, об/мин
@ -86,8 +86,8 @@ public class ProcessMapReportDataSaubStatDto
/// </summary> /// </summary>
public ProcessMapReportDataSaubStatParamsDto Flow { get; set; } = new(); public ProcessMapReportDataSaubStatParamsDto Flow { get; set; } = new();
/// <summary> /// <summary>
/// Механическая скорость, м/ч /// Механическая скорость, м/ч
/// </summary> /// </summary>
public PlanFactDto<double?> Rop { get; set; } = new(); public PlanFactDto<double?> Rop { get; set; } = new();
} }

View File

@ -1,4 +1,4 @@
namespace AsbCloudApp.Data.ProcessMaps.Report; namespace AsbCloudApp.Data.ProcessMaps.Report;
/// <summary> /// <summary>
/// Параметры РТК /// Параметры РТК

View File

@ -1,4 +1,4 @@
using System; using System;
namespace AsbCloudApp.Data.ProcessMaps.Report; namespace AsbCloudApp.Data.ProcessMaps.Report;
@ -7,92 +7,92 @@ namespace AsbCloudApp.Data.ProcessMaps.Report;
/// </summary> /// </summary>
public class ProcessMapReportWellDrillingDto public class ProcessMapReportWellDrillingDto
{ {
/// <summary> /// <summary>
/// Идентификатор скважины /// Идентификатор скважины
/// </summary> /// </summary>
public int IdWell { get; set; } public int IdWell { get; set; }
/// <summary> /// <summary>
/// Id секции скважины /// Id секции скважины
/// </summary> /// </summary>
public int IdWellSectionType { get; set; } public int IdWellSectionType { get; set; }
/// <summary> /// <summary>
/// Название секции скважины /// Название секции скважины
/// </summary> /// </summary>
public string WellSectionTypeName { get; set; } = null!; public string WellSectionTypeName { get; set; } = null!;
/// <summary> /// <summary>
/// Глубина по стволу от, м /// Глубина по стволу от, м
/// <para> /// <para>
/// на начало интервала /// на начало интервала
/// </para> /// </para>
/// </summary> /// </summary>
public double DepthStart { get; set; } public double DepthStart { get; set; }
/// <summary> /// <summary>
/// Глубина по стволу до, м /// Глубина по стволу до, м
/// <para> /// <para>
/// на конец интервала /// на конец интервала
/// </para> /// </para>
/// </summary> /// </summary>
public double DepthEnd { get; set; } public double DepthEnd { get; set; }
/// <summary> /// <summary>
/// Дата/ время /// Дата/ время
/// <para> /// <para>
/// на начало интервала /// на начало интервала
/// </para> /// </para>
/// </summary> /// </summary>
public DateTimeOffset DateStart { get; set; } public DateTimeOffset DateStart { get; set; }
/// <summary> /// <summary>
/// Время мех бурения, ч /// Время мех бурения, ч
/// </summary> /// </summary>
public double MechDrillingHours { get; set; } public double MechDrillingHours { get; set; }
/// <summary> /// <summary>
/// Режим бурения (Ротор/слайд/ручной) /// Режим бурения (Ротор/слайд/ручной)
/// </summary> /// </summary>
public string DrillingMode { get; set; } = null!; public string DrillingMode { get; set; } = null!;
/// <summary> /// <summary>
/// Проходка, м /// Проходка, м
/// </summary> /// </summary>
public double? DeltaDepth { get; set; } public double? DeltaDepth { get; set; }
/// <summary> /// <summary>
/// Перепад давления, атм /// Перепад давления, атм
/// </summary> /// </summary>
public ProcessMapReportWellDrillingParamsDto PressureDiff { get; set; } = new(); public ProcessMapReportWellDrillingParamsDto PressureDiff { get; set; } = new();
/// <summary> /// <summary>
/// Нагрузка, т /// Нагрузка, т
/// </summary> /// </summary>
public ProcessMapReportWellDrillingParamsDto AxialLoad { get; set; } = new(); public ProcessMapReportWellDrillingParamsDto AxialLoad { get; set; } = new();
/// <summary> /// <summary>
/// Момент на ВСП, кНхМ /// Момент на ВСП, кНхМ
/// </summary> /// </summary>
public ProcessMapReportWellDrillingParamsDto TopDriveTorque { get; set; } = new(); public ProcessMapReportWellDrillingParamsDto TopDriveTorque { get; set; } = new();
/// <summary> /// <summary>
/// Ограничение скорости, м/ч /// Ограничение скорости, м/ч
/// </summary> /// </summary>
public ProcessMapReportWellDrillingParamsDto SpeedLimit { get; set; } = new(); public ProcessMapReportWellDrillingParamsDto SpeedLimit { get; set; } = new();
/// <summary> /// <summary>
/// Процент использования системы АПД план, % /// Процент использования системы АПД план, %
/// </summary> /// </summary>
public double UsagePlan { get; set; } public double UsagePlan { get; set; }
/// <summary> /// <summary>
/// Процент использования системы АПД факт, % /// Процент использования системы АПД факт, %
/// </summary> /// </summary>
public double UsageFact { get; set; } public double UsageFact { get; set; }
/// <summary> /// <summary>
/// Механическая скорость, м/ч /// Механическая скорость, м/ч
/// </summary> /// </summary>
public PlanFactDto<double?> Rop { get; set; } = new(); public PlanFactDto<double?> Rop { get; set; } = new();
} }

View File

@ -1,4 +1,4 @@
namespace AsbCloudApp.Data.ProcessMaps.Report; namespace AsbCloudApp.Data.ProcessMaps.Report;
/// <summary> /// <summary>
/// Параметры РТК /// Параметры РТК

View File

@ -7,64 +7,64 @@ namespace AsbCloudApp.Data.ProcessMaps;
/// Секция скважины - план /// Секция скважины - план
/// </summary> /// </summary>
public class WellSectionPlanDto : ItemInfoDto, public class WellSectionPlanDto : ItemInfoDto,
IId, IId,
IWellRelated, IWellRelated,
IValidatableObject IValidatableObject
{ {
/// <inheritdoc/> /// <inheritdoc/>
public int Id { get; set; } public int Id { get; set; }
/// <inheritdoc/> /// <inheritdoc/>
[Required] [Required]
public int IdWell { get; set; } public int IdWell { get; set; }
/// <summary> /// <summary>
/// Тип секции /// Тип секции
/// </summary> /// </summary>
[Required(ErrorMessage = "Поле обязательно для заполнение")] [Required(ErrorMessage = "Поле обязательно для заполнение")]
[Range(1, int.MaxValue)] [Range(1, int.MaxValue)]
public int IdSectionType { get; set; } public int IdSectionType { get; set; }
/// <summary> /// <summary>
/// Начальная глубина бурения, м /// Начальная глубина бурения, м
/// </summary> /// </summary>
[Required(ErrorMessage = "Поле обязательно для заполнение")] [Required(ErrorMessage = "Поле обязательно для заполнение")]
[Range(0, 10000, ErrorMessage = "Допустимое значение от 0 до 10000")] [Range(0, 10000, ErrorMessage = "Допустимое значение от 0 до 10000")]
public double DepthStart { get; set; } public double DepthStart { get; set; }
/// <summary> /// <summary>
/// Конечная глубина бурения, м /// Конечная глубина бурения, м
/// </summary> /// </summary>
[Required(ErrorMessage = "Поле обязательно для заполнение")] [Required(ErrorMessage = "Поле обязательно для заполнение")]
[Range(0, 10000, ErrorMessage = "Допустимое значение от 0 до 10000")] [Range(0, 10000, ErrorMessage = "Допустимое значение от 0 до 10000")]
public double DepthEnd { get; set; } public double DepthEnd { get; set; }
/// <summary> /// <summary>
/// Внешний диаметр /// Внешний диаметр
/// </summary> /// </summary>
[Range(1, 10000, ErrorMessage = "Допустимое значение от 1 до 10000")] [Range(1, 10000, ErrorMessage = "Допустимое значение от 1 до 10000")]
public double? OuterDiameter { get; set; } public double? OuterDiameter { get; set; }
/// <summary> /// <summary>
/// Внутренний диаметр /// Внутренний диаметр
/// </summary> /// </summary>
[Range(1, 10000, ErrorMessage = "Допустимое значение от 1 до 10000")] [Range(1, 10000, ErrorMessage = "Допустимое значение от 1 до 10000")]
public double? InnerDiameter { get; set; } public double? InnerDiameter { get; set; }
/// <inheritdoc /> /// <inheritdoc />
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{ {
if (!OuterDiameter.HasValue && !InnerDiameter.HasValue) if (!OuterDiameter.HasValue && !InnerDiameter.HasValue)
yield break; yield break;
if (!OuterDiameter.HasValue) if (!OuterDiameter.HasValue)
yield return new ValidationResult("Поле обязательно для заполнение", new[] { nameof(OuterDiameter) }); yield return new ValidationResult("Поле обязательно для заполнение", new[] { nameof(OuterDiameter) });
if (!InnerDiameter.HasValue) if (!InnerDiameter.HasValue)
yield return new ValidationResult("Поле обязательно для заполнение", new[] { nameof(InnerDiameter) }); yield return new ValidationResult("Поле обязательно для заполнение", new[] { nameof(InnerDiameter) });
if (OuterDiameter <= InnerDiameter) if (OuterDiameter <= InnerDiameter)
yield return new ValidationResult("Внешний диаметр не должен быть больше или равен внутреннему", yield return new ValidationResult("Внешний диаметр не должен быть больше или равен внутреннему",
new[] { nameof(OuterDiameter) }); new[] { nameof(OuterDiameter) });
} }
} }

View File

@ -1,4 +1,4 @@
namespace AsbCloudApp.Data.Progress; namespace AsbCloudApp.Data.Progress;
/// <summary> /// <summary>
/// DTO прогресса /// DTO прогресса

Some files were not shown because too many files have changed in this diff Show More