merge dev to .

This commit is contained in:
Frolov-Nikita 2024-01-21 13:02:12 +05:00
commit 2ce2005e6a
No known key found for this signature in database
GPG Key ID: 719E3386D12B0760
72 changed files with 482 additions and 163 deletions

3
.gitignore vendored
View File

@ -339,4 +339,5 @@ ASALocalRun/
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
healthchecksdb
data/

View File

@ -12,6 +12,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// ИД месторождения, необязательный
/// </summary>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id месторождения не может быть меньше 1")]
public int IdDeposit { get; set; }

View File

@ -1,3 +1,5 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
/// <summary>
@ -8,11 +10,13 @@ namespace AsbCloudApp.Data
/// <summary>
/// Макс. механическая скорость проходки по кусту
/// </summary>
[Required]
public double RopMax { get; set; }
/// <summary>
/// Средняя механическая скорость проходки по кусту
/// </summary>
[Required]
public double RopAverage { get; set; }
}
}

View File

@ -23,6 +23,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// ИД типа компании
/// </summary>
[Required]
public int IdCompanyType { get; set; }
/// <summary>

View File

@ -1,4 +1,6 @@
namespace AsbCloudApp.Data
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
/// <summary>
/// DTO тип компании
@ -6,21 +8,25 @@
public class CompanyTypeDto : IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>
/// Название типа компании
/// </summary>
[Required]
public string Caption { get; set; } = null!;
/// <summary>
/// Порядок
/// </summary>
[Required]
public int Order { get; set; }
/// <summary>
/// Является ли контактом
/// </summary>
[Required]
public bool IsContact { get; set; }
}

View File

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

View File

@ -1,3 +1,5 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DailyReport.Blocks.Sign;
/// <summary>
@ -8,12 +10,14 @@ public class SignRecordDto
/// <summary>
/// Имя
/// </summary>
[Required]
public string Name { get; set; } = null!;
/// <summary>
/// Фамилия
/// </summary>
public string Surname { get; set; } = null!;
/// <summary>
/// Фамилия
/// </summary>
[Required]
public string Surname { get; set; } = null!;
/// <summary>
/// Отчество

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data.DailyReport.Blocks.Subsystems;
@ -36,5 +37,6 @@ public class SubsystemBlockDto : ItemInfoDto
/// <summary>
/// Подсистемы
/// </summary>
[Required]
public IEnumerable<SubsystemRecordDto> Subsystems { get; set; } = Enumerable.Empty<SubsystemRecordDto>();
}

View File

@ -1,3 +1,5 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DailyReport.Blocks.Subsystems;
/// <summary>
@ -8,6 +10,7 @@ public class SubsystemRecordDto
/// <summary>
/// Название подсистемы
/// </summary>
[Required]
public string Name { get; set; } = null!;
/// <summary>

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data.DailyReport.Blocks.WellOperation;
@ -8,13 +9,15 @@ namespace AsbCloudApp.Data.DailyReport.Blocks.WellOperation;
/// </summary>
public class WellOperationBlockDto
{
/// <summary>
/// Продолжительность бурения за секцию
/// </summary>
/// <summary>
/// Продолжительность бурения за секцию
/// </summary>
[Required]
public double SectionDrillingHours { get; set; }
/// <summary>
/// Операции проводимые на скважине
/// </summary>
[Required]
public IEnumerable<WellOperationRecordDto> WellOperations { get; set; } = Enumerable.Empty<WellOperationRecordDto>();
}

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using AsbCloudApp.Data.DailyReport.Blocks;
using AsbCloudApp.Data.DailyReport.Blocks.Sign;
@ -16,15 +17,18 @@ public class DailyReportDto : IId,
IWellRelated
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <inheritdoc/>
[Required]
public int IdWell { get; set; }
/// <summary>
/// Название скважины
/// </summary>
public string WellCaption { get; set; } = null!;
/// <summary>
/// Название скважины
/// </summary>
[Required]
public string WellCaption { get; set; } = null!;
/// <summary>
/// Название типа скважины
@ -61,25 +65,28 @@ public class DailyReportDto : IId,
/// </summary>
public double? DepthEnd { get; set; }
/// <summary>
/// Дата формирования отчёта
/// </summary>
public DateOnly Date { get; set; }
/// <summary>
/// Дата формирования отчёта
/// </summary>
[Required]
public DateOnly Date { get; set; }
/// <summary>
/// Дата последнего обновления
/// </summary>
public DateTime? DateLastUpdate { get; set; }
/// <summary>
/// Блок фактической траектории
/// </summary>
public TrajectoryBlockDto TrajectoryBlock { get; set; } = null!;
public DateTime? DateLastUpdate { get; set; }
/// <summary>
/// Фактические операции
/// </summary>
public WellOperationBlockDto FactWellOperationBlock { get; set; } = null!;
/// <summary>
/// Блок фактической траектории
/// </summary>
[Required]
public TrajectoryBlockDto TrajectoryBlock { get; set; } = null!;
/// <summary>
/// Фактические операции
/// </summary>
[Required]
public WellOperationBlockDto FactWellOperationBlock { get; set; } = null!;
/// <summary>
/// Баланс времени
@ -96,13 +103,15 @@ public class DailyReportDto : IId,
/// </summary>
public SignBlockDto? SignBlock { get; set; }
/// <summary>
/// Блок расписания
/// </summary>
public IEnumerable<ScheduleRecordDto> ScheduleBlock { get; set; } = Enumerable.Empty<ScheduleRecordDto>();
/// <summary>
/// Блок расписания
/// </summary>
[Required]
public IEnumerable<ScheduleRecordDto> ScheduleBlock { get; set; } = Enumerable.Empty<ScheduleRecordDto>();
/// <summary>
/// РТК
/// </summary>
public IEnumerable<ProcessMapWellDrillingRecordDto> ProcessMapWellDrillingBlock { get; set; } = Enumerable.Empty<ProcessMapWellDrillingRecordDto>();
/// <summary>
/// РТК
/// </summary>
[Required]
public IEnumerable<ProcessMapWellDrillingRecordDto> ProcessMapWellDrillingBlock { get; set; } = Enumerable.Empty<ProcessMapWellDrillingRecordDto>();
}

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
@ -10,11 +11,13 @@ namespace AsbCloudApp.Data
/// <summary>
/// Дата начала диапазона
/// </summary>
[Required]
public DateTime From { get; set; }
/// <summary>
/// Дата окончания диапазона
/// </summary>
[Required]
public DateTime To { get; set; }
}
}

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data
@ -21,6 +22,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// Кусты месторождения
/// </summary>
[Required]
public IEnumerable<ClusterDto> Clusters { get; set; } = Enumerable.Empty<ClusterDto>();
}
@ -32,6 +34,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// Кусты месторождения
/// </summary>
[Required]
public IEnumerable<ClusterBranchDto> Clusters { get; set; } = Enumerable.Empty<ClusterBranchDto>();
}
}

View File

@ -1,4 +1,6 @@
namespace AsbCloudApp.Data.DetectedOperation
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DetectedOperation
{
/// <summary>
/// Статистика по операциям бурильщика
@ -13,11 +15,13 @@
/// <summary>
/// Количество операции
/// </summary>
[Required]
public int Count { get; set; }
/// <summary>
/// Среднее по ключевому показателю
/// </summary>
[Required]
public double AverageValue { get; set; }
/// <summary>

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DetectedOperation
{
@ -8,54 +9,65 @@ namespace AsbCloudApp.Data.DetectedOperation
public class DetectedOperationDto : IId, IWellRelated
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <inheritdoc/>
[Required]
public int IdWell { get; set; }
/// <summary>
/// Id телеметрии
/// </summary>
[Required]
public int IdTelemetry { get; set; }
/// <summary>
/// Id названия/описания операции
/// </summary>
[Required]
public int IdCategory { get; set; }
/// <summary>
/// Id пользователя панели
/// </summary>
[Required]
public int IdUsersAtStart { get; set; }
/// <summary>
/// Дата начала операции в часовом поясе скважины
/// </summary>
[Required]
public DateTime DateStart { get; set; }
/// <summary>
/// Дата завершения операции в часовом поясе скважины
/// </summary>
[Required]
public DateTime DateEnd { get; set; }
/// <summary>
/// Продолжительность операции в минутах
/// </summary>
[Required]
public double DurationMinutes => (DateEnd - DateStart).TotalMinutes;
/// <summary>
/// глубина на начало операции, м
/// </summary>
[Required]
public double DepthStart { get; set; }
/// <summary>
/// глубина на завершения операции, м
/// </summary>
[Required]
public double DepthEnd { get; set; }
/// <summary>
/// название/описание операции
/// </summary>
[Required]
public WellOperationCategoryDto OperationCategory { get; set; } = null!;
/// <summary>
@ -76,11 +88,13 @@ namespace AsbCloudApp.Data.DetectedOperation
/// <summary>
/// Ключевой параметр операции
/// </summary>
[Required]
public double Value { get; set; }
/// <summary>
/// Флаг включенной подсистемы
/// </summary>
[Required]
public int EnabledSubsystems { get; set; }
}
}

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data.DetectedOperation
@ -11,11 +12,13 @@ namespace AsbCloudApp.Data.DetectedOperation
/// <summary>
/// Список всех операций
/// </summary>
[Required]
public IEnumerable<DetectedOperationDto> Operations { get; set; } = Enumerable.Empty<DetectedOperationDto>();
/// <summary>
/// Статистика по бурильщикам
/// </summary>
[Required]
public IEnumerable<DetectedOperationDrillersStatDto> Stats { get; set; } = Enumerable.Empty<DetectedOperationDrillersStatDto>();
}
}

View File

@ -1,4 +1,6 @@
namespace AsbCloudApp.Data.DetectedOperation
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DetectedOperation
{
/// <summary>
/// Статистика по операциям например за период.
@ -8,6 +10,7 @@
/// <summary>
/// Id названия/описания операции
/// </summary>
[Required]
public int IdCategory { get; set; }
/// <summary>
@ -18,41 +21,49 @@
/// <summary>
/// Количество операций
/// </summary>
[Required]
public int Count { get; set; }
/// <summary>
/// Среднее по ключевому показателю
/// </summary>
[Required]
public double ValueAverage { get; set; }
/// <summary>
/// Мин по ключевому показателю
/// </summary>
[Required]
public double ValueMin { get; set; }
/// <summary>
/// Макс по ключевому показателю
/// </summary>
[Required]
public double ValueMax { get; set; }
/// <summary>
/// Суммарное время операций, мин
/// </summary>
[Required]
public double MinutesTotal { get; set; }
/// <summary>
/// Мин продолжительность операции, мин
/// </summary>
[Required]
public double MinutesMin { get; set; }
/// <summary>
/// Макс продолжительность операции, мин
/// </summary>
[Required]
public double MinutesMax { get; set; }
/// <summary>
/// Средняя продолжительность операции, мин
/// </summary>
[Required]
public double MinutesAverage { get; set; }
}
}

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DrillTestReport
{
@ -10,16 +11,19 @@ namespace AsbCloudApp.Data.DrillTestReport
/// <summary>
/// Идентификатор отчета
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// Проходка
/// </summary>
[Required]
public float DrillDepth { get; set; }
/// <summary>
/// Дата и время
/// </summary>
[Required]
public DateTime DateTime { get; set; }
}
}

View File

@ -1,4 +1,6 @@
namespace AsbCloudApp.Data
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
/// <summary>
/// Описание данных для бурильщика
@ -8,16 +10,19 @@
/// <summary>
/// Идентификатор в БД
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// Имя
/// </summary>
[Required]
public string Name { get; set; } = null!;
/// <summary>
/// Фамилия
/// </summary>
[Required]
public string Surname { get; set; } = null!;
/// <summary>

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using AsbCloudApp.Data.User;
@ -12,11 +13,13 @@ namespace AsbCloudApp.Data
/// <summary>
/// Название
/// </summary>
[Required]
public string Name { get; set; } = string.Empty;
/// <summary>
/// ИД категории файла
/// </summary>
[Required]
public int IdFileCategory { get; set; }
/// <summary>
@ -24,26 +27,31 @@ namespace AsbCloudApp.Data
/// 1 - approving
/// 2 - completely approved
/// </summary>
[Required]
public int IdState { get; set; }
/// <summary>
/// Публикаторы. Могут загружать файл этой категории
/// </summary>
[Required]
public IEnumerable<UserDto> Publishers { get; set; } = Enumerable.Empty<UserDto>();
/// <summary>
/// Согласованты. Могут согласовывать загруженные файлы этой категории
/// </summary>
[Required]
public IEnumerable<UserDto> Approvers { get; set; } = Enumerable.Empty<UserDto>();
/// <summary>
/// Разрешение для текущего пользователя согласовывать документ
/// </summary>
[Required]
public bool PermissionToApprove { get; set; }
/// <summary>
/// Разрешение для текущего пользователя загружать документ
/// </summary>
[Required]
public bool PermissionToUpload { get; set; }
/// <summary>

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data
@ -14,6 +15,7 @@ namespace AsbCloudApp.Data
/// 2 - формируется (несколько минут)
/// 3 - готова
/// </summary>
[Required]
public int IdState { get; set; }
/// <summary>
@ -25,15 +27,17 @@ namespace AsbCloudApp.Data
/// Файл сформированной программы бурения
/// </summary>
public FileInfoDto? Program { get; set; }
/// <summary>
/// Разрешение редактировать части программы бурения
/// </summary>
[Required]
public bool PermissionToEdit { get; set; }
/// <summary>
/// Список частей программы бурения
/// </summary>
[Required]
public IEnumerable<DrillingProgramPartDto> Parts { get; set; } = Enumerable.Empty<DrillingProgramPartDto>();
}
@ -45,11 +49,13 @@ namespace AsbCloudApp.Data
/// <summary>
/// Текст ошибки для отображения пользователю
/// </summary>
[Required]
public string Message { get; set; } = string.Empty;
/// <summary>
/// Текст ошибки для разработчика
/// </summary>
[Required]
public string Exception { get; set; } = string.Empty;
}
}

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
@ -10,6 +11,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// ключ вопроса
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
@ -31,6 +33,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// текст вопроса
/// </summary>
[Required]
public string Question { get; set; } = null!;
/// <summary>
@ -41,21 +44,25 @@ namespace AsbCloudApp.Data
/// <summary>
/// статус вопроса
/// </summary>
[Required]
public int State { get; set; } = 0;
/// <summary>
/// Счетчик повторений вопроса
/// </summary>
[Required]
public int CounterQuestion { get; set; } = 1;
/// <summary>
/// Частый вопрос
/// </summary>
/// </summary>
[Required]
public bool IsFrequently { get; set; } = false;
/// <summary>
/// Автор вопроса
/// </summary>
[Required]
public string AurhorQuestionName { get; set; } = string.Empty;
/// <summary>

View File

@ -1,17 +1,21 @@
namespace AsbCloudApp.Data
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
/// <summary>
/// DTO категории файла
/// </summary>
public class FileCategoryDto : IId
{
/// <inheritdoc/>
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>
/// полное название
/// </summary>
public string Name { get; set; } = string.Empty;
[Required]
public string Name { get; set; } = null!;
/// <summary>
/// сокращенное название

View File

@ -12,15 +12,18 @@ namespace AsbCloudApp.Data
public class FileInfoDto : IId, IWellRelated
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <inheritdoc/>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id скважины не может быть меньше 1")]
public int IdWell { get; set; }
/// <summary>
/// id категории файла
/// </summary>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id категории файла не может быть меньше 1")]
public int IdCategory { get; set; }
@ -32,22 +35,26 @@ namespace AsbCloudApp.Data
/// <summary>
/// имя файла
/// </summary>
[Required]
[StringLength(260, MinimumLength = 1, ErrorMessage = "Допустимое имя компании от 1 до 260 символов")]
public string Name { get; set; } = null!;
/// <summary>
/// дата загрузки
/// </summary>
[Required]
public DateTime UploadDate { get; set; }
/// <summary>
/// размер в байтах
/// </summary>
[Required]
public long Size { get; set; }
/// <summary>
/// Помечен как удаленный
/// </summary>
[Required]
public bool IsDeleted { get; set; }
/// <summary>
@ -58,6 +65,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// список отметок файла
/// </summary>
[Required]
public IEnumerable<FileMarkDto> FileMarks { get; set; } = Enumerable.Empty<FileMarkDto>();
}
}

View File

@ -10,11 +10,13 @@ namespace AsbCloudApp.Data
public class FileMarkDto: IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>
/// id файла
/// </summary>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id файла не может быть меньше 1")]
public int IdFile { get; set; }
@ -22,13 +24,15 @@ namespace AsbCloudApp.Data
/// 0 - отклонен
/// 1 - согласован
/// </summary>
[Required]
[Range(0, int.MaxValue, ErrorMessage = "Id категории действия с файлом не может быть меньше 1")]
public int IdMarkType { get; set; }
/// <summary>
/// дата/время добавления.
/// Необязательно указывать в запросе на создание.
/// </summary>
[Required]
public DateTime DateCreated { get; set; }
/// <summary>
@ -40,6 +44,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// признак удаления отметки
/// </summary>
[Required]
public bool IsDeleted { get; set; }
/// <summary>

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.GTR
{
@ -10,21 +11,25 @@ namespace AsbCloudApp.Data.GTR
/// <summary>
/// Record Id
/// </summary>
[Required]
public int IdRecord { get; set; }
/// <summary>
/// Item Id
/// </summary>
[Required]
public int IdItem { get; set; }
/// <summary>
/// Дата создания записи
/// </summary>
[Required]
public DateTime Date { get; set; }
/// <summary>
/// Значение
/// </summary>
[Required]
public JsonValue Value { get; set; } = default!;
}
}

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.GTR
{
@ -11,16 +12,19 @@ namespace AsbCloudApp.Data.GTR
/// <summary>
/// Id записи
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// Дата создания записи
/// </summary>
[Required]
public DateTime Date { get; set; }
/// <summary>
/// Параметры. Ключ - id_item. ValueContainer содержит значение.
/// </summary>
[Required]
public Dictionary<int, JsonValue> Items { get; set; } = new();
}
}

View File

@ -1,4 +1,5 @@
using System.Collections;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
@ -33,11 +34,13 @@ namespace AsbCloudApp.Data
/// <summary>
/// идентификатор
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// Состояние
/// </summary>
[Required]
public JobState State { get; set; }
/// <summary>

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
@ -10,31 +11,37 @@ namespace AsbCloudApp.Data
/// <summary>
/// Идентификатор скважины
/// </summary>
[Required]
public int IdWell { get; set; }
/// <summary>
/// Время бурения
/// </summary>
[Required]
public float TotalMinutes { get; set; }
/// <summary>
/// Глубина бурения
/// </summary>
[Required]
public float Depth { get; set; }
/// <summary>
/// Идентификатор критерия бурения
/// </summary>
[Required]
public short IdFeedRegulator { get; set; }
/// <summary>
/// Наименование критерия бурения
/// </summary>
[Required]
public string NameFeedRegulator { get; set; } = string.Empty;
/// <summary>
/// Количество включений
/// </summary>
[Required]
public int NumberInclusions { get; set; }
}
}

View File

@ -10,32 +10,38 @@ namespace AsbCloudApp.Data
public class MeasureDto : IId, IWellRelated
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <inheritdoc/>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id скважины не может быть меньше 1")]
public int IdWell { get; set; }
/// <summary>
/// Id категории замера
/// </summary>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id категории не может быть меньше 1")]
public int IdCategory { get; set; }
/// <summary>
/// название категории замера
/// </summary>
[Required]
[StringLength(120, MinimumLength = 1, ErrorMessage = "Название категории не может быть больше 120 символов")]
public string CategoryName { get; set; } = string.Empty;
/// <summary>
/// отметка времени замера
/// </summary>
[Required]
public DateTime Timestamp { get; set; }
/// <summary>
/// данные замера
/// </summary>
[Required]
public Dictionary<string, object> Data { get; set; } = new();
}
}

View File

@ -9,22 +9,26 @@ namespace AsbCloudApp.Data
public class MessageDto : IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>
/// дата появления события
/// </summary>
[Required]
public DateTime DateTime { get; set; }
/// <summary>
/// категория события
/// </summary>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id категории не может быть ниже 1")]
public int CategoryId { get; set; }
/// <summary>
/// глубина забоя, при котором событие возникло
/// </summary>
[Required]
[Range(-1, int.MaxValue, ErrorMessage = "Id скважины не может быть ниже 1")]
public double WellDepth { get; set; }
@ -36,6 +40,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// текст сообщения
/// </summary>
[Required]
[StringLength(400, MinimumLength = 1, ErrorMessage = "Допустимая длина текста сообщения от 1 до 400 символов")]
public string Message { get; set; } = string.Empty;
}

View File

@ -1,3 +1,5 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data;
/// <summary>
@ -8,10 +10,12 @@ public class NotificationCategoryDto : IId
/// <summary>
/// Id категории
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// Название категории
/// </summary>
public string Name { get; set; } = null!;
/// <summary>
/// Название категории
/// </summary>
[Required]
public string Name { get; set; } = null!;
}

View File

@ -11,17 +11,20 @@ public class NotificationDto : IId
/// <summary>
/// Id уведомления
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// Id получателя уведомления
/// </summary>
public int IdUser { get; set; }
/// <summary>
/// Id категории уведомления
/// </summary>
public int IdNotificationCategory { get; set; }
/// <summary>
/// Id получателя уведомления
/// </summary>
[Required]
public int IdUser { get; set; }
/// <summary>
/// Id категории уведомления
/// </summary>
[Required]
public int IdNotificationCategory { get; set; }
/// <summary>
/// Заголовок уведомления
@ -35,10 +38,11 @@ public class NotificationDto : IId
[Required, StringLength(2048, MinimumLength = 1, ErrorMessage = "Заголовок должен мыть не меньше 1-го знака и не больше 2048")]
public string Message { get; set; } = null!;
/// <summary>
/// Дата регистрации уведомления
/// </summary>
public DateTime RegistrationDate { get; set; }
/// <summary>
/// Дата регистрации уведомления
/// </summary>
[Required]
public DateTime RegistrationDate { get; set; }
/// <summary>
/// Дата отправки уведомления
@ -50,13 +54,14 @@ public class NotificationDto : IId
/// </summary>
public DateTime? ReadDate { get; set; }
/// <summary>
/// Состояние уведомления
/// 0 - Зарегистрировано,
/// 1 - Отправлено,
/// 2 - Прочитано
/// </summary>
public int IdState
/// <summary>
/// Состояние уведомления
/// 0 - Зарегистрировано,
/// 1 - Отправлено,
/// 2 - Прочитано
/// </summary>
[Required]
public int IdState
{
get
{
@ -88,16 +93,18 @@ public class NotificationDto : IId
}
}
/// <summary>
/// Id типа доставки уведомления
/// 0 - SignalR
/// 1 - Email
/// </summary>
[Range(0,1)]
/// <summary>
/// Id типа доставки уведомления
/// 0 - SignalR
/// 1 - Email
/// </summary>
[Required]
[Range(0,1)]
public int IdTransportType { get; set; }
/// <summary>
/// DTO категории уведомления
/// </summary>
public NotificationCategoryDto NotificationCategory { get; set; } = null!;
/// <summary>
/// DTO категории уведомления
/// </summary>
[Required]
public NotificationCategoryDto NotificationCategory { get; set; } = null!;
}

View File

@ -1,4 +1,6 @@
namespace AsbCloudApp.Data
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
/// <summary>
/// Описание целевых/нормативных показателей операций
@ -8,36 +10,43 @@
/// <summary>
/// Идентификатор в БД
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// Идентификатор скважины
/// </summary>
[Required]
public int IdWell { get; set; }
/// <summary>
/// Идентификатор категории операции
/// </summary>
[Required]
public int IdOperationCategory { get; set; }
/// <summary>
/// Целевой показатель
/// </summary>
[Required]
public double TargetValue { get; set; }
/// <summary>
/// Нормативный показатель
/// </summary>
[Required]
public double StandardValue { get; set; }
/// <summary>
/// Стартовая глубина
/// </summary>
[Required]
public double DepthStart { get; set; }
/// <summary>
/// Конечная глубина
/// </summary>
[Required]
public double DepthEnd { get; set; }
}

View File

@ -9,11 +9,13 @@ namespace AsbCloudApp.Data
public class PermissionDto : IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>
/// Название
/// </summary>
[Required]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина названия разрешения от 1 до 50 символов")]
public string Name { get; set; } = string.Empty;

View File

@ -12,11 +12,13 @@ namespace AsbCloudApp.Data
/// <summary>
/// План
/// </summary>
[Required]
public double Plan { get; set; }
/// <summary>
/// Максимальное ограничение
/// </summary>
[Required]
public double LimitMax { get; set; }
/// <summary>

View File

@ -7,11 +7,13 @@ namespace AsbCloudApp.Data.ProcessMaps;
public abstract class ProcessMapPlanBaseDto : IId, IWellRelated
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>
/// Id скважины
/// </summary>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id скважины не может быть меньше 1")]
public int IdWell { get; set; }
@ -23,6 +25,7 @@ public abstract class ProcessMapPlanBaseDto : IId, IWellRelated
/// <summary>
/// Тип секции
/// </summary>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id секции скважины не может быть меньше 1")]
public int IdWellSectionType { get; set; }
@ -37,6 +40,7 @@ public abstract class ProcessMapPlanBaseDto : IId, IWellRelated
/// на начало интервала
/// </para>
/// </summary>
[Required]
[Range(0, 99999.9, ErrorMessage = "Глубина не может быть отрицательной")]
public double DepthStart { get; set; }
@ -46,6 +50,7 @@ public abstract class ProcessMapPlanBaseDto : IId, IWellRelated
/// на конец интервала
/// </para>
/// </summary>
[Required]
[Range(0, 99999.9, ErrorMessage = "Глубина не может быть отрицательной")]
public double DepthEnd { get; set; }

View File

@ -10,49 +10,58 @@ public class ProcessMapPlanWellDrillingDto : ProcessMapPlanBaseDto
/// <summary>
/// Id режима 0-ручной, 1-ротор, 2 - слайд
/// </summary>
[Required]
[Range(0, 2, ErrorMessage = "Id режима должен быть либо 0-ручной либо, 1-ротор либо 2-слайд")]
public int IdMode { get; set; }
/// <summary>
/// Нагрузка
/// </summary>
[Required]
public PlanLimitDto AxialLoad { get; set; } = null!;
/// <summary>
/// Перепад давления
/// </summary>
[Required]
public PlanLimitDto Pressure { get; set; } = null!;
/// <summary>
/// Момент на ВСП
/// </summary>
[Required]
public PlanLimitDto TopDriveTorque { get; set; } = null!;
/// <summary>
/// Обороты на ВСП
/// </summary>
[Required]
public PlanLimitDto TopDriveSpeed { get; set; } = null!;
/// <summary>
/// Расход
/// </summary>
[Required]
public PlanLimitDto Flow { get; set; } = null!;
/// <summary>
/// Плановая механическая скорость, м/ч
/// </summary>
[Required]
[Range(0, 99999.9, ErrorMessage = "Плановая механическая скорость должно быть в пределах от 0 до 99999.9")]
public double RopPlan { get; set; }
/// <summary>
/// Плановый процент использования АКБ
/// </summary>
[Required]
[Range(0, 100, ErrorMessage = "Процент использования АКБ должен быть в пределах от 0 до 100")]
public double UsageSaub { get; set; }
/// <summary>
/// Плановый процент использования spin master
/// </summary>
[Required]
[Range(0, 100, ErrorMessage = "Процент использования spin master должен быть в пределах от 0 до 100")]
public double UsageSpin { get; set; }
}

View File

@ -11,54 +11,63 @@ public class ProcessMapPlanWellReamDto : ProcessMapPlanBaseDto, IValidatableObje
/// <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; }

View File

@ -14,7 +14,8 @@ public class WellSectionPlanDto : ItemInfoDto,
/// <inheritdoc/>
public int Id { get; set; }
/// <inheritdoc/>
/// <inheritdoc/>
[Required]
public int IdWell { get; set; }
/// <summary>

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
using AsbCloudApp.Data.User;
namespace AsbCloudApp.Data
@ -11,11 +12,13 @@ namespace AsbCloudApp.Data
/// <summary>
/// Id пользователя
/// </summary>
[Required]
public int UserId { get; set; }
/// <summary>
/// логин
/// </summary>
[Required]
public string Login { get; set; } = string.Empty;
/// <summary>
@ -26,26 +29,31 @@ namespace AsbCloudApp.Data
/// <summary>
/// время выполнения запроса
/// </summary>
[Required]
public long ElapsedMs { get; set; }
/// <summary>
/// метка времени последнего запроса
/// </summary>
[Required]
public DateTime LastDate { get; set; }
/// <summary>
/// кол-во запросов
/// </summary>
[Required]
public long Requests { get; set; }
/// <summary>
/// кол-во ошибок
/// </summary>
[Required]
public long Errors { get; set; }
/// <summary>
/// DTO пользователя
/// </summary>
[Required]
public UserDto User { get; set; } = null!;
}
}

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data.SAUB
@ -12,16 +13,19 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// Идентификатор drill test
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// Время начала drill test
/// </summary>
[Required]
public DateTimeOffset TimeStampStart { get; set; }
/// <summary>
/// Глубина начала drill test
/// </summary>
[Required]
public float DepthStart { get; set; }
/// <summary>
@ -32,6 +36,7 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// Параметры теста
/// </summary>
[Required]
public IEnumerable<DrillTestParamsDto> Params { get; set; } = Enumerable.Empty<DrillTestParamsDto>();
}
}

View File

@ -1,4 +1,6 @@
namespace AsbCloudApp.Data.SAUB
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.SAUB
{
/// <summary>
/// Параметры Drill Test
@ -8,6 +10,7 @@
/// <summary>
/// Шаг
/// </summary>
[Required]
public int Step { get; set; }
/// <summary>

View File

@ -10,17 +10,20 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// id события
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// шаблон текста сообщения
/// </summary>
[Required]
public string Message { get; set; } = string.Empty;
/// <summary>
/// id категории события
/// </summary>
[Required]
[Range(0, int.MaxValue, ErrorMessage = "Id категории события не может быть отрицательным")]
public int IdCategory { get; set; }
@ -28,16 +31,18 @@ namespace AsbCloudApp.Data.SAUB
/// переменная сервера обмена информацией с полевым оборудованием
/// </summary>
public string Tag { get; set; } = string.Empty;
/// <summary>
/// тип определения наступления события
/// </summary>
[Required]
[Range(0, int.MaxValue, ErrorMessage = "Id типа события не может быть отрицательным")]
public int EventType { get; set; }
/// <summary>
/// флаг, следует ли воспроизводить звук при наступлении события
/// </summary>
[Required]
public int IdSound { get; set; }
}
}

View File

@ -1,4 +1,6 @@
namespace AsbCloudApp.Data.SAUB
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.SAUB
{
/// <summary>
/// DTO рекомендации уставок передаваемых на панель оператора
@ -13,6 +15,7 @@
/// <summary>
/// настоящее название уставки (имя переменной в панели оператора)
/// </summary>
[Required]
public string Name { get; set; } = null!;
/// <summary>
@ -28,11 +31,13 @@
/// <summary>
/// макс. значение
/// </summary>
[Required]
public double Max { get; set; } = double.MaxValue;
/// <summary>
/// мин значение
/// </summary>
[Required]
public double Min { get; set; } = double.MinValue;
}
}

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using AsbCloudApp.Data.User;
namespace AsbCloudApp.Data.SAUB
@ -10,19 +11,23 @@ namespace AsbCloudApp.Data.SAUB
public class SetpointsRequestDto : IId, IWellRelated
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <inheritdoc/>
[Required]
public int IdWell { get; set; }
/// <summary>
/// Id автора запроса
/// </summary>
[Required]
public int IdAuthor { get; set; }
/// <summary>
/// текущее состояние запроса 0: неизвестно, 1:ожидает отправки, 2: отправлено, 3: принято оператором, 4: отклонено оператором, 5: устарело
/// </summary>
[Required]
public int IdState { get; set; }
/// <summary>
@ -33,11 +38,13 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// время в секундах актуальности этого запроса
/// </summary>
[Required]
public int ObsolescenceSec { get; set; }
/// <summary>
/// набор уставок: {"название переменной панели"; "рекомендуемое значение"}
/// </summary>
[Required]
public Dictionary<string, double> Setpoints { get; set; } = new();
/// <summary>

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.SAUB
{
@ -10,6 +11,7 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// метка времени данных
/// </summary>
[Required]
public DateTime DateTime { get; set; }
/// <summary>
@ -23,7 +25,8 @@ namespace AsbCloudApp.Data.SAUB
/// 6 - "ПОДЪЕМ С ПРОРАБОТКОЙ"
/// 10 - "БЛОКИРОВКА"
/// </summary>
public short? Mode { get; set; }
[Required]
public short Mode { get; set; }
/// <summary>
/// telemetry id
@ -38,17 +41,17 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// Глубина забоя, м
/// </summary>
public float? WellDepth { get; set; }
public float WellDepth { get; set; }
/// <summary>
/// Глубина долота, м
/// </summary>
public float? BitDepth { get; set; }
public float BitDepth { get; set; }
/// <summary>
/// Талевый блок. Положение, м
/// </summary>
public float? BlockPosition { get; set; }
public float BlockPosition { get; set; }
/// <summary>
/// Талевый блок. Мин положение, м
@ -88,7 +91,7 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// Давление, атм
/// </summary>
public float? Pressure { get; set; }
public float Pressure { get; set; }
/// <summary>
/// Давление при холостом ходе, атм
@ -123,7 +126,7 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// осевая нагрузка, т
/// </summary>
public float? AxialLoad { get; set; }
public float AxialLoad { get; set; }
/// <summary>
/// задание осевой нагрузки, т
@ -138,7 +141,7 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// Вес на крюке, т
/// </summary>
public float? HookWeight { get; set; }
public float HookWeight { get; set; }
/// <summary>
/// Вес на крюке на х.х., т
@ -158,7 +161,7 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// момент ротора, кН*м
/// </summary>
public float? RotorTorque { get; set; }
public float RotorTorque { get; set; }
/// <summary>
/// момент ротора на х.х., кН*м
@ -178,7 +181,7 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// скорость ротора, об/мин
/// </summary>
public float? RotorSpeed { get; set; }
public float RotorSpeed { get; set; }
/// <summary>
/// расход, л/с

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.SAUB
{
@ -15,17 +16,9 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// Дата
/// </summary>
[Required]
public DateTime DateTime { get; set; }
/// <summary>
/// Дата
/// </summary>
public DateTime Date
{
get { return DateTime; }
set { DateTime = value; }
}
/// <summary>
/// Ограничение числа оборотов вправо
/// </summary>
@ -79,11 +72,13 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// Осцилляция включена
/// </summary>
[Required]
public bool IsOscillating => State != 0 & State != 6 & State != 7;
/// <summary>
/// Демпфирование включено
/// </summary>
[Required]
public bool IsDampening => State == 7 && (Mode & 2) > 0;
}
}

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
@ -8,34 +9,41 @@ namespace AsbCloudApp.Data
public class ScheduleDto : IId, IWellRelated
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <inheritdoc/>
[Required]
public int IdWell { get; set; }
/// <summary>
/// Идентификатор бурильщика
/// </summary>
[Required]
public int IdDriller { get; set; }
/// <summary>
/// Начало смены
/// </summary>
[Required]
public TimeDto ShiftStart { get; set; } = null!;
/// <summary>
/// Конец смены
/// </summary>
[Required]
public TimeDto ShiftEnd { get; set; } = null!;
/// <summary>
/// Начало бурения
/// </summary>
[Required]
public DateTime DrillStart { get; set; }
/// <summary>
/// Конец бурения
/// </summary>
[Required]
public DateTime DrillEnd { get; set; }
/// <summary>

View File

@ -11,42 +11,50 @@ public class SectionByOperationsDto
/// <summary>
/// Id скважины
/// </summary>
[Required]
public int IdWell { get; set; }
/// <summary>
/// 0 = план или 1 = факт или прогноз = 2
/// </summary>
[Required]
public int IdType { get; set; }
/// <summary>
/// id секции скважины
/// </summary>
[Required]
public int IdWellSectionType { get; set; }
/// <summary>
/// Глубина начала первой операции в секции, м
/// </summary>
[Required]
[Range(0, 50_000)]
public double DepthStart { get; set; }
/// <summary>
/// Дата начала первой операции в секции
/// </summary>
[Required]
public DateTimeOffset DateStart { get; set; }
/// <summary>
/// Глубина после завершения последней операции в секции, м
/// </summary>
[Required]
[Range(0, 50_000)]
public double DepthEnd { get; set; }
/// <summary>
/// Дата после завершения последней операции в секции
/// </summary>
[Required]
public DateTimeOffset DateEnd { get; set; }
/// <summary>
/// Название
/// </summary>
[Required]
public string Caption { get; set; } = string.Empty;
}

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data
@ -9,16 +10,19 @@ namespace AsbCloudApp.Data
public class StatClusterDto : IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>
/// название куста
/// </summary>
[Required]
public string Caption { get; set; } = string.Empty;
/// <summary>
/// список статистик скважин куста
/// </summary>
[Required]
public IEnumerable<StatWellDto> StatsWells { get; set; } = Enumerable.Empty<StatWellDto>();
}
}

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
@ -20,41 +21,49 @@ namespace AsbCloudApp.Data
/// <summary>
/// Глубина, м
/// </summary>
[Required]
public double WellDepthStart { get; set; }
/// <summary>
/// Глубина, м
/// </summary>
[Required]
public double WellDepthEnd { get; set; }
/// <summary>
/// Рейсовая скорость, м/час
/// </summary>
[Required]
public double RouteSpeed { get; set; }
/// <summary>
/// Механическая скорость проходки, м/час
/// </summary>
[Required]
public double Rop { get; set; }
/// <summary>
/// Скорость подъема КНБК
/// </summary>
[Required]
public double BhaUpSpeed { get; set; }
/// <summary>
/// Скорость спуска КНБК
/// </summary>
[Required]
public double BhaDownSpeed { get; set; }
/// <summary>
/// Скорость спуска обсадной колонны
/// </summary>
[Required]
public double CasingDownSpeed { get; set; }
/// <summary>
/// Непроизводительное время
/// </summary>
[Required]
public double NonProductiveHours { get; set; }
}
}

View File

@ -1,4 +1,6 @@
namespace AsbCloudApp.Data
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
/// <summary>
/// План-факт статистики по операциям за секцию скважины
@ -6,11 +8,13 @@
public class StatSectionDto : PlanFactDto<StatOperationsDto>, IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>
/// название секции
/// </summary>
[Required]
public string Caption { get; set; } = string.Empty;
}
}

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data
@ -10,46 +11,55 @@ namespace AsbCloudApp.Data
public class StatWellDto : IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>
/// название
/// </summary>
[Required]
public string Caption { get; set; } = string.Empty;
/// <summary>
/// тип скважины
/// </summary>
[Required]
public string WellType { get; set; } = string.Empty;
/// <summary>
/// ИД состояния скважины
/// </summary>
[Required]
public int IdState { get; set; }
/// <summary>
/// текст состояния скважины
/// </summary>
[Required]
public string State { get; set; } = string.Empty;
/// <summary>
/// дата прихода последней телеметрии
/// </summary>
[Required]
public DateTime LastTelemetryDate { get; set; }
/// <summary>
/// Статистика по секциям
/// </summary>
[Required]
public IEnumerable<StatSectionDto> Sections { get; set; } = Enumerable.Empty<StatSectionDto>();
/// <summary>
/// статистика за всю скважину
/// </summary>
[Required]
public PlanFactDto<StatOperationsDto> Total { get; set; } = new();
/// <summary>
/// компании участвующие в строительстве скважины
/// </summary>
[Required]
public IEnumerable<CompanyDto> Companies { get; set; } = Enumerable.Empty<CompanyDto>();
/// <summary>

View File

@ -1,4 +1,6 @@
namespace AsbCloudApp.Data.Subsystems;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.Subsystems;
/// <summary>
/// Статистика наработки подсистем по активным скважинам
@ -8,6 +10,7 @@ public class SubsystemActiveWellStatDto
/// <summary>
/// Активная скважина
/// </summary>
[Required]
public WellInfoDto Well { get; set; } = null!;
/// <summary>
/// Наработки подсистемы АПД

View File

@ -1,4 +1,6 @@
namespace AsbCloudApp.Data.Subsystems
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.Subsystems
{
/// <summary>
/// Описание параметров подсистемы
@ -8,14 +10,17 @@
/// <summary>
/// Идентификатор подсистемы
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// Наименование подсистемы
/// </summary>
[Required]
public string Name { get; set; } = null!;
/// <summary>
/// Детальное описание подсистемы
/// </summary>
[Required]
public string Description { get; set; } = string.Empty;
}
}

View File

@ -1,42 +1,52 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.Subsystems
{
/// <summary>
/// Статистика подсистемы
/// </summary>
public class SubsystemStatDto
{
{
/// <summary>
/// Идентификатор подсистемы
/// </summary>
[Required]
public int IdSubsystem { get; set; }
/// <summary>
/// Название подсистемы
/// </summary>
[Required]
public string SubsystemName { get; set; } = null!;
/// <summary>
/// наработка подсистемы
/// </summary>
[Required]
public double UsedTimeHours { get; set; }
/// <summary>
/// коэффициент использования
/// </summary>
[Required]
public double KUsage { get; set; }
/// <summary>
/// сумма изменения глубин при включеной подсистеме
/// </summary>
[Required]
public double SumDepthInterval { get; set; }
/// <summary>
/// сумма проходок автоопределенных операций выполняемых подсистемой
/// </summary>
[Required]
public double SumOperationDepthInterval { get; set; }
/// <summary>
/// сумма продолжительности автоопределенных операций выполняемых подсистемой
/// </summary>
[Required]
public double SumOperationDurationHours { get; set; }
/// <summary>
/// количество включений подсистемы
/// </summary>
[Required]
public int OperationCount { get; set; }
}
}

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.WITS
{
@ -8,17 +9,20 @@ namespace AsbCloudApp.Data.WITS
public abstract class RecordBaseDto : IId, ITelemetryData
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <inheritdoc/>
public int IdTelemetry { get; set; }
/// <inheritdoc/>
[Required]
public DateTime DateTime { get; set; }
/// <summary>
/// îòìåòêà âðåìåíè
/// </summary>
[Required]
public int TimeStamp { get; set; }
/// <summary>
@ -33,7 +37,7 @@ namespace AsbCloudApp.Data.WITS
/// Length = 16,
/// ValueType = "A"
/// </summary>
[Required]
public string Wellid { get; set; } = string.Empty;
/// <summary>

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data
@ -11,16 +12,19 @@ namespace AsbCloudApp.Data
/// <summary>
/// Скважина
/// </summary>
[Required]
public int IdWell { get; set; }
/// <summary>
/// Разрешение для текущего пользователя добавлять ответственных
/// </summary>
[Required]
public bool PermissionToSetPubliher { get; set; } = true;
/// <summary>
/// Документ дела скважины
/// </summary>
[Required]
public IEnumerable<WellFinalDocumentDto> WellFinalDocuments { get; set; } = Enumerable.Empty<WellFinalDocumentDto>();
}

View File

@ -1,4 +1,6 @@
namespace AsbCloudApp.Data
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
/// <summary>
/// DTO элемент композитной скважины
@ -6,16 +8,19 @@
public class WellCompositeDto : IWellRelated
{
/// <inheritdoc/>
[Required]
public int IdWell { get; set; }
/// <summary>
/// id скважины входящей в композитную для этой
/// </summary>
[Required]
public int IdWellSrc { get; set; }
/// <summary>
/// id секции скважины входящей в композитную для этой
/// </summary>
[Required]
public int IdWellSectionType { get; set; }
}
}

View File

@ -19,6 +19,7 @@ namespace AsbCloudApp.Data
/// 1 - в работе,
/// 2 - завершена
/// </summary>
[Required]
public int IdState { get; set; }
}

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using AsbCloudApp.Data.User;
@ -12,6 +13,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// Идентификатор категории файла
/// </summary>
[Required]
public int IdCategory { get; set; }
/// <summary>
@ -22,16 +24,19 @@ namespace AsbCloudApp.Data
/// <summary>
/// Разрешение для текущего пользователя загружать документ
/// </summary>
[Required]
public bool PermissionToUpload { get; set; } = false;
/// <summary>
/// Список ответственных
/// </summary>
[Required]
public IEnumerable<UserDto> Publishers { get; set; } = Enumerable.Empty<UserDto>();
/// <summary>
/// Количество файлов этой категории загруженных ранее
/// </summary>
[Required]
public int FilesCount { get; set; }
/// <summary>

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data
@ -11,11 +12,13 @@ namespace AsbCloudApp.Data
/// <summary>
/// Идентификатор категории файла
/// </summary>
[Required]
public int IdCategory { get; set; }
/// <summary>
/// Список ответственных
/// </summary>
[Required]
public IEnumerable<int> IdsPublishers { get; set; } = Enumerable.Empty<int>();
}
}

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
@ -10,16 +11,19 @@ namespace AsbCloudApp.Data
/// <summary>
/// Вышка
/// </summary>
[Required]
public int IdWell { get; set; }
/// <summary>
/// Наименование категории файла
/// </summary>
[Required]
public int IdCategory { get; set; }
/// <summary>
/// Файлы
/// </summary>
[Required]
public IEnumerable<FileInfoDto> Files { get; set; } = null!;
}
}

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;
namespace AsbCloudApp.Data;
@ -10,6 +11,7 @@ public class WellGroupOpertionDto
/// <summary>
/// Id категории
/// </summary>
[Required]
public int IdCategory { get; set; }
/// <summary>
@ -26,11 +28,13 @@ public class WellGroupOpertionDto
/// <summary>
/// Количество операций
/// </summary>
[Required]
public int Count { get; set; }
/// <summary>
/// Суммарное время операций, мин
/// </summary>
[Required]
public double TotalMinutes { get; set; }
/// <summary>
@ -51,6 +55,7 @@ public class WellGroupOpertionDto
/// <summary>
/// Общая глубина забоя
/// </summary>
[Required]
public double DeltaDepth { get; set; }
/// <summary>

View File

@ -8,6 +8,7 @@ namespace AsbCloudApp.Data
public class WellOperationCategoryDto : IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data
@ -14,6 +15,7 @@ namespace AsbCloudApp.Data
/// <summary>
/// коллекция плановых операций
/// </summary>
[Required]
public IEnumerable<WellOperationDto> WellOperationsPlan { get; set; } = Enumerable.Empty<WellOperationDto>();
/// <summary>

View File

@ -1,3 +1,5 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data;
/// <summary>
@ -5,18 +7,21 @@ namespace AsbCloudApp.Data;
/// </summary>
public class WellSectionTypeDto : IId
{
/// <summary>
/// Id секции
/// </summary>
/// <summary>
/// Id секции
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// Название типа секции
/// </summary>
[Required]
public string Caption { get; set; } = null!;
/// <summary>
/// Порядок
/// </summary>
[Required]
public float Order { get; set; }
}

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data;
@ -15,30 +16,36 @@ public class WellboreDto
/// <summary>
/// Идентификатор
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// Название
/// </summary>
[Required]
public string Name { get; set; } = null!;
/// <summary>
/// Начальная глубина ствола
/// </summary>
[Required]
public double DepthStart { get; set; }
/// <summary>
/// Конечная глубина скважины
/// </summary>
[Required]
public double DepthEnd { get; set; }
/// <summary>
/// Дата начала первой операции
/// </summary>
[Required]
public DateTimeOffset DateStart { get; set; }
/// <summary>
/// Дата завершения последней операции
/// </summary>
[Required]
public DateTimeOffset DateEnd { get; set; }
}

View File

@ -6,6 +6,8 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
namespace AsbCloudInfrastructure.Repository;
@ -14,10 +16,13 @@ public class FileStorageRepository : IFileStorageRepository
/// <summary>
/// Директория хранения файлов
/// </summary>
private readonly string RootPath = "files";
public FileStorageRepository()
public string RootPath { get; }
public FileStorageRepository(IConfiguration configuration)
{
RootPath = configuration.GetValue<string>("ContentPath") ?? "../data";
}
public async Task SaveFileAsync(string filePathRec, Stream fileStreamSrc, CancellationToken token)

View File

@ -7,7 +7,6 @@ using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Repositories;
using AsbCloudApp.Requests;
using AsbCloudApp.Services;
using AsbCloudInfrastructure.Services.SAUB;
namespace AsbCloudInfrastructure.Services;
@ -68,10 +67,10 @@ public class WellboreService : IWellboreService
if (dataCache is not null)
{
wellbore.DateStart = dataCache.Value.First.DateTime;
wellbore.DepthStart = dataCache.Value.First.WellDepth!.Value;
wellbore.DepthStart = dataCache.Value.First.WellDepth;
wellbore.DateEnd = dataCache.Value.Last.DateTime;
wellbore.DepthEnd = dataCache.Value.Last.WellDepth!.Value;
wellbore.DepthEnd = dataCache.Value.Last.WellDepth;
}
}
@ -124,7 +123,7 @@ public class WellboreService : IWellboreService
if (dataCache is not null)
{
wellbore.DateEnd = dataCache.Value.Last.DateTime;
wellbore.DepthEnd = dataCache.Value.Last.WellDepth!.Value;
wellbore.DepthEnd = dataCache.Value.Last.WellDepth;
}
}
}

View File

@ -13,9 +13,7 @@
"LocalConnection": "Host=localhost;Database=postgres;Username=postgres;Password=q;Persist Security Info=True"
},
"AllowedHosts": "*",
//"userLimits": {
// "parallelRequestsToController": 5
//},
"ContentPath": "../data",
"email": {
"smtpServer": "smtp.timeweb.ru",
"sender": "bot@digitaldrilling.ru",
@ -28,28 +26,5 @@
},
"DirectoryNameHelpPageFiles": "helpPages",
"DirectoryManualFiles": "manuals",
"Urls": "http://0.0.0.0:5000" //;https://0.0.0.0:5001" //,
// See https man: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel/endpoints?view=aspnetcore-6.0
//"Kestrel": {
// "Endpoints": {
// "Http": {
// "Url": "http://0.0.0.0:5000"
// },
// "Https": {
// "Url": "https://0.0.0.0:5001",
// "Certificate": {
// // use store
// "Subject": "localhost",
// "Store": "My",
// "Location": "CurrentUser",
// "AllowInvalid": true
// // use file
// "Path": "<path to .pem/.crt file>",
// "KeyPath": "<path to .key file>",
// "Password": "<certificate password>"
// }
// }
// }
//}
"Urls": "http://0.0.0.0:5000"
}