namespace to fileScope

This commit is contained in:
ngfrolov 2024-08-19 10:01:07 +05:00
parent 6c64321c30
commit cb20a81cb0
Signed by untrusted user who does not match committer: ng.frolov
GPG Key ID: E99907A0357B29A7
325 changed files with 21759 additions and 22150 deletions

View File

@ -2,53 +2,52 @@ using AsbCloudApp.Data;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
namespace AsbCloudApp.Comparators
namespace AsbCloudApp.Comparators;
/// <summary>
/// Компаратор для сравнения сущностей по ID
/// </summary>
public class ComparerIId : IComparer<IId>, IEqualityComparer<IId>
{
private static readonly ComparerIId instance = new();
private ComparerIId() { }
/// <summary>
/// Компаратор для сравнения сущностей по ID
/// Singleton ссылка
/// </summary>
public class ComparerIId : IComparer<IId>, IEqualityComparer<IId>
{
private static readonly ComparerIId instance = new();
private ComparerIId() { }
/// <returns></returns>
public static ComparerIId GetInstance() => instance;
/// <summary>
/// Singleton ссылка
/// </summary>
/// <returns></returns>
public static ComparerIId GetInstance() => instance;
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public int Compare(IId? x, IId? y)
=> (x?.Id??0).CompareTo(y?.Id??0);
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public int Compare(IId? x, IId? y)
=> (x?.Id??0).CompareTo(y?.Id??0);
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public bool Equals(IId? x, IId? y)
{
if (x is not null && y is not null)
return x.Id == y.Id;
return x == y;
}
/// <summary>
///
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public int GetHashCode([DisallowNull] IId obj) =>
obj.GetHashCode();
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public bool Equals(IId? x, IId? y)
{
if (x is not null && y is not null)
return x.Id == y.Id;
return x == y;
}
/// <summary>
///
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public int GetHashCode([DisallowNull] IId obj) =>
obj.GetHashCode();
}

View File

@ -1,21 +1,20 @@
using AsbCloudApp.Data.SAUB;
using System.Collections.Generic;
namespace AsbCloudApp.Comparators
namespace AsbCloudApp.Comparators;
/// <inheritdoc/>
public class TelemetryUserDtoComparer : IEqualityComparer<TelemetryUserDto>
{
/// <inheritdoc/>
public class TelemetryUserDtoComparer : IEqualityComparer<TelemetryUserDto>
public bool Equals(TelemetryUserDto? prevUser, TelemetryUserDto? nextUser)
{
/// <inheritdoc/>
public bool Equals(TelemetryUserDto? prevUser, TelemetryUserDto? nextUser)
{
if (prevUser is not null && nextUser is not null)
return prevUser.Id == nextUser.Id;
if (prevUser is not null && nextUser is not null)
return prevUser.Id == nextUser.Id;
return prevUser == nextUser;
}
/// <inheritdoc/>
public int GetHashCode(TelemetryUserDto user) => user.Id.GetHashCode();
return prevUser == nextUser;
}
/// <inheritdoc/>
public int GetHashCode(TelemetryUserDto user) => user.Id.GetHashCode();
}

View File

@ -1,196 +1,195 @@
using System.Linq;
namespace System.Collections.Generic
namespace System.Collections.Generic;
/// <summary>
/// Цикличный массив
/// </summary>
/// <typeparam name="T"></typeparam>
public class CyclicArray<T> : IEnumerable<T>
{
readonly T[] array;
int used, current = -1;
/// <summary>
/// Цикличный массив
/// constructor
/// </summary>
/// <typeparam name="T"></typeparam>
public class CyclicArray<T> : IEnumerable<T>
/// <param name="capacity"></param>
public CyclicArray(int capacity)
{
readonly T[] array;
int used, current = -1;
array = new T[capacity];
}
/// <summary>
/// constructor
/// </summary>
/// <param name="capacity"></param>
public CyclicArray(int capacity)
/// <summary>
/// Количество элементов в массиве
/// </summary>
public int Count => used;
/// <summary>
/// Добавить новый элемент<br/>
/// Если capacity достигнуто, то вытеснит самый первый элемент
/// </summary>
/// <param name="item"></param>
public void Add(T item)
{
current = (++current) % array.Length;
array[current] = item;
if (used < array.Length)
used++;
UpdatedInvoke(current, item);
}
/// <summary>
/// Добавить новые элементы.<br/>
/// Если capacity достигнуто, то вытеснит самые первые элементы.<br/>
/// Не вызывает Updated!
/// </summary>
/// <param name="items"></param>
public void AddRange(IEnumerable<T> items)
{
var capacity = array.Length;
var newItems = items.TakeLast(capacity).ToArray();
if (newItems.Length == capacity)
{
array = new T[capacity];
Array.Copy(newItems, array, capacity);
current = capacity - 1;
}
/// <summary>
/// Количество элементов в массиве
/// </summary>
public int Count => used;
/// <summary>
/// Добавить новый элемент<br/>
/// Если capacity достигнуто, то вытеснит самый первый элемент
/// </summary>
/// <param name="item"></param>
public void Add(T item)
else
{
current = (++current) % array.Length;
array[current] = item;
if (used < array.Length)
used++;
UpdatedInvoke(current, item);
}
/// <summary>
/// Добавить новые элементы.<br/>
/// Если capacity достигнуто, то вытеснит самые первые элементы.<br/>
/// Не вызывает Updated!
/// </summary>
/// <param name="items"></param>
public void AddRange(IEnumerable<T> items)
{
var capacity = array.Length;
var newItems = items.TakeLast(capacity).ToArray();
if (newItems.Length == capacity)
current = (++current) % capacity;
var countToEndOfArray = capacity - current;
if (newItems.Length <= countToEndOfArray)
{
Array.Copy(newItems, array, capacity);
current = capacity - 1;
Array.Copy(newItems, 0, array, current, newItems.Length);
current += newItems.Length - 1;
}
else
{
current = (++current) % capacity;
var countToEndOfArray = capacity - current;
if (newItems.Length <= countToEndOfArray)
{
Array.Copy(newItems, 0, array, current, newItems.Length);
current += newItems.Length - 1;
}
else
{
var firstStepLength = countToEndOfArray;
Array.Copy(newItems, 0, array, current, firstStepLength);
var secondStepCount = newItems.Length - firstStepLength;
Array.Copy(newItems, firstStepLength, array, 0, secondStepCount);
current = secondStepCount - 1;
}
}
if (used < capacity)
{
used += newItems.Length;
used = used > capacity ? capacity : used;
var firstStepLength = countToEndOfArray;
Array.Copy(newItems, 0, array, current, firstStepLength);
var secondStepCount = newItems.Length - firstStepLength;
Array.Copy(newItems, firstStepLength, array, 0, secondStepCount);
current = secondStepCount - 1;
}
}
/// <summary>
/// Индекс
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public T this[int index]
if (used < capacity)
{
used += newItems.Length;
used = used > capacity ? capacity : used;
}
}
/// <summary>
/// Индекс
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public T this[int index]
{
get
{
if (used == 0)
throw new IndexOutOfRangeException();
var i = (current + 1 + index) % used;
return array[i];
}
set
{
var devider = used > 0 ? used : array.Length;
var i = (current + 1 + index) % devider;
array[i] = value;
UpdatedInvoke(current, value);
}
}
/// <summary>
/// событие на изменение элемента в массиве
/// </summary>
public event EventHandler<(int index, T value)>? Updated;
private void UpdatedInvoke(int index, T value)
{
Updated?.Invoke(this, (index, value));
}
/// <summary>
/// Агрегирование значения по всему массиву
/// </summary>
/// <typeparam name="Tout"></typeparam>
/// <param name="func"></param>
/// <param name="startValue"></param>
/// <returns></returns>
public Tout Aggregate<Tout>(Func<T, Tout, Tout> func, Tout startValue)
{
Tout result = startValue;
for (int i = 0; i < used; i++)
result = func(this[i], result);
return result;
}
/// <inheritdoc/>
public IEnumerator<T> GetEnumerator()
=> new CyclycListEnumerator<T>(array, current, used);
/// <inheritdoc/>
IEnumerator IEnumerable.GetEnumerator()
=> GetEnumerator();
class CyclycListEnumerator<Te> : IEnumerator<Te>
{
private readonly Te[] array;
private readonly int used;
private readonly int first;
private int current = -1;
public CyclycListEnumerator(Te[] array, int first, int used)
{
this.array = new Te[array.Length];
array.CopyTo(this.array, 0);
this.used = used;
this.first = first;
}
public Te Current
{
get
{
if (used == 0)
throw new IndexOutOfRangeException();
var i = (current + 1 + index) % used;
return array[i];
}
set
{
var devider = used > 0 ? used : array.Length;
var i = (current + 1 + index) % devider;
array[i] = value;
UpdatedInvoke(current, value);
}
}
/// <summary>
/// событие на изменение элемента в массиве
/// </summary>
public event EventHandler<(int index, T value)>? Updated;
private void UpdatedInvoke(int index, T value)
{
Updated?.Invoke(this, (index, value));
}
/// <summary>
/// Агрегирование значения по всему массиву
/// </summary>
/// <typeparam name="Tout"></typeparam>
/// <param name="func"></param>
/// <param name="startValue"></param>
/// <returns></returns>
public Tout Aggregate<Tout>(Func<T, Tout, Tout> func, Tout startValue)
{
Tout result = startValue;
for (int i = 0; i < used; i++)
result = func(this[i], result);
return result;
}
/// <inheritdoc/>
public IEnumerator<T> GetEnumerator()
=> new CyclycListEnumerator<T>(array, current, used);
/// <inheritdoc/>
IEnumerator IEnumerable.GetEnumerator()
=> GetEnumerator();
class CyclycListEnumerator<Te> : IEnumerator<Te>
{
private readonly Te[] array;
private readonly int used;
private readonly int first;
private int current = -1;
public CyclycListEnumerator(Te[] array, int first, int used)
{
this.array = new Te[array.Length];
array.CopyTo(this.array, 0);
this.used = used;
this.first = first;
}
public Te Current
{
get
if (IsCurrentOk())
{
if (IsCurrentOk())
{
var i = (current + first + 1) % used;
return array[i];
}
else
return default!;
var i = (current + first + 1) % used;
return array[i];
}
}
object? IEnumerator.Current => Current;
public void Dispose() {; }
private bool IsCurrentOk() => current >= 0 && current < used;
public bool MoveNext()
{
if (current < used)
current++;
return IsCurrentOk();
}
public void Reset()
{
current = -1;
else
return default!;
}
}
/// <summary>
/// Очистить весь массив
/// </summary>
public void Clear()
object? IEnumerator.Current => Current;
public void Dispose() {; }
private bool IsCurrentOk() => current >= 0 && current < used;
public bool MoveNext()
{
if (current < used)
current++;
return IsCurrentOk();
}
public void Reset()
{
used = 0;
current = -1;
}
}
/// <summary>
/// Очистить весь массив
/// </summary>
public void Clear()
{
used = 0;
current = -1;
}
}

View File

@ -1,24 +1,23 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO для авторизации
/// </summary>
public class AuthDto
{
/// <summary>
/// DTO для авторизации
/// Имя пользователя для входа
/// </summary>
public class AuthDto
{
/// <summary>
/// Имя пользователя для входа
/// </summary>
[Required(ErrorMessage = "Логин не должен быть пустым")]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина логина от 1 до 50 символов")]
public string Login { get; set; } = null!;
[Required(ErrorMessage = "Логин не должен быть пустым")]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина логина от 1 до 50 символов")]
public string Login { get; set; } = null!;
/// <summary>
/// Пароль пользователя для входа
/// </summary>
[Required(ErrorMessage = "Пароль не должен быть пустым")]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина пароля от 1 до 50 символов")]
public string Password { get; set; } = null!;
}
/// <summary>
/// Пароль пользователя для входа
/// </summary>
[Required(ErrorMessage = "Пароль не должен быть пустым")]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина пароля от 1 до 50 символов")]
public string Password { get; set; } = null!;
}

View File

@ -1,206 +1,205 @@
using System;
using System.Diagnostics;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Информация о фоновой работе
/// </summary>
public class BackgroundWorkDto
{
/// <summary>
/// Информация о фоновой работе
/// Идентификатор работы. Должен быть уникальным. Используется в логах и передается в колбэки.
/// </summary>
public class BackgroundWorkDto
public string Id { get; init; } = null!;
/// <summary>
/// Класс описания состояния
/// </summary>
public class CurrentStateInfo
{
private string state = "start";
/// <summary>
/// Время последнего запуска
/// </summary>
public DateTime Start { get; } = DateTime.Now;
/// <summary>
/// Текущее время выполнения
/// </summary>
public TimeSpan ExecutionTime => DateTime.Now - Start;
/// <summary>
/// Текстовое описание того, что происходит в задаче.
/// </summary>
public string State
{
get => state;
internal set
{
state = value;
StateUpdate = DateTime.Now;
}
}
/// <summary>
/// Прогресс
/// </summary>
public double Progress { get; internal set; } = 0;
/// <summary>
/// Время последнего запуска
/// </summary>
public DateTime StateUpdate { get; private set; } = DateTime.Now;
}
/// <summary>
/// Инфо о последней ошибке
/// </summary>
public class LastErrorInfo : LastCompleteInfo
{
/// <summary>
/// Идентификатор работы. Должен быть уникальным. Используется в логах и передается в колбэки.
///
/// </summary>
public string Id { get; init; } = null!;
/// <summary>
/// Класс описания состояния
/// </summary>
public class CurrentStateInfo
/// <param name="state"></param>
/// <param name="errorText"></param>
public LastErrorInfo(CurrentStateInfo state, string errorText)
: base(state)
{
private string state = "start";
/// <summary>
/// Время последнего запуска
/// </summary>
public DateTime Start { get; } = DateTime.Now;
/// <summary>
/// Текущее время выполнения
/// </summary>
public TimeSpan ExecutionTime => DateTime.Now - Start;
/// <summary>
/// Текстовое описание того, что происходит в задаче.
/// </summary>
public string State
{
get => state;
internal set
{
state = value;
StateUpdate = DateTime.Now;
}
}
/// <summary>
/// Прогресс
/// </summary>
public double Progress { get; internal set; } = 0;
/// <summary>
/// Время последнего запуска
/// </summary>
public DateTime StateUpdate { get; private set; } = DateTime.Now;
ErrorText = errorText;
}
/// <summary>
/// Инфо о последней ошибке
/// </summary>
public class LastErrorInfo : LastCompleteInfo
{
/// <summary>
///
/// </summary>
/// <param name="state"></param>
/// <param name="errorText"></param>
public LastErrorInfo(CurrentStateInfo state, string errorText)
: base(state)
{
ErrorText = errorText;
}
/// <summary>
/// Последняя ошибка
/// </summary>
public string ErrorText { get; init; } = null!;
}
/// <summary>
/// Инфо о последнем завершении
/// </summary>
public class LastCompleteInfo
{
/// <summary>
/// Дата запуска
/// </summary>
public DateTime Start { get; init; }
/// <summary>
/// Дата завершения
/// </summary>
public DateTime End { get; init; }
/// <summary>
/// Продолжительность последнего выполнения
/// </summary>
public TimeSpan ExecutionTime => End - Start;
/// <summary>
/// Состояние на момент завершения
/// </summary>
public string State { get; init; }
/// <summary>
/// ctor
/// </summary>
/// <param name="state"></param>
public LastCompleteInfo(CurrentStateInfo state)
{
Start = state.Start;
End = DateTime.Now;
State = state.State;
}
}
/// <summary>
/// Текущее состояние
/// </summary>
public CurrentStateInfo? CurrentState { get; private set; }
/// <summary>
/// Последняя ошибка
/// </summary>
public LastErrorInfo? LastError { get; private set; }
public string ErrorText { get; init; } = null!;
}
/// <summary>
/// Инфо о последнем завершении
/// </summary>
public class LastCompleteInfo
{
/// <summary>
/// Дата запуска
/// </summary>
public DateTime Start { get; init; }
/// <summary>
/// Последняя завершенная
/// Дата завершения
/// </summary>
public LastCompleteInfo? LastComplete { get; private set; }
public DateTime End { get; init; }
/// <summary>
/// Кол-во запусков
/// Продолжительность последнего выполнения
/// </summary>
public int CountStart { get; private set; }
public TimeSpan ExecutionTime => End - Start;
/// <summary>
/// Кол-во завершений
/// Состояние на момент завершения
/// </summary>
public int CountComplete { get; private set; }
public string State { get; init; }
/// <summary>
/// Кол-во ошибок
/// ctor
/// </summary>
public int CountErrors { get; private set; }
/// <summary>
/// Максимально допустимое время выполнения работы
/// </summary>
public TimeSpan Timeout { get; set; } = TimeSpan.FromMinutes(1);
private string WorkNameForTrace => $"Backgroud work:\"{Id}\"";
/// <summary>
/// Обновления состояния при запуске работы
/// </summary>
protected void SetStatusStart()
/// <param name="state"></param>
public LastCompleteInfo(CurrentStateInfo state)
{
CurrentState = new();
CountStart++;
Trace.TraceInformation($"{WorkNameForTrace} state: starting");
}
/// <summary>
/// Обновления состояния в процессе работы
/// </summary>
protected void UpdateStatus(string newState, double? progress)
{
if (CurrentState is null)
return;
CurrentState.State = newState;
if (progress.HasValue)
CurrentState.Progress = progress.Value;
Trace.TraceInformation($"{WorkNameForTrace} state[{100*progress:#}%]: {newState}");
}
/// <summary>
/// Обновления состояния при успешном завершении работы
/// </summary>
protected void SetStatusComplete()
{
CountComplete++;
if (CurrentState is null)
return;
LastComplete = new(CurrentState);
CurrentState = null;
Trace.TraceInformation($"{WorkNameForTrace} state: completed");
}
/// <summary>
/// Обновления состояния при ошибке в работе
/// </summary>
protected void SetLastError(string errorMessage)
{
CountErrors++;
if (CurrentState is null)
return;
LastError = new LastErrorInfo(CurrentState, errorMessage);
CurrentState = null;
Trace.TraceError($"{WorkNameForTrace} throw exception[{CountErrors}]: {errorMessage}");
Start = state.Start;
End = DateTime.Now;
State = state.State;
}
}
/// <summary>
/// Текущее состояние
/// </summary>
public CurrentStateInfo? CurrentState { get; private set; }
/// <summary>
/// Последняя ошибка
/// </summary>
public LastErrorInfo? LastError { get; private set; }
/// <summary>
/// Последняя завершенная
/// </summary>
public LastCompleteInfo? LastComplete { get; private set; }
/// <summary>
/// Кол-во запусков
/// </summary>
public int CountStart { get; private set; }
/// <summary>
/// Кол-во завершений
/// </summary>
public int CountComplete { get; private set; }
/// <summary>
/// Кол-во ошибок
/// </summary>
public int CountErrors { get; private set; }
/// <summary>
/// Максимально допустимое время выполнения работы
/// </summary>
public TimeSpan Timeout { get; set; } = TimeSpan.FromMinutes(1);
private string WorkNameForTrace => $"Backgroud work:\"{Id}\"";
/// <summary>
/// Обновления состояния при запуске работы
/// </summary>
protected void SetStatusStart()
{
CurrentState = new();
CountStart++;
Trace.TraceInformation($"{WorkNameForTrace} state: starting");
}
/// <summary>
/// Обновления состояния в процессе работы
/// </summary>
protected void UpdateStatus(string newState, double? progress)
{
if (CurrentState is null)
return;
CurrentState.State = newState;
if (progress.HasValue)
CurrentState.Progress = progress.Value;
Trace.TraceInformation($"{WorkNameForTrace} state[{100*progress:#}%]: {newState}");
}
/// <summary>
/// Обновления состояния при успешном завершении работы
/// </summary>
protected void SetStatusComplete()
{
CountComplete++;
if (CurrentState is null)
return;
LastComplete = new(CurrentState);
CurrentState = null;
Trace.TraceInformation($"{WorkNameForTrace} state: completed");
}
/// <summary>
/// Обновления состояния при ошибке в работе
/// </summary>
protected void SetLastError(string errorMessage)
{
CountErrors++;
if (CurrentState is null)
return;
LastError = new LastErrorInfo(CurrentState, errorMessage);
CurrentState = null;
Trace.TraceError($"{WorkNameForTrace} throw exception[{CountErrors}]: {errorMessage}");
}
}

View File

@ -2,39 +2,38 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO кустов
/// </summary>
public class ClusterDto : MapPointBaseDto
{
/// <summary>
/// DTO кустов
/// ИД месторождения, необязательный
/// </summary>
public class ClusterDto : MapPointBaseDto
{
/// <summary>
/// ИД месторождения, необязательный
/// </summary>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id месторождения не может быть меньше 1")]
public int IdDeposit { get; set; }
/// <summary>
/// DTO месторождения
/// </summary>
public DepositBaseDto? Deposit { get; set; }
/// <summary>
/// Список скважин куста
/// </summary>
public IEnumerable<WellDto> Wells { get; set; } = Enumerable.Empty<WellDto>();
}
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id месторождения не может быть меньше 1")]
public int IdDeposit { get; set; }
/// <summary>
/// DTO кустов
/// DTO месторождения
/// </summary>
public class ClusterBranchDto : MapPointBaseDto
{
/// <summary>
/// Список скважин куста
/// </summary>
public IEnumerable<WellMapInfoWithTelemetryStat> Wells { get; set; } = Enumerable.Empty<WellMapInfoWithTelemetryStat>();
}
public DepositBaseDto? Deposit { get; set; }
/// <summary>
/// Список скважин куста
/// </summary>
public IEnumerable<WellDto> Wells { get; set; } = Enumerable.Empty<WellDto>();
}
/// <summary>
/// DTO кустов
/// </summary>
public class ClusterBranchDto : MapPointBaseDto
{
/// <summary>
/// Список скважин куста
/// </summary>
public IEnumerable<WellMapInfoWithTelemetryStat> Wells { get; set; } = Enumerable.Empty<WellMapInfoWithTelemetryStat>();
}

View File

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

View File

@ -1,33 +1,32 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO компании
/// </summary>
public class CompanyDto : IId
{
/// <inheritdoc/>
public int Id { get; set; }
/// <summary>
/// DTO компании
/// Название
/// </summary>
public class CompanyDto : IId
{
/// <inheritdoc/>
public int Id { get; set; }
[Required]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимое имя компании от 1 до 50 символов")]
public string Caption { get; set; } = null!;
/// <summary>
/// Название
/// </summary>
[Required]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимое имя компании от 1 до 50 символов")]
public string Caption { get; set; } = null!;
/// <summary>
/// ИД типа компании
/// </summary>
[Required]
public int IdCompanyType { get; set; }
/// <summary>
/// ИД типа компании
/// </summary>
[Required]
public int IdCompanyType { get; set; }
/// <summary>
/// Название типа компании
/// </summary>
[StringLength(255, MinimumLength = 1, ErrorMessage = "Допустимое имя типа компании от 1 до 255 символов")]
public string? CompanyTypeCaption { get; set; } = null!;
/// <summary>
/// Название типа компании
/// </summary>
[StringLength(255, MinimumLength = 1, ErrorMessage = "Допустимое имя типа компании от 1 до 255 символов")]
public string? CompanyTypeCaption { get; set; } = null!;
}
}

View File

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

View File

@ -1,136 +1,135 @@
using System;
using AsbCloudApp.Data.WellOperation;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// dto для хранения данных статистики сауб
/// </summary>
public class DataSaubStatDto:IId
{
/// <summary>
/// dto для хранения данных статистики сауб
///
/// </summary>
public class DataSaubStatDto:IId
{
/// <summary>
///
/// </summary>
public int Id { get; set; }
public int Id { get; set; }
/// <summary>
/// Дата и время начала
/// </summary>
public DateTimeOffset DateStart { get; set; }
/// <summary>
/// Дата и время начала
/// </summary>
public DateTimeOffset DateStart { get; set; }
/// <summary>
/// Дата и время окончания
/// </summary>
public DateTimeOffset DateEnd { get; set; }
/// <summary>
/// Дата и время окончания
/// </summary>
public DateTimeOffset DateEnd { get; set; }
/// <summary>
/// Глубина забоя по стволу начальная
/// </summary>
public double DepthStart { get; set; }
/// <summary>
/// Глубина забоя по стволу начальная
/// </summary>
public double DepthStart { get; set; }
/// <summary>
/// Глубина забоя по стволу конечная
/// </summary>
public double DepthEnd { get; set; }
/// <summary>
/// Глубина забоя по стволу конечная
/// </summary>
public double DepthEnd { get; set; }
/// <summary>
/// Скорость бурения
/// </summary>
public double Speed { get; set; }
/// <summary>
/// Скорость бурения
/// </summary>
public double Speed { get; set; }
/// <summary>
/// Ограничение скорости блока
/// </summary>
public double? BlockSpeedSp { get; set; }
/// <summary>
/// Ограничение скорости блока
/// </summary>
public double? BlockSpeedSp { get; set; }
/// <summary>
/// Давление
/// </summary>
public double Pressure { get; set; }
/// <summary>
/// Давление
/// </summary>
public double Pressure { get; set; }
/// <summary>
/// Давление холостого хода
/// </summary>
public double? PressureIdle { get; set; }
/// <summary>
/// Давление холостого хода
/// </summary>
public double? PressureIdle { get; set; }
/// <summary>
/// Ограничение фактического давления
/// </summary>
public double? PressureSp { get; set; }
/// <summary>
/// Ограничение фактического давления
/// </summary>
public double? PressureSp { get; set; }
/// <summary>
/// Фактическая нагрузка
/// </summary>
public double AxialLoad { get; set; }
/// <summary>
/// Фактическая нагрузка
/// </summary>
public double AxialLoad { get; set; }
/// <summary>
/// Ограничение факт. нагрузки
/// </summary>
public double? AxialLoadSp { get; set; }
/// <summary>
/// Ограничение факт. нагрузки
/// </summary>
public double? AxialLoadSp { get; set; }
/// <summary>
/// Максимально допустимая нагрузка
/// </summary>
public double? AxialLoadLimitMax { get; set; }
/// <summary>
/// Максимально допустимая нагрузка
/// </summary>
public double? AxialLoadLimitMax { get; set; }
/// <summary>
/// Фактический момент
/// </summary>
public double RotorTorque { get; set; }
/// <summary>
/// Фактический момент
/// </summary>
public double RotorTorque { get; set; }
/// <summary>
/// Ограничение факт. момента
/// </summary>
public double? RotorTorqueSp { get; set; }
/// <summary>
/// Ограничение факт. момента
/// </summary>
public double? RotorTorqueSp { get; set; }
/// <summary>
/// Максимально допустимый момент
/// </summary>
public double? RotorTorqueLimitMax { get; set; }
/// <summary>
/// Максимально допустимый момент
/// </summary>
public double? RotorTorqueLimitMax { get; set; }
/// <summary>
/// Работа при достижении ограничения
/// </summary>
public short? IdFeedRegulator { get; set; }
/// <summary>
/// Работа при достижении ограничения
/// </summary>
public short? IdFeedRegulator { get; set; }
/// <summary>
/// Фактическая скорость оборотов ВСП
/// </summary>
public double RotorSpeed { get; set; }
/// <summary>
/// Фактическая скорость оборотов ВСП
/// </summary>
public double RotorSpeed { get; set; }
/// <summary>
/// Название автоопределённой операции
/// </summary>
public int IdCategory { get; set; }
/// <summary>
/// Название автоопределённой операции
/// </summary>
public int IdCategory { get; set; }
/// <summary>
/// Флаги подсистем
/// </summary>
public int EnabledSubsystems { get; set; }
/// <summary>
/// Флаги подсистем
/// </summary>
public int EnabledSubsystems { get; set; }
/// <summary>
/// Наличие или отсутствие осцилляции
/// </summary>
public bool HasOscillation { get; set; }
/// <summary>
/// Наличие или отсутствие осцилляции
/// </summary>
public bool HasOscillation { get; set; }
/// <summary>
/// Фактический расход
/// </summary>
public double Flow { get; set; }
/// <summary>
/// Фактический расход
/// </summary>
public double Flow { get; set; }
/// <summary>
/// Ключ телеметрии
/// </summary>
public int IdTelemetry { get; set; }
/// <summary>
/// Ключ телеметрии
/// </summary>
public int IdTelemetry { get; set; }
/// <summary>
/// Телеметрия
/// </summary>
public TelemetryDto Telemetry { get; set; } = null!;
/// <summary>
/// Телеметрия
/// </summary>
public TelemetryDto Telemetry { get; set; } = null!;
/// <summary>
/// Категория автоопределенной операции
/// </summary>
public WellOperationCategoryDto OperationCategory { get; set; } = null!;
}
/// <summary>
/// Категория автоопределенной операции
/// </summary>
public WellOperationCategoryDto OperationCategory { get; set; } = null!;
}

View File

@ -1,23 +1,22 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Диапазон дат
/// </summary>
public class DatesRangeDto
{
/// <summary>
/// Диапазон дат
/// Дата начала диапазона
/// </summary>
public class DatesRangeDto
{
/// <summary>
/// Дата начала диапазона
/// </summary>
[Required]
public DateTimeOffset From { get; set; }
[Required]
public DateTimeOffset From { get; set; }
/// <summary>
/// Дата окончания диапазона
/// </summary>
[Required]
public DateTimeOffset To { get; set; }
}
/// <summary>
/// Дата окончания диапазона
/// </summary>
[Required]
public DateTimeOffset To { get; set; }
}

View File

@ -2,39 +2,38 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data
{
namespace AsbCloudApp.Data;
#nullable enable
/// <summary>
/// DTO Месторождения
/// </summary>
public class DepositBaseDto : MapPointBaseDto
{
}
/// <summary>
/// DTO Месторождения с кустами
/// </summary>
public class DepositDto : MapPointBaseDto
{
/// <summary>
/// Кусты месторождения
/// </summary>
[Required]
public IEnumerable<ClusterDto> Clusters { get; set; } = Enumerable.Empty<ClusterDto>();
}
/// <summary>
/// DTO Месторождения с кустами
/// </summary>
public class DepositBranchDto : MapPointBaseDto
{
/// <summary>
/// Кусты месторождения
/// </summary>
[Required]
public IEnumerable<ClusterBranchDto> Clusters { get; set; } = Enumerable.Empty<ClusterBranchDto>();
}
/// <summary>
/// DTO Месторождения
/// </summary>
public class DepositBaseDto : MapPointBaseDto
{
}
/// <summary>
/// DTO Месторождения с кустами
/// </summary>
public class DepositDto : MapPointBaseDto
{
/// <summary>
/// Кусты месторождения
/// </summary>
[Required]
public IEnumerable<ClusterDto> Clusters { get; set; } = Enumerable.Empty<ClusterDto>();
}
/// <summary>
/// DTO Месторождения с кустами
/// </summary>
public class DepositBranchDto : MapPointBaseDto
{
/// <summary>
/// Кусты месторождения
/// </summary>
[Required]
public IEnumerable<ClusterBranchDto> Clusters { get; set; } = Enumerable.Empty<ClusterBranchDto>();
}

View File

@ -1,42 +1,41 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DetectedOperation
namespace AsbCloudApp.Data.DetectedOperation;
/// <summary>
/// Статистика по операциям бурильщика
/// </summary>
public class DetectedOperationDrillersStatDto
{
/// <summary>
/// Статистика по операциям бурильщика
/// Бурильщик
/// </summary>
public class DetectedOperationDrillersStatDto
{
/// <summary>
/// Бурильщик
/// </summary>
public DrillerDto? Driller { get; set; }
public DrillerDto? Driller { get; set; }
/// <summary>
/// Количество операции
/// </summary>
[Required]
public int Count { get; set; }
/// <summary>
/// Количество операции
/// </summary>
[Required]
public int Count { get; set; }
/// <summary>
/// Среднее по ключевому показателю
/// </summary>
[Required]
public double AverageValue { get; set; }
/// <summary>
/// Среднее по ключевому показателю
/// </summary>
[Required]
public double AverageValue { get; set; }
/// <summary>
/// Среднее целевого показателя
/// </summary>
public double? AverageTargetValue { get; set; }
/// <summary>
/// Среднее целевого показателя
/// </summary>
public double? AverageTargetValue { get; set; }
/// <summary>
/// Коэффициент эффективности, %
/// </summary>
public double? Efficiency { get; set; }
/// <summary>
/// Коэффициент эффективности, %
/// </summary>
public double? Efficiency { get; set; }
/// <summary>
/// Коэффициент потерь
/// </summary>
public double? Loss { get; set; }
}
/// <summary>
/// Коэффициент потерь
/// </summary>
public double? Loss { get; set; }
}

View File

@ -2,23 +2,22 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data.DetectedOperation
namespace AsbCloudApp.Data.DetectedOperation;
/// <summary>
/// Автоматически определяемая операция
/// </summary>
public class DetectedOperationListDto
{
/// <summary>
/// Автоматически определяемая операция
/// Список всех операций
/// </summary>
public class DetectedOperationListDto
{
/// <summary>
/// Список всех операций
/// </summary>
[Required]
public IEnumerable<DetectedOperationWithDrillerDto> Operations { get; set; } = Enumerable.Empty<DetectedOperationWithDrillerDto>();
[Required]
public IEnumerable<DetectedOperationWithDrillerDto> Operations { get; set; } = Enumerable.Empty<DetectedOperationWithDrillerDto>();
/// <summary>
/// Статистика по бурильщикам
/// </summary>
[Required]
public IEnumerable<DetectedOperationDrillersStatDto> Stats { get; set; } = Enumerable.Empty<DetectedOperationDrillersStatDto>();
}
/// <summary>
/// Статистика по бурильщикам
/// </summary>
[Required]
public IEnumerable<DetectedOperationDrillersStatDto> Stats { get; set; } = Enumerable.Empty<DetectedOperationDrillersStatDto>();
}

View File

@ -1,69 +1,68 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DetectedOperation
namespace AsbCloudApp.Data.DetectedOperation;
/// <summary>
/// Статистика по операциям например за период.
/// </summary>
public class DetectedOperationStatDto
{
/// <summary>
/// Статистика по операциям например за период.
/// Id названия/описания операции
/// </summary>
public class DetectedOperationStatDto
{
/// <summary>
/// Id названия/описания операции
/// </summary>
[Required]
public int IdCategory { get; set; }
[Required]
public int IdCategory { get; set; }
/// <summary>
/// Название операции
/// </summary>
public string Category { get; set; } = string.Empty;
/// <summary>
/// Название операции
/// </summary>
public string Category { get; set; } = string.Empty;
/// <summary>
/// Количество операций
/// </summary>
[Required]
public int Count { get; set; }
/// <summary>
/// Количество операций
/// </summary>
[Required]
public int Count { get; set; }
/// <summary>
/// Среднее по ключевому показателю
/// </summary>
[Required]
public double ValueAverage { get; set; }
/// <summary>
/// Среднее по ключевому показателю
/// </summary>
[Required]
public double ValueAverage { get; set; }
/// <summary>
/// Мин по ключевому показателю
/// </summary>
[Required]
public double ValueMin { get; set; }
/// <summary>
/// Мин по ключевому показателю
/// </summary>
[Required]
public double ValueMin { get; set; }
/// <summary>
/// Макс по ключевому показателю
/// </summary>
[Required]
public double ValueMax { get; set; }
/// <summary>
/// Макс по ключевому показателю
/// </summary>
[Required]
public double ValueMax { get; set; }
/// <summary>
/// Суммарное время операций, мин
/// </summary>
[Required]
public double MinutesTotal { get; set; }
/// <summary>
/// Суммарное время операций, мин
/// </summary>
[Required]
public double MinutesTotal { get; set; }
/// <summary>
/// Мин продолжительность операции, мин
/// </summary>
[Required]
public double MinutesMin { get; set; }
/// <summary>
/// Мин продолжительность операции, мин
/// </summary>
[Required]
public double MinutesMin { get; set; }
/// <summary>
/// Макс продолжительность операции, мин
/// </summary>
[Required]
public double MinutesMax { get; set; }
/// <summary>
/// Макс продолжительность операции, мин
/// </summary>
[Required]
public double MinutesMax { get; set; }
/// <summary>
/// Средняя продолжительность операции, мин
/// </summary>
[Required]
public double MinutesAverage { get; set; }
}
/// <summary>
/// Средняя продолжительность операции, мин
/// </summary>
[Required]
public double MinutesAverage { get; set; }
}

View File

@ -1,18 +1,17 @@
namespace AsbCloudApp.Data.DetectedOperation
namespace AsbCloudApp.Data.DetectedOperation;
/// <summary>
/// Автоматически определяемая операция
/// </summary>
public class DetectedOperationWithDrillerDto : DetectedOperationDto
{
/// <summary>
/// Автоматически определяемая операция
/// Бурильщик
/// </summary>
public class DetectedOperationWithDrillerDto : DetectedOperationDto
{
/// <summary>
/// Бурильщик
/// </summary>
public DrillerDto? Driller { get; set; }
public DrillerDto? Driller { get; set; }
/// <summary>
/// Целевые/нормативные показатели
/// </summary>
public OperationValueDto? OperationValue { get; set; }
}
/// <summary>
/// Целевые/нормативные показатели
/// </summary>
public OperationValueDto? OperationValue { get; set; }
}

View File

@ -1,52 +1,51 @@
using System.Linq;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO параметров бурения
/// </summary>
public class DrillParamsDto : IId, IWellRelated
{
/// <inheritdoc/>
public int Id { get; set; }
/// <inheritdoc/>
public int IdWell { get; set; }
/// <summary>
/// DTO параметров бурения
/// Глубина интервала
/// </summary>
public class DrillParamsDto : IId, IWellRelated
{
/// <inheritdoc/>
public int Id { get; set; }
public MinMaxDto<double> Depth { get; set; } = null!;
/// <inheritdoc/>
public int IdWell { get; set; }
/// <summary>
/// id well section type.
/// </summary>
public int IdWellSectionType { get; set; }
/// <summary>
/// Глубина интервала
/// </summary>
public MinMaxDto<double> Depth { get; set; } = null!;
/// <summary>
/// axial load
/// </summary>
public MinMaxExtendedViewDto AxialLoad { get; set; } = null!;
/// <summary>
/// id well section type.
/// </summary>
public int IdWellSectionType { get; set; }
/// <summary>
/// pressure
/// </summary>
public MinMaxExtendedViewDto Pressure { get; set; } = null!;
/// <summary>
/// axial load
/// </summary>
public MinMaxExtendedViewDto AxialLoad { get; set; } = null!;
/// <summary>
/// rotor torque
/// </summary>
public MinMaxExtendedViewDto RotorTorque { get; set; } = null!;
/// <summary>
/// pressure
/// </summary>
public MinMaxExtendedViewDto Pressure { get; set; } = null!;
/// <summary>
/// rotor speed
/// </summary>
public MinMaxExtendedViewDto RotorSpeed { get; set; } = null!;
/// <summary>
/// rotor torque
/// </summary>
public MinMaxExtendedViewDto RotorTorque { get; set; } = null!;
/// <summary>
/// rotor speed
/// </summary>
public MinMaxExtendedViewDto RotorSpeed { get; set; } = null!;
/// <summary>
/// flow
/// </summary>
public MinMaxExtendedViewDto Flow { get; set; } = null!;
}
/// <summary>
/// flow
/// </summary>
public MinMaxExtendedViewDto Flow { get; set; } = null!;
}

View File

@ -1,26 +1,25 @@
using AsbCloudApp.Data.SAUB;
using System;
namespace AsbCloudApp.Data.DrillTestReport
namespace AsbCloudApp.Data.DrillTestReport;
/// <summary>
/// Информация о drill test, выгружаемая в отчете
/// </summary>
public class DrillTestReportDataDto
{
/// <summary>
/// Информация о drill test, выгружаемая в отчете
/// Данные для отчета
/// </summary>
public class DrillTestReportDataDto
{
/// <summary>
/// Данные для отчета
/// </summary>
public DrillTestDto Data { get; set; } = null!;
public DrillTestDto Data { get; set; } = null!;
/// <summary>
/// Заголовок отчета
/// </summary>
public string Caption { get; set; } = null!;
/// <summary>
/// Заголовок отчета
/// </summary>
public string Caption { get; set; } = null!;
/// <summary>
/// Дата отчета
/// </summary>
public DateTimeOffset Date { get; set; } = DateTimeOffset.Now;
}
/// <summary>
/// Дата отчета
/// </summary>
public DateTimeOffset Date { get; set; } = DateTimeOffset.Now;
}

View File

@ -1,29 +1,28 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DrillTestReport
namespace AsbCloudApp.Data.DrillTestReport;
/// <summary>
/// Базовая информация о drill_test отчёте
/// </summary>
public class DrillTestReportInfoDto : ReportInfoDto
{
/// <summary>
/// Базовая информация о drill_test отчёте
/// Идентификатор отчета
/// </summary>
public class DrillTestReportInfoDto : ReportInfoDto
{
/// <summary>
/// Идентификатор отчета
/// </summary>
[Required]
public int Id { get; set; }
[Required]
public int Id { get; set; }
/// <summary>
/// Проходка
/// </summary>
[Required]
public float DrillDepth { get; set; }
/// <summary>
/// Проходка
/// </summary>
[Required]
public float DrillDepth { get; set; }
/// <summary>
/// Дата и время
/// </summary>
[Required]
public DateTimeOffset DateTime { get; set; }
}
/// <summary>
/// Дата и время
/// </summary>
[Required]
public DateTimeOffset DateTime { get; set; }
}

View File

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

View File

@ -3,60 +3,59 @@ using System.ComponentModel.DataAnnotations;
using System.Linq;
using AsbCloudApp.Data.User;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Часть программы бурения
/// </summary>
public class DrillingProgramPartDto
{
/// <summary>
/// Часть программы бурения
/// Название
/// </summary>
public class DrillingProgramPartDto
{
/// <summary>
/// Название
/// </summary>
[Required]
public string Name { get; set; } = string.Empty;
[Required]
public string Name { get; set; } = string.Empty;
/// <summary>
/// ИД категории файла
/// </summary>
[Required]
public int IdFileCategory { get; set; }
/// <summary>
/// ИД категории файла
/// </summary>
[Required]
public int IdFileCategory { get; set; }
/// <summary>
/// 0 - NoFile
/// 1 - approving
/// 2 - completely approved
/// </summary>
[Required]
public int IdState { get; set; }
/// <summary>
/// 0 - NoFile
/// 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> Publishers { get; set; } = Enumerable.Empty<UserDto>();
/// <summary>
/// Согласованты. Могут согласовывать загруженные файлы этой категории
/// </summary>
[Required]
public IEnumerable<UserDto> Approvers { 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 PermissionToApprove { get; set; }
/// <summary>
/// Разрешение для текущего пользователя загружать документ
/// </summary>
[Required]
public bool PermissionToUpload { get; set; }
/// <summary>
/// Разрешение для текущего пользователя загружать документ
/// </summary>
[Required]
public bool PermissionToUpload { get; set; }
/// <summary>
/// Ссылка на документ.
/// </summary>
public FileInfoDto? File { get; set; }
}
/// <summary>
/// Ссылка на документ.
/// </summary>
public FileInfoDto? File { get; set; }
}

View File

@ -2,60 +2,59 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO состояния формирования программы бурения
/// </summary>
public class DrillingProgramStateDto
{
/// <summary>
/// DTO состояния формирования программы бурения
/// 0 - не инициировано
/// 1 - загрузка и согласование
/// 2 - формируется (несколько минут)
/// 3 - готова
/// </summary>
public class DrillingProgramStateDto
{
/// <summary>
/// 0 - не инициировано
/// 1 - загрузка и согласование
/// 2 - формируется (несколько минут)
/// 3 - готова
/// </summary>
[Required]
public int IdState { get; set; }
/// <summary>
/// Ошибка при формировании
/// </summary>
public DrillingProgramCreateError? Error { get; set; }
/// <summary>
/// Файл сформированной программы бурения
/// </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>();
}
[Required]
public int IdState { get; set; }
/// <summary>
/// DTO ошибки при создании программы бурения
/// Ошибка при формировании
/// </summary>
public class DrillingProgramCreateError
{
/// <summary>
/// Текст ошибки для отображения пользователю
/// </summary>
[Required]
public string Message { get; set; } = string.Empty;
public DrillingProgramCreateError? Error { get; set; }
/// <summary>
/// Текст ошибки для разработчика
/// </summary>
[Required]
public string Exception { get; set; } = string.Empty;
}
/// <summary>
/// Файл сформированной программы бурения
/// </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>();
}
/// <summary>
/// DTO ошибки при создании программы бурения
/// </summary>
public class DrillingProgramCreateError
{
/// <summary>
/// Текст ошибки для отображения пользователю
/// </summary>
[Required]
public string Message { get; set; } = string.Empty;
/// <summary>
/// Текст ошибки для разработчика
/// </summary>
[Required]
public string Exception { get; set; } = string.Empty;
}

View File

@ -1,73 +1,72 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO для faq-вопроса
/// </summary>
public class FaqDto : IId
{
/// <summary>
/// DTO для faq-вопроса
/// ключ вопроса
/// </summary>
public class FaqDto : IId
{
/// <summary>
/// ключ вопроса
/// </summary>
[Required]
public int Id { get; set; }
[Required]
public int Id { get; set; }
/// <summary>
/// ключ автора вопроса
/// </summary>
public int? IdAuthorQuestion { get; set; }
/// <summary>
/// ключ автора вопроса
/// </summary>
public int? IdAuthorQuestion { get; set; }
/// <summary>
/// автор ответа
/// </summary>
public int? IdAuthorAnswer { get; set; }
/// <summary>
/// автор ответа
/// </summary>
public int? IdAuthorAnswer { get; set; }
/// <summary>
/// дата создания вопроса
/// </summary>
public DateTimeOffset? DateCreatedQuestion { get; set; }
/// <summary>
/// дата создания вопроса
/// </summary>
public DateTimeOffset? DateCreatedQuestion { get; set; }
/// <summary>
/// текст вопроса
/// </summary>
[Required]
public string Question { get; set; } = null!;
/// <summary>
/// текст вопроса
/// </summary>
[Required]
public string Question { get; set; } = null!;
/// <summary>
/// текст ответа
/// </summary>
public string? Answer { get; set; }
/// <summary>
/// текст ответа
/// </summary>
public string? Answer { get; set; }
/// <summary>
/// статус вопроса
/// </summary>
[Required]
public int State { get; set; } = 0;
/// <summary>
/// статус вопроса
/// </summary>
[Required]
public int State { get; set; } = 0;
/// <summary>
/// Счетчик повторений вопроса
/// </summary>
[Required]
public int CounterQuestion { get; set; } = 1;
/// <summary>
/// Счетчик повторений вопроса
/// </summary>
[Required]
public int CounterQuestion { get; set; } = 1;
/// <summary>
/// Частый вопрос
/// </summary>
[Required]
public bool IsFrequently { get; set; } = false;
/// <summary>
/// Частый вопрос
/// </summary>
[Required]
public bool IsFrequently { get; set; } = false;
/// <summary>
/// Автор вопроса
/// </summary>
[Required]
public string AurhorQuestionName { get; set; } = string.Empty;
/// <summary>
/// Автор вопроса
/// </summary>
[Required]
public string AurhorQuestionName { get; set; } = string.Empty;
/// <summary>
/// Автор ответа
/// </summary>
public string? AurhorAnswerName { get; set; }
}
/// <summary>
/// Автор ответа
/// </summary>
public string? AurhorAnswerName { get; set; }
}

View File

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

View File

@ -4,68 +4,67 @@ using System.ComponentModel.DataAnnotations;
using System.Linq;
using AsbCloudApp.Data.User;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO информации о файле. Используется для загрузки файла.
/// </summary>
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>
/// DTO информации о файле. Используется для загрузки файла.
/// id категории файла
/// </summary>
public class FileInfoDto : IId, IWellRelated
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id категории файла не может быть меньше 1")]
public int IdCategory { get; set; }
/// <inheritdoc/>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id скважины не может быть меньше 1")]
public int IdWell { get; set; }
/// <summary>
/// Id автора
/// </summary>
public int? IdAuthor { get; set; }
/// <summary>
/// id категории файла
/// </summary>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id категории файла не может быть меньше 1")]
public int IdCategory { get; set; }
/// <summary>
/// имя файла
/// </summary>
[Required]
[StringLength(260, MinimumLength = 1, ErrorMessage = "Допустимое имя компании от 1 до 260 символов")]
public string Name { get; set; } = null!;
/// <summary>
/// Id автора
/// </summary>
public int? IdAuthor { get; set; }
/// <summary>
/// дата загрузки
/// </summary>
[Required]
public DateTimeOffset UploadDate { get; set; }
/// <summary>
/// имя файла
/// </summary>
[Required]
[StringLength(260, MinimumLength = 1, ErrorMessage = "Допустимое имя компании от 1 до 260 символов")]
public string Name { get; set; } = null!;
/// <summary>
/// размер в байтах
/// </summary>
[Required]
public long Size { get; set; }
/// <summary>
/// дата загрузки
/// </summary>
[Required]
public DateTimeOffset UploadDate { get; set; }
/// <summary>
/// Помечен как удаленный
/// </summary>
[Required]
public bool IsDeleted { get; set; }
/// <summary>
/// размер в байтах
/// </summary>
[Required]
public long Size { get; set; }
/// <summary>
/// DTO автора
/// </summary>
public UserDto? Author { get; set; }
/// <summary>
/// Помечен как удаленный
/// </summary>
[Required]
public bool IsDeleted { get; set; }
/// <summary>
/// DTO автора
/// </summary>
public UserDto? Author { get; set; }
/// <summary>
/// список отметок файла
/// </summary>
[Required]
public IEnumerable<FileMarkDto> FileMarks { get; set; } = Enumerable.Empty<FileMarkDto>();
}
/// <summary>
/// список отметок файла
/// </summary>
[Required]
public IEnumerable<FileMarkDto> FileMarks { get; set; } = Enumerable.Empty<FileMarkDto>();
}

View File

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

View File

@ -1,14 +1,13 @@
namespace AsbCloudApp.Data.GTR
namespace AsbCloudApp.Data.GTR;
/// <summary>
/// Класс позволяющий хранить значение неопределенного типа.
/// Все возможные типы должны быть описаны в JsonValueJsonConverter.
/// </summary>
/// <param name="Value"></param>
public record JsonValue(object Value)
{
/// <summary>
/// Класс позволяющий хранить значение неопределенного типа.
/// Все возможные типы должны быть описаны в JsonValueJsonConverter.
/// </summary>
/// <param name="Value"></param>
public record JsonValue(object Value)
{
/// <inheritdoc/>
public override string ToString()
=> Value.ToString() ?? string.Empty;
}
/// <inheritdoc/>
public override string ToString()
=> Value.ToString() ?? string.Empty;
}

View File

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

View File

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

View File

@ -1,13 +1,12 @@
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Интерфейс данных с Id
/// </summary>
public interface IId
{
/// <summary>
/// Интерфейс данных с Id
/// Идентификатор БД
/// </summary>
public interface IId
{
/// <summary>
/// Идентификатор БД
/// </summary>
public int Id { get; set; }
}
public int Id { get; set; }
}

View File

@ -1,23 +1,22 @@
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// точка на карте
/// </summary>
public interface IMapPoint
{
/// <summary>
/// точка на карте
/// Широта
/// </summary>
public interface IMapPoint
{
/// <summary>
/// Широта
/// </summary>
double? Latitude { get; set; }
double? Latitude { get; set; }
/// <summary>
/// Широта
/// </summary>
double? Longitude { get; set; }
/// <summary>
/// Широта
/// </summary>
double? Longitude { get; set; }
/// <summary>
/// Часовой пояс
/// </summary>
SimpleTimezoneDto Timezone { get; set; }
}
/// <summary>
/// Часовой пояс
/// </summary>
SimpleTimezoneDto Timezone { get; set; }
}

View File

@ -1,26 +1,25 @@
using System;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Telemetry related dto
/// </summary>
public interface ITelemetryRelated
{
/// <summary>
/// Telemetry related dto
/// ИД телеметрии
/// </summary>
public interface ITelemetryRelated
{
/// <summary>
/// ИД телеметрии
/// </summary>
int IdTelemetry { get; set; }
}
/// <summary>
/// Интерфейс записи данных телеметрии
/// </summary>
public interface ITelemetryData : ITelemetryRelated
{
/// <summary>
/// Отметка времени для этой записи
/// </summary>
DateTime DateTime { get; set; }
}
int IdTelemetry { get; set; }
}
/// <summary>
/// Интерфейс записи данных телеметрии
/// </summary>
public interface ITelemetryData : ITelemetryRelated
{
/// <summary>
/// Отметка времени для этой записи
/// </summary>
DateTime DateTime { get; set; }
}

View File

@ -1,13 +1,12 @@
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Well related DTO
/// </summary>
public interface IWellRelated
{
/// <summary>
/// Well related DTO
/// Well id in db
/// </summary>
public interface IWellRelated
{
/// <summary>
/// Well id in db
/// </summary>
int IdWell { get; set; }
}
int IdWell { get; set; }
}

View File

@ -1,26 +1,25 @@
using System;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// хранение дополнительной информации о записи
/// запись формируется на сервере автоматически
/// </summary>
public class ItemInfoDto
{
/// <summary>
/// хранение дополнительной информации о записи
/// запись формируется на сервере автоматически
/// пользователь, внесший изменения (запись формируется на сервере автоматически)
/// </summary>
public class ItemInfoDto
{
/// <summary>
/// пользователь, внесший изменения (запись формируется на сервере автоматически)
/// </summary>
public int? IdUser { get; set; }
public int? IdUser { get; set; }
/// <summary>
/// имя пользователя, внесшего изменения (запись формируется на сервере автоматически)
/// </summary>
public string? UserName { get; set; }
/// <summary>
/// имя пользователя, внесшего изменения (запись формируется на сервере автоматически)
/// </summary>
public string? UserName { get; set; }
/// <summary>
/// дата последнего обновления (запись формируется на сервере автоматически)
/// </summary>
public DateTimeOffset? LastUpdateDate { get; set; }
}
/// <summary>
/// дата последнего обновления (запись формируется на сервере автоматически)
/// </summary>
public DateTimeOffset? LastUpdateDate { get; set; }
}

View File

@ -1,56 +1,55 @@
using System.Collections;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Состояние фоновой задачи
/// </summary>
public enum JobState
{
/// <summary>
/// Состояние фоновой задачи
/// Ожидает в очереди на выполнение
/// </summary>
public enum JobState
{
/// <summary>
/// Ожидает в очереди на выполнение
/// </summary>
Waiting,
/// <summary>
/// выполняется
/// </summary>
Working,
/// <summary>
/// успешно выполнена
/// </summary>
Done,
/// <summary>
/// завершена с ошибкой
/// </summary>
Fail
};
Waiting,
/// <summary>
/// выполняется
/// </summary>
Working,
/// <summary>
/// успешно выполнена
/// </summary>
Done,
/// <summary>
/// завершена с ошибкой
/// </summary>
Fail
};
/// <summary>
/// работа фоновой задачи
/// </summary>
public class JobDto
{
/// <summary>
/// идентификатор
/// </summary>
[Required]
public int Id { get; set; }
/// <summary>
/// работа фоновой задачи
/// Состояние
/// </summary>
public class JobDto
{
/// <summary>
/// идентификатор
/// </summary>
[Required]
public int Id { get; set; }
[Required]
public JobState State { get; set; }
/// <summary>
/// Состояние
/// </summary>
[Required]
public JobState State { get; set; }
/// <summary>
/// результат выполнения
/// </summary>
public Hashtable? Results { get; set; }
/// <summary>
/// результат выполнения
/// </summary>
public Hashtable? Results { get; set; }
/// <summary>
/// Исключение, если возникла ошибка
/// </summary>
public string? Error { get; set; }
}
/// <summary>
/// Исключение, если возникла ошибка
/// </summary>
public string? Error { get; set; }
}

View File

@ -1,45 +1,44 @@
using System;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Статистика по ограничивающим параметрам
/// </summary>
public class LimitingParameterDataDto
{
/// <summary>
/// Статистика по ограничивающим параметрам
/// Идентификатор скважины
/// </summary>
public class LimitingParameterDataDto
{
/// <summary>
/// Идентификатор скважины
/// </summary>
public int IdWell { get; set; }
public int IdWell { get; set; }
/// <summary>
/// Идентификатор телеметрии
/// </summary>
public int IdTelemetry { get; set; }
/// <summary>
/// Идентификатор телеметрии
/// </summary>
public int IdTelemetry { get; set; }
/// <summary>
/// Дата начала ограничения
/// </summary>
public DateTimeOffset DateStart { get; set; }
/// <summary>
/// Дата начала ограничения
/// </summary>
public DateTimeOffset DateStart { get; set; }
/// <summary>
/// Дата окончания ограничения
/// </summary>
public DateTimeOffset DateEnd { get; set; }
/// <summary>
/// Дата окончания ограничения
/// </summary>
public DateTimeOffset DateEnd { get; set; }
/// <summary>
/// Глубина начала ограничения
/// </summary>
public float DepthStart { get; set; }
/// <summary>
/// Глубина начала ограничения
/// </summary>
public float DepthStart { get; set; }
/// <summary>
/// Глубина окончания ограничения
/// </summary>
public float DepthEnd { get; set; }
/// <summary>
/// Глубина окончания ограничения
/// </summary>
public float DepthEnd { get; set; }
/// <summary>
/// Идентификатор ограничения
/// </summary>
public short IdFeedRegulator { get; set; }
}
/// <summary>
/// Идентификатор ограничения
/// </summary>
public short IdFeedRegulator { get; set; }
}

View File

@ -1,71 +1,70 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Статистика по ограничивающим параметрам
/// </summary>
public class LimitingParameterDto
{
/// <summary>
/// Статистика по ограничивающим параметрам
/// Нет ограничения
/// </summary>
public class LimitingParameterDto
{
/// <summary>
/// Нет ограничения
/// </summary>
public const int NoLimit = 0;
public const int NoLimit = 0;
/// <summary>
/// МСП
/// </summary>
public const int RopPlan = 1;
/// <summary>
/// МСП
/// </summary>
public const int RopPlan = 1;
/// <summary>
/// Давление
/// </summary>
public const int Pressure = 2;
/// <summary>
/// Давление
/// </summary>
public const int Pressure = 2;
/// <summary>
/// Осевая нагрузка
/// </summary>
public const int AxialLoad = 3;
/// <summary>
/// Осевая нагрузка
/// </summary>
public const int AxialLoad = 3;
/// <summary>
/// Момент
/// </summary>
public const int RotorTorque = 4;
/// <summary>
/// Идентификатор скважины
/// </summary>
[Required]
public int IdWell { get; set; }
/// <summary>
/// Момент
/// </summary>
public const int RotorTorque = 4;
/// <summary>
/// Идентификатор скважины
/// </summary>
[Required]
public int IdWell { get; set; }
/// <summary>
/// Время бурения
/// </summary>
[Required]
public float TotalMinutes { get; set; }
/// <summary>
/// Время бурения
/// </summary>
[Required]
public float TotalMinutes { get; set; }
/// <summary>
/// Глубина бурения
/// </summary>
[Required]
public float Depth { get; set; }
/// <summary>
/// Глубина бурения
/// </summary>
[Required]
public float Depth { get; set; }
/// <summary>
/// Идентификатор критерия бурения
/// </summary>
[Required]
public short IdFeedRegulator { get; set; }
/// <summary>
/// Идентификатор критерия бурения
/// </summary>
[Required]
public short IdFeedRegulator { get; set; }
/// <summary>
/// Наименование критерия бурения
/// </summary>
[Required]
public string NameFeedRegulator { get; set; } = string.Empty;
/// <summary>
/// Наименование критерия бурения
/// </summary>
[Required]
public string NameFeedRegulator { get; set; } = string.Empty;
/// <summary>
/// Количество включений
/// </summary>
[Required]
public int NumberInclusions { get; set; }
}
/// <summary>
/// Количество включений
/// </summary>
[Required]
public int NumberInclusions { get; set; }
}

View File

@ -1,30 +1,29 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Точка на карте с названием
/// </summary>
public class MapPointBaseDto : IMapPoint, IId
{
/// <inheritdoc/>
public int Id { get; set; }
/// <summary>
/// Точка на карте с названием
/// Название
/// </summary>
public class MapPointBaseDto : IMapPoint, IId
{
/// <inheritdoc/>
public int Id { get; set; }
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина названия от 1 до 50 символов")]
public string Caption { get; set; } = null!;
/// <summary>
/// Название
/// </summary>
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина названия от 1 до 50 символов")]
public string Caption { get; set; } = null!;
/// <inheritdoc/>
[Range(-90, 90, ErrorMessage = "Допустимые значения широты от -90 до 90")]
public double? Latitude { get; set; }
/// <inheritdoc/>
[Range(-90, 90, ErrorMessage = "Допустимые значения широты от -90 до 90")]
public double? Latitude { get; set; }
/// <inheritdoc/>
[Range(-180, 180, ErrorMessage = "Допустимые значения долготы от -180 до 180")]
public double? Longitude { get; set; }
/// <inheritdoc/>
[Range(-180, 180, ErrorMessage = "Допустимые значения долготы от -180 до 180")]
public double? Longitude { get; set; }
/// <inheritdoc/>
public SimpleTimezoneDto Timezone { get; set; } = null!;
}
/// <inheritdoc/>
public SimpleTimezoneDto Timezone { get; set; } = null!;
}

View File

@ -2,46 +2,45 @@ using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// инфо о результатах замера
/// </summary>
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>
public class MeasureDto : IId, IWellRelated
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id категории не может быть меньше 1")]
public int IdCategory { get; set; }
/// <inheritdoc/>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id скважины не может быть меньше 1")]
public int IdWell { get; set; }
/// <summary>
/// название категории замера
/// </summary>
[Required]
[StringLength(120, MinimumLength = 1, ErrorMessage = "Название категории не может быть больше 120 символов")]
public string CategoryName { get; set; } = string.Empty;
/// <summary>
/// Id категории замера
/// </summary>
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Id категории не может быть меньше 1")]
public int IdCategory { get; set; }
/// <summary>
/// отметка времени замера
/// </summary>
[Required]
public DateTimeOffset Timestamp { get; set; }
/// <summary>
/// название категории замера
/// </summary>
[Required]
[StringLength(120, MinimumLength = 1, ErrorMessage = "Название категории не может быть больше 120 символов")]
public string CategoryName { get; set; } = string.Empty;
/// <summary>
/// отметка времени замера
/// </summary>
[Required]
public DateTimeOffset Timestamp { get; set; }
/// <summary>
/// данные замера
/// </summary>
[Required]
public Dictionary<string, object> Data { get; set; } = new();
}
/// <summary>
/// данные замера
/// </summary>
[Required]
public Dictionary<string, object> Data { get; set; } = new();
}

View File

@ -1,47 +1,46 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Сообщение для frontend
/// </summary>
public class MessageDto : IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>
/// Сообщение для frontend
/// дата появления события
/// </summary>
public class MessageDto : IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
[Required]
public DateTimeOffset DateTime { get; set; }
/// <summary>
/// дата появления события
/// </summary>
[Required]
public DateTimeOffset 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 int CategoryId { get; set; }
/// <summary>
/// глубина забоя, при котором событие возникло
/// </summary>
[Required]
[Range(-1, int.MaxValue, ErrorMessage = "Id скважины не может быть ниже 1")]
public double WellDepth { get; set; }
/// <summary>
/// глубина забоя, при котором событие возникло
/// </summary>
[Required]
[Range(-1, int.MaxValue, ErrorMessage = "Id скважины не может быть ниже 1")]
public double WellDepth { get; set; }
/// <summary>
/// пользователь панели оператора
/// </summary>
public string? User { get; set; }
/// <summary>
/// пользователь панели оператора
/// </summary>
public string? User { get; set; }
/// <summary>
/// текст сообщения
/// </summary>
[Required]
[StringLength(400, MinimumLength = 1, ErrorMessage = "Допустимая длина текста сообщения от 1 до 400 символов")]
public string Message { get; set; } = string.Empty;
}
/// <summary>
/// текст сообщения
/// </summary>
[Required]
[StringLength(400, MinimumLength = 1, ErrorMessage = "Допустимая длина текста сообщения от 1 до 400 символов")]
public string Message { get; set; } = string.Empty;
}

View File

@ -1,18 +1,17 @@
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Минимальное и максимальное значение
/// </summary>
public class MinMaxDto<T>
{
/// <summary>
/// Минимальное и максимальное значение
/// Минимальное значение
/// </summary>
public class MinMaxDto<T>
{
/// <summary>
/// Минимальное значение
/// </summary>
public T? Min { get; set; }
public T? Min { get; set; }
/// <summary>
/// Максимальное значение
/// </summary>
public T? Max { get; set; }
}
/// <summary>
/// Максимальное значение
/// </summary>
public T? Max { get; set; }
}

View File

@ -1,23 +1,22 @@
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Расширение для класса MinMaxDto
/// </summary>
public class MinMaxExtendedViewDto : MinMaxDto<double>
{
/// <summary>
/// Расширение для класса MinMaxDto
/// Среднее значение
/// </summary>
public class MinMaxExtendedViewDto : MinMaxDto<double>
{
/// <summary>
/// Среднее значение
/// </summary>
public double Avg { get; set; }
public double Avg { get; set; }
/// <summary>
/// Является максимальным
/// </summary>
public bool IsMax { get; set; }
/// <summary>
/// Является максимальным
/// </summary>
public bool IsMax { get; set; }
/// <summary>
/// Является минимальным
/// </summary>
public bool IsMin { get; set; }
}
/// <summary>
/// Является минимальным
/// </summary>
public bool IsMin { get; set; }
}

View File

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

View File

@ -1,40 +1,39 @@
using System.Collections.Generic;
using System.Linq;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Контейнер для поддержки постраничного просмотра таблиц
/// </summary>
/// <typeparam name="T"></typeparam>
public class PaginationContainer<T>
{
/// <summary>
/// Контейнер для поддержки постраничного просмотра таблиц
/// конструктор
/// </summary>
/// <typeparam name="T"></typeparam>
public class PaginationContainer<T>
public PaginationContainer()
{
/// <summary>
/// конструктор
/// </summary>
public PaginationContainer()
{
Items = Enumerable.Empty<T>();
}
/// <summary>
/// Кол-во записей пропущенных с начала таблицы в запросе от api
/// </summary>
public int Skip { get; set; }
/// <summary>
/// Кол-во записей в запросе от api
/// </summary>
public int Take { get; set; }
/// <summary>
/// Кол-во записей всего в таблице
/// </summary>
public int Count { get; set; }
/// <summary>
/// Данные
/// </summary>
public IEnumerable<T> Items { get; set; }
Items = Enumerable.Empty<T>();
}
/// <summary>
/// Кол-во записей пропущенных с начала таблицы в запросе от api
/// </summary>
public int Skip { get; set; }
/// <summary>
/// Кол-во записей в запросе от api
/// </summary>
public int Take { get; set; }
/// <summary>
/// Кол-во записей всего в таблице
/// </summary>
public int Count { get; set; }
/// <summary>
/// Данные
/// </summary>
public IEnumerable<T> Items { get; set; }
}

View File

@ -1,28 +1,27 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Разрешение для группы пользователей сделать что-либо через web-api. <br/>
/// применяется как возможность доступа к Endpoint. <br/>
/// </summary>
public class PermissionDto : IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>
/// Разрешение для группы пользователей сделать что-либо через web-api. <br/>
/// применяется как возможность доступа к Endpoint. <br/>
/// Название
/// </summary>
public class PermissionDto : IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
[Required]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина названия разрешения от 1 до 50 символов")]
public string Name { get; set; } = string.Empty;
/// <summary>
/// Название
/// </summary>
[Required]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина названия разрешения от 1 до 50 символов")]
public string Name { get; set; } = string.Empty;
/// <summary>
/// Описание
/// </summary>
[StringLength(1024, MinimumLength = 1, ErrorMessage = "Допустимая длина описания от 1 до 1024 символов")]
public string? Description { get; set; }
}
/// <summary>
/// Описание
/// </summary>
[StringLength(1024, MinimumLength = 1, ErrorMessage = "Допустимая длина описания от 1 до 1024 символов")]
public string? Description { get; set; }
}

View File

@ -1,29 +1,28 @@
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO объединяющее плановые и фактические значения
/// </summary>
/// <typeparam name="T"></typeparam>
public class PlanFactDto<T> : PlanFactBase<T, T>
{
}
/// <summary>
/// DTO объединяющее плановые и фактические значения
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="V"></typeparam>
public class PlanFactBase<T, V>
{
/// <summary>
/// DTO объединяющее плановые и фактические значения
/// Плановое значение
/// </summary>
/// <typeparam name="T"></typeparam>
public class PlanFactDto<T> : PlanFactBase<T, T>
{
}
public T? Plan { get; set; }
/// <summary>
/// DTO объединяющее плановые и фактические значения
/// Фактическое значение
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="V"></typeparam>
public class PlanFactBase<T, V>
{
/// <summary>
/// Плановое значение
/// </summary>
public T? Plan { get; set; }
/// <summary>
/// Фактическое значение
/// </summary>
public V? Fact { get; set; }
}
public V? Fact { get; set; }
}

View File

@ -1,23 +1,22 @@
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Lines container for Time Vs Depth chart
/// </summary>
public class PlanFactPredictBase<T>
{
/// <summary>
/// Lines container for Time Vs Depth chart
/// плановое значение
/// </summary>
public class PlanFactPredictBase<T>
{
/// <summary>
/// плановое значение
/// </summary>
public T? Plan { get; set; }
public T? Plan { get; set; }
/// <summary>
/// фактическое значение
/// </summary>
public T? Fact { get; set; }
/// <summary>
/// фактическое значение
/// </summary>
public T? Fact { get; set; }
/// <summary>
/// предсказанное значение
/// </summary>
public T? Predict { get; set; }
}
/// <summary>
/// предсказанное значение
/// </summary>
public T? Predict { get; set; }
}

View File

@ -2,85 +2,84 @@ using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Плановое значение и максимально допустимое ограничение
/// </summary>
public class PlanLimitDto
{
/// <summary>
/// Плановое значение и максимально допустимое ограничение
/// План
/// </summary>
public class PlanLimitDto
[Required]
public double Plan { get; set; }
/// <summary>
/// Максимальное ограничение
/// </summary>
[Required]
public double LimitMax { get; set; }
/// <summary>
/// Валидация
/// </summary>
/// <param name="commonRange">Общий диапазон для плана и ограничения</param>
/// <param name="paramName"></param>
/// <returns></returns>
public virtual IEnumerable<ValidationResult> Validate((double GE, double LE) commonRange, string paramName)
=> Validate(commonRange, commonRange, paramName);
/// <summary>
/// Валидация
/// </summary>
/// <param name="planRange"></param>
/// <param name="limitMaxRange"></param>
/// <param name="paramName">Название параметра для которого задается план и ограничение</param>
/// <returns></returns>
public virtual IEnumerable<ValidationResult> Validate((double GE, double LE) planRange, (double GE, double LE) limitMaxRange, string paramName)
{
/// <summary>
/// План
/// </summary>
[Required]
public double Plan { get; set; }
if (Plan < planRange.GE || Plan > planRange.LE)
yield return new ValidationResult($"{paramName} плановое значение должно быть в диапазоне [{planRange.GE}; {planRange.LE}].");
/// <summary>
/// Максимальное ограничение
/// </summary>
[Required]
public double LimitMax { get; set; }
/// <summary>
/// Валидация
/// </summary>
/// <param name="commonRange">Общий диапазон для плана и ограничения</param>
/// <param name="paramName"></param>
/// <returns></returns>
public virtual IEnumerable<ValidationResult> Validate((double GE, double LE) commonRange, string paramName)
=> Validate(commonRange, commonRange, paramName);
/// <summary>
/// Валидация
/// </summary>
/// <param name="planRange"></param>
/// <param name="limitMaxRange"></param>
/// <param name="paramName">Название параметра для которого задается план и ограничение</param>
/// <returns></returns>
public virtual IEnumerable<ValidationResult> Validate((double GE, double LE) planRange, (double GE, double LE) limitMaxRange, string paramName)
{
if (Plan < planRange.GE || Plan > planRange.LE)
yield return new ValidationResult($"{paramName} плановое значение должно быть в диапазоне [{planRange.GE}; {planRange.LE}].");
if (Plan < planRange.GE || Plan > planRange.LE)
yield return new ValidationResult($"{paramName} ограничивающее значение должно быть в диапазоне [{limitMaxRange.GE}; {limitMaxRange.LE}].");
}
if (Plan < planRange.GE || Plan > planRange.LE)
yield return new ValidationResult($"{paramName} ограничивающее значение должно быть в диапазоне [{limitMaxRange.GE}; {limitMaxRange.LE}].");
}
}
/// <summary>
/// Реализация RangeAttribute для PlanLimitDto
/// </summary>
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter,
AllowMultiple = false)]
public class RangePlanLimitAttribute : ValidationAttribute
{
private readonly double minimum;
private readonly double maximum;
/// <summary>
/// Реализация RangeAttribute для PlanLimitDto
/// </summary>
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter,
AllowMultiple = false)]
public class RangePlanLimitAttribute : ValidationAttribute
/// <param name="minimum"></param>
/// <param name="maximum"></param>
public RangePlanLimitAttribute(double minimum, double maximum)
{
private readonly double minimum;
private readonly double maximum;
this.minimum = minimum;
this.maximum = maximum;
}
/// <summary>
/// Реализация RangeAttribute для PlanLimitDto
/// </summary>
/// <param name="minimum"></param>
/// <param name="maximum"></param>
public RangePlanLimitAttribute(double minimum, double maximum)
/// <inheritdoc/>
public override bool IsValid(object? value)
{
try
{
this.minimum = minimum;
this.maximum = maximum;
}
/// <inheritdoc/>
public override bool IsValid(object? value)
{
try
if(value is PlanLimitDto dto)
{
if(value is PlanLimitDto dto)
{
var isPlanValid = dto.Plan <= maximum && dto.Plan >= minimum;
var isLimitMaxValid = dto.LimitMax <= maximum && dto.LimitMax >= minimum;
return isPlanValid && isLimitMaxValid;
}
}catch{}
return false;
}
var isPlanValid = dto.Plan <= maximum && dto.Plan >= minimum;
var isLimitMaxValid = dto.LimitMax <= maximum && dto.LimitMax >= minimum;
return isPlanValid && isLimitMaxValid;
}
}catch{}
return false;
}
}

View File

@ -1,18 +1,17 @@
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Справочная информация об отчете
/// </summary>
public class ReportInfoDto
{
/// <summary>
/// Справочная информация об отчете
/// Название файла
/// </summary>
public class ReportInfoDto
{
/// <summary>
/// Название файла
/// </summary>
public string FileName { get; set; } = null!;
public string FileName { get; set; } = null!;
/// <summary>
/// Размер файла
/// </summary>
public int FileSize { get; set; } = 0;
}
/// <summary>
/// Размер файла
/// </summary>
public int FileSize { get; set; } = 0;
}

View File

@ -1,54 +1,53 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO формирования рапорта
/// </summary>
public class ReportPropertiesDto : IId, IWellRelated
{
/// <inheritdoc/>
public int Id { get; set; }
/// <inheritdoc/>
[Range(1, int.MaxValue, ErrorMessage = "Id скважины не может быть ниже 1")]
public int IdWell { get; set; }
/// <summary>
/// DTO формирования рапорта
/// название
/// </summary>
public class ReportPropertiesDto : IId, IWellRelated
{
/// <inheritdoc/>
public int Id { get; set; }
[StringLength(260, MinimumLength = 1, ErrorMessage = "Допустимая длина имени файла от 1 до 260 символов")]
public string Name { get; set; } = null!;
/// <inheritdoc/>
[Range(1, int.MaxValue, ErrorMessage = "Id скважины не может быть ниже 1")]
public int IdWell { get; set; }
/// <summary>
/// <see cref="FileInfoDto"/>
/// </summary>
public FileInfoDto File { get; set; } = null!;
/// <summary>
/// название
/// </summary>
[StringLength(260, MinimumLength = 1, ErrorMessage = "Допустимая длина имени файла от 1 до 260 символов")]
public string Name { get; set; } = null!;
/// <summary>
/// Дата формирования
/// </summary>
public DateTimeOffset Date { get; set; }
/// <summary>
/// <see cref="FileInfoDto"/>
/// </summary>
public FileInfoDto File { get; set; } = null!;
/// <summary>
/// Дата начала рапорта
/// </summary>
public DateTimeOffset Begin { get; set; }
/// <summary>
/// Дата формирования
/// </summary>
public DateTimeOffset Date { get; set; }
/// <summary>
/// Дата окончания рапорта
/// </summary>
public DateTimeOffset End { get; set; }
/// <summary>
/// Дата начала рапорта
/// </summary>
public DateTimeOffset Begin { get; set; }
/// <summary>
/// шаг между точками диаграммы
/// </summary>
public int Step { get; set; }
/// <summary>
/// Дата окончания рапорта
/// </summary>
public DateTimeOffset End { get; set; }
/// <summary>
/// шаг между точками диаграммы
/// </summary>
public int Step { get; set; }
/// <summary>
/// формат файла
/// </summary>
public string Format { get; set; } = string.Empty;
}
/// <summary>
/// формат файла
/// </summary>
public string Format { get; set; } = string.Empty;
}

View File

@ -1,70 +1,69 @@
using System;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO журнала запросов
/// </summary>
public class RequestLogDto
{
/// <summary>
/// DTO журнала запросов
/// логин пользователя
/// </summary>
public class RequestLogDto
{
/// <summary>
/// логин пользователя
/// </summary>
public string UserLogin { get; set; } = string.Empty;
public string UserLogin { get; set; } = string.Empty;
/// <summary>
/// Id пользователя
/// </summary>
public int UserId { get; set; }
/// <summary>
/// Id пользователя
/// </summary>
public int UserId { get; set; }
/// <summary>
/// IP адрес пользователя
/// </summary>
public string? UserIp { get; set; }
/// <summary>
/// IP адрес пользователя
/// </summary>
public string? UserIp { get; set; }
/// <summary>
/// метод запроса (GET, POST,..)
/// </summary>
public string RequestMethod { get; set; } = null!;
/// <summary>
/// метод запроса (GET, POST,..)
/// </summary>
public string RequestMethod { get; set; } = null!;
/// <summary>
/// url
/// </summary>
public string? RequestPath { get; set; }
/// <summary>
/// url
/// </summary>
public string? RequestPath { get; set; }
/// <summary>
/// Referer
/// </summary>
public string Referer { get; set; } = string.Empty;
/// <summary>
/// Referer
/// </summary>
public string Referer { get; set; } = string.Empty;
/// <summary>
/// продолжительность выполнения
/// </summary>
public long ElapsedMilliseconds { get; set; }
/// <summary>
/// продолжительность выполнения
/// </summary>
public long ElapsedMilliseconds { get; set; }
/// <summary>
/// http status [200 - Ok, ...]
/// </summary>
public int Status { get; set; }
/// <summary>
/// метка времени запроса
/// </summary>
public DateTime Date { get; set; }
/// <summary>
/// http status [200 - Ok, ...]
/// </summary>
public int Status { get; set; }
/// <summary>
/// метка времени запроса
/// </summary>
public DateTime Date { get; set; }
/// <summary>
/// сообщение об ошибке, если она произошла
/// </summary>
public string? ExceptionMessage { get; set; } = null!;
/// <summary>
/// сообщение об ошибке, если она произошла
/// </summary>
public string? ExceptionMessage { get; set; } = null!;
/// <summary>
/// стек вызовов
/// </summary>
public string? ExceptionStack { get; set; } = null!;
/// <summary>
/// стек вызовов
/// </summary>
public string? ExceptionStack { get; set; } = null!;
/// <summary>
/// Размер body
/// </summary>
public long? RequestContentLength { get; set; }
}
/// <summary>
/// Размер body
/// </summary>
public long? RequestContentLength { get; set; }
}

View File

@ -2,58 +2,57 @@ using System;
using System.ComponentModel.DataAnnotations;
using AsbCloudApp.Data.User;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO статистики запросов по пользователю
/// </summary>
public class RequestLogUserDto
{
/// <summary>
/// DTO статистики запросов по пользователю
/// Id пользователя
/// </summary>
public class RequestLogUserDto
{
/// <summary>
/// Id пользователя
/// </summary>
[Required]
public int UserId { get; set; }
[Required]
public int UserId { get; set; }
/// <summary>
/// логин
/// </summary>
[Required]
public string Login { get; set; } = string.Empty;
/// <summary>
/// логин
/// </summary>
[Required]
public string Login { get; set; } = string.Empty;
/// <summary>
/// IP адрес пользователя
/// </summary>
public string? Ip { get; set; }
/// <summary>
/// IP адрес пользователя
/// </summary>
public string? Ip { get; set; }
/// <summary>
/// время выполнения запроса
/// </summary>
[Required]
public long ElapsedMs { get; set; }
/// <summary>
/// время выполнения запроса
/// </summary>
[Required]
public long ElapsedMs { get; set; }
/// <summary>
/// метка времени последнего запроса
/// </summary>
[Required]
public DateTime LastDate { get; set; }
/// <summary>
/// метка времени последнего запроса
/// </summary>
[Required]
public DateTime LastDate { get; set; }
/// <summary>
/// кол-во запросов
/// </summary>
[Required]
public long Requests { get; set; }
/// <summary>
/// кол-во запросов
/// </summary>
[Required]
public long Requests { get; set; }
/// <summary>
/// кол-во ошибок
/// </summary>
[Required]
public long Errors { get; set; }
/// <summary>
/// кол-во ошибок
/// </summary>
[Required]
public long Errors { get; set; }
/// <summary>
/// DTO пользователя
/// </summary>
[Required]
public UserDto User { get; set; } = null!;
}
/// <summary>
/// DTO пользователя
/// </summary>
[Required]
public UserDto User { get; set; } = null!;
}

View File

@ -3,35 +3,34 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// DTO для получения записи drill_test из панели
/// </summary>
public class DrillTestBaseDto
{
/// <summary>
/// DTO для получения записи drill_test из панели
/// Идентификатор drill test
/// </summary>
public class DrillTestBaseDto
{
/// <summary>
/// Идентификатор drill test
/// </summary>
[Required]
public int Id { get; set; }
[Required]
public int Id { get; set; }
/// <summary>
/// Время начала drill test
/// </summary>
[Required]
public DateTimeOffset TimeStampStart { get; set; }
/// <summary>
/// Время начала drill test
/// </summary>
[Required]
public DateTimeOffset TimeStampStart { get; set; }
/// <summary>
/// Глубина начала drill test
/// </summary>
[Required]
public float DepthStart { get; set; }
/// <summary>
/// Глубина начала drill test
/// </summary>
[Required]
public float DepthStart { get; set; }
/// <summary>
/// Параметры теста
/// </summary>
[Required]
public IEnumerable<DrillTestParamsDto> Params { get; set; } = Enumerable.Empty<DrillTestParamsDto>();
}
/// <summary>
/// Параметры теста
/// </summary>
[Required]
public IEnumerable<DrillTestParamsDto> Params { get; set; } = Enumerable.Empty<DrillTestParamsDto>();
}

View File

@ -1,15 +1,14 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// DTO для отображения записи drill_test
/// </summary>
public class DrillTestDto : DrillTestBaseDto
{
/// <summary>
/// DTO для отображения записи drill_test
/// Связанная с drill_test телеметрия
/// </summary>
public class DrillTestDto : DrillTestBaseDto
{
/// <summary>
/// Связанная с drill_test телеметрия
/// </summary>
public TelemetryDto? Telemetry { get; set; }
}
public TelemetryDto? Telemetry { get; set; }
}

View File

@ -1,41 +1,40 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// Параметры Drill Test
/// </summary>
public class DrillTestParamsDto
{
/// <summary>
/// Параметры Drill Test
/// Шаг
/// </summary>
public class DrillTestParamsDto
{
/// <summary>
/// Шаг
/// </summary>
[Required]
public int Step { get; set; }
[Required]
public int Step { get; set; }
/// <summary>
/// Нагрузка
/// </summary>
public float? Workload { get; set; }
/// <summary>
/// Нагрузка
/// </summary>
public float? Workload { get; set; }
/// <summary>
/// Заданная скорость
/// </summary>
public float? Speed { get; set; }
/// <summary>
/// Заданная скорость
/// </summary>
public float? Speed { get; set; }
/// <summary>
/// Скорость проходки
/// </summary>
public float? DepthSpeed { get; set; }
/// <summary>
/// Скорость проходки
/// </summary>
public float? DepthSpeed { get; set; }
/// <summary>
/// Время бурения шага, сек
/// </summary>
public float? TimeDrillStep { get; set; }
/// <summary>
/// Время бурения шага, сек
/// </summary>
public float? TimeDrillStep { get; set; }
/// <summary>
/// Глубина бурения шага
/// </summary>
public float? DepthDrillStep { get; set; }
}
/// <summary>
/// Глубина бурения шага
/// </summary>
public float? DepthDrillStep { get; set; }
}

View File

@ -1,48 +1,47 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// Описание шаблона события панели оператора
/// </summary>
public class EventDto : IId
{
/// <summary>
/// Описание шаблона события панели оператора
/// id события
/// </summary>
public class EventDto : IId
{
/// <summary>
/// id события
/// </summary>
[Required]
public int Id { get; set; }
[Required]
public int Id { get; set; }
/// <summary>
/// шаблон текста сообщения
/// </summary>
[Required]
public string Message { get; set; } = string.Empty;
/// <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; }
/// <summary>
/// id категории события
/// </summary>
[Required]
[Range(0, int.MaxValue, ErrorMessage = "Id категории события не может быть отрицательным")]
public int IdCategory { get; set; }
/// <summary>
/// переменная сервера обмена информацией с полевым оборудованием
/// </summary>
public string Tag { get; set; } = string.Empty;
/// <summary>
/// переменная сервера обмена информацией с полевым оборудованием
/// </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]
[Range(0, int.MaxValue, ErrorMessage = "Id типа события не может быть отрицательным")]
public int EventType { get; set; }
/// <summary>
/// флаг, следует ли воспроизводить звук при наступлении события
/// </summary>
[Required]
public int IdSound { get; set; }
}
/// <summary>
/// флаг, следует ли воспроизводить звук при наступлении события
/// </summary>
[Required]
public int IdSound { get; set; }
}

View File

@ -1,43 +1,42 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// DTO рекомендации уставок передаваемых на панель оператора
/// </summary>
public class SetpointInfoDto
{
/// <summary>
/// DTO рекомендации уставок передаваемых на панель оператора
/// отображаемое название уставки
/// </summary>
public class SetpointInfoDto
{
/// <summary>
/// отображаемое название уставки
/// </summary>
public string DisplayName { get; set; } = string.Empty;
public string DisplayName { get; set; } = string.Empty;
/// <summary>
/// настоящее название уставки (имя переменной в панели оператора)
/// </summary>
[Required]
public string Name { get; set; } = null!;
/// <summary>
/// настоящее название уставки (имя переменной в панели оператора)
/// </summary>
[Required]
public string Name { get; set; } = null!;
/// <summary>
/// единицы измерения
/// </summary>
public string? Units { get; set; }
/// <summary>
/// единицы измерения
/// </summary>
public string? Units { get; set; }
/// <summary>
/// комментарий
/// </summary>
public string? Comment { get; set; }
/// <summary>
/// комментарий
/// </summary>
public string? Comment { get; set; }
/// <summary>
/// макс. значение
/// </summary>
[Required]
public double Max { get; set; } = double.MaxValue;
/// <summary>
/// макс. значение
/// </summary>
[Required]
public double Max { get; set; } = double.MaxValue;
/// <summary>
/// мин значение
/// </summary>
[Required]
public double Min { get; set; } = double.MinValue;
}
/// <summary>
/// мин значение
/// </summary>
[Required]
public double Min { get; set; } = double.MinValue;
}

View File

@ -3,64 +3,63 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using AsbCloudApp.Data.User;
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// DTO запроса для предложения по изменению уставок на панели оператора
/// </summary>
public class SetpointsRequestDto : IId, IWellRelated
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <inheritdoc/>
[Required]
public int IdWell { get; set; }
/// <summary>
/// DTO запроса для предложения по изменению уставок на панели оператора
/// Id автора запроса
/// </summary>
public class SetpointsRequestDto : IId, IWellRelated
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
[Required]
public int IdAuthor { get; set; }
/// <inheritdoc/>
[Required]
public int IdWell { get; set; }
/// <summary>
/// текущее состояние запроса 0: неизвестно, 1:ожидает отправки, 2: отправлено, 3: принято оператором, 4: отклонено оператором, 5: устарело
/// </summary>
[Required]
public int IdState { get; set; }
/// <summary>
/// Id автора запроса
/// </summary>
[Required]
public int IdAuthor { get; set; }
/// <summary>
/// отметка времени создания запроса
/// </summary>
public DateTimeOffset UploadDate { get; set; } = DateTimeOffset.Now;
/// <summary>
/// текущее состояние запроса 0: неизвестно, 1:ожидает отправки, 2: отправлено, 3: принято оператором, 4: отклонено оператором, 5: устарело
/// </summary>
[Required]
public int IdState { get; set; }
/// <summary>
/// время в секундах актуальности этого запроса
/// </summary>
[Required]
[Range(10 * 60, 4 * 60 * 60)]
public int ObsolescenceSec { get; set; } = 10 * 60;
/// <summary>
/// отметка времени создания запроса
/// </summary>
public DateTimeOffset UploadDate { get; set; } = DateTimeOffset.Now;
/// <summary>
/// набор уставок: {"название переменной панели"; "рекомендуемое значение"}
/// </summary>
[Required]
public Dictionary<string, double> Setpoints { get; set; } = new();
/// <summary>
/// время в секундах актуальности этого запроса
/// </summary>
[Required]
[Range(10 * 60, 4 * 60 * 60)]
public int ObsolescenceSec { get; set; } = 10 * 60;
/// <summary>
/// Комментарий для оператора панели
/// </summary>
public string? Comment { get; set; }
/// <summary>
/// набор уставок: {"название переменной панели"; "рекомендуемое значение"}
/// </summary>
[Required]
public Dictionary<string, double> Setpoints { get; set; } = new();
/// <summary>
/// DTO скважины
/// </summary>
public WellDto? Well { get; set; }
/// <summary>
/// Комментарий для оператора панели
/// </summary>
public string? Comment { get; set; }
/// <summary>
/// DTO скважины
/// </summary>
public WellDto? Well { get; set; }
/// <summary>
/// DTO автора
/// </summary>
public UserDto? Author { get; set; }
}
/// <summary>
/// DTO автора
/// </summary>
public UserDto? Author { get; set; }
}

View File

@ -1,236 +1,235 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// Сообщение получаемое по телеметрии и отправляемое в frontend
/// </summary>
public class TelemetryDataSaubDto : ITelemetryData
{
/// <summary>
/// Сообщение получаемое по телеметрии и отправляемое в frontend
/// метка времени данных
/// </summary>
public class TelemetryDataSaubDto : ITelemetryData
{
/// <summary>
/// метка времени данных
/// </summary>
[Required]
public DateTime DateTime { get; set; }
/// <summary>
/// Пользователь САУБ
/// </summary>
public int? IdUser { get; set; }
[Required]
public DateTime DateTime { get; set; }
/// <summary>
/// Пользователь САУБ
/// </summary>
public int? IdUser { get; set; }
/// <summary>
/// Режим работы САУБ:
/// 0 - "РУЧНОЙ"
/// 1 - "БУРЕНИЕ В РОТОРЕ"
/// 2 - "ПРОРАБОТКА"
/// 3 - "БУРЕНИЕ В СЛАЙДЕ"
/// 4 - "СПУСК СПО"
/// 5 - "ПОДЪЕМ СПО"
/// 6 - "ПОДЪЕМ С ПРОРАБОТКОЙ"
/// 10 - "БЛОКИРОВКА"
/// </summary>
[Required]
public short Mode { get; set; }
/// <summary>
/// Режим работы САУБ:
/// 0 - "РУЧНОЙ"
/// 1 - "БУРЕНИЕ В РОТОРЕ"
/// 2 - "ПРОРАБОТКА"
/// 3 - "БУРЕНИЕ В СЛАЙДЕ"
/// 4 - "СПУСК СПО"
/// 5 - "ПОДЪЕМ СПО"
/// 6 - "ПОДЪЕМ С ПРОРАБОТКОЙ"
/// 10 - "БЛОКИРОВКА"
/// </summary>
[Required]
public short Mode { get; set; }
/// <summary>
/// telemetry id
/// </summary>
public int IdTelemetry { get; set; }
/// <summary>
/// telemetry id
/// </summary>
public int IdTelemetry { get; set; }
/// <summary>
/// telemetry user
/// </summary>
public string? User { get; set; }
/// <summary>
/// telemetry user
/// </summary>
public string? User { get; set; }
/// <summary>
/// Глубина забоя, м
/// </summary>
public float WellDepth { get; set; }
/// <summary>
/// Глубина забоя, м
/// </summary>
public float WellDepth { get; set; }
/// <summary>
/// Глубина долота, м
/// </summary>
public float BitDepth { get; set; }
/// <summary>
/// Глубина долота, м
/// </summary>
public float BitDepth { get; set; }
/// <summary>
/// Талевый блок. Положение, м
/// </summary>
public float BlockPosition { get; set; }
/// <summary>
/// Талевый блок. Положение, м
/// </summary>
public float BlockPosition { get; set; }
/// <summary>
/// Талевый блок. Мин положение, м
/// </summary>
public float? BlockPositionMin { get; set; }
/// <summary>
/// Талевый блок. Мин положение, м
/// </summary>
public float? BlockPositionMin { get; set; }
/// <summary>
/// Талевый блок. Макс положение, м
/// </summary>
public float? BlockPositionMax { get; set; }
/// <summary>
/// Талевый блок. Макс положение, м
/// </summary>
public float? BlockPositionMax { get; set; }
/// <summary>
/// Талевый блок. Скорость, м/час
/// </summary>
public float? BlockSpeed { get; set; }
/// <summary>
/// Талевый блок. Скорость, м/час
/// </summary>
public float? BlockSpeed { get; set; }
/// <summary>
/// Талевый блок. Задание скорости, м/час
/// </summary>
public float? BlockSpeedSp { get; set; }
/// <summary>
/// Талевый блок. Задание скорости, м/час
/// </summary>
public float? BlockSpeedSp { get; set; }
/// <summary>
/// Талевый блок. Задание скорости для роторного бурения, м/час
/// </summary>
public float? BlockSpeedSpRotor { get; set; }
/// <summary>
/// Талевый блок. Задание скорости для роторного бурения, м/час
/// </summary>
public float? BlockSpeedSpRotor { get; set; }
/// <summary>
/// Талевый блок. Задание скорости для режима слайда, м/час
/// </summary>
public float? BlockSpeedSpSlide { get; set; }
/// <summary>
/// Талевый блок. Задание скорости для режима слайда, м/час
/// </summary>
public float? BlockSpeedSpSlide { get; set; }
/// <summary>
/// Талевый блок. Задание скорости для проработки, м/час
/// </summary>
public float? BlockSpeedSpDevelop { get; set; }
/// <summary>
/// Талевый блок. Задание скорости для проработки, м/час
/// </summary>
public float? BlockSpeedSpDevelop { get; set; }
/// <summary>
/// Давление, атм
/// </summary>
public float Pressure { get; set; }
/// <summary>
/// Давление, атм
/// </summary>
public float Pressure { get; set; }
/// <summary>
/// Давление при холостом ходе, атм
/// </summary>
public float? PressureIdle { get; set; }
/// <summary>
/// Давление при холостом ходе, атм
/// </summary>
public float? PressureIdle { get; set; }
/// <summary>
/// действующее задание давления, атм
/// </summary>
public float? PressureSp { get; set; }
/// <summary>
/// действующее задание давления, атм
/// </summary>
public float? PressureSp { get; set; }
/// <summary>
/// задание давления для роторного режима, атм
/// </summary>
public float? PressureSpRotor { get; set; }
/// <summary>
/// задание давления для роторного режима, атм
/// </summary>
public float? PressureSpRotor { get; set; }
/// <summary>
/// задание давления для режима слайда, атм
/// </summary>
public float? PressureSpSlide { get; set; }
/// <summary>
/// задание давления для режима слайда, атм
/// </summary>
public float? PressureSpSlide { get; set; }
/// <summary>
/// задание давления для проработки, атм
/// </summary>
public float? PressureSpDevelop { get; set; }
/// <summary>
/// задание давления для проработки, атм
/// </summary>
public float? PressureSpDevelop { get; set; }
/// <summary>
/// ограничение макс перепада давления, атм
/// </summary>
public float? PressureDeltaLimitMax { get; set; }
/// <summary>
/// ограничение макс перепада давления, атм
/// </summary>
public float? PressureDeltaLimitMax { get; set; }
/// <summary>
/// осевая нагрузка, т
/// </summary>
public float AxialLoad { get; set; }
/// <summary>
/// осевая нагрузка, т
/// </summary>
public float AxialLoad { get; set; }
/// <summary>
/// задание осевой нагрузки, т
/// </summary>
public float? AxialLoadSp { get; set; }
/// <summary>
/// задание осевой нагрузки, т
/// </summary>
public float? AxialLoadSp { get; set; }
/// <summary>
/// ограничение макс. осевой нагрузки, т
/// </summary>
public float? AxialLoadLimitMax { get; set; }
/// <summary>
/// ограничение макс. осевой нагрузки, т
/// </summary>
public float? AxialLoadLimitMax { get; set; }
/// <summary>
/// Вес на крюке, т
/// </summary>
public float HookWeight { get; set; }
/// <summary>
/// Вес на крюке, т
/// </summary>
public float HookWeight { get; set; }
/// <summary>
/// Вес на крюке на х.х., т
/// </summary>
public float? HookWeightIdle { get; set; }
/// <summary>
/// Вес на крюке на х.х., т
/// </summary>
public float? HookWeightIdle { get; set; }
/// <summary>
/// ограничение мин веса на крюке, т
/// </summary>
public float? HookWeightLimitMin { get; set; }
/// <summary>
/// ограничение мин веса на крюке, т
/// </summary>
public float? HookWeightLimitMin { get; set; }
/// <summary>
/// ограничение макс веса на крюке, т
/// </summary>
public float? HookWeightLimitMax { get; set; }
/// <summary>
/// ограничение макс веса на крюке, т
/// </summary>
public float? HookWeightLimitMax { get; set; }
/// <summary>
/// момент ротора, кН*м
/// </summary>
public float RotorTorque { get; set; }
/// <summary>
/// момент ротора, кН*м
/// </summary>
public float RotorTorque { get; set; }
/// <summary>
/// момент ротора на х.х., кН*м
/// </summary>
public float? RotorTorqueIdle { get; set; }
/// <summary>
/// момент ротора на х.х., кН*м
/// </summary>
public float? RotorTorqueIdle { get; set; }
/// <summary>
/// задание момента ротора, кН*м
/// </summary>
public float? RotorTorqueSp { get; set; }
/// <summary>
/// задание момента ротора, кН*м
/// </summary>
public float? RotorTorqueSp { get; set; }
/// <summary>
/// ограничение момента ротора, кН*м
/// </summary>
public float? RotorTorqueLimitMax { get; set; }
/// <summary>
/// ограничение момента ротора, кН*м
/// </summary>
public float? RotorTorqueLimitMax { get; set; }
/// <summary>
/// скорость ротора, об/мин
/// </summary>
public float RotorSpeed { get; set; }
/// <summary>
/// скорость ротора, об/мин
/// </summary>
public float RotorSpeed { get; set; }
/// <summary>
/// расход, л/с
/// </summary>
public float? Flow { get; set; }
/// <summary>
/// расход, л/с
/// </summary>
public float? Flow { get; set; }
/// <summary>
/// расход на х.х., л/с
/// </summary>
public float? FlowIdle { get; set; }
/// <summary>
/// расход на х.х., л/с
/// </summary>
public float? FlowIdle { get; set; }
/// <summary>
/// ограничение макс расхода, л/с
/// </summary>
public float? FlowDeltaLimitMax { get; set; }
/// <summary>
/// ограничение макс расхода, л/с
/// </summary>
public float? FlowDeltaLimitMax { get; set; }
/// <summary>
/// id текущего критерия бурения
/// </summary>
public short? IdFeedRegulator { get; set; }
/// <summary>
/// id текущего критерия бурения
/// </summary>
public short? IdFeedRegulator { get; set; }
/// <summary>
/// Текущее состояние работы MSE
/// </summary>
public short? MseState { get; set; }
/// <summary>
/// Текущее состояние работы MSE
/// </summary>
public short? MseState { get; set; }
/// <summary>
/// MSE
/// </summary>
public float? Mse { get; set; }
/// <summary>
/// MSE
/// </summary>
public float? Mse { get; set; }
/// <summary>
/// Расход. Буровой насос 1
/// </summary>
public float? Pump0Flow { get; set; }
/// <summary>
/// Расход. Буровой насос 1
/// </summary>
public float? Pump0Flow { get; set; }
/// <summary>
/// Расход. Буровой насос 2
/// </summary>
public float? Pump1Flow { get; set; }
/// <summary>
/// Расход. Буровой насос 2
/// </summary>
public float? Pump1Flow { get; set; }
/// <summary>
/// Расход. Буровой насос 3
/// </summary>
public float? Pump2Flow { get; set; }
}
/// <summary>
/// Расход. Буровой насос 3
/// </summary>
public float? Pump2Flow { get; set; }
}

View File

@ -1,115 +1,114 @@
using System;
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// Статистика телеметрии САУБ (усредненные значения) по интервалам глубины
/// </summary>
public class TelemetryDataSaubStatDto
{
/// <summary>
/// Статистика телеметрии САУБ (усредненные значения) по интервалам глубины
/// Кол-во записей в интервале
/// </summary>
public class TelemetryDataSaubStatDto
{
/// <summary>
/// Кол-во записей в интервале
/// </summary>
public int Count { get; set; }
public int Count { get; set; }
/// <summary>
/// Дата начала интервала
/// </summary>
public DateTime DateMin { get; set; }
/// <summary>
/// Дата начала интервала
/// </summary>
public DateTime DateMin { get; set; }
/// <summary>
/// Дата окончания интервала
/// </summary>
public DateTime DateMax { get; set; }
/// <summary>
/// Дата окончания интервала
/// </summary>
public DateTime DateMax { get; set; }
/// <summary>
/// Глубина начала интервала
/// </summary>
public float WellDepthMin { get; set; }
/// <summary>
/// Глубина начала интервала
/// </summary>
public float WellDepthMin { get; set; }
/// <summary>
/// Глубина окончания интервала
/// </summary>
public float WellDepthMax { get; set; }
/// <summary>
/// Глубина окончания интервала
/// </summary>
public float WellDepthMax { get; set; }
/// <summary>
/// Давление
/// </summary>
public float Pressure { get; set; }
/// <summary>
/// Давление
/// </summary>
public float Pressure { get; set; }
/// <summary>
/// действующее задание давления
/// </summary>
public float PressureSp { get; set; }
/// <summary>
/// действующее задание перепада давления
/// </summary>
public float PressureSpDelta { get; set; }
/// <summary>
/// действующее задание давления
/// </summary>
public float PressureSp { get; set; }
/// <summary>
/// действующее задание перепада давления
/// </summary>
public float PressureSpDelta { get; set; }
/// <summary>
/// Давление при холостом ходе.
/// </summary>
public float PressureIdle { get; set; }
/// <summary>
/// Давление при холостом ходе.
/// </summary>
public float PressureIdle { get; set; }
/// <summary>
/// ограничение макс перепада давления
/// </summary>
public float PressureDeltaLimitMax { get; set; }
/// <summary>
/// ограничение макс перепада давления
/// </summary>
public float PressureDeltaLimitMax { get; set; }
/// <summary>
/// Перепад давления
/// </summary>
public float PressureDelta { get; set; }
/// <summary>
/// Перепад давления
/// </summary>
public float PressureDelta { get; set; }
/// <summary>
/// осевая нагрузка
/// </summary>
public float AxialLoad { get; set; }
/// <summary>
/// осевая нагрузка
/// </summary>
public float AxialLoad { get; set; }
/// <summary>
/// задание осевой нагрузки
/// </summary>
public float AxialLoadSp { get; set; }
/// <summary>
/// задание осевой нагрузки
/// </summary>
public float AxialLoadSp { get; set; }
/// <summary>
/// ограничение макс. осевой нагрузки
/// </summary>
public float AxialLoadLimitMax { get; set; }
/// <summary>
/// ограничение макс. осевой нагрузки
/// </summary>
public float AxialLoadLimitMax { get; set; }
/// <summary>
/// момент ротора
/// </summary>
public float RotorTorque { get; set; }
/// <summary>
/// момент ротора
/// </summary>
public float RotorTorque { get; set; }
/// <summary>
/// задание момента ротора
/// </summary>
public float RotorTorqueSp { get; set; }
/// <summary>
/// задание момента ротора
/// </summary>
public float RotorTorqueSp { get; set; }
/// <summary>
/// момент ротора на х.х.
/// </summary>
public float RotorTorqueLimitMax { get; set; }
/// <summary>
/// момент ротора на х.х.
/// </summary>
public float RotorTorqueLimitMax { get; set; }
/// <summary>
/// Талевый блок. Скорость
/// </summary>
public float BlockSpeed { get; set; }
/// <summary>
/// Талевый блок. Скорость
/// </summary>
public float BlockSpeed { get; set; }
/// <summary>
/// Талевый блок. Задание скорости
/// </summary>
public float BlockSpeedSp { get; set; }
/// <summary>
/// Талевый блок. Задание скорости
/// </summary>
public float BlockSpeedSp { get; set; }
/// <summary>
/// Режим САУБ
/// </summary>
public short IdMode { get; set; }
/// <summary>
/// Режим САУБ
/// </summary>
public short IdMode { get; set; }
/// <summary>
/// Текущий критерий бурения
/// </summary>
public short? IdFeedRegulator { get; set; }
}
/// <summary>
/// Текущий критерий бурения
/// </summary>
public short? IdFeedRegulator { get; set; }
}

View File

@ -1,84 +1,83 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// телеметрия спин мастер
/// </summary>
public class TelemetryDataSpinDto : ITelemetryData
{
/// <summary>
/// телеметрия спин мастер
/// Идентификатор телеметрии
/// </summary>
public class TelemetryDataSpinDto : ITelemetryData
{
/// <summary>
/// Идентификатор телеметрии
/// </summary>
public int IdTelemetry { get; set; }
public int IdTelemetry { get; set; }
/// <summary>
/// Дата
/// </summary>
[Required]
public DateTime DateTime { get; set; }
/// <summary>
/// Дата
/// </summary>
[Required]
public DateTime DateTime { get; set; }
/// <summary>
/// Ограничение числа оборотов вправо
/// </summary>
public float? RevolsRightLimit { get; set; }
/// <summary>
/// Ограничение числа оборотов вправо
/// </summary>
public float? RevolsRightLimit { get; set; }
/// <summary>
/// Ограничение числа оборотов влево
/// </summary>
public float? RevolsLeftLimit { get; set; }
/// <summary>
/// Ограничение числа оборотов влево
/// </summary>
public float? RevolsLeftLimit { get; set; }
/// <summary>
/// Заданная скорость вращения вправо
/// </summary>
public float? SpeedRightSp { get; set; }
/// <summary>
/// Заданная скорость вращения вправо
/// </summary>
public float? SpeedRightSp { get; set; }
/// <summary>
/// Заданная скорость вращения влево
/// </summary>
public float? SpeedLeftSp { get; set; }
/// <summary>
/// Заданная скорость вращения влево
/// </summary>
public float? SpeedLeftSp { get; set; }
/// <summary>
/// Суммарное количество оборотов вправо
/// </summary>
public float? RevolsRightTotal { get; set; }
/// <summary>
/// Суммарное количество оборотов вправо
/// </summary>
public float? RevolsRightTotal { get; set; }
/// <summary>
/// Суммарное количество оборотов влево
/// </summary>
public float? RevolsLeftTotal { get; set; }
/// <summary>
/// Суммарное количество оборотов влево
/// </summary>
public float? RevolsLeftTotal { get; set; }
/// <summary>
/// Нулевая позиция осцилляции
/// </summary>
public float? PositionZero { get; set; }
/// <summary>
/// Нулевая позиция осцилляции
/// </summary>
public float? PositionZero { get; set; }
/// <summary>
/// Крайний правый угол осцилляции
/// </summary>
public float? PositionRight { get; set; }
/// <summary>
/// Крайний правый угол осцилляции
/// </summary>
public float? PositionRight { get; set; }
/// <summary>
/// Выбранный режим управления
/// </summary>
public short? Mode { get; set; }
/// <summary>
/// Выбранный режим управления
/// </summary>
public short? Mode { get; set; }
/// <summary>
/// Переменная этапа
/// </summary>
public short? State { get; set; }
/// <summary>
/// Переменная этапа
/// </summary>
public short? State { get; set; }
/// <summary>
/// Осцилляция включена
/// </summary>
[Required]
public bool IsOscillating => State != 0 & State != 6 & State != 7;
/// <summary>
/// Осцилляция включена
/// </summary>
[Required]
public bool IsOscillating => State != 0 & State != 6 & State != 7;
/// <summary>
/// Демпфирование включено
/// </summary>
[Required]
public bool IsDampening => State == 7 && (Mode & 2) > 0;
}
/// <summary>
/// Демпфирование включено
/// </summary>
[Required]
public bool IsDampening => State == 7 && (Mode & 2) > 0;
}

View File

@ -1,30 +1,29 @@
using System;
namespace AsbCloudInfrastructure.Services.SAUB
namespace AsbCloudInfrastructure.Services.SAUB;
/// <summary>
/// Статистика данных телеметрии
/// </summary>
public class TelemetryDataStatDto
{
/// <summary>
/// Статистика данных телеметрии
/// ID в БД
/// </summary>
public class TelemetryDataStatDto
{
/// <summary>
/// ID в БД
/// </summary>
public int IdTelemetry { get; set; }
public int IdTelemetry { get; set; }
/// <summary>
/// дата получения первых данных
/// </summary>
public DateTimeOffset DateFirst { get; set; }
/// <summary>
/// дата получения последних полученных данных
/// </summary>
public DateTimeOffset DateLast { get; set; }
/// <summary>
/// смещение часового пояса
/// </summary>
public double TimezoneOffsetHours { get; set; }
}
/// <summary>
/// дата получения первых данных
/// </summary>
public DateTimeOffset DateFirst { get; set; }
/// <summary>
/// дата получения последних полученных данных
/// </summary>
public DateTimeOffset DateLast { get; set; }
/// <summary>
/// смещение часового пояса
/// </summary>
public double TimezoneOffsetHours { get; set; }
}

View File

@ -1,65 +1,64 @@
using System;
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// общая информация о панели оператора
/// </summary>
public class TelemetryInfoDto
{
/// <summary>
/// общая информация о панели оператора
/// дата начала бурения (заполнения данных на панели)
/// </summary>
public class TelemetryInfoDto
{
/// <summary>
/// дата начала бурения (заполнения данных на панели)
/// </summary>
public DateTime DrillingStartDate { get; set; }
public DateTime DrillingStartDate { get; set; }
/// <summary>
/// идентификатор временной зоны
/// </summary>
public string? TimeZoneId { get; set; }
/// <summary>
/// идентификатор временной зоны
/// </summary>
public string? TimeZoneId { get; set; }
/// <summary>
/// смещение в часах относительно UTC
/// </summary>
public double TimeZoneOffsetTotalHours { get; set; }
/// <summary>
/// смещение в часах относительно UTC
/// </summary>
public double TimeZoneOffsetTotalHours { get; set; }
/// <summary>
/// название скважины
/// </summary>
public string Well { get; set; } = string.Empty;
/// <summary>
/// название скважины
/// </summary>
public string Well { get; set; } = string.Empty;
/// <summary>
/// название куста
/// </summary>
public string Cluster { get; set; } = string.Empty;
/// <summary>
/// название куста
/// </summary>
public string Cluster { get; set; } = string.Empty;
/// <summary>
/// название месторождения
/// </summary>
public string Deposit { get; set; } = string.Empty;
/// <summary>
/// название месторождения
/// </summary>
public string Deposit { get; set; } = string.Empty;
/// <summary>
/// название заказчика
/// </summary>
public string? Customer { get; set; }
/// <summary>
/// версия ПО панели оператора
/// </summary>
public string? HmiVersion { get; set; }
/// <summary>
/// название заказчика
/// </summary>
public string? Customer { get; set; }
/// <summary>
/// версия ПО панели оператора
/// </summary>
public string? HmiVersion { get; set; }
/// <summary>
/// версия ПО ПЛК САУБ
/// </summary>
public string? SaubPlcVersion { get; set; }
/// <summary>
/// версия ПО ПЛК САУБ
/// </summary>
public string? SaubPlcVersion { get; set; }
/// <summary>
/// версия ПО ПЛК Спин мастер
/// </summary>
public string? SpinPlcVersion { get; set; }
/// <summary>
/// версия ПО ПЛК Спин мастер
/// </summary>
public string? SpinPlcVersion { get; set; }
/// <summary>
/// комментарий
/// </summary>
public string? Comment { get; set; }
}
/// <summary>
/// комментарий
/// </summary>
public string? Comment { get; set; }
}

View File

@ -1,55 +1,54 @@
using System;
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// Сообщение получаемое от телеметрии с буровой
/// </summary>
public class TelemetryMessageDto : IId
{
/// <summary>
/// Сообщение получаемое от телеметрии с буровой
/// Id сообщения в базе панели оператора
/// </summary>
public class TelemetryMessageDto : IId
{
/// <summary>
/// Id сообщения в базе панели оператора
/// </summary>
public int Id { get; set; }
public int Id { get; set; }
/// <summary>
/// отметка времени
/// </summary>
public DateTimeOffset Date { get; set; }
/// <summary>
/// отметка времени
/// </summary>
public DateTimeOffset Date { get; set; }
/// <summary>
/// глубина забоя
/// </summary>
public double WellDepth { get; set; }
/// <summary>
/// глубина забоя
/// </summary>
public double WellDepth { get; set; }
/// <summary>
/// Id события которое генерировало это сообщение
/// </summary>
public int IdEvent { get; set; }
/// <summary>
/// Id события которое генерировало это сообщение
/// </summary>
public int IdEvent { get; set; }
/// <summary>
/// идентификатор пользователя телеметрии
/// </summary>
public int? IdTelemetryUser { get; set; }
/// <summary>
/// идентификатор пользователя телеметрии
/// </summary>
public int? IdTelemetryUser { get; set; }
/// <summary>
/// аргумент №0 для подстановки в шаблон сообщения
/// </summary>
public string? Arg0 { get; set; }
/// <summary>
/// аргумент №0 для подстановки в шаблон сообщения
/// </summary>
public string? Arg0 { get; set; }
/// <summary>
/// аргумент №1 для подстановки в шаблон сообщения
/// </summary>
public string? Arg1 { get; set; }
/// <summary>
/// аргумент №1 для подстановки в шаблон сообщения
/// </summary>
public string? Arg1 { get; set; }
/// <summary>
/// аргумент №2 для подстановки в шаблон сообщения
/// </summary>
public string? Arg2 { get; set; }
/// <summary>
/// аргумент №2 для подстановки в шаблон сообщения
/// </summary>
public string? Arg2 { get; set; }
/// <summary>
/// аргумент №3 для подстановки в шаблон сообщения
/// </summary>
public string? Arg3 { get; set; }
}
/// <summary>
/// аргумент №3 для подстановки в шаблон сообщения
/// </summary>
public string? Arg3 { get; set; }
}

View File

@ -1,52 +1,51 @@
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// Пользователь панели оператора
/// </summary>
public class TelemetryUserDto : IId
{
/// <inheritdoc/>
public int Id { get; set; }
/// <summary>
/// Пользователь панели оператора
/// Имя
/// </summary>
public class TelemetryUserDto : IId
public string? Name { get; set; }
/// <summary>
/// Фамилия
/// </summary>
public string Surname { get; set; } = null!;
/// <summary>
/// Отчество
/// </summary>
public string? Patronymic { get; set; }
/// <summary>
/// Уровень доступа
/// </summary>
public int? Level { get; set; }
/// <summary>
/// Собрать отображаемое имя пользователя
/// </summary>
/// <returns></returns>
public string MakeDisplayName()
{
/// <inheritdoc/>
public int Id { get; set; }
/// <summary>
/// Имя
/// </summary>
public string? Name { get; set; }
/// <summary>
/// Фамилия
/// </summary>
public string Surname { get; set; } = null!;
/// <summary>
/// Отчество
/// </summary>
public string? Patronymic { get; set; }
/// <summary>
/// Уровень доступа
/// </summary>
public int? Level { get; set; }
/// <summary>
/// Собрать отображаемое имя пользователя
/// </summary>
/// <returns></returns>
public string MakeDisplayName()
if (!string.IsNullOrEmpty(Surname))
{
if (!string.IsNullOrEmpty(Surname))
var s = Surname;
if (!string.IsNullOrEmpty(Name))
{
var s = Surname;
if (!string.IsNullOrEmpty(Name))
{
s += $"{Name[0]}.";
if (!string.IsNullOrEmpty(Patronymic))
s += $" {Patronymic[0]}.";
}
return s;
s += $"{Name[0]}.";
if (!string.IsNullOrEmpty(Patronymic))
s += $" {Patronymic[0]}.";
}
else
return $"User #{Id}";
return s;
}
else
return $"User #{Id}";
}
}

View File

@ -1,47 +1,46 @@
using System;
namespace AsbCloudApp.Data.SAUB
namespace AsbCloudApp.Data.SAUB;
/// <summary>
/// DTO телеметрии наработки талевого каната от панели бурильщика
/// </summary>
public class TelemetryWirelineRunOutBaseDto
{
/// <summary>
/// DTO телеметрии наработки талевого каната от панели бурильщика
/// отметка времени
/// </summary>
public class TelemetryWirelineRunOutBaseDto
{
/// <summary>
/// отметка времени
/// </summary>
public DateTimeOffset DateTime { get; set; }
/// <summary>
/// Наработка талевого каната с момента перетяжки каната, т*км
/// </summary>
public float Hauling { get; set; }
/// <summary>
/// Наработка талевого каната до сигнализации о необходимости перетяжки, т*км
/// </summary>
public float HaulingWarnSp { get; set; }
/// <summary>
/// Наработка талевого каната с момента замены каната, т*км
/// </summary>
public float Replace { get; set; }
/// <summary>
/// Наработка талевого каната до сигнализации о необходимости замены, т*км
/// </summary>
public float ReplaceWarnSp { get; set; }
}
public DateTimeOffset DateTime { get; set; }
/// <summary>
/// DTO телеметрии наработки талевого каната
/// Наработка талевого каната с момента перетяжки каната, т*км
/// </summary>
public class TelemetryWirelineRunOutDto : TelemetryWirelineRunOutBaseDto
{
public float Hauling { get; set; }
/// <summary>
/// Информация по скважине
/// </summary>
public WellInfoDto WellInfo { get; set; } = null!;
}
/// <summary>
/// Наработка талевого каната до сигнализации о необходимости перетяжки, т*км
/// </summary>
public float HaulingWarnSp { get; set; }
/// <summary>
/// Наработка талевого каната с момента замены каната, т*км
/// </summary>
public float Replace { get; set; }
/// <summary>
/// Наработка талевого каната до сигнализации о необходимости замены, т*км
/// </summary>
public float ReplaceWarnSp { get; set; }
}
/// <summary>
/// DTO телеметрии наработки талевого каната
/// </summary>
public class TelemetryWirelineRunOutDto : TelemetryWirelineRunOutBaseDto
{
/// <summary>
/// Информация по скважине
/// </summary>
public WellInfoDto WellInfo { get; set; } = null!;
}

View File

@ -2,61 +2,60 @@ using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Описание данных графика работ
/// </summary>
public class ScheduleDto : IId, IWellRelated, IValidatableObject
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <inheritdoc/>
[Required]
public int IdWell { get; set; }
/// <summary>
/// Описание данных графика работ
/// Идентификатор бурильщика
/// </summary>
public class ScheduleDto : IId, IWellRelated, IValidatableObject
[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 DateTimeOffset DrillStart { get; set; }
/// <summary>
/// Конец бурения
/// </summary>
[Required]
public DateTimeOffset DrillEnd { get; set; }
/// <summary>
/// Бурильщик
/// </summary>
public DrillerDto? Driller { get; set; }
/// <inheritdoc/>
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
/// <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 DateTimeOffset DrillStart { get; set; }
/// <summary>
/// Конец бурения
/// </summary>
[Required]
public DateTimeOffset DrillEnd { get; set; }
/// <summary>
/// Бурильщик
/// </summary>
public DrillerDto? Driller { get; set; }
/// <inheritdoc/>
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(DrillStart >= DrillEnd)
yield return new ValidationResult($"DrillStart > DrillEnd");
}
if(DrillStart >= DrillEnd)
yield return new ValidationResult($"DrillStart > DrillEnd");
}
}

View File

@ -1,51 +1,50 @@
using System;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// временная зона
/// </summary>
public class SimpleTimezoneDto
{
/// <summary>
/// временная зона
/// смещение в часах относительно UTC
/// </summary>
public class SimpleTimezoneDto
public double Hours { get; set; }
/// <summary>
/// идентификатор часовой зоны
/// </summary>
public string? TimezoneId { get; set; }
/// <summary>
/// запрет на переопределение
/// </summary>
public bool IsOverride { get; set; }
/// <summary>
/// Смещение часового пояса
/// </summary>
public TimeSpan Offset => TimeSpan.FromHours(Hours);
/// <inheritdoc/>
public override bool Equals(object? obj)
{
/// <summary>
/// смещение в часах относительно UTC
/// </summary>
public double Hours { get; set; }
/// <summary>
/// идентификатор часовой зоны
/// </summary>
public string? TimezoneId { get; set; }
/// <summary>
/// запрет на переопределение
/// </summary>
public bool IsOverride { get; set; }
/// <summary>
/// Смещение часового пояса
/// </summary>
public TimeSpan Offset => TimeSpan.FromHours(Hours);
/// <inheritdoc/>
public override bool Equals(object? obj)
{
if (obj is SimpleTimezoneDto tTimeZone
&& tTimeZone.Hours == Hours
&& tTimeZone.TimezoneId == TimezoneId
&& tTimeZone.IsOverride == IsOverride)
return true;
return false;
}
/// <inheritdoc/>
public override int GetHashCode()
=> Hours.GetHashCode()
| TimezoneId?.GetHashCode()??-1
| IsOverride.GetHashCode();
/// <inheritdoc/>
public override string ToString()
=> $"{TimezoneId} (UTC+{Hours:00.##})";
if (obj is SimpleTimezoneDto tTimeZone
&& tTimeZone.Hours == Hours
&& tTimeZone.TimezoneId == TimezoneId
&& tTimeZone.IsOverride == IsOverride)
return true;
return false;
}
/// <inheritdoc/>
public override int GetHashCode()
=> Hours.GetHashCode()
| TimezoneId?.GetHashCode()??-1
| IsOverride.GetHashCode();
/// <inheritdoc/>
public override string ToString()
=> $"{TimezoneId} (UTC+{Hours:00.##})";
}

View File

@ -4,41 +4,40 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO, описывающая аналитику удержания в клиньях
/// </summary>
public class SlipsStatDto
{
/// <summary>
/// DTO, описывающая аналитику удержания в клиньях
/// ФИО бурильщика
/// </summary>
public class SlipsStatDto
{
/// <summary>
/// ФИО бурильщика
/// </summary>
public string DrillerName { get; set; } = null!;
public string DrillerName { get; set; } = null!;
/// <summary>
/// Количество скважин
/// </summary>
public int WellCount { get; set; }
/// <summary>
/// Количество скважин
/// </summary>
public int WellCount { get; set; }
/// <summary>
/// Название секции
/// </summary>
public string SectionCaption { get; set; } = null!;
/// <summary>
/// Название секции
/// </summary>
public string SectionCaption { get; set; } = null!;
/// <summary>
/// Количество удержаний в клиньях, шт.
/// </summary>
public int SlipsCount { get; set; }
/// <summary>
/// Количество удержаний в клиньях, шт.
/// </summary>
public int SlipsCount { get; set; }
/// <summary>
/// Время удержания в клиньях, мин.
/// </summary>
public double SlipsTimeInMinutes { get; set; }
/// <summary>
/// Время удержания в клиньях, мин.
/// </summary>
public double SlipsTimeInMinutes { get; set; }
/// <summary>
/// Проходка, м.
/// </summary>
public double SectionDepth { get; set; }
}
/// <summary>
/// Проходка, м.
/// </summary>
public double SectionDepth { get; set; }
}

View File

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

View File

@ -1,69 +1,68 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO статистики операций
/// </summary>
public class StatOperationsDto
{
/// <summary>
/// DTO статистики операций
/// Дата и время начала
/// </summary>
public class StatOperationsDto
{
/// <summary>
/// Дата и время начала
/// </summary>
public DateTimeOffset? Start { get; set; }
public DateTimeOffset? Start { get; set; }
/// <summary>
/// Дата и время окончания
/// </summary>
public DateTimeOffset? End { get; set; }
/// <summary>
/// Дата и время окончания
/// </summary>
public DateTimeOffset? End { get; set; }
/// <summary>
/// Глубина, м
/// </summary>
[Required]
public double WellDepthStart { get; set; }
/// <summary>
/// Глубина, м
/// </summary>
[Required]
public double WellDepthStart { get; set; }
/// <summary>
/// Глубина, м
/// </summary>
[Required]
public double WellDepthEnd { get; set; }
/// <summary>
/// Глубина, м
/// </summary>
[Required]
public double WellDepthEnd { get; set; }
/// <summary>
/// Рейсовая скорость, м/час
/// </summary>
[Required]
public double RouteSpeed { get; set; }
/// <summary>
/// Рейсовая скорость, м/час
/// </summary>
[Required]
public double RouteSpeed { get; set; }
/// <summary>
/// Механическая скорость проходки, м/час
/// </summary>
[Required]
public double Rop { get; set; }
/// <summary>
/// Механическая скорость проходки, м/час
/// </summary>
[Required]
public double Rop { get; set; }
/// <summary>
/// Скорость подъема КНБК
/// </summary>
[Required]
public double BhaUpSpeed { get; set; }
/// <summary>
/// Скорость подъема КНБК
/// </summary>
[Required]
public double BhaUpSpeed { get; set; }
/// <summary>
/// Скорость спуска КНБК
/// </summary>
[Required]
public double BhaDownSpeed { get; set; }
/// <summary>
/// Скорость спуска КНБК
/// </summary>
[Required]
public double BhaDownSpeed { get; set; }
/// <summary>
/// Скорость спуска обсадной колонны
/// </summary>
[Required]
public double CasingDownSpeed { get; set; }
/// <summary>
/// Скорость спуска обсадной колонны
/// </summary>
[Required]
public double CasingDownSpeed { get; set; }
/// <summary>
/// Непроизводительное время
/// </summary>
[Required]
public double NonProductiveHours { get; set; }
}
/// <summary>
/// Непроизводительное время
/// </summary>
[Required]
public double NonProductiveHours { get; set; }
}

View File

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

@ -3,73 +3,72 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO статистики по операциям за скважину
/// </summary>
public class StatWellDto : IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
/// <summary>
/// DTO статистики по операциям за скважину
/// название
/// </summary>
public class StatWellDto : IId
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
[Required]
public string Caption { get; set; } = string.Empty;
/// <summary>
/// название
/// </summary>
[Required]
public string Caption { get; set; } = string.Empty;
/// <summary>
/// тип скважины
/// </summary>
[Required]
public string WellType { 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 int IdState { get; set; }
/// <summary>
/// текст состояния скважины
/// </summary>
[Required]
public string State { get; set; } = string.Empty;
/// <summary>
/// текст состояния скважины
/// </summary>
[Required]
public string State { get; set; } = string.Empty;
/// <summary>
/// дата прихода последней телеметрии
/// </summary>
[Required]
public DateTimeOffset LastTelemetryDate { get; set; }
/// <summary>
/// дата прихода последней телеметрии
/// </summary>
[Required]
public DateTimeOffset LastTelemetryDate { get; set; }
/// <summary>
/// Статистика по секциям
/// </summary>
[Required]
public IEnumerable<StatSectionDto> Sections { get; set; } = Enumerable.Empty<StatSectionDto>();
/// <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 PlanFactDto<StatOperationsDto> Total { get; set; } = new();
/// <summary>
/// компании участвующие в строительстве скважины
/// </summary>
[Required]
public IEnumerable<CompanyDto> Companies { get; set; } = Enumerable.Empty<CompanyDto>();
/// <summary>
/// компании участвующие в строительстве скважины
/// </summary>
[Required]
public IEnumerable<CompanyDto> Companies { get; set; } = Enumerable.Empty<CompanyDto>();
/// <summary>
/// Отставание от ГГД, дни
/// </summary>
public double? TvdLagDays { get; set; }
/// <summary>
/// Кол-во дней бурения по ГГД
/// </summary>
public double? TvdDrillingDays { get; set; }
}
/// <summary>
/// Отставание от ГГД, дни
/// </summary>
public double? TvdLagDays { get; set; }
/// <summary>
/// Кол-во дней бурения по ГГД
/// </summary>
public double? TvdDrillingDays { get; set; }
}

View File

@ -1,26 +1,25 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.Subsystems
namespace AsbCloudApp.Data.Subsystems;
/// <summary>
/// Описание параметров подсистемы
/// </summary>
public class SubsystemDto : IId
{
/// <summary>
/// Описание параметров подсистемы
/// Идентификатор подсистемы
/// </summary>
public class SubsystemDto : IId
{
/// <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;
}
[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,52 +1,51 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.Subsystems
namespace AsbCloudApp.Data.Subsystems;
/// <summary>
/// Статистика подсистемы
/// </summary>
public class SubsystemStatDto
{
/// <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; }
}
[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,44 +1,43 @@
using AsbCloudApp.Data.SAUB;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO телеметрии панели
/// </summary>
public class TelemetryBaseDto : IId
{
/// <inheritdoc/>
public int Id { get; set; }
/// <summary>
/// уникальный идентификатор телеметрии по которому панель оператора присылает данные
/// </summary>
public string RemoteUid { get; set; } = null!;
/// <summary>
/// информация о бурении, панели оператора и контроллерах
/// </summary>
public TelemetryInfoDto? Info { get; set; }
/// <summary>
/// Смещение часового пояса от UTC
/// </summary>
public SimpleTimezoneDto? TimeZone { get; set; }
}
/// <summary>
/// DTO телеметрии панели с скважиной
/// </summary>
public class TelemetryDto : TelemetryBaseDto
{
/// <summary>
/// DTO телеметрии панели
/// ИД скважины
/// </summary>
public class TelemetryBaseDto : IId
{
/// <inheritdoc/>
public int Id { get; set; }
/// <summary>
/// уникальный идентификатор телеметрии по которому панель оператора присылает данные
/// </summary>
public string RemoteUid { get; set; } = null!;
/// <summary>
/// информация о бурении, панели оператора и контроллерах
/// </summary>
public TelemetryInfoDto? Info { get; set; }
/// <summary>
/// Смещение часового пояса от UTC
/// </summary>
public SimpleTimezoneDto? TimeZone { get; set; }
}
public int? IdWell { get; set; }
/// <summary>
/// DTO телеметрии панели с скважиной
/// DTO скважины
/// </summary>
public class TelemetryDto : TelemetryBaseDto
{
/// <summary>
/// ИД скважины
/// </summary>
public int? IdWell { get; set; }
/// <summary>
/// DTO скважины
/// </summary>
public WellInfoDto? Well { get; set; }
}
public WellInfoDto? Well { get; set; }
}

View File

@ -1,159 +1,158 @@
using System;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO времени
/// </summary>
public class TimeDto : IComparable<TimeDto>
{
private int hour = 0;
private int minute = 0;
private int second = 0;
/// <summary>
/// DTO времени
/// час
/// </summary>
public class TimeDto : IComparable<TimeDto>
public int Hour
{
private int hour = 0;
private int minute = 0;
private int second = 0;
/// <summary>
/// час
/// </summary>
public int Hour
get => hour;
set
{
get => hour;
set
{
if (value > 23 || value < 0)
throw new ArgumentOutOfRangeException(nameof(Hour), "hour should be in [0; 23]");
hour = value;
}
if (value > 23 || value < 0)
throw new ArgumentOutOfRangeException(nameof(Hour), "hour should be in [0; 23]");
hour = value;
}
}
/// <summary>
/// минута
/// </summary>
public int Minute
{
get => minute;
set
{
if (value > 59 || value < 0)
throw new ArgumentOutOfRangeException(nameof(minute), "minute should be in [0; 59]");
minute = value;
}
}
/// <summary>
/// секунда
/// </summary>
public int Second
{
get => second;
set
{
if (value > 59 || value < 0)
throw new ArgumentOutOfRangeException(nameof(second), "second should be in [0; 59]");
second = value;
}
}
/// <summary>
/// Кол-во секунд с начала суток
/// </summary>
public int TotalSeconds => (Hour * 60 + minute) * 60 + second;
/// <inheritdoc/>
public TimeDto()
{ }
/// <inheritdoc/>
public TimeDto(int hour = 0, int minute = 0, int second = 0)
{
this.hour = hour;
this.minute = minute;
this.second = second;
}
/// <inheritdoc/>
public TimeDto(TimeOnly time)
{
hour = time.Hour;
minute = time.Minute;
second = time.Second;
}
/// <inheritdoc/>
public TimeDto(DateTime fullDate)
{
hour = fullDate.Hour;
minute = fullDate.Minute;
second = fullDate.Second;
}
/// <inheritdoc/>
public TimeDto(DateTimeOffset fullDate)
{
hour = fullDate.Hour;
minute = fullDate.Minute;
second = fullDate.Second;
}
/// <summary>
/// Makes System.TimeOnly
/// </summary>
/// <returns>System.TimeOnly</returns>
public TimeOnly MakeTimeOnly() => new(Hour, Minute, Second);
/// <inheritdoc/>
public override string ToString()
{
var str = $"{Hour:00}:{Minute:00}:{Second:00}";
return str;
}
/// <inheritdoc/>
public static bool operator ==(TimeDto a, TimeDto b) => a?.TotalSeconds == b?.TotalSeconds;
/// <inheritdoc/>
public static bool operator !=(TimeDto a, TimeDto b) => !(a == b);
/// <inheritdoc/>
public static bool operator <=(TimeDto a, TimeDto b) => a.TotalSeconds <= b.TotalSeconds;
/// <inheritdoc/>
public static bool operator >=(TimeDto a, TimeDto b) => a.TotalSeconds >= b.TotalSeconds;
/// <inheritdoc/>
public static bool operator <(TimeDto a, TimeDto b) => a.TotalSeconds < b.TotalSeconds;
/// <inheritdoc/>
public static bool operator >(TimeDto a, TimeDto b) => a.TotalSeconds > b.TotalSeconds;
/// <inheritdoc/>
public int CompareTo(TimeDto? other)
=> TotalSeconds - other?.TotalSeconds??0;
/// <inheritdoc/>
public override bool Equals(object? obj)
{
if (ReferenceEquals(this, obj))
{
return true;
}
/// <summary>
/// минута
/// </summary>
public int Minute
if (obj is null)
{
get => minute;
set
{
if (value > 59 || value < 0)
throw new ArgumentOutOfRangeException(nameof(minute), "minute should be in [0; 59]");
minute = value;
}
}
/// <summary>
/// секунда
/// </summary>
public int Second
{
get => second;
set
{
if (value > 59 || value < 0)
throw new ArgumentOutOfRangeException(nameof(second), "second should be in [0; 59]");
second = value;
}
}
/// <summary>
/// Кол-во секунд с начала суток
/// </summary>
public int TotalSeconds => (Hour * 60 + minute) * 60 + second;
/// <inheritdoc/>
public TimeDto()
{ }
/// <inheritdoc/>
public TimeDto(int hour = 0, int minute = 0, int second = 0)
{
this.hour = hour;
this.minute = minute;
this.second = second;
}
/// <inheritdoc/>
public TimeDto(TimeOnly time)
{
hour = time.Hour;
minute = time.Minute;
second = time.Second;
}
/// <inheritdoc/>
public TimeDto(DateTime fullDate)
{
hour = fullDate.Hour;
minute = fullDate.Minute;
second = fullDate.Second;
}
/// <inheritdoc/>
public TimeDto(DateTimeOffset fullDate)
{
hour = fullDate.Hour;
minute = fullDate.Minute;
second = fullDate.Second;
}
/// <summary>
/// Makes System.TimeOnly
/// </summary>
/// <returns>System.TimeOnly</returns>
public TimeOnly MakeTimeOnly() => new(Hour, Minute, Second);
/// <inheritdoc/>
public override string ToString()
{
var str = $"{Hour:00}:{Minute:00}:{Second:00}";
return str;
}
/// <inheritdoc/>
public static bool operator ==(TimeDto a, TimeDto b) => a?.TotalSeconds == b?.TotalSeconds;
/// <inheritdoc/>
public static bool operator !=(TimeDto a, TimeDto b) => !(a == b);
/// <inheritdoc/>
public static bool operator <=(TimeDto a, TimeDto b) => a.TotalSeconds <= b.TotalSeconds;
/// <inheritdoc/>
public static bool operator >=(TimeDto a, TimeDto b) => a.TotalSeconds >= b.TotalSeconds;
/// <inheritdoc/>
public static bool operator <(TimeDto a, TimeDto b) => a.TotalSeconds < b.TotalSeconds;
/// <inheritdoc/>
public static bool operator >(TimeDto a, TimeDto b) => a.TotalSeconds > b.TotalSeconds;
/// <inheritdoc/>
public int CompareTo(TimeDto? other)
=> TotalSeconds - other?.TotalSeconds??0;
/// <inheritdoc/>
public override bool Equals(object? obj)
{
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj is null)
{
return false;
}
if (obj is TimeDto objTime)
{
return objTime == this;
}
return false;
}
/// <inheritdoc/>
public override int GetHashCode()
if (obj is TimeDto objTime)
{
return base.GetHashCode();
return objTime == this;
}
return false;
}
/// <inheritdoc/>
public override int GetHashCode()
{
return base.GetHashCode();
}
}

View File

@ -1,30 +1,29 @@
namespace AsbCloudApp.Data.Trajectory
namespace AsbCloudApp.Data.Trajectory;
/// <summary>
/// Визуализация траектории 3D
/// </summary>
public class TrajectoryCartesianDto
{
/// <summary>
/// Координаты по оси X, в сторону востока (м)
/// </summary>
public double X { get; set; }
/// <summary>
/// Визуализация траектории 3D
/// Координаты по оси Y, в высоту (м)
/// </summary>
public class TrajectoryCartesianDto
{
/// <summary>
/// Координаты по оси X, в сторону востока (м)
/// </summary>
public double X { get; set; }
/// <summary>
/// Координаты по оси Y, в высоту (м)
/// </summary>
public double Y { get; set; }
/// <summary>
/// Координаты по оси Z, в сторону юга (м)
/// </summary>
public double Z { get; set; }
}
public double Y { get; set; }
/// <summary>
/// Визуализация фактической траектории 3D
/// Координаты по оси Z, в сторону юга (м)
/// </summary>
public class TrajectoryCartesianFactDto : TrajectoryCartesianDto { }
public double Z { get; set; }
}
/// <summary>
/// Визуализация фактической траектории 3D
/// </summary>
public class TrajectoryCartesianFactDto : TrajectoryCartesianDto { }

View File

@ -1,18 +1,17 @@
namespace AsbCloudApp.Data.Trajectory
namespace AsbCloudApp.Data.Trajectory;
/// <summary>
/// Визуализация траектории 3D для построения радиуса цели
/// </summary>
public class TrajectoryCartesianPlanDto : TrajectoryCartesianFactDto
{
/// <summary>
/// Визуализация траектории 3D для построения радиуса цели
/// радиус цели
/// </summary>
public class TrajectoryCartesianPlanDto : TrajectoryCartesianFactDto
{
/// <summary>
/// радиус цели
/// </summary>
public double? Radius { get; set; }
public double? Radius { get; set; }
/// <summary>
/// комментарий
/// </summary>
public string? Comment { get; set; }
}
/// <summary>
/// комментарий
/// </summary>
public string? Comment { get; set; }
}

View File

@ -3,60 +3,59 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data.Trajectory
namespace AsbCloudApp.Data.Trajectory;
/// <summary>
/// Базовая географическая траектория
/// </summary>
public abstract class TrajectoryGeoDto : IId, IValidatableObject
{
/// <summary>
/// Базовая географическая траектория
/// ИД строки с координатами
/// </summary>
public int Id { get; set; }
/// <summary>
/// Id скважины
/// </summary>
public abstract class TrajectoryGeoDto : IId, IValidatableObject
public int IdWell { get; set; }
/// <summary>
/// Глубина по стволу
/// </summary>
public double WellboreDepth { get; set; }
/// <summary>
/// Угол зенитный
/// </summary>
public double ZenithAngle { get; set; }
/// <summary>
/// Азимут Географ.
/// </summary>
public double AzimuthGeo { get; set; }
/// <summary>
/// Азимут Магнитный
/// </summary>
public double? AzimuthMagnetic { get; set; }
/// <summary>
/// Глубина вертикальная
/// </summary>
public double? VerticalDepth { get; set; }
/// <summary>
/// Дата загрузки
/// </summary>
public DateTimeOffset UpdateDate { get; set; }
/// <summary>
/// ИД пользователя
/// </summary>
public int IdUser { get; set; }
/// <inheritdoc />
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
/// <summary>
/// ИД строки с координатами
/// </summary>
public int Id { get; set; }
/// <summary>
/// Id скважины
/// </summary>
public int IdWell { get; set; }
/// <summary>
/// Глубина по стволу
/// </summary>
public double WellboreDepth { get; set; }
/// <summary>
/// Угол зенитный
/// </summary>
public double ZenithAngle { get; set; }
/// <summary>
/// Азимут Географ.
/// </summary>
public double AzimuthGeo { get; set; }
/// <summary>
/// Азимут Магнитный
/// </summary>
public double? AzimuthMagnetic { get; set; }
/// <summary>
/// Глубина вертикальная
/// </summary>
public double? VerticalDepth { get; set; }
/// <summary>
/// Дата загрузки
/// </summary>
public DateTimeOffset UpdateDate { get; set; }
/// <summary>
/// ИД пользователя
/// </summary>
public int IdUser { get; set; }
/// <inheritdoc />
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
return Enumerable.Empty<ValidationResult>();
}
return Enumerable.Empty<ValidationResult>();
}
}

View File

@ -1,21 +1,20 @@
using System;
namespace AsbCloudApp.Data.Trajectory
namespace AsbCloudApp.Data.Trajectory;
/// <summary>
/// Формирование данных по плановой географической траектории
/// </summary>
public class TrajectoryGeoPlanDto : TrajectoryGeoDto
{
/// <summary>
/// Формирование данных по плановой географической траектории
/// Радиус цели
/// </summary>
public class TrajectoryGeoPlanDto : TrajectoryGeoDto
{
/// <summary>
/// Радиус цели
/// </summary>
public double? Radius { get; set; }
public double? Radius { get; set; }
/// <summary>
/// Комментарии
/// </summary>
public string? Comment { get; set; }
}
/// <summary>
/// Комментарии
/// </summary>
public string? Comment { get; set; }
}

View File

@ -1,25 +1,24 @@
namespace AsbCloudApp.Data.Trajectory
namespace AsbCloudApp.Data.Trajectory;
/// <summary>
/// DTO объединяющее плановые и фактические значения траекторий
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="V"></typeparam>
public class TrajectoryPlanFactDto<T, V>
{
/// <summary>
/// DTO объединяющее плановые и фактические значения траекторий
/// Плановое значение
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="V"></typeparam>
public class TrajectoryPlanFactDto<T, V>
{
/// <summary>
/// Плановое значение
/// </summary>
public T? Plan { get; set; }
public T? Plan { get; set; }
/// <summary>
/// Фактическое значение
/// </summary>
public V? FactManual { get; set; }
/// <summary>
/// Фактическое значение
/// </summary>
public V? FactManual { get; set; }
/// <summary>
/// Фактическое ннб-значение
/// </summary>
public V? FactNnb { get; set; }
}
/// <summary>
/// Фактическое ннб-значение
/// </summary>
public V? FactNnb { get; set; }
}

View File

@ -1,96 +1,95 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.User
namespace AsbCloudApp.Data.User;
/// <summary>
/// DTO пользователя платформы
/// </summary>
public class UserDto : IId
{
/// <inheritdoc/>
public int Id { get; set; }
/// <summary>
/// DTO пользователя платформы
/// логин
/// </summary>
public class UserDto : IId
[Required(ErrorMessage = "Логин не должен быть пустым")]
[StringLength(50, MinimumLength = 3, ErrorMessage = "Допустимая длина логина от 3 до 50 символов")]
public string Login { get; set; } = null!;
/// <summary>
/// Имя
/// </summary>
[StringLength(50, MinimumLength = 0, ErrorMessage = "Допустимая длина имени от 1 до 50 символов")]
public string? Name { get; set; }
/// <summary>
/// Фамилия
/// </summary>
[StringLength(50, MinimumLength = 0, ErrorMessage = "Допустимая длина фамилии от 1 до 50 символов")]
public string? Surname { get; set; }
/// <summary>
/// Отчество
/// </summary>
[StringLength(50, MinimumLength = 0, ErrorMessage = "Допустимая длина отчества от 1 до 50 символов")]
public string? Patronymic { get; set; }
/// <summary>
/// Email
/// </summary>
[Required]
[StringLength(260, MinimumLength = 3, ErrorMessage = "Допустимая длина email от 3 до 260 символов")]
public string Email { get; set; } = null!;
/// <summary>
/// Phone
/// </summary>
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина телефона от 1 до 50 символов")]
public string? Phone { get; set; }
/// <summary>
/// Должность
/// </summary>
[StringLength(100, MinimumLength = 1, ErrorMessage = "Допустимая длина должности от 1 до 100 символов")]
public string? Position { get; set; }
/// <summary>
/// Id компании
/// </summary>
[Required]
public int IdCompany { get; set; }
/// <summary>
/// Id состояния пользователя
/// 0 - не активен,
/// 1 - активен,
/// 2 - заблокирован
/// </summary>
public short IdState { get; set; }
/// <summary>
/// DTO компании
/// </summary>
public CompanyDto? Company { get; set; }
/// <summary>
/// Получение отображаемого имени
/// </summary>
/// <returns></returns>
public string MakeDisplayName()
{
/// <inheritdoc/>
public int Id { get; set; }
if (string.IsNullOrEmpty(Surname))
return Login;
/// <summary>
/// логин
/// </summary>
[Required(ErrorMessage = "Логин не должен быть пустым")]
[StringLength(50, MinimumLength = 3, ErrorMessage = "Допустимая длина логина от 3 до 50 символов")]
public string Login { get; set; } = null!;
/// <summary>
/// Имя
/// </summary>
[StringLength(50, MinimumLength = 0, ErrorMessage = "Допустимая длина имени от 1 до 50 символов")]
public string? Name { get; set; }
/// <summary>
/// Фамилия
/// </summary>
[StringLength(50, MinimumLength = 0, ErrorMessage = "Допустимая длина фамилии от 1 до 50 символов")]
public string? Surname { get; set; }
/// <summary>
/// Отчество
/// </summary>
[StringLength(50, MinimumLength = 0, ErrorMessage = "Допустимая длина отчества от 1 до 50 символов")]
public string? Patronymic { get; set; }
/// <summary>
/// Email
/// </summary>
[Required]
[StringLength(260, MinimumLength = 3, ErrorMessage = "Допустимая длина email от 3 до 260 символов")]
public string Email { get; set; } = null!;
/// <summary>
/// Phone
/// </summary>
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина телефона от 1 до 50 символов")]
public string? Phone { get; set; }
/// <summary>
/// Должность
/// </summary>
[StringLength(100, MinimumLength = 1, ErrorMessage = "Допустимая длина должности от 1 до 100 символов")]
public string? Position { get; set; }
/// <summary>
/// Id компании
/// </summary>
[Required]
public int IdCompany { get; set; }
/// <summary>
/// Id состояния пользователя
/// 0 - не активен,
/// 1 - активен,
/// 2 - заблокирован
/// </summary>
public short IdState { get; set; }
/// <summary>
/// DTO компании
/// </summary>
public CompanyDto? Company { get; set; }
/// <summary>
/// Получение отображаемого имени
/// </summary>
/// <returns></returns>
public string MakeDisplayName()
var s = Surname;
if (!string.IsNullOrEmpty(Name))
{
if (string.IsNullOrEmpty(Surname))
return Login;
var s = Surname;
if (!string.IsNullOrEmpty(Name))
{
s += $"{Name[0]}.";
if (!string.IsNullOrEmpty(Patronymic))
s += $" {Patronymic[0]}.";
}
return s;
s += $"{Name[0]}.";
if (!string.IsNullOrEmpty(Patronymic))
s += $" {Patronymic[0]}.";
}
return s;
}
}

View File

@ -1,14 +1,13 @@
using System.Collections.Generic;
using System.Linq;
namespace AsbCloudApp.Data.User
namespace AsbCloudApp.Data.User;
/// <inheritdoc/>
public class UserExtendedDto : UserDto
{
/// <inheritdoc/>
public class UserExtendedDto : UserDto
{
/// <summary>
/// Роли пользователя
/// </summary>
public IEnumerable<string> RoleNames { get; set; } = Enumerable.Empty<string>();
}
/// <summary>
/// Роли пользователя
/// </summary>
public IEnumerable<string> RoleNames { get; set; } = Enumerable.Empty<string>();
}

View File

@ -1,15 +1,14 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.User
namespace AsbCloudApp.Data.User;
/// <inheritdoc/>
public class UserRegistrationDto : UserDto
{
/// <inheritdoc/>
public class UserRegistrationDto : UserDto
{
/// <summary>
/// пароль, используется только при регистрации.
/// </summary>
[Required(ErrorMessage = "Пароль не должен быть пустым")]
[StringLength(50, MinimumLength = 3, ErrorMessage = "Допустимая длина пароля от 3 до 50 символов")]
public string Password { get; set; } = null!;
}
/// <summary>
/// пароль, используется только при регистрации.
/// </summary>
[Required(ErrorMessage = "Пароль не должен быть пустым")]
[StringLength(50, MinimumLength = 3, ErrorMessage = "Допустимая длина пароля от 3 до 50 символов")]
public string Password { get; set; } = null!;
}

View File

@ -2,36 +2,35 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data.User
namespace AsbCloudApp.Data.User;
/// <summary>
/// Роль пользователя платформы
/// </summary>
public class UserRoleDto : IId
{
/// <inheritdoc/>
public int Id { get; set; }
/// <summary>
/// Роль пользователя платформы
/// название
/// </summary>
public class UserRoleDto : IId
{
/// <inheritdoc/>
public int Id { get; set; }
[Required]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина названия роли от 1 до 50 символов")]
public string Caption { get; set; } = null!;
/// <summary>
/// название
/// </summary>
[Required]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина названия роли от 1 до 50 символов")]
public string Caption { get; set; } = null!;
/// <summary>
/// id типа роли
/// </summary>
public int IdType { get; set; }
/// <summary>
/// id типа роли
/// </summary>
public int IdType { get; set; }
/// <summary>
/// список разрешений
/// </summary>
public IEnumerable<PermissionDto> Permissions { get; set; } = Enumerable.Empty<PermissionDto>();
/// <summary>
/// список разрешений
/// </summary>
public IEnumerable<PermissionDto> Permissions { get; set; } = Enumerable.Empty<PermissionDto>();
/// <summary>
/// Включенные роли
/// </summary>
public virtual IEnumerable<UserRoleDto> Roles { get; set; } = Enumerable.Empty<UserRoleDto>();
}
/// <summary>
/// Включенные роли
/// </summary>
public virtual IEnumerable<UserRoleDto> Roles { get; set; } = Enumerable.Empty<UserRoleDto>();
}

View File

@ -1,19 +1,18 @@
using System.Collections.Generic;
using System.Linq;
namespace AsbCloudApp.Data.User
{
/// <inheritdoc/>
public class UserTokenDto : UserExtendedDto
{
/// <summary>
/// все разрешения пользователя
/// </summary>
public IEnumerable<PermissionDto> Permissions { get; set; } = Enumerable.Empty<PermissionDto>();
namespace AsbCloudApp.Data.User;
/// <summary>
/// bearer token (для работы с web-api)
/// </summary>
public string Token { get; set; } = null!;
}
/// <inheritdoc/>
public class UserTokenDto : UserExtendedDto
{
/// <summary>
/// все разрешения пользователя
/// </summary>
public IEnumerable<PermissionDto> Permissions { get; set; } = Enumerable.Empty<PermissionDto>();
/// <summary>
/// bearer token (для работы с web-api)
/// </summary>
public string Token { get; set; } = null!;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,298 +1,297 @@
namespace AsbCloudApp.Data.WITS
namespace AsbCloudApp.Data.WITS;
/// <summary>
/// Record name: Резистивиметр MCR
/// Description: SibReciver. Резистивиметр MCR
/// Description2:
/// </summary>
public class Record50Dto : RecordBaseDto
{
/// <summary>
/// Record name: Резистивиметр MCR
/// Description: SibReciver. Резистивиметр MCR
/// Description2:
/// RecordId = 50,
/// ItemId = 8,
/// LongMnemonic = "DEPTBITM",
/// ShortMnemonic = "DBTM",
/// Description = "SibReceiver custom. Положение долота",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public class Record50Dto : RecordBaseDto
{
public float? Deptbitm { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 8,
/// LongMnemonic = "DEPTBITM",
/// ShortMnemonic = "DBTM",
/// Description = "SibReceiver custom. Положение долота",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 10,
/// LongMnemonic = "DEPTMEAS_MCRSTAT",
/// ShortMnemonic = "DEPTMEAS_MCRSTAT",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Deptbitm { get; set; }
public float? DeptmeasMcrstat { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 10,
/// LongMnemonic = "DEPTMEAS_MCRSTAT",
/// ShortMnemonic = "DEPTMEAS_MCRSTAT",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 11,
/// LongMnemonic = "MCRSTAT",
/// ShortMnemonic = "MCRSTAT",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? DeptmeasMcrstat { get; set; }
public float? Mcrstat { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 11,
/// LongMnemonic = "MCRSTAT",
/// ShortMnemonic = "MCRSTAT",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 12,
/// LongMnemonic = "DEPTMEAS_SLVL_mc",
/// ShortMnemonic = "DEPTMEAS_SLVL_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Mcrstat { get; set; }
public float? DeptmeasSlvlMc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 12,
/// LongMnemonic = "DEPTMEAS_SLVL_mc",
/// ShortMnemonic = "DEPTMEAS_SLVL_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 13,
/// LongMnemonic = "SLVL_mc",
/// ShortMnemonic = "SLVL_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? DeptmeasSlvlMc { get; set; }
public float? SlvlMc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 13,
/// LongMnemonic = "SLVL_mc",
/// ShortMnemonic = "SLVL_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 14,
/// LongMnemonic = "DEPTMEAS_GDP_mc",
/// ShortMnemonic = "DEPTMEAS_GDP_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? SlvlMc { get; set; }
public float? DeptmeasGdpMc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 14,
/// LongMnemonic = "DEPTMEAS_GDP_mc",
/// ShortMnemonic = "DEPTMEAS_GDP_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 15,
/// LongMnemonic = "GDP_mc",
/// ShortMnemonic = "GDP_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? DeptmeasGdpMc { get; set; }
public float? GdpMc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 15,
/// LongMnemonic = "GDP_mc",
/// ShortMnemonic = "GDP_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 16,
/// LongMnemonic = "DEPTMEAS_RA33F2_mc",
/// ShortMnemonic = "DEPTMEAS_RA33F2_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? GdpMc { get; set; }
public float? DeptmeasRa33f2Mc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 16,
/// LongMnemonic = "DEPTMEAS_RA33F2_mc",
/// ShortMnemonic = "DEPTMEAS_RA33F2_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 17,
/// LongMnemonic = "RA33F2_mc",
/// ShortMnemonic = "RA33F2_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? DeptmeasRa33f2Mc { get; set; }
public float? Ra33f2Mc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 17,
/// LongMnemonic = "RA33F2_mc",
/// ShortMnemonic = "RA33F2_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 18,
/// LongMnemonic = "DEPTMEAS_RP33F2_mc",
/// ShortMnemonic = "DEPTMEAS_RP33F2_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Ra33f2Mc { get; set; }
public float? DeptmeasRp33f2Mc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 18,
/// LongMnemonic = "DEPTMEAS_RP33F2_mc",
/// ShortMnemonic = "DEPTMEAS_RP33F2_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 19,
/// LongMnemonic = "RP33F2_mc",
/// ShortMnemonic = "RP33F2_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? DeptmeasRp33f2Mc { get; set; }
public float? Rp33f2Mc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 19,
/// LongMnemonic = "RP33F2_mc",
/// ShortMnemonic = "RP33F2_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 20,
/// LongMnemonic = "DEPTMEAS_RA33F4_mc",
/// ShortMnemonic = "DEPTMEAS_RA33F4_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Rp33f2Mc { get; set; }
public float? DeptmeasRa33f4Mc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 20,
/// LongMnemonic = "DEPTMEAS_RA33F4_mc",
/// ShortMnemonic = "DEPTMEAS_RA33F4_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 21,
/// LongMnemonic = "RA33F4_mc",
/// ShortMnemonic = "RA33F4_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? DeptmeasRa33f4Mc { get; set; }
public float? Ra33f4Mc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 21,
/// LongMnemonic = "RA33F4_mc",
/// ShortMnemonic = "RA33F4_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 22,
/// LongMnemonic = "DEPTMEAS_RP33F4_mc",
/// ShortMnemonic = "DEPTMEAS_RP33F4_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Ra33f4Mc { get; set; }
public float? DeptmeasRp33f4Mc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 22,
/// LongMnemonic = "DEPTMEAS_RP33F4_mc",
/// ShortMnemonic = "DEPTMEAS_RP33F4_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 23,
/// LongMnemonic = "RP33F4_mc",
/// ShortMnemonic = "RP33F4_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? DeptmeasRp33f4Mc { get; set; }
public float? Rp33f4Mc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 23,
/// LongMnemonic = "RP33F4_mc",
/// ShortMnemonic = "RP33F4_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 46,
/// LongMnemonic = "DEPTMEAS_RA33_mc",
/// ShortMnemonic = "DEPTMEAS_RA33_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Rp33f4Mc { get; set; }
public float? DeptmeasRa33Mc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 46,
/// LongMnemonic = "DEPTMEAS_RA33_mc",
/// ShortMnemonic = "DEPTMEAS_RA33_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 47,
/// LongMnemonic = "RA33_mc",
/// ShortMnemonic = "RA33_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? DeptmeasRa33Mc { get; set; }
public float? Ra33Mc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 47,
/// LongMnemonic = "RA33_mc",
/// ShortMnemonic = "RA33_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 28,
/// LongMnemonic = "DEPTMEAS_RP33_mc",
/// ShortMnemonic = "DEPTMEAS_RP33_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Ra33Mc { get; set; }
public float? DeptmeasRp33Mc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 28,
/// LongMnemonic = "DEPTMEAS_RP33_mc",
/// ShortMnemonic = "DEPTMEAS_RP33_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 50,
/// ItemId = 29,
/// LongMnemonic = "RP33_mc",
/// ShortMnemonic = "RP33_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? DeptmeasRp33Mc { get; set; }
public float? Rp33Mc { get; set; }
/// <summary>
/// RecordId = 50,
/// ItemId = 29,
/// LongMnemonic = "RP33_mc",
/// ShortMnemonic = "RP33_mc",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Rp33Mc { get; set; }
}
}

View File

@ -1,163 +1,162 @@
namespace AsbCloudApp.Data.WITS
namespace AsbCloudApp.Data.WITS;
/// <summary>
/// Record name: Передача полных
/// Description: SibReciver. Передача полных
/// Description2:
/// </summary>
public class Record60Dto : RecordBaseDto
{
/// <summary>
/// Record name: Передача полных
/// Description: SibReciver. Передача полных
/// Description2:
/// RecordId = 60,
/// ItemId = 99,
/// LongMnemonic = "DEPTBITM",
/// ShortMnemonic = "DBTM",
/// Description = "SibReceiver custom. Положение долота",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public class Record60Dto : RecordBaseDto
{
public float? Deptbitm { get; set; }
/// <summary>
/// RecordId = 60,
/// ItemId = 99,
/// LongMnemonic = "DEPTBITM",
/// ShortMnemonic = "DBTM",
/// Description = "SibReceiver custom. Положение долота",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 60,
/// ItemId = 10,
/// LongMnemonic = "DEPTMEAS",
/// ShortMnemonic = "DMEA",
/// Description = "SibReceiver custom. Точка Замера",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Deptbitm { get; set; }
public float? Deptmeas { get; set; }
/// <summary>
/// RecordId = 60,
/// ItemId = 10,
/// LongMnemonic = "DEPTMEAS",
/// ShortMnemonic = "DMEA",
/// Description = "SibReceiver custom. Точка Замера",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 60,
/// ItemId = 11,
/// LongMnemonic = "Gtot",
/// ShortMnemonic = "Gtot",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Deptmeas { get; set; }
public float? Gtot { get; set; }
/// <summary>
/// RecordId = 60,
/// ItemId = 11,
/// LongMnemonic = "Gtot",
/// ShortMnemonic = "Gtot",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 60,
/// ItemId = 12,
/// LongMnemonic = "Gx",
/// ShortMnemonic = "Gx",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Gtot { get; set; }
public float? Gx { get; set; }
/// <summary>
/// RecordId = 60,
/// ItemId = 12,
/// LongMnemonic = "Gx",
/// ShortMnemonic = "Gx",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 60,
/// ItemId = 13,
/// LongMnemonic = "Gy",
/// ShortMnemonic = "Gy",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Gx { get; set; }
public float? Gy { get; set; }
/// <summary>
/// RecordId = 60,
/// ItemId = 13,
/// LongMnemonic = "Gy",
/// ShortMnemonic = "Gy",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 60,
/// ItemId = 14,
/// LongMnemonic = "Gz",
/// ShortMnemonic = "Gz",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Gy { get; set; }
public float? Gz { get; set; }
/// <summary>
/// RecordId = 60,
/// ItemId = 14,
/// LongMnemonic = "Gz",
/// ShortMnemonic = "Gz",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 60,
/// ItemId = 15,
/// LongMnemonic = "Btot",
/// ShortMnemonic = "Btot",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Gz { get; set; }
public float? Btot { get; set; }
/// <summary>
/// RecordId = 60,
/// ItemId = 15,
/// LongMnemonic = "Btot",
/// ShortMnemonic = "Btot",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 60,
/// ItemId = 16,
/// LongMnemonic = "Bx",
/// ShortMnemonic = "Bx",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Btot { get; set; }
public float? Bx { get; set; }
/// <summary>
/// RecordId = 60,
/// ItemId = 16,
/// LongMnemonic = "Bx",
/// ShortMnemonic = "Bx",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 60,
/// ItemId = 17,
/// LongMnemonic = "By",
/// ShortMnemonic = "By",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Bx { get; set; }
public float? By { get; set; }
/// <summary>
/// RecordId = 60,
/// ItemId = 17,
/// LongMnemonic = "By",
/// ShortMnemonic = "By",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 60,
/// ItemId = 18,
/// LongMnemonic = "Bz",
/// ShortMnemonic = "Bz",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? By { get; set; }
public float? Bz { get; set; }
/// <summary>
/// RecordId = 60,
/// ItemId = 18,
/// LongMnemonic = "Bz",
/// ShortMnemonic = "Bz",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Bz { get; set; }
}
}

View File

@ -1,178 +1,177 @@
namespace AsbCloudApp.Data.WITS
namespace AsbCloudApp.Data.WITS;
/// <summary>
/// Record name: Резистивиметр Corvet
/// Description: SibReciver. Резистивиметр Corvet
/// Description2:
/// </summary>
public class Record61Dto : RecordBaseDto
{
/// <summary>
/// Record name: Резистивиметр Corvet
/// Description: SibReciver. Резистивиметр Corvet
/// Description2:
/// RecordId = 61,
/// ItemId = 99,
/// LongMnemonic = "DEPTBITM",
/// ShortMnemonic = "DBTM",
/// Description = "SibReceiver custom. Положение долота",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public class Record61Dto : RecordBaseDto
{
public float? Deptbitm { get; set; }
/// <summary>
/// RecordId = 61,
/// ItemId = 99,
/// LongMnemonic = "DEPTBITM",
/// ShortMnemonic = "DBTM",
/// Description = "SibReceiver custom. Положение долота",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 61,
/// ItemId = 10,
/// LongMnemonic = "DEPTMEAS",
/// ShortMnemonic = "DMEA",
/// Description = "SibReceiver custom. Точка Замера",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Deptbitm { get; set; }
public float? Deptmeas { get; set; }
/// <summary>
/// RecordId = 61,
/// ItemId = 10,
/// LongMnemonic = "DEPTMEAS",
/// ShortMnemonic = "DMEA",
/// Description = "SibReceiver custom. Точка Замера",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 61,
/// ItemId = 11,
/// LongMnemonic = "PHL1F1",
/// ShortMnemonic = "PHL1F1",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Deptmeas { get; set; }
public float? Phl1f1 { get; set; }
/// <summary>
/// RecordId = 61,
/// ItemId = 11,
/// LongMnemonic = "PHL1F1",
/// ShortMnemonic = "PHL1F1",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 61,
/// ItemId = 12,
/// LongMnemonic = "PHL1F2",
/// ShortMnemonic = "PHL1F2",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Phl1f1 { get; set; }
public float? Phl1f2 { get; set; }
/// <summary>
/// RecordId = 61,
/// ItemId = 12,
/// LongMnemonic = "PHL1F2",
/// ShortMnemonic = "PHL1F2",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 61,
/// ItemId = 13,
/// LongMnemonic = "PHL2F1",
/// ShortMnemonic = "PHL2F1",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Phl1f2 { get; set; }
public float? Phl2f1 { get; set; }
/// <summary>
/// RecordId = 61,
/// ItemId = 13,
/// LongMnemonic = "PHL2F1",
/// ShortMnemonic = "PHL2F1",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 61,
/// ItemId = 14,
/// LongMnemonic = "PHL2F2",
/// ShortMnemonic = "PHL2F2",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Phl2f1 { get; set; }
public float? Phl2f2 { get; set; }
/// <summary>
/// RecordId = 61,
/// ItemId = 14,
/// LongMnemonic = "PHL2F2",
/// ShortMnemonic = "PHL2F2",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 61,
/// ItemId = 15,
/// LongMnemonic = "ATT06H",
/// ShortMnemonic = "ATT06H",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Phl2f2 { get; set; }
public float? Att06h { get; set; }
/// <summary>
/// RecordId = 61,
/// ItemId = 15,
/// LongMnemonic = "ATT06H",
/// ShortMnemonic = "ATT06H",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 61,
/// ItemId = 16,
/// LongMnemonic = "ATT06L",
/// ShortMnemonic = "ATT06L",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Att06h { get; set; }
public float? Att06l { get; set; }
/// <summary>
/// RecordId = 61,
/// ItemId = 16,
/// LongMnemonic = "ATT06L",
/// ShortMnemonic = "ATT06L",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 61,
/// ItemId = 17,
/// LongMnemonic = "ATT10H",
/// ShortMnemonic = "ATT10H",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Att06l { get; set; }
public float? Att10h { get; set; }
/// <summary>
/// RecordId = 61,
/// ItemId = 17,
/// LongMnemonic = "ATT10H",
/// ShortMnemonic = "ATT10H",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 61,
/// ItemId = 18,
/// LongMnemonic = "ATT10L",
/// ShortMnemonic = "ATT10L",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Att10h { get; set; }
public float? Att10l { get; set; }
/// <summary>
/// RecordId = 61,
/// ItemId = 18,
/// LongMnemonic = "ATT10L",
/// ShortMnemonic = "ATT10L",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 61,
/// ItemId = 19,
/// LongMnemonic = "Status",
/// ShortMnemonic = "Status",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Att10l { get; set; }
public float? Status { get; set; }
/// <summary>
/// RecordId = 61,
/// ItemId = 19,
/// LongMnemonic = "Status",
/// ShortMnemonic = "Status",
/// Description = "SibReceiver custom",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Status { get; set; }
}
}

View File

@ -1,298 +1,297 @@
namespace AsbCloudApp.Data.WITS
namespace AsbCloudApp.Data.WITS;
/// <summary>
/// Record name: Survey/Directional
/// Description: Directional/Survey data
/// Description2:
/// </summary>
public class Record7Dto : RecordBaseDto
{
/// <summary>
/// Record name: Survey/Directional
/// Description: Directional/Survey data
/// Description2:
/// RecordId = 7,
/// ItemId = 8,
/// LongMnemonic = "DEPTSVYM",
/// ShortMnemonic = "DSVM",
/// Description = "Depth Svy/reading (meas)",
/// Description2 = "",
/// FPSUnits = "F",
/// MetricUnits = "M",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public class Record7Dto : RecordBaseDto
{
public float? Deptsvym { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 8,
/// LongMnemonic = "DEPTSVYM",
/// ShortMnemonic = "DSVM",
/// Description = "Depth Svy/reading (meas)",
/// Description2 = "",
/// FPSUnits = "F",
/// MetricUnits = "M",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 9,
/// LongMnemonic = "DEPTSVYV",
/// ShortMnemonic = "DSVV",
/// Description = "Depth Svy/reading (vert)",
/// Description2 = "",
/// FPSUnits = "F",
/// MetricUnits = "M",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Deptsvym { get; set; }
public float? Deptsvyv { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 9,
/// LongMnemonic = "DEPTSVYV",
/// ShortMnemonic = "DSVV",
/// Description = "Depth Svy/reading (vert)",
/// Description2 = "",
/// FPSUnits = "F",
/// MetricUnits = "M",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 10,
/// LongMnemonic = "PASSNUM",
/// ShortMnemonic = "PASS",
/// Description = "Pass Number",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 2,
/// ValueType = "S"
/// </summary>
public float? Deptsvyv { get; set; }
public short? Passnum { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 10,
/// LongMnemonic = "PASSNUM",
/// ShortMnemonic = "PASS",
/// Description = "Pass Number",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 2,
/// ValueType = "S"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 11,
/// LongMnemonic = "DEPTMEAS",
/// ShortMnemonic = "DMEA",
/// Description = "Depth Hole (meas)",
/// Description2 = "",
/// FPSUnits = "F",
/// MetricUnits = "M",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public short? Passnum { get; set; }
public float? Deptmeas { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 11,
/// LongMnemonic = "DEPTMEAS",
/// ShortMnemonic = "DMEA",
/// Description = "Depth Hole (meas)",
/// Description2 = "",
/// FPSUnits = "F",
/// MetricUnits = "M",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 12,
/// LongMnemonic = "SVYTYPE",
/// ShortMnemonic = "STYP",
/// Description = "Svy Type",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 8,
/// ValueType = "A"
/// </summary>
public float? Deptmeas { get; set; }
public string Svytype { get; set; } = string.Empty;
/// <summary>
/// RecordId = 7,
/// ItemId = 12,
/// LongMnemonic = "SVYTYPE",
/// ShortMnemonic = "STYP",
/// Description = "Svy Type",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 8,
/// ValueType = "A"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 13,
/// LongMnemonic = "SVYINC",
/// ShortMnemonic = "SINC",
/// Description = "Svy Inclination",
/// Description2 = "",
/// FPSUnits = "DEG",
/// MetricUnits = "DEG",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public string Svytype { get; set; } = string.Empty;
public float? Svyinc { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 13,
/// LongMnemonic = "SVYINC",
/// ShortMnemonic = "SINC",
/// Description = "Svy Inclination",
/// Description2 = "",
/// FPSUnits = "DEG",
/// MetricUnits = "DEG",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 14,
/// LongMnemonic = "SVYAZU",
/// ShortMnemonic = "SAZU",
/// Description = "Svy Azimuth (uncorrected)",
/// Description2 = "",
/// FPSUnits = "DEG",
/// MetricUnits = "DEG",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Svyinc { get; set; }
public float? Svyazu { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 14,
/// LongMnemonic = "SVYAZU",
/// ShortMnemonic = "SAZU",
/// Description = "Svy Azimuth (uncorrected)",
/// Description2 = "",
/// FPSUnits = "DEG",
/// MetricUnits = "DEG",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 15,
/// LongMnemonic = "SVYAZC",
/// ShortMnemonic = "SAZC",
/// Description = "Svy Azimuth (corrected)",
/// Description2 = "",
/// FPSUnits = "DEG",
/// MetricUnits = "DEG",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Svyazu { get; set; }
public float? Svyazc { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 15,
/// LongMnemonic = "SVYAZC",
/// ShortMnemonic = "SAZC",
/// Description = "Svy Azimuth (corrected)",
/// Description2 = "",
/// FPSUnits = "DEG",
/// MetricUnits = "DEG",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 16,
/// LongMnemonic = "SVYMTF",
/// ShortMnemonic = "SMTF",
/// Description = "Svy Magnetic Toolface",
/// Description2 = "",
/// FPSUnits = "DEG",
/// MetricUnits = "DEG",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Svyazc { get; set; }
public float? Svymtf { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 16,
/// LongMnemonic = "SVYMTF",
/// ShortMnemonic = "SMTF",
/// Description = "Svy Magnetic Toolface",
/// Description2 = "",
/// FPSUnits = "DEG",
/// MetricUnits = "DEG",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 17,
/// LongMnemonic = "SVYGTF",
/// ShortMnemonic = "SGTF",
/// Description = "Svy Gravity Toolface",
/// Description2 = "",
/// FPSUnits = "DEG",
/// MetricUnits = "DEG",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Svymtf { get; set; }
public float? Svygtf { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 17,
/// LongMnemonic = "SVYGTF",
/// ShortMnemonic = "SGTF",
/// Description = "Svy Gravity Toolface",
/// Description2 = "",
/// FPSUnits = "DEG",
/// MetricUnits = "DEG",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 18,
/// LongMnemonic = "SVYNS",
/// ShortMnemonic = "SNS",
/// Description = "Svy North-South Position",
/// Description2 = "",
/// FPSUnits = "F",
/// MetricUnits = "M",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Svygtf { get; set; }
public float? Svyns { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 18,
/// LongMnemonic = "SVYNS",
/// ShortMnemonic = "SNS",
/// Description = "Svy North-South Position",
/// Description2 = "",
/// FPSUnits = "F",
/// MetricUnits = "M",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 19,
/// LongMnemonic = "SVYEW",
/// ShortMnemonic = "SEW",
/// Description = "Svy East-West Position",
/// Description2 = "",
/// FPSUnits = "F",
/// MetricUnits = "M",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Svyns { get; set; }
public float? Svyew { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 19,
/// LongMnemonic = "SVYEW",
/// ShortMnemonic = "SEW",
/// Description = "Svy East-West Position",
/// Description2 = "",
/// FPSUnits = "F",
/// MetricUnits = "M",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 20,
/// LongMnemonic = "SVYDLS",
/// ShortMnemonic = "SDLS",
/// Description = "Svy Dog Leg Severity",
/// Description2 = "",
/// FPSUnits = "DGHF",
/// MetricUnits = "DGHM",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Svyew { get; set; }
public float? Svydls { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 20,
/// LongMnemonic = "SVYDLS",
/// ShortMnemonic = "SDLS",
/// Description = "Svy Dog Leg Severity",
/// Description2 = "",
/// FPSUnits = "DGHF",
/// MetricUnits = "DGHM",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 21,
/// LongMnemonic = "SVYWALK",
/// ShortMnemonic = "SWLK",
/// Description = "Svy Rate of Walk",
/// Description2 = "",
/// FPSUnits = "DGHF",
/// MetricUnits = "DGHM",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Svydls { get; set; }
public float? Svywalk { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 21,
/// LongMnemonic = "SVYWALK",
/// ShortMnemonic = "SWLK",
/// Description = "Svy Rate of Walk",
/// Description2 = "",
/// FPSUnits = "DGHF",
/// MetricUnits = "DGHM",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 22,
/// LongMnemonic = "SPARE1",
/// ShortMnemonic = "SPR1",
/// Description = "SPARE 1",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Svywalk { get; set; }
public float? Spare1 { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 22,
/// LongMnemonic = "SPARE1",
/// ShortMnemonic = "SPR1",
/// Description = "SPARE 1",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 23,
/// LongMnemonic = "SPARE2",
/// ShortMnemonic = "SPR2",
/// Description = "SPARE 2",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Spare1 { get; set; }
public float? Spare2 { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 23,
/// LongMnemonic = "SPARE2",
/// ShortMnemonic = "SPR2",
/// Description = "SPARE 2",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 24,
/// LongMnemonic = "SPARE3",
/// ShortMnemonic = "SPR3",
/// Description = "SPARE 3",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Spare2 { get; set; }
public float? Spare3 { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 24,
/// LongMnemonic = "SPARE3",
/// ShortMnemonic = "SPR3",
/// Description = "SPARE 3",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 25,
/// LongMnemonic = "SPARE4",
/// ShortMnemonic = "SPR4",
/// Description = "SPARE 4",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Spare3 { get; set; }
public float? Spare4 { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 25,
/// LongMnemonic = "SPARE4",
/// ShortMnemonic = "SPR4",
/// Description = "SPARE 4",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "F"
/// </summary>
/// <summary>
/// RecordId = 7,
/// ItemId = 26,
/// LongMnemonic = "SPARE5",
/// ShortMnemonic = "SPR5",
/// Description = "SPARE 5",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Spare4 { get; set; }
public float? Spare5 { get; set; }
/// <summary>
/// RecordId = 7,
/// ItemId = 26,
/// LongMnemonic = "SPARE5",
/// ShortMnemonic = "SPR5",
/// Description = "SPARE 5",
/// Description2 = "",
/// FPSUnits = "----",
/// MetricUnits = "---",
/// Length = 4,
/// ValueType = "F"
/// </summary>
public float? Spare5 { get; set; }
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,133 +1,132 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.WITS
namespace AsbCloudApp.Data.WITS;
/// <summary>
/// This is base class for all WITS-0 records
/// </summary>
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>
/// This is base class for all WITS-0 records
/// отметка времени
/// </summary>
public abstract class RecordBaseDto : IId, ITelemetryData
{
/// <inheritdoc/>
[Required]
public int Id { get; set; }
[Required]
public int TimeStamp { get; set; }
/// <inheritdoc/>
public int IdTelemetry { get; set; }
/// <summary>
/// RecordId = 1,
/// ItemId = 1,
/// LongMnemonic = "WELLID",
/// ShortMnemonic = "WID",
/// Description = "Well Identifier",
/// Description2 = "Number/name assigned to the well by the operator for identification purposes. This item is common to all records. This includes a four-character code identifying the SENDER.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 16,
/// ValueType = "A"
/// </summary>
[Required]
public string Wellid { get; set; } = string.Empty;
/// <inheritdoc/>
[Required]
public DateTime DateTime { get; set; }
/// <summary>
/// RecordId = 1,
/// ItemId = 2,
/// LongMnemonic = "STKNUM",
/// ShortMnemonic = "SKNO",
/// Description = "Sidetrack/Hole Sect No.",
/// Description2 = "Measured depth of the hole at the time the record is generated.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 2,
/// ValueType = "S"
/// </summary>
/// <summary>
/// отметка времени
/// </summary>
[Required]
public int TimeStamp { get; set; }
public short? Stknum { get; set; }
/// <summary>
/// RecordId = 1,
/// ItemId = 1,
/// LongMnemonic = "WELLID",
/// ShortMnemonic = "WID",
/// Description = "Well Identifier",
/// Description2 = "Number/name assigned to the well by the operator for identification purposes. This item is common to all records. This includes a four-character code identifying the SENDER.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 16,
/// ValueType = "A"
/// </summary>
[Required]
public string Wellid { get; set; } = string.Empty;
/// <summary>
/// RecordId = 1,
/// ItemId = 3,
/// LongMnemonic = "RECID",
/// ShortMnemonic = "RID",
/// Description = "Record Identifier",
/// Description2 = "Number of the sidetrack being drilled at the time the computer generated the record. Prior to having a sidetrack, this number is always 0. The sidetrack number indexes at the time drilling new formation commences (not while drilling the cement plug). This item is common to all records.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 2,
/// ValueType = "S"
/// </summary>
/// <summary>
/// RecordId = 1,
/// ItemId = 2,
/// LongMnemonic = "STKNUM",
/// ShortMnemonic = "SKNO",
/// Description = "Sidetrack/Hole Sect No.",
/// Description2 = "Measured depth of the hole at the time the record is generated.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 2,
/// ValueType = "S"
/// </summary>
public short? Recid { get; set; }
public short? Stknum { get; set; }
/// <summary>
/// RecordId = 1,
/// ItemId = 4,
/// LongMnemonic = "SEQID",
/// ShortMnemonic = "SQID",
/// Description = "Sequence Identifier",
/// Description2 = "Logical data record type identifier. This item is common to all records and, for current Pre-Defined Records, contains a value between 1 and 25, according to the record type. Types 26 through 49 inclusive are reserved for future expansion of the Pre-Defined records. Types 50 through 80 inclusive are open for Custom user definition. NOTE that the Logical Record Type for a record is this number plus 150, thus WITS Record 1 is Logical Record Type 151, WITS Record 2 is Logical Record Type 152, etc.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "L"
/// </summary>
/// <summary>
/// RecordId = 1,
/// ItemId = 3,
/// LongMnemonic = "RECID",
/// ShortMnemonic = "RID",
/// Description = "Record Identifier",
/// Description2 = "Number of the sidetrack being drilled at the time the computer generated the record. Prior to having a sidetrack, this number is always 0. The sidetrack number indexes at the time drilling new formation commences (not while drilling the cement plug). This item is common to all records.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 2,
/// ValueType = "S"
/// </summary>
public int? Seqid { get; set; }
public short? Recid { get; set; }
/// <summary>
/// RecordId = 1,
/// ItemId = 5,
/// LongMnemonic = "DATE",
/// ShortMnemonic = "DATE",
/// Description = "Date",
/// Description2 = "Indicates the number of times this record has been generated (it is not reset to zero for a sidetrack). The computer should automatically increase the number by one each time it creates a new record. This item is common to all records. The sequence identifier in each individual record type keeps track of the count for that particular record only. Thus there is a sequence identifier for each record type used.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "L"
/// </summary>
/// <summary>
/// RecordId = 1,
/// ItemId = 4,
/// LongMnemonic = "SEQID",
/// ShortMnemonic = "SQID",
/// Description = "Sequence Identifier",
/// Description2 = "Logical data record type identifier. This item is common to all records and, for current Pre-Defined Records, contains a value between 1 and 25, according to the record type. Types 26 through 49 inclusive are reserved for future expansion of the Pre-Defined records. Types 50 through 80 inclusive are open for Custom user definition. NOTE that the Logical Record Type for a record is this number plus 150, thus WITS Record 1 is Logical Record Type 151, WITS Record 2 is Logical Record Type 152, etc.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "L"
/// </summary>
public int? Date_ { get; set; }
public int? Seqid { get; set; }
/// <summary>
/// RecordId = 1,
/// ItemId = 6,
/// LongMnemonic = "TIME",
/// ShortMnemonic = "TIME",
/// Description = "Time",
/// Description2 = "Indicates the date the computer generated this record. The date is reported as a 6 digit integer in a YYMMDD type format. e.g. 910404 would represent April 4, 1991. It is common to all records. Note that, like Time below, Universal Coordinated Time (Greenwich Mean Time) is used as the common reference. Note also that though this number should never decrease, there is no guarantee of this fact.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "L"
/// </summary>
/// <summary>
/// RecordId = 1,
/// ItemId = 5,
/// LongMnemonic = "DATE",
/// ShortMnemonic = "DATE",
/// Description = "Date",
/// Description2 = "Indicates the number of times this record has been generated (it is not reset to zero for a sidetrack). The computer should automatically increase the number by one each time it creates a new record. This item is common to all records. The sequence identifier in each individual record type keeps track of the count for that particular record only. Thus there is a sequence identifier for each record type used.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "L"
/// </summary>
public int? Time { get; set; }
public int? Date_ { get; set; }
/// <summary>
/// RecordId = 1,
/// ItemId = 7,
/// LongMnemonic = "ACTCOD",
/// ShortMnemonic = "ACTC",
/// Description = "Activity Code",
/// Description2 = "Indicates the time of day (24 hour clock), when the computer generated the record, eg. 225015 would represent 10:50:15 pm. This item is common to all records. Note that, like Date above, Universal Coordinated Time (Greenwich Mean Time) is used as the common reference.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 2,
/// ValueType = "S"
/// </summary>
/// <summary>
/// RecordId = 1,
/// ItemId = 6,
/// LongMnemonic = "TIME",
/// ShortMnemonic = "TIME",
/// Description = "Time",
/// Description2 = "Indicates the date the computer generated this record. The date is reported as a 6 digit integer in a YYMMDD type format. e.g. 910404 would represent April 4, 1991. It is common to all records. Note that, like Time below, Universal Coordinated Time (Greenwich Mean Time) is used as the common reference. Note also that though this number should never decrease, there is no guarantee of this fact.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 4,
/// ValueType = "L"
/// </summary>
public int? Time { get; set; }
/// <summary>
/// RecordId = 1,
/// ItemId = 7,
/// LongMnemonic = "ACTCOD",
/// ShortMnemonic = "ACTC",
/// Description = "Activity Code",
/// Description2 = "Indicates the time of day (24 hour clock), when the computer generated the record, eg. 225015 would represent 10:50:15 pm. This item is common to all records. Note that, like Date above, Universal Coordinated Time (Greenwich Mean Time) is used as the common reference.",
/// FPSUnits = "----",
/// MetricUnits = "----",
/// Length = 2,
/// ValueType = "S"
/// </summary>
public short? Actcod { get; set; }
}
public short? Actcod { get; set; }
}

View File

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

View File

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

View File

@ -5,22 +5,21 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Хранение операций по композитной скважине
/// и по скважинам, на основе которых была рассчитана композитная скважина
/// </summary>
public class WellCompositeOperationDto
{
/// <summary>
/// Хранение операций по композитной скважине
/// и по скважинам, на основе которых была рассчитана композитная скважина
/// Список операций композитной скважины
/// </summary>
public class WellCompositeOperationDto
{
/// <summary>
/// Список операций композитной скважины
/// </summary>
public IEnumerable<WellOperationDto> WellOperationsComposite { get; set; } = null!;
public IEnumerable<WellOperationDto> WellOperationsComposite { get; set; } = null!;
/// <summary>
/// Список операций, на основе которых были рассчитаны операции по композитной скважине
/// </summary>
public IEnumerable<WellCompositeOperationSourceDto> WellCompositeSourceOperations { get; set; } = null!;
}
/// <summary>
/// Список операций, на основе которых были рассчитаны операции по композитной скважине
/// </summary>
public IEnumerable<WellCompositeOperationSourceDto> WellCompositeSourceOperations { get; set; } = null!;
}

View File

@ -1,21 +1,20 @@
using AsbCloudApp.Data.WellOperation;
using System.Collections.Generic;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// Операции по скважине, по которой рассчитывается композитная скважина
/// </summary>
public class WellCompositeOperationSourceDto
{
/// <summary>
/// Операции по скважине, по которой рассчитывается композитная скважина
/// Скважина
/// </summary>
public class WellCompositeOperationSourceDto
{
/// <summary>
/// Скважина
/// </summary>
public WellDto Well { get; set; } = null!;
public WellDto Well { get; set; } = null!;
/// <summary>
/// Операции по скважине
/// </summary>
public IEnumerable<WellOperationDto> Operations { get; set; } = null!;
}
/// <summary>
/// Операции по скважине
/// </summary>
public IEnumerable<WellOperationDto> Operations { get; set; } = null!;
}

View File

@ -3,90 +3,89 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// базовая информация о скважине
/// </summary>
public class WellWithTimezoneDto : WellInfoDto
{
/// <summary>
/// базовая информация о скважине
/// </summary>
public class WellWithTimezoneDto : WellInfoDto
{
/// <inheritdoc/>
[Required]
public SimpleTimezoneDto Timezone { get; set; } = null!;
/// <summary>
/// 0 - неизвестно,
/// 1 - в работе,
/// 2 - завершена
/// </summary>
[Required]
public int IdState { get; set; }
}
/// <inheritdoc/>
[Required]
public SimpleTimezoneDto Timezone { get; set; } = null!;
/// <summary>
/// Скважина
/// 0 - неизвестно,
/// 1 - в работе,
/// 2 - завершена
/// </summary>
public class WellDto : WellInfoDto, IMapPoint, IId
{
/// <inheritdoc/>
[Range(-90, 90, ErrorMessage = "Допустимые значения широты от -90 до 90")]
public double? Latitude { get; set; }
/// <inheritdoc/>
[Range(-180, 180, ErrorMessage = "Допустимые значения долготы от -180 до 180")]
public double? Longitude { get; set; }
/// <inheritdoc/>
[Required]
public SimpleTimezoneDto Timezone { get; set; } = null!;
/// <summary>
/// Название типа скважины
/// </summary>
public string? WellType { get; set; }
/// <summary>
/// ID типа скважины
/// </summary>
[Range(1, 2, ErrorMessage = "Тип скважины указан неправильно.")]
public int IdWellType { get; set; }
/// <summary>
/// ID куста
/// </summary>
public int IdCluster { get; set; }
/// <summary>
/// 0 - неизвестно,
/// 1 - в работе,
/// 2 - завершена
/// </summary>
[Range(0, 2, ErrorMessage = "Текущее состояние работы скважины указано неправильно.")]
public int IdState { get; set; }
/// <summary>
/// Дата/время первой операции
/// </summary>
public DateTimeOffset? StartDate { get; set; }
/// <summary>
/// Дата/время кода приходили данные последний раз
/// </summary>
public DateTimeOffset LastTelemetryDate { get; set; }
/// <summary>
/// ID телеметрии
/// </summary>
public int? IdTelemetry { get; set; }
/// <summary>
/// Объект телеметрии (инфо от панели оператора)
/// </summary>
public TelemetryBaseDto? Telemetry { get; set; }
/// <summary>
/// Компании участвующие в работах на скважине
/// </summary>
public IEnumerable<CompanyDto> Companies { get; set; } = Enumerable.Empty<CompanyDto>();
}
[Required]
public int IdState { get; set; }
}
/// <summary>
/// Скважина
/// </summary>
public class WellDto : WellInfoDto, IMapPoint, IId
{
/// <inheritdoc/>
[Range(-90, 90, ErrorMessage = "Допустимые значения широты от -90 до 90")]
public double? Latitude { get; set; }
/// <inheritdoc/>
[Range(-180, 180, ErrorMessage = "Допустимые значения долготы от -180 до 180")]
public double? Longitude { get; set; }
/// <inheritdoc/>
[Required]
public SimpleTimezoneDto Timezone { get; set; } = null!;
/// <summary>
/// Название типа скважины
/// </summary>
public string? WellType { get; set; }
/// <summary>
/// ID типа скважины
/// </summary>
[Range(1, 2, ErrorMessage = "Тип скважины указан неправильно.")]
public int IdWellType { get; set; }
/// <summary>
/// ID куста
/// </summary>
public int IdCluster { get; set; }
/// <summary>
/// 0 - неизвестно,
/// 1 - в работе,
/// 2 - завершена
/// </summary>
[Range(0, 2, ErrorMessage = "Текущее состояние работы скважины указано неправильно.")]
public int IdState { get; set; }
/// <summary>
/// Дата/время первой операции
/// </summary>
public DateTimeOffset? StartDate { get; set; }
/// <summary>
/// Дата/время кода приходили данные последний раз
/// </summary>
public DateTimeOffset LastTelemetryDate { get; set; }
/// <summary>
/// ID телеметрии
/// </summary>
public int? IdTelemetry { get; set; }
/// <summary>
/// Объект телеметрии (инфо от панели оператора)
/// </summary>
public TelemetryBaseDto? Telemetry { get; set; }
/// <summary>
/// Компании участвующие в работах на скважине
/// </summary>
public IEnumerable<CompanyDto> Companies { get; set; } = Enumerable.Empty<CompanyDto>();
}

View File

@ -1,23 +1,22 @@
namespace AsbCloudApp.Data
namespace AsbCloudApp.Data;
/// <summary>
/// DTO Дело скважины
/// </summary>
public class WellFinalDocumentDBDto
{
/// <summary>
/// DTO Дело скважины
/// Идентификатор скважины
/// </summary>
public class WellFinalDocumentDBDto
{
/// <summary>
/// Идентификатор скважины
/// </summary>
public int IdWell { get; set; }
public int IdWell { get; set; }
/// <summary>
/// Идентификатор ответственного
/// </summary>
public int IdUser { get; set; }
/// <summary>
/// Идентификатор ответственного
/// </summary>
public int IdUser { get; set; }
/// <summary>
/// Идентификатор категории файла
/// </summary>
public int IdCategory { get; set; }
}
/// <summary>
/// Идентификатор категории файла
/// </summary>
public int IdCategory { get; set; }
}

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