diff --git a/.gitignore b/.gitignore
index d65f82ed..fc614d65 100644
--- a/.gitignore
+++ b/.gitignore
@@ -174,13 +174,13 @@ publish/
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
+# *.pubxml
+# *.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
-PublishScripts/
+# PublishScripts/
# NuGet Packages
*.nupkg
diff --git a/AsbCloudApp/AsbCloudApp.csproj b/AsbCloudApp/AsbCloudApp.csproj
index 64a7b66a..7a10181c 100644
--- a/AsbCloudApp/AsbCloudApp.csproj
+++ b/AsbCloudApp/AsbCloudApp.csproj
@@ -13,4 +13,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AsbCloudApp/Data/DailyReport/DailyReportDto.cs b/AsbCloudApp/Data/DailyReport/DailyReportDto.cs
index c47b8934..920aeb54 100644
--- a/AsbCloudApp/Data/DailyReport/DailyReportDto.cs
+++ b/AsbCloudApp/Data/DailyReport/DailyReportDto.cs
@@ -1,5 +1,6 @@
namespace AsbCloudApp.Data.DailyReport
{
+#nullable enable
///
/// Блоки для формирования суточного рапорта
///
@@ -35,4 +36,5 @@
///
public SignDto Sign { get; set; } = new();
}
+#nullable disable
}
diff --git a/AsbCloudApp/Data/DrillParamsDto.cs b/AsbCloudApp/Data/DrillParamsDto.cs
index 0d667a58..d79f2451 100644
--- a/AsbCloudApp/Data/DrillParamsDto.cs
+++ b/AsbCloudApp/Data/DrillParamsDto.cs
@@ -13,14 +13,9 @@ namespace AsbCloudApp.Data
public int IdWell { get; set; }
///
- ///
+ ///
///
- public double DepthStart { get; set; }
-
- ///
- ///
- ///
- public double DepthEnd { get; set; }
+ public MinMaxDto Depth { get; set; }
///
/// id well section type.
@@ -28,78 +23,28 @@ namespace AsbCloudApp.Data
public int IdWellSectionType { get; set; }
///
- /// axial load min.
+ /// axial load
///
- public double AxialLoadMin { get; set; }
+ public MinMaxExtendedViewDto AxialLoad { get; set; }
///
- /// axial load avg.
+ /// pressure
///
- public double AxialLoadAvg { get; set; }
+ public MinMaxExtendedViewDto Pressure { get; set; }
///
- /// axial load max.
+ /// rotor torque
///
- public double AxialLoadMax { get; set; }
+ public MinMaxExtendedViewDto RotorTorque { get; set; }
///
- /// pressure min.
+ /// rotor speed
///
- public double PressureMin { get; set; }
+ public MinMaxExtendedViewDto RotorSpeed { get; set; }
///
- /// pressure avg.
+ /// flow
///
- public double PressureAvg { get; set; }
-
- ///
- /// pressure max.
- ///
- public double PressureMax { get; set; }
-
- ///
- /// rotor torque min.
- ///
- public double RotorTorqueMin { get; set; }
-
- ///
- /// rotor torque avg.
- ///
- public double RotorTorqueAvg { get; set; }
-
- ///
- /// rotor torque max.
- ///
- public double RotorTorqueMax { get; set; }
-
- ///
- /// rotor speed min.
- ///
- public double RotorSpeedMin { get; set; }
-
- ///
- /// rotor speed avg.
- ///
- public double RotorSpeedAvg { get; set; }
-
- ///
- /// rotor speed max.
- ///
- public double RotorSpeedMax { get; set; }
-
- ///
- /// flow min.
- ///
- public double FlowMin { get; set; }
-
- ///
- /// flow avg.
- ///
- public double FlowAvg { get; set; }
-
- ///
- /// flow max.
- ///
- public double FlowMax { get; set; }
+ public MinMaxExtendedViewDto Flow { get; set; }
}
}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/FileInfoDto.cs b/AsbCloudApp/Data/FileInfoDto.cs
index 63abba8f..badcd5a4 100644
--- a/AsbCloudApp/Data/FileInfoDto.cs
+++ b/AsbCloudApp/Data/FileInfoDto.cs
@@ -39,6 +39,11 @@ namespace AsbCloudApp.Data
///
public long Size { get; set; }
+ ///
+ /// Помечен как удаленный
+ ///
+ public bool IsDeleted { get; set; }
+
///
/// DTO автора
///
diff --git a/AsbCloudApp/Data/JobDto.cs b/AsbCloudApp/Data/JobDto.cs
new file mode 100644
index 00000000..2e9b336a
--- /dev/null
+++ b/AsbCloudApp/Data/JobDto.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections;
+
+namespace AsbCloudApp.Data
+{
+#nullable enable
+ ///
+ /// Состояние фоновой задачи
+ ///
+ public enum JobState
+ {
+ ///
+ /// Ожидает в очереди на выполнение
+ ///
+ Waiting,
+ ///
+ /// выполняется
+ ///
+ Working,
+ ///
+ /// успешно выполнена
+ ///
+ Done,
+ ///
+ /// завершена с ошибкой
+ ///
+ Fail
+ };
+
+ ///
+ /// работа фоновой задачи
+ ///
+ public class JobDto
+ {
+ ///
+ /// идентификатор
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Состояние
+ ///
+ public JobState State { get; set; }
+
+ ///
+ /// результат выполнения
+ ///
+ public Hashtable? Results { get; set; }
+
+ ///
+ /// Исключение, если возникла ошибка
+ ///
+ public string? Error { get; set; }
+ }
+#nullable disable
+}
diff --git a/AsbCloudApp/Data/MinMaxDto.cs b/AsbCloudApp/Data/MinMaxDto.cs
new file mode 100644
index 00000000..291574bc
--- /dev/null
+++ b/AsbCloudApp/Data/MinMaxDto.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AsbCloudApp.Data
+{
+#nullable enable
+ ///
+ /// Минимальное и максимальное значение
+ ///
+ public class MinMaxDto
+ {
+ ///
+ /// Минимальное значение
+ ///
+ public T? Min { get; set; }
+
+ ///
+ /// Максимальное значение
+ ///
+ public T? Max { get; set; }
+ }
+#nullable disable
+}
diff --git a/AsbCloudApp/Data/MinMaxExtendedViewDto.cs b/AsbCloudApp/Data/MinMaxExtendedViewDto.cs
new file mode 100644
index 00000000..cb66e60d
--- /dev/null
+++ b/AsbCloudApp/Data/MinMaxExtendedViewDto.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AsbCloudApp.Data
+{
+#nullable enable
+ ///
+ /// Расширение для класса MinMaxDto
+ ///
+ public class MinMaxExtendedViewDto : MinMaxDto
+ {
+ ///
+ /// Среднее значение
+ ///
+ public double Avg { get; set; }
+
+ ///
+ /// Является максимальным
+ ///
+ public bool IsMax { get; set; }
+
+ ///
+ /// Является минимальным
+ ///
+ public bool IsMin { get; set; }
+ }
+#nullable disable
+}
diff --git a/AsbCloudApp/Data/SAUB/TelemetryDataSpinDto.cs b/AsbCloudApp/Data/SAUB/TelemetryDataSpinDto.cs
index 1011f214..008bfeda 100644
--- a/AsbCloudApp/Data/SAUB/TelemetryDataSpinDto.cs
+++ b/AsbCloudApp/Data/SAUB/TelemetryDataSpinDto.cs
@@ -2,80 +2,77 @@
namespace AsbCloudApp.Data.SAUB
{
-#pragma warning disable CS1591 // Отсутствует комментарий XML для открытого видимого типа или члена
+#nullable enable
public class TelemetryDataSpinDto : ITelemetryData
{
- ///
+ ///
+ /// Идентификатор телеметрии
+ ///
public int IdTelemetry { get; set; }
+
+ ///
+ /// Дата
+ ///
public DateTime DateTime { get; set; }
- public DateTime Date // TODO: remove this legacy after all panels updated
+
+ ///
+ /// Дата
+ ///
+ public DateTime Date
{
get { return DateTime; }
set { DateTime = value; }
}
- public float? TopDriveSpeed { get; set; }
- public float? TopDriveSpeedMin { get; set; }
- public float? TopDriveSpeedMax { get; set; }
- public float? TopDriveSpeedOffset { get; set; }
- public short? TopDriveSpeedErr { get; set; }
- public float? TopDriveTorque { get; set; }
- public float? TopDriveTorqueMin { get; set; }
- public float? TopDriveTorqueMax { get; set; }
- public float? TopDriveTorqueOffset { get; set; }
- public short? TopDriveTorqueErr { get; set; }
- public float? TopDriveSpeedSpFrom { get; set; }
- public float? TopDriveSpeedSpFromMin { get; set; }
- public float? TopDriveSpeedSpFromMax { get; set; }
- public float? TopDriveSpeedSpFromOffset { get; set; }
- public short? TopDriveSpeedSpFromErr { get; set; }
- public float? TopDriveTorqueSpFrom { get; set; }
- public float? TopDriveTorqueSpFromMin { get; set; }
- public float? TopDriveTorqueSpFromMax { get; set; }
- public float? TopDriveTorqueSpFromOffset { get; set; }
- public short? TopDriveTorqueSpFromErr { get; set; }
- public float? TopDriveSpeedSpTo { get; set; }
- public float? TopDriveSpeedSpToMin { get; set; }
- public float? TopDriveSpeedSpToMax { get; set; }
- public float? TopDriveSpeedSpToOffset { get; set; }
- public short? TopDriveSpeedSpToErr { get; set; }
- public float? TopDriveTorqueSpTo { get; set; }
- public float? TopDriveTorqueSpToMin { get; set; }
- public float? TopDriveTorqueSpToMax { get; set; }
- public float? TopDriveTorqueSpToOffset { get; set; }
- public short? TopDriveTorqueSpToErr { get; set; }
- public short? W2800 { get; set; }
- public short? W2810 { get; set; }
- public short? Mode { get; set; }
- public short? W2808 { get; set; }
- public float? TorqueStarting { get; set; }
- public float? RotorTorqueAvg { get; set; }
- public float? EncoderResolution { get; set; }
- public float? Ratio { get; set; }
- public float? TorqueRightLimit { get; set; }
- public float? TorqueLeftLimit { get; set; }
+
+ ///
+ /// Ограничение числа оборотов вправо
+ ///
public float? RevolsRightLimit { get; set; }
+
+ ///
+ /// Ограничение числа оборотов влево
+ ///
public float? RevolsLeftLimit { get; set; }
+
+ ///
+ /// Заданная скорость вращения вправо
+ ///
public float? SpeedRightSp { get; set; }
+
+ ///
+ /// Заданная скорость вращения влево
+ ///
public float? SpeedLeftSp { get; set; }
+
+ ///
+ /// Суммарное количество оборотов вправо
+ ///
public float? RevolsRightTotal { get; set; }
+
+ ///
+ /// Суммарное количество оборотов влево
+ ///
public float? RevolsLeftTotal { get; set; }
- public float? TurnRightOnceByTorque { get; set; }
- public float? TurnLeftOnceByTorque { get; set; }
- public float? TurnRightOnceByAngle { get; set; }
- public float? TurnLeftOnceByAngle { get; set; }
- public float? TurnRightOnceByRevols { get; set; }
- public float? TurnLeftOnceByRevols { get; set; }
- public float? BreakAngleK { get; set; }
- public float? ReverseKTorque { get; set; }
+
+ ///
+ /// Нулевая позиция осцилляции
+ ///
public float? PositionZero { get; set; }
+
+ ///
+ /// Крайний правый угол осцилляции
+ ///
public float? PositionRight { get; set; }
- public float? TorqueRampTime { get; set; }
- public float? Ver { get; set; }
- public short? ReverseSpeedSpZeroTime { get; set; }
- public float? UnlockBySectorOut { get; set; }
- public float? PidMuxTorqueLeftLimit { get; set; }
+
+ ///
+ /// Выбранный режим управления
+ ///
+ public short? Mode { get; set; }
+
+ ///
+ /// Переменная этапа
+ ///
public short? State { get; set; }
- public float? BreakAngleLeft { get; set; }
}
-#pragma warning restore CS1591 // Отсутствует комментарий XML для открытого видимого типа или члена
+#nullable disable
}
diff --git a/AsbCloudApp/Repositories/IFileRepository.cs b/AsbCloudApp/Repositories/IFileRepository.cs
new file mode 100644
index 00000000..a05cf909
--- /dev/null
+++ b/AsbCloudApp/Repositories/IFileRepository.cs
@@ -0,0 +1,83 @@
+using AsbCloudApp.Requests;
+using AsbCloudApp.Data;
+using AsbCloudApp.Services;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace AsbCloudApp.Repositories
+{
+#nullable enable
+ ///
+ /// Сервис доступа к файлам
+ ///
+ public interface IFileRepository : ICrudService
+ {
+ ///
+ /// Получение файлов по скважине
+ ///
+ ///
+ ///
+ ///
+ Task> GetInfosAsync(FileRequest request, CancellationToken token);
+
+ ///
+ /// Получить список файлов в контейнере
+ ///
+ ///
+ ///
+ ///
+ Task> GetInfosPaginatedAsync(FileRequest request, CancellationToken token = default);
+
+ ///
+ /// Пометить файл как удаленный
+ ///
+ ///
+ ///
+ ///
+ Task MarkAsDeletedAsync(int idFile, CancellationToken token = default);
+
+ ///
+ /// удалить файлы
+ ///
+ ///
+ ///
+ ///
+ Task> DeleteAsync(IEnumerable ids, CancellationToken token);
+
+ ///
+ /// получить инфо о файле по метке
+ ///
+ ///
+ ///
+ ///
+ Task GetByMarkId(int idMark, CancellationToken token);
+
+ ///
+ /// добавить метку на файл
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task CreateFileMarkAsync(FileMarkDto fileMarkDto, int idUser, CancellationToken token);
+
+ ///
+ /// Инфо о файлах
+ ///
+ ///
+ ///
+ ///
+ Task> GetInfoByIdsAsync(IEnumerable idsFile, CancellationToken token);
+
+ ///
+ /// пометить метки файлов как удаленные
+ ///
+ ///
+ ///
+ ///
+ Task MarkFileMarkAsDeletedAsync(IEnumerable idsMarks, CancellationToken token);
+
+ }
+#nullable disable
+}
diff --git a/AsbCloudApp/Repositories/IFileStorageRepository.cs b/AsbCloudApp/Repositories/IFileStorageRepository.cs
new file mode 100644
index 00000000..0d867db0
--- /dev/null
+++ b/AsbCloudApp/Repositories/IFileStorageRepository.cs
@@ -0,0 +1,80 @@
+using AsbCloudApp.Data;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace AsbCloudApp.Repositories
+{
+#nullable enable
+ ///
+ /// Репозиторий хранения фалов
+ ///
+ public interface IFileStorageRepository
+ {
+ ///
+ /// Получение длинны фала и проверка его наличия, если отсутствует падает исключение
+ ///
+ ///
+ ///
+ long GetFileLength(string srcFilePath);
+
+ ///
+ /// Перемещение файла
+ ///
+ ///
+ ///
+ void MoveFile(string srcFilePath, string filePath);
+
+ ///
+ /// Копирование файла
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task SaveFileAsync(string filePathRec, Stream fileStreamSrc, CancellationToken token);
+
+ ///
+ /// Удаление файла
+ ///
+ ///
+ void DeleteFile(IEnumerable filesName);
+
+ ///
+ /// Удаление всех файлов с диска о которых нет информации в базе
+ ///
+ ///
+ ///
+ int DeleteFilesNotInList(int idWell, IEnumerable idsFiles);
+
+ ///
+ /// Вывод списка всех файлов из базы, для которых нет файла на диске
+ ///
+ ///
+ ///
+ ///
+ IEnumerable GetListFilesNotDisc(IEnumerable files);
+
+ ///
+ /// Получение пути к файлу
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ string MakeFilePath(int idWell, int idCategory, string fileFullName, int fileId);
+
+ ///
+ /// Получить путь для скачивания
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ string GetUrl(int idWell, int idCategory, int idFile, string dotExtention);
+ }
+#nullable disable
+}
diff --git a/AsbCloudApp/Requests/FileRequest.cs b/AsbCloudApp/Requests/FileRequest.cs
new file mode 100644
index 00000000..14a799e0
--- /dev/null
+++ b/AsbCloudApp/Requests/FileRequest.cs
@@ -0,0 +1,50 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace AsbCloudApp.Requests
+{
+#nullable enable
+ ///
+ /// Параметры запроса для файлового сервиса
+ ///
+ public class FileRequest : RequestBase
+ {
+ ///
+ /// Идентификатор скважины
+ ///
+ [Required]
+ public int IdWell { get; set; }
+
+ ///
+ /// Идентификатор категории файла
+ ///
+ [Required]
+ public int? IdCategory { get; set; }
+
+ ///
+ /// Наименование компании
+ ///
+ public string? CompanyNamePart { get; set; }
+
+ ///
+ /// Имя файла
+ ///
+ public string? FileNamePart { get; set; }
+
+ ///
+ /// Дата начала периода
+ ///
+ public DateTime? Begin { get; set; }
+
+ ///
+ /// Дата окончания периода
+ ///
+ public DateTime? End { get; set; }
+
+ ///
+ /// Признак удаления
+ ///
+ public bool? IsDeleted { get; set; }
+ }
+#nullable disable
+}
diff --git a/AsbCloudApp/Services/FileService.cs b/AsbCloudApp/Services/FileService.cs
new file mode 100644
index 00000000..3ba250aa
--- /dev/null
+++ b/AsbCloudApp/Services/FileService.cs
@@ -0,0 +1,312 @@
+using AsbCloudApp.Data;
+using AsbCloudApp.Repositories;
+using AsbCloudApp.Requests;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace AsbCloudApp.Services
+{
+#nullable enable
+ ///
+ /// Сервис доступа к файлам
+ ///
+ public class FileService
+ {
+ private readonly IFileRepository fileRepository;
+ private readonly IFileStorageRepository fileStorageRepository;
+
+ ///
+ /// Сервис доступа к файлам
+ ///
+ ///
+ ///
+ public FileService(IFileRepository fileRepository, IFileStorageRepository fileStorageRepository)
+ {
+ this.fileRepository = fileRepository;
+ this.fileStorageRepository = fileStorageRepository;
+ }
+
+ ///
+ /// переместить файл
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task MoveAsync(int idWell, int? idUser, int idCategory,
+ string destinationFileName, string srcFilePath, CancellationToken token = default)
+ {
+ destinationFileName = Path.GetFileName(destinationFileName);
+ srcFilePath = Path.GetFullPath(srcFilePath);
+ var fileSize = fileStorageRepository.GetFileLength(srcFilePath);
+
+ //save info to db
+ var dto = new FileInfoDto {
+ IdWell = idWell,
+ IdAuthor = idUser,
+ IdCategory = idCategory,
+ Name = destinationFileName,
+ Size = fileSize
+ };
+ var fileId = await fileRepository.InsertAsync(dto, token)
+ .ConfigureAwait(false);
+
+ string filePath = fileStorageRepository.MakeFilePath(idWell, idCategory, destinationFileName, fileId);
+ fileStorageRepository.MoveFile(srcFilePath, filePath);
+
+ return await GetOrDefaultAsync(fileId, token);
+ }
+
+ ///
+ /// Сохранить файл
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task SaveAsync(int idWell, int? idUser, int idCategory,
+ string fileFullName, Stream fileStream, CancellationToken token)
+ {
+ //save info to db
+ var dto = new FileInfoDto
+ {
+ IdWell = idWell,
+ IdAuthor = idUser,
+ IdCategory = idCategory,
+ Name = Path.GetFileName(fileFullName),
+ Size = fileStream.Length
+ };
+
+ var fileId = await fileRepository.InsertAsync(dto, token)
+ .ConfigureAwait(false);
+
+ //save stream to disk
+ string filePath = fileStorageRepository.MakeFilePath(idWell, idCategory, fileFullName, fileId);
+ await fileStorageRepository.SaveFileAsync(filePath, fileStream, token);
+
+ return await GetOrDefaultAsync(fileId, token);
+ }
+
+ ///
+ /// удалить файл
+ ///
+ ///
+ ///
+ ///
+ public Task DeleteAsync(int idFile, CancellationToken token)
+ => DeleteAsync(new int[] { idFile }, token);
+
+ ///
+ /// удалить файлы
+ ///
+ ///
+ ///
+ ///
+ public async Task DeleteAsync(IEnumerable ids, CancellationToken token)
+ {
+ if (ids is null || !ids.Any())
+ return 0;
+
+ var files = await fileRepository.DeleteAsync(ids, token).ConfigureAwait(false);
+
+ if (files is null || !files.Any())
+ return 0;
+
+ var filesName = files.Select(x => GetUrl(x.IdWell, x.IdCategory, x.Id, Path.GetExtension(x.Name)));
+ fileStorageRepository.DeleteFile(filesName);
+
+ return files.Any() ? 1 : 0;
+ }
+
+ ///
+ /// получить путь для скачивания
+ ///
+ ///
+ ///
+ public string GetUrl(FileInfoDto fileInfo) =>
+ GetUrl(fileInfo.IdWell, fileInfo.IdCategory, fileInfo.Id, Path.GetExtension(fileInfo.Name));
+
+ ///
+ /// получить путь для скачивания
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public string GetUrl(int idWell, int idCategory, int idFile, string dotExtention) =>
+ fileStorageRepository.GetUrl(idWell, idCategory, idFile, dotExtention);
+
+ ///
+ /// пометить метку файла как удаленную
+ ///
+ ///
+ ///
+ ///
+ public Task MarkFileMarkAsDeletedAsync(int idMark,
+ CancellationToken token)
+ => fileRepository.MarkFileMarkAsDeletedAsync(new int[] { idMark }, token);
+
+ ///
+ /// Инфо о файле
+ ///
+ ///
+ ///
+ ///
+ public async Task> GetInfoByIdsAsync(IEnumerable idsFile, CancellationToken token)
+ {
+ var result = await fileRepository.GetInfoByIdsAsync(idsFile, token).ConfigureAwait(false);
+
+ foreach (var entity in result)
+ {
+
+ var ext = Path.GetExtension(entity.Name);
+ var relativePath = GetUrl(entity.IdWell, entity.IdCategory, entity.Id, ext);
+ var fullPath = Path.GetFullPath(relativePath);
+ }
+
+ return result;
+ }
+
+ ///
+ /// Получить файлы определенной категории
+ ///
+ ///
+ ///
+ ///
+ public Task> GetInfosAsync(FileRequest request, CancellationToken token)
+ => fileRepository.GetInfosAsync(request, token);
+
+ ///
+ /// Получить список файлов в контейнере
+ ///
+ ///
+ ///
+ ///
+ public Task> GetInfosPaginatedAsync(FileRequest request, CancellationToken token)
+ => fileRepository.GetInfosPaginatedAsync(request, token);
+
+ ///
+ /// Пометить файл как удаленный
+ ///
+ ///
+ ///
+ ///
+ public Task MarkAsDeletedAsync(int idFile, CancellationToken token = default)
+ => fileRepository.MarkAsDeletedAsync(idFile, token);
+
+ ///
+ /// добавить метку на файл
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Task CreateFileMarkAsync(FileMarkDto fileMarkDto, int idUser, CancellationToken token)
+ => fileRepository.CreateFileMarkAsync(fileMarkDto, idUser, token);
+
+ ///
+ /// Получить запись по id
+ ///
+ ///
+ ///
+ ///
+ public Task GetOrDefaultAsync(int id, CancellationToken token)
+ => fileRepository.GetOrDefaultAsync(id, token);
+
+ ///
+ /// получить инфо о файле по метке
+ ///
+ ///
+ ///
+ ///
+ public Task GetByMarkId(int idMark, CancellationToken token)
+ => fileRepository.GetByMarkId(idMark, token);
+
+ ///
+ /// получить инфо о файле по метке
+ ///
+ ///
+ ///
+ ///
+ public Task MarkFileMarkAsDeletedAsync(IEnumerable idsMarks, CancellationToken token)
+ => fileRepository.MarkFileMarkAsDeletedAsync(idsMarks, token);
+
+ ///
+ /// Удаление всех файлов по скважине помеченных как удаленные
+ ///
+ ///
+ ///
+ ///
+ public async Task DeleteFilesFromDbMarkedDeletionByIdWell(int idWell, CancellationToken token)
+ {
+ var files = await fileRepository.GetInfosAsync(
+ new FileRequest
+ {
+ IdWell = idWell,
+ IsDeleted = true
+ },
+ token);
+ var result = await DeleteAsync(files.Select(x => x.Id), token);
+ return result;
+ }
+
+ ///
+ /// Удаление всех файлов с диска о которых нет информации в базе
+ ///
+ ///
+ ///
+ public async Task DeleteFilesNotExistStorage(int idWell, CancellationToken token)
+ {
+ var files = await fileRepository.GetInfosAsync(
+ new FileRequest
+ {
+ IdWell = idWell
+ },
+ token);
+ var result = await Task.FromResult(fileStorageRepository.DeleteFilesNotInList(idWell, files.Select(x => x.Id)));
+ return result;
+ }
+
+ ///
+ /// Вывод списка всех файлов из базы, для которых нет файла на диске
+ ///
+ ///
+ ///
+ ///
+ public async Task> GetListFilesNotDisc(int idWell, CancellationToken token)
+ {
+ var files = await fileRepository.GetInfosAsync(
+ new FileRequest
+ {
+ IdWell = idWell
+ },
+ token);
+ var result = fileStorageRepository.GetListFilesNotDisc(files);
+ return result;
+ }
+
+ ///
+ /// Получить файловый поток по идентификатору файла
+ ///
+ ///
+ ///
+ public Stream GetFileStream(FileInfoDto fileInfo)
+ {
+ var relativePath = GetUrl(fileInfo);
+ var fileStream = new FileStream(Path.GetFullPath(relativePath), FileMode.Open);
+
+ return fileStream;
+ }
+ }
+#nullable disable
+}
diff --git a/AsbCloudApp/Services/IFileService.cs b/AsbCloudApp/Services/IFileService.cs
deleted file mode 100644
index 18d0829d..00000000
--- a/AsbCloudApp/Services/IFileService.cs
+++ /dev/null
@@ -1,179 +0,0 @@
-using AsbCloudApp.Data;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace AsbCloudApp.Services
-{
- //TODO: refactor IFileService
-
- ///
- /// Сервис доступа к файлам
- ///
- public interface IFileService
- {
- ///
- /// Директория хранения файлов
- ///
- string RootPath { get; }
-
- ///
- /// Сохранить файл
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- Task SaveAsync(int idWell, int? idUser, int idCategory, string fileFullName, Stream fileStream, CancellationToken token = default);
-
- ///
- /// Получить список файлов в контейнере
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- Task> GetInfosAsync(int idWell,
- int idCategory, string companyName = default, string fileName = default, DateTime begin = default, DateTime end = default,
- int skip = 0, int take = 32, CancellationToken token = default);
-
- ///
- /// Инфо о файле
- ///
- ///
- ///
- ///
- Task GetInfoAsync(int idFile,
- CancellationToken token);
-
- ///
- /// Пометить файл как удаленный
- ///
- ///
- ///
- ///
- Task MarkAsDeletedAsync(int idFile,
- CancellationToken token = default);
-
- ///
- /// Получить файлы определенной категории
- ///
- ///
- ///
- ///
- ///
- Task> GetInfosByCategoryAsync(int idWell, int idCategory, CancellationToken token = default);
-
- ///
- /// удалить файл
- ///
- ///
- ///
- ///
- Task DeleteAsync(int id, CancellationToken token);
-
- ///
- /// удалить файлы
- ///
- ///
- ///
- ///
- Task DeleteAsync(IEnumerable ids, CancellationToken token);
-
- ///
- /// получить путь для скачивания
- ///
- ///
- ///
- string GetUrl(FileInfoDto fileInfo);
-
- ///
- /// получить путь для скачивания
- ///
- ///
- ///
- string GetUrl(int idFile);
-
- ///
- /// получить путь для скачивания
- ///
- ///
- ///
- ///
- ///
- ///
- string GetUrl(int idWell, int idCategory, int idFile, string dotExtention);
-
- ///
- /// добавить метку на файл
- ///
- ///
- ///
- ///
- ///
- Task CreateFileMarkAsync(FileMarkDto fileMarkDto, int idUser, CancellationToken token);
-
- ///
- /// пометить метку файла как удаленную
- ///
- ///
- ///
- ///
- Task MarkFileMarkAsDeletedAsync(int idMark, CancellationToken token);
-
- ///
- /// переместить файл
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- Task MoveAsync(int idWell, int? idUser, int idCategory, string destinationFileName, string srcFileFullName, CancellationToken token = default);
-
- ///
- /// получить инфо о файле по метке
- ///
- ///
- ///
- ///
- Task GetByMarkId(int idMark, CancellationToken token);
-
- ///
- /// пометить метки файлов как удаленные
- ///
- ///
- ///
- ///
- Task MarkFileMarkAsDeletedAsync(IEnumerable idsMarks, CancellationToken token);
-
- ///
- /// Инфо о файле
- ///
- ///
- ///
- ///
- Task> GetInfoByIdsAsync(List idsFile, CancellationToken token);
-
- ///
- /// Получение файлов по скважине
- ///
- ///
- ///
- ///
- Task> GetInfosByWellIdAsync(int idWell, CancellationToken token);
- }
-}
diff --git a/AsbCloudApp/Services/IReduceSamplingService.cs b/AsbCloudApp/Services/IReduceSamplingService.cs
new file mode 100644
index 00000000..a0220c58
--- /dev/null
+++ b/AsbCloudApp/Services/IReduceSamplingService.cs
@@ -0,0 +1,43 @@
+using AsbCloudApp.Data;
+using System.Collections.Generic;
+
+namespace AsbCloudApp.Services
+{
+#nullable enable
+ ///
+ /// Делегат обновления состояния задачи
+ ///
+ ///
+ public delegate void OnJobProgressDelagate(JobDto job);
+
+ ///
+ /// Сервис прореживания архива БД.
+ /// Удаляет часть телеметрии.
+ /// Понижает частоту записей в БД с 1 запись за 1 сек до 1 запись за N сек.
+ ///
+ public interface IReduceSamplingService
+ {
+ ///
+ /// Получить все задания. Задания удаляются минимум через 10 сек после выполнения, возможно позднее.
+ ///
+ /// Enumerable of JobDto or empty
+ IEnumerable GetJobs();
+
+ ///
+ /// Получить состояние определенной задачи
+ ///
+ ///
+ ///
+ JobDto? GetOrDefaultState(int idTelemetry);
+
+ ///
+ /// Создать задачу прореживанию архива и добавить её в очередь на выполнение
+ ///
+ /// телеметрия для прореживания
+ /// колбек процесса выполнения
+ /// созданная задача или задача из очереди
+ /// задача добавлена == true
+ bool TryEnqueueRediceSamplingJob(int idTelemetry, OnJobProgressDelagate onProgress, out JobDto jobDto);
+ }
+#nullable disable
+}
\ No newline at end of file
diff --git a/AsbCloudDb/EFExtentions.cs b/AsbCloudDb/EFExtentions.cs
index db66be04..3cbf3509 100644
--- a/AsbCloudDb/EFExtentions.cs
+++ b/AsbCloudDb/EFExtentions.cs
@@ -69,6 +69,15 @@ namespace AsbCloudDb
return database.ExecuteSqlRawAsync(query, token);
}
+ public static Task ExecInsertAsync(this Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade database, DbSet dbSet, IEnumerable items, CancellationToken token)
+ where T : class
+ {
+ var factory = GetQueryStringFactory(dbSet);
+ var query = factory.MakeInsertSql(items);
+
+ return database.ExecuteSqlRawAsync(query, token);
+ }
+
public static string GetTableName(this DbSet dbSet)
where T : class
{
@@ -108,6 +117,17 @@ namespace AsbCloudDb
}
return stat;
}
+
+ public static IQueryable SkipTake(this IQueryable query, int? skip, int? take)
+ {
+ if (skip > 0)
+ query = query.Skip((int)skip);
+
+ if (take > 0)
+ query = query.Take((int)take);
+
+ return query;
+ }
}
interface IQueryStringFactory { }
@@ -154,6 +174,14 @@ namespace AsbCloudDb
return builder.ToString();
}
+ public string MakeInsertSql(IEnumerable items)
+ {
+ var builder = new StringBuilder(insertHeader, 7);
+ BuildRows(builder, items);
+ builder.Append(';');
+ return builder.ToString();
+ }
+
private StringBuilder BuildRows(StringBuilder builder, IEnumerable items)
{
var list = items.ToList();
diff --git a/AsbCloudDb/Migrations/20221013040242_Delete_colums_table_t_telemetry_data_spin.Designer.cs b/AsbCloudDb/Migrations/20221013040242_Delete_colums_table_t_telemetry_data_spin.Designer.cs
new file mode 100644
index 00000000..d42e6b13
--- /dev/null
+++ b/AsbCloudDb/Migrations/20221013040242_Delete_colums_table_t_telemetry_data_spin.Designer.cs
@@ -0,0 +1,6543 @@
+//
+using System;
+using System.Text.Json;
+using AsbCloudDb.Model;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace AsbCloudDb.Migrations
+{
+ [DbContext(typeof(AsbCloudDbContext))]
+ [Migration("20221013040242_Delete_colums_table_t_telemetry_data_spin")]
+ partial class Delete_colums_table_t_telemetry_data_spin
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .UseCollation("Russian_Russia.1251")
+ .HasAnnotation("ProductVersion", "6.0.7")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "adminpack");
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("AsbCloudDb.Model.Cluster", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Caption")
+ .HasMaxLength(255)
+ .HasColumnType("character varying(255)")
+ .HasColumnName("caption")
+ .HasComment("Название");
+
+ b.Property("IdDeposit")
+ .HasColumnType("integer")
+ .HasColumnName("id_deposit");
+
+ b.Property("Latitude")
+ .HasColumnType("double precision")
+ .HasColumnName("latitude");
+
+ b.Property("Longitude")
+ .HasColumnType("double precision")
+ .HasColumnName("longitude");
+
+ b.Property("Timezone")
+ .HasColumnType("jsonb")
+ .HasColumnName("timezone")
+ .HasComment("Смещение часового пояса от UTC");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdDeposit");
+
+ b.ToTable("t_cluster");
+
+ b.HasComment("Кусты");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.Company", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Caption")
+ .HasMaxLength(255)
+ .HasColumnType("character varying(255)")
+ .HasColumnName("caption");
+
+ b.Property("IdCompanyType")
+ .HasMaxLength(255)
+ .HasColumnType("integer")
+ .HasColumnName("id_company_type")
+ .HasComment("вид деятельности");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdCompanyType");
+
+ b.ToTable("t_company");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Caption = "ООО \"АСБ\"",
+ IdCompanyType = 3
+ });
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.CompanyType", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Caption")
+ .HasMaxLength(255)
+ .HasColumnType("character varying(255)")
+ .HasColumnName("caption");
+
+ b.HasKey("Id");
+
+ b.ToTable("t_company_type");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Caption = "Недрапользователь"
+ },
+ new
+ {
+ Id = 2,
+ Caption = "Буровой подрядчик"
+ },
+ new
+ {
+ Id = 3,
+ Caption = "Сервис автоматизации бурения"
+ });
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.DailyReport.DailyReport", b =>
+ {
+ b.Property("IdWell")
+ .HasColumnType("integer")
+ .HasColumnName("id_well")
+ .HasComment("ID скважины");
+
+ b.Property("StartDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("start_date")
+ .HasComment("Дата отчёта");
+
+ b.Property("Info")
+ .HasColumnType("jsonb")
+ .HasColumnName("info")
+ .HasComment("Список параметров для отчёта");
+
+ b.HasKey("IdWell", "StartDate")
+ .HasName("t_id_well_date_start_pk");
+
+ b.ToTable("t_daily_report");
+
+ b.HasComment("Ежедневные отчёты");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.Deposit", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Caption")
+ .HasMaxLength(255)
+ .HasColumnType("character varying(255)")
+ .HasColumnName("caption");
+
+ b.Property("Latitude")
+ .HasColumnType("double precision")
+ .HasColumnName("latitude");
+
+ b.Property("Longitude")
+ .HasColumnType("double precision")
+ .HasColumnName("longitude");
+
+ b.Property("Timezone")
+ .HasColumnType("jsonb")
+ .HasColumnName("timezone")
+ .HasComment("Смещение часового пояса от UTC");
+
+ b.HasKey("Id");
+
+ b.ToTable("t_deposit");
+
+ b.HasComment("Месторождение");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.DetectedOperation", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DateEnd")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("date_end")
+ .HasComment("Дата начала операции");
+
+ b.Property("DateStart")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("date_start")
+ .HasComment("Дата начала операции");
+
+ b.Property("DepthEnd")
+ .HasColumnType("double precision")
+ .HasColumnName("depth_end")
+ .HasComment("Глубина после завершения операции, м");
+
+ b.Property("DepthStart")
+ .HasColumnType("double precision")
+ .HasColumnName("depth_start")
+ .HasComment("Глубина на начало операции, м");
+
+ b.Property("IdCategory")
+ .HasColumnType("integer")
+ .HasColumnName("id_category")
+ .HasComment("Id категории операции");
+
+ b.Property("IdReasonOfEnd")
+ .HasColumnType("integer")
+ .HasColumnName("id_reason_of_end")
+ .HasComment("Код признака окончания операции");
+
+ b.Property("IdTelemetry")
+ .HasColumnType("integer")
+ .HasColumnName("id_telemetry");
+
+ b.Property("IdUsersAtStart")
+ .HasColumnType("integer")
+ .HasColumnName("id_user")
+ .HasComment("Id пользователя по телеметрии на момент начала операции");
+
+ b.Property("Value")
+ .HasColumnType("double precision")
+ .HasColumnName("value")
+ .HasComment("Ключевой показатель операции");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdCategory");
+
+ b.HasIndex("IdTelemetry");
+
+ b.ToTable("t_detected_operation");
+
+ b.HasComment("автоматически определенные операции по телеметрии");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.Driller", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasComment("Идентификатор");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(255)
+ .HasColumnType("character varying(255)")
+ .HasColumnName("name")
+ .HasComment("Имя");
+
+ b.Property("Patronymic")
+ .HasMaxLength(255)
+ .HasColumnType("character varying(255)")
+ .HasColumnName("patronymic")
+ .HasComment("Отчество");
+
+ b.Property("Surname")
+ .IsRequired()
+ .HasMaxLength(255)
+ .HasColumnType("character varying(255)")
+ .HasColumnName("surname")
+ .HasComment("Фамилия");
+
+ b.HasKey("Id");
+
+ b.ToTable("t_driller");
+
+ b.HasComment("Бурильщик");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.DrillFlowChart", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AxialLoadMax")
+ .HasColumnType("double precision")
+ .HasColumnName("axial_load_max")
+ .HasComment("Максимальная нагрузка");
+
+ b.Property("AxialLoadMin")
+ .HasColumnType("double precision")
+ .HasColumnName("axial_load_min")
+ .HasComment("Минимальная нагрузка");
+
+ b.Property("DepthEnd")
+ .HasColumnType("double precision")
+ .HasColumnName("depth_end")
+ .HasComment("Глубина окончания интервала");
+
+ b.Property("DepthStart")
+ .HasColumnType("double precision")
+ .HasColumnName("depth_start")
+ .HasComment("Стартовая глубина");
+
+ b.Property("FlowMax")
+ .HasColumnType("double precision")
+ .HasColumnName("flow_max")
+ .HasComment("Максимальный расход");
+
+ b.Property("FlowMin")
+ .HasColumnType("double precision")
+ .HasColumnName("flow_min")
+ .HasComment("Минимальный расход");
+
+ b.Property("IdWell")
+ .HasColumnType("integer")
+ .HasColumnName("well_id")
+ .HasComment("Id скважины");
+
+ b.Property("IdWellOperationCategory")
+ .HasColumnType("integer")
+ .HasColumnName("id_operation_category")
+ .HasComment("Id типа операции");
+
+ b.Property("LastUpdate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("last_update")
+ .HasComment("Дата последнего изменения");
+
+ b.Property("PressureMax")
+ .HasColumnType("double precision")
+ .HasColumnName("pressure_max")
+ .HasComment("Максимальное давление");
+
+ b.Property("PressureMin")
+ .HasColumnType("double precision")
+ .HasColumnName("pressure_min")
+ .HasComment("Минимальное давление");
+
+ b.Property("RotorSpeedMax")
+ .HasColumnType("double precision")
+ .HasColumnName("rotor_speed_max")
+ .HasComment("Максимальные обороты на ВСП");
+
+ b.Property("RotorSpeedMin")
+ .HasColumnType("double precision")
+ .HasColumnName("rotor_speed_min")
+ .HasComment("Минимальные обороты на ВСП");
+
+ b.Property("RotorTorqueMax")
+ .HasColumnType("double precision")
+ .HasColumnName("rotor_torque_max")
+ .HasComment("Максимальный момент на ВСП");
+
+ b.Property("RotorTorqueMin")
+ .HasColumnType("double precision")
+ .HasColumnName("rotor_torque_min")
+ .HasComment("Минимальный момент на ВСП");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdWell");
+
+ b.HasIndex("IdWellOperationCategory");
+
+ b.ToTable("t_drill_flow_chart");
+
+ b.HasComment("Параметры коридоров бурения (диапазоны параметров бурения)");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.DrillingProgramPart", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("IdFileCategory")
+ .HasColumnType("integer")
+ .HasColumnName("id_file_category");
+
+ b.Property("IdWell")
+ .HasColumnType("integer")
+ .HasColumnName("id_well");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdFileCategory");
+
+ b.HasIndex("IdWell", "IdFileCategory")
+ .IsUnique();
+
+ b.ToTable("t_drilling_program_part");
+
+ b.HasComment("части программ бурения");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.DrillParams", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AxialLoadAvg")
+ .HasColumnType("double precision")
+ .HasColumnName("axial_load_avg")
+ .HasComment("Средняя нагрузка");
+
+ b.Property("AxialLoadMax")
+ .HasColumnType("double precision")
+ .HasColumnName("axial_load_max")
+ .HasComment("Максимальная нагрузка");
+
+ b.Property("AxialLoadMin")
+ .HasColumnType("double precision")
+ .HasColumnName("axial_load_min")
+ .HasComment("Минимальная нагрузка");
+
+ b.Property("DepthEnd")
+ .HasColumnType("double precision")
+ .HasColumnName("depth_end")
+ .HasComment("Глубина окончания интервала");
+
+ b.Property("DepthStart")
+ .HasColumnType("double precision")
+ .HasColumnName("depth_start")
+ .HasComment("Стартовая глубина");
+
+ b.Property("FlowAvg")
+ .HasColumnType("double precision")
+ .HasColumnName("flow_avg")
+ .HasComment("Средний расход");
+
+ b.Property("FlowMax")
+ .HasColumnType("double precision")
+ .HasColumnName("flow_max")
+ .HasComment("Максимальный расход");
+
+ b.Property("FlowMin")
+ .HasColumnType("double precision")
+ .HasColumnName("flow_min")
+ .HasComment("Минимальный расход");
+
+ b.Property("IdWell")
+ .HasColumnType("integer")
+ .HasColumnName("well_id")
+ .HasComment("Id скважины");
+
+ b.Property("IdWellSectionType")
+ .HasColumnType("integer")
+ .HasColumnName("id_wellsection_type")
+ .HasComment("Id с типом секции скважины");
+
+ b.Property("PressureAvg")
+ .HasColumnType("double precision")
+ .HasColumnName("pressure_avg")
+ .HasComment("Среднее давление");
+
+ b.Property("PressureMax")
+ .HasColumnType("double precision")
+ .HasColumnName("pressure_max")
+ .HasComment("Максимальное давление");
+
+ b.Property("PressureMin")
+ .HasColumnType("double precision")
+ .HasColumnName("pressure_min")
+ .HasComment("Минимальное давление");
+
+ b.Property("RotorSpeedAvg")
+ .HasColumnType("double precision")
+ .HasColumnName("rotor_speed_avg")
+ .HasComment("Средние обороты на ВСП");
+
+ b.Property("RotorSpeedMax")
+ .HasColumnType("double precision")
+ .HasColumnName("rotor_speed_max")
+ .HasComment("Максимальные обороты на ВСП");
+
+ b.Property("RotorSpeedMin")
+ .HasColumnType("double precision")
+ .HasColumnName("rotor_speed_min")
+ .HasComment("Минимальные обороты на ВСП");
+
+ b.Property("RotorTorqueAvg")
+ .HasColumnType("double precision")
+ .HasColumnName("rotor_torque_avg")
+ .HasComment("Средний момент на ВСП");
+
+ b.Property("RotorTorqueMax")
+ .HasColumnType("double precision")
+ .HasColumnName("rotor_torque_max")
+ .HasComment("Максимальный момент на ВСП");
+
+ b.Property("RotorTorqueMin")
+ .HasColumnType("double precision")
+ .HasColumnName("rotor_torque_min")
+ .HasComment("Минимальный момент на ВСП");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdWell");
+
+ b.HasIndex("IdWellSectionType");
+
+ b.ToTable("t_drill_params");
+
+ b.HasComment("Режим бурения в секции (диапазоны параметров бурения)");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.FileCategory", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Name")
+ .HasColumnType("text")
+ .HasColumnName("name")
+ .HasComment("Название категории");
+
+ b.Property("ShortName")
+ .HasColumnType("text")
+ .HasColumnName("short_name")
+ .HasComment("Короткое название категории");
+
+ b.HasKey("Id");
+
+ b.ToTable("t_file_category");
+
+ b.HasComment("Категории файлов");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Name = "Растворный сервис",
+ ShortName = "fluidService"
+ },
+ new
+ {
+ Id = 2,
+ Name = "Цементирование",
+ ShortName = "cement"
+ },
+ new
+ {
+ Id = 3,
+ Name = "ННБ",
+ ShortName = "nnb"
+ },
+ new
+ {
+ Id = 4,
+ Name = "ГТИ",
+ ShortName = "gti"
+ },
+ new
+ {
+ Id = 5,
+ Name = "Документы по скважине",
+ ShortName = "wellDocuments"
+ },
+ new
+ {
+ Id = 6,
+ Name = "Супервайзер",
+ ShortName = "supervisor"
+ },
+ new
+ {
+ Id = 7,
+ Name = "Мастер",
+ ShortName = "master"
+ },
+ new
+ {
+ Id = 8,
+ Name = "Долотный сервис",
+ ShortName = "toolService"
+ },
+ new
+ {
+ Id = 9,
+ Name = "Буровой подрядчик",
+ ShortName = "drillService"
+ },
+ new
+ {
+ Id = 10,
+ Name = "Сервис по заканчиванию скважины",
+ ShortName = "closingService"
+ },
+ new
+ {
+ Id = 12,
+ Name = "Рапорт",
+ ShortName = "report"
+ },
+ new
+ {
+ Id = 1000,
+ Name = "Программа бурения"
+ },
+ new
+ {
+ Id = 1001,
+ Name = "Задание от геологов"
+ },
+ new
+ {
+ Id = 1002,
+ Name = "Профиль ствола скважины (ННБ)"
+ },
+ new
+ {
+ Id = 1003,
+ Name = "Технологические расчеты (ННБ)"
+ },
+ new
+ {
+ Id = 1004,
+ Name = "Долотная программа"
+ },
+ new
+ {
+ Id = 1005,
+ Name = "Программа по растворам"
+ },
+ new
+ {
+ Id = 1006,
+ Name = "Программа геофизических исследований"
+ },
+ new
+ {
+ Id = 1007,
+ Name = "Планы спусков обсадных колонн"
+ },
+ new
+ {
+ Id = 1008,
+ Name = "Программы цементирования обсадных колонн"
+ },
+ new
+ {
+ Id = 10000,
+ Name = "Проект на бурение транспортного и горизонтального участков скважины"
+ },
+ new
+ {
+ Id = 10001,
+ Name = "Программа на бурение транспортного и горизонтального участков скважины"
+ },
+ new
+ {
+ Id = 10002,
+ Name = "Акт о начале бурения"
+ },
+ new
+ {
+ Id = 10003,
+ Name = "План работ спуска и цементирования направления"
+ },
+ new
+ {
+ Id = 10004,
+ Name = "Программа цементирования направления"
+ },
+ new
+ {
+ Id = 10005,
+ Name = "Мера обсадных труб (направление)"
+ },
+ new
+ {
+ Id = 10006,
+ Name = "Акт на выполненные работы по цементированию направления"
+ },
+ new
+ {
+ Id = 10007,
+ Name = "Отчет по цементированию направления (график)"
+ },
+ new
+ {
+ Id = 10008,
+ Name = "План работ спуска и цементирования кондуктора"
+ },
+ new
+ {
+ Id = 10009,
+ Name = "Программа цементирования (кондуктор)"
+ },
+ new
+ {
+ Id = 10010,
+ Name = "Мера обсадных труб (кондуктор)"
+ },
+ new
+ {
+ Id = 10011,
+ Name = "Карта крепления кондуктора"
+ },
+ new
+ {
+ Id = 10012,
+ Name = "Акт на выполненные работы по цементированию кондуктора"
+ },
+ new
+ {
+ Id = 10013,
+ Name = "Отчет по цементированию кондуктора (график)"
+ },
+ new
+ {
+ Id = 10014,
+ Name = "Акт о замере расстояния от стола ротора до муфты кондуктора"
+ },
+ new
+ {
+ Id = 10015,
+ Name = "Акт опресовки цементного кольца за кондуктором"
+ },
+ new
+ {
+ Id = 10016,
+ Name = "Акт опресовки ППГ с глухими плашками совместно с кондуктором"
+ },
+ new
+ {
+ Id = 10017,
+ Name = "Акт опресовки ПУГ, ППГ с трубными плашками совместно с кондуктором"
+ },
+ new
+ {
+ Id = 10018,
+ Name = "План работ на крепление обсадной колонны (эк. колонна)"
+ },
+ new
+ {
+ Id = 10019,
+ Name = "Программа цементирования (эк. колонна)"
+ },
+ new
+ {
+ Id = 10020,
+ Name = "Мера труб эксплуатационной колонны"
+ },
+ new
+ {
+ Id = 10021,
+ Name = "Карта по креплению скважины (эк. колонна)"
+ },
+ new
+ {
+ Id = 10022,
+ Name = "Акт на установку пружинных центраторов"
+ },
+ new
+ {
+ Id = 10023,
+ Name = "Отчет по цементированию эксплуатационной колонны (график)"
+ },
+ new
+ {
+ Id = 10024,
+ Name = "Акт на выполненные работы по цементированию эксплуатационной колонны"
+ },
+ new
+ {
+ Id = 10025,
+ Name = "Акт об испытании эк. колонны на герметичность (СТОП)"
+ },
+ new
+ {
+ Id = 10026,
+ Name = "Акт опресовки ППГ с глухими плашками совместно с э/колонной"
+ },
+ new
+ {
+ Id = 10027,
+ Name = "Акт опресовки ПУГ, ППГ с трубными плашками совместно с э/колонной"
+ },
+ new
+ {
+ Id = 10028,
+ Name = "Акт на вскрытие продуктивного пласта"
+ },
+ new
+ {
+ Id = 10029,
+ Name = "Акт замера параметров раствора при бурении горизонтального участка"
+ },
+ new
+ {
+ Id = 10030,
+ Name = "Разрешение на спуск «хвостовика» (телефонограмма)"
+ },
+ new
+ {
+ Id = 10031,
+ Name = "План работ на спуск «хвостовика»"
+ },
+ new
+ {
+ Id = 10032,
+ Name = "Акт готовности бурового и энергетического оборудования к спуску «хвостовика»"
+ },
+ new
+ {
+ Id = 10033,
+ Name = "Акт шаблонировки ствола скважины перед спуском «хвостовика»"
+ },
+ new
+ {
+ Id = 10034,
+ Name = "Мера обсадных труб (хвостовик)"
+ },
+ new
+ {
+ Id = 10035,
+ Name = "Акт выполненных работ по спуску хвостовика с закачкой (нефти, солевого раствора"
+ },
+ new
+ {
+ Id = 10036,
+ Name = "Акт о переводе скважины на тех. воду"
+ },
+ new
+ {
+ Id = 10037,
+ Name = "Акт об окончании бурения"
+ },
+ new
+ {
+ Id = 10038,
+ Name = "Акт на передачу скважины в освоение (КРС)"
+ },
+ new
+ {
+ Id = 10039,
+ Name = "Акт на опресовку межколонного пространства с КРС"
+ },
+ new
+ {
+ Id = 10040,
+ Name = "Акт на сдачу скважины в ЦДНГ"
+ },
+ new
+ {
+ Id = 10041,
+ Name = "Паспорт ОУС (заполняется геологами)"
+ },
+ new
+ {
+ Id = 10042,
+ Name = "Паспорт скважины (заполняется геологами)"
+ },
+ new
+ {
+ Id = 10043,
+ Name = "Фактические данные бурения (вставляются в паспорт скважины)"
+ });
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.FileInfo", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("IdAuthor")
+ .HasColumnType("integer")
+ .HasColumnName("id_author")
+ .HasComment("Id пользователя, загрузившего файл");
+
+ b.Property("IdCategory")
+ .HasColumnType("integer")
+ .HasColumnName("id_category")
+ .HasComment("id категории файла");
+
+ b.Property("IdWell")
+ .HasColumnType("integer")
+ .HasColumnName("id_well")
+ .HasComment("id скважины");
+
+ b.Property("IsDeleted")
+ .HasColumnType("boolean")
+ .HasColumnName("is_deleted")
+ .HasComment("Удален ли файл");
+
+ b.Property("Name")
+ .HasColumnType("text")
+ .HasColumnName("name")
+ .HasComment("Название файла");
+
+ b.Property("Size")
+ .HasColumnType("bigint")
+ .HasColumnName("file_size")
+ .HasComment("Размер файла");
+
+ b.Property("UploadDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("date");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdAuthor");
+
+ b.HasIndex("IdCategory");
+
+ b.HasIndex("IdWell");
+
+ b.ToTable("t_file_info");
+
+ b.HasComment("Файлы всех категорий");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.FileMark", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Comment")
+ .HasMaxLength(255)
+ .HasColumnType("character varying(255)")
+ .HasColumnName("comment")
+ .HasComment("Комментарий");
+
+ b.Property("DateCreated")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("date_created")
+ .HasComment("Дата совершенного действия");
+
+ b.Property("IdFile")
+ .HasColumnType("integer")
+ .HasColumnName("id_file")
+ .HasComment("id файла");
+
+ b.Property("IdMarkType")
+ .HasColumnType("integer")
+ .HasColumnName("id_mark_type")
+ .HasComment("0 - отклонен, 1 - согласован");
+
+ b.Property("IdUser")
+ .HasColumnType("integer")
+ .HasColumnName("id_user")
+ .HasComment("id пользователя");
+
+ b.Property("IsDeleted")
+ .HasColumnType("boolean")
+ .HasColumnName("is_deleted")
+ .HasComment("Помечен ли файл как удаленный");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdFile");
+
+ b.HasIndex("IdUser");
+
+ b.ToTable("t_file_mark");
+
+ b.HasComment("Действия с файлами.");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.Measure", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Data")
+ .HasColumnType("jsonb")
+ .HasColumnName("data")
+ .HasComment("Данные таблицы последних данных");
+
+ b.Property("IdCategory")
+ .HasColumnType("integer")
+ .HasColumnName("id_category")
+ .HasComment("id категории");
+
+ b.Property("IdWell")
+ .HasColumnType("integer")
+ .HasColumnName("id_well")
+ .HasComment("id скважины");
+
+ b.Property("IsDeleted")
+ .HasColumnType("boolean")
+ .HasColumnName("is_deleted")
+ .HasComment("Пометка удаленным");
+
+ b.Property("Timestamp")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("timestamp")
+ .HasComment("время добавления");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdCategory");
+
+ b.HasIndex("IdWell");
+
+ b.ToTable("t_measure");
+
+ b.HasComment("Таблица c данными для вкладки 'Последние данные'");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.MeasureCategory", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Name")
+ .HasColumnType("text")
+ .HasColumnName("name")
+ .HasComment("Название категории");
+
+ b.Property("ShortName")
+ .HasColumnType("text")
+ .HasColumnName("short_name")
+ .HasComment("Короткое название категории");
+
+ b.HasKey("Id");
+
+ b.ToTable("t_measure_category");
+
+ b.HasComment("Категория последних данных");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Name = "Показатели бурового раствора",
+ ShortName = "Раствор"
+ },
+ new
+ {
+ Id = 2,
+ Name = "Шламограмма",
+ ShortName = "Шламограмма"
+ },
+ new
+ {
+ Id = 3,
+ Name = "ННБ",
+ ShortName = "ННБ"
+ });
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.OperationValue", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasComment("Идентификатор");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DepthEnd")
+ .HasColumnType("double precision")
+ .HasColumnName("depth_end")
+ .HasComment("Конечная глубина");
+
+ b.Property("DepthStart")
+ .HasColumnType("double precision")
+ .HasColumnName("depth_start")
+ .HasComment("Старотовая глубина");
+
+ b.Property("IdOperationCategory")
+ .HasColumnType("integer")
+ .HasColumnName("id_operation_category")
+ .HasComment("Ид категории операции");
+
+ b.Property("IdWell")
+ .HasColumnType("integer")
+ .HasColumnName("id_well")
+ .HasComment("Ид скважины");
+
+ b.Property("StandardValue")
+ .HasColumnType("double precision")
+ .HasColumnName("standard_value")
+ .HasComment("Нормативный показатель");
+
+ b.Property("TargetValue")
+ .HasColumnType("double precision")
+ .HasColumnName("target_value")
+ .HasComment("Целевой показатель");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdOperationCategory");
+
+ b.HasIndex("IdWell");
+
+ b.ToTable("t_operationvalue");
+
+ b.HasComment("Целевые/нормативные показатели операции");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.Permission", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Description")
+ .HasMaxLength(255)
+ .HasColumnType("character varying(255)")
+ .HasColumnName("description")
+ .HasComment("Краткое описание");
+
+ b.Property("Name")
+ .HasMaxLength(255)
+ .HasColumnType("character varying(255)")
+ .HasColumnName("name")
+ .HasComment("Название");
+
+ b.HasKey("Id");
+
+ b.ToTable("t_permission");
+
+ b.HasComment("Разрешения на доступ к данным");
+
+ b.HasData(
+ new
+ {
+ Id = 100,
+ Description = "Разрешение удалять админ. Кусты",
+ Name = "AdminCluster.delete"
+ },
+ new
+ {
+ Id = 101,
+ Description = "Разрешение редактировать админ. Кусты",
+ Name = "AdminCluster.edit"
+ },
+ new
+ {
+ Id = 102,
+ Description = "Разрешение просматривать админ. Кусты",
+ Name = "AdminCluster.get"
+ },
+ new
+ {
+ Id = 103,
+ Description = "Разрешение удалять админ. Компании",
+ Name = "AdminCompany.delete"
+ },
+ new
+ {
+ Id = 104,
+ Description = "Разрешение редактировать админ. Компании",
+ Name = "AdminCompany.edit"
+ },
+ new
+ {
+ Id = 105,
+ Description = "Разрешение просматривать админ. Компании",
+ Name = "AdminCompany.get"
+ },
+ new
+ {
+ Id = 106,
+ Description = "Разрешение удалять админ. Типы компаний",
+ Name = "AdminCompanyType.delete"
+ },
+ new
+ {
+ Id = 107,
+ Description = "Разрешение редактировать админ. Типы компаний",
+ Name = "AdminCompanyType.edit"
+ },
+ new
+ {
+ Id = 108,
+ Description = "Разрешение просматривать админ. Типы компаний",
+ Name = "AdminCompanyType.get"
+ },
+ new
+ {
+ Id = 109,
+ Description = "Разрешение удалять админ. Месторождения",
+ Name = "AdminDeposit.delete"
+ },
+ new
+ {
+ Id = 110,
+ Description = "Разрешение редактировать админ. Месторождения",
+ Name = "AdminDeposit.edit"
+ },
+ new
+ {
+ Id = 111,
+ Description = "Разрешение просматривать админ. Месторождения",
+ Name = "AdminDeposit.get"
+ },
+ new
+ {
+ Id = 112,
+ Description = "Разрешение удалять админ. Разрешения",
+ Name = "AdminPermission.delete"
+ },
+ new
+ {
+ Id = 113,
+ Description = "Разрешение редактировать админ. Разрешения",
+ Name = "AdminPermission.edit"
+ },
+ new
+ {
+ Id = 114,
+ Description = "Разрешение просматривать админ. Разрешения",
+ Name = "AdminPermission.get"
+ },
+ new
+ {
+ Id = 115,
+ Description = "Разрешение удалять админ. Телеметрию",
+ Name = "AdminTelemetry.delete"
+ },
+ new
+ {
+ Id = 116,
+ Description = "Разрешение редактировать админ. Телеметрию",
+ Name = "AdminTelemetry.edit"
+ },
+ new
+ {
+ Id = 117,
+ Description = "Разрешение просматривать админ. Телеметрию",
+ Name = "AdminTelemetry.get"
+ },
+ new
+ {
+ Id = 118,
+ Description = "Разрешение удалять админ. Пользователей",
+ Name = "AdminUser.delete"
+ },
+ new
+ {
+ Id = 119,
+ Description = "Разрешение редактировать админ. Пользователей",
+ Name = "AdminUser.edit"
+ },
+ new
+ {
+ Id = 120,
+ Description = "Разрешение просматривать админ. Пользователей",
+ Name = "AdminUser.get"
+ },
+ new
+ {
+ Id = 121,
+ Description = "Разрешение удалять админ. Роли пользователей",
+ Name = "AdminUserRole.delete"
+ },
+ new
+ {
+ Id = 122,
+ Description = "Разрешение редактировать админ. Роли пользователей",
+ Name = "AdminUserRole.edit"
+ },
+ new
+ {
+ Id = 123,
+ Description = "Разрешение просматривать админ. Роли пользователей",
+ Name = "AdminUserRole.get"
+ },
+ new
+ {
+ Id = 124,
+ Description = "Разрешение удалять админ. Скважины",
+ Name = "AdminWell.delete"
+ },
+ new
+ {
+ Id = 125,
+ Description = "Разрешение редактировать админ. Скважины",
+ Name = "AdminWell.edit"
+ },
+ new
+ {
+ Id = 126,
+ Description = "Разрешение просматривать админ. Скважины",
+ Name = "AdminWell.get"
+ },
+ new
+ {
+ Id = 127,
+ Description = "Разрешение удалять админ. Подсистемы",
+ Name = "AdminSubsytem.delete"
+ },
+ new
+ {
+ Id = 128,
+ Description = "Разрешение редактировать админ. Подсистемы",
+ Name = "AdminSubsytem.edit"
+ },
+ new
+ {
+ Id = 129,
+ Description = "Разрешение просматривать админ. Подсистемы",
+ Name = "AdminSubsytem.get"
+ },
+ new
+ {
+ Id = 200,
+ Description = "Разрешение редактировать 0",
+ Name = "Auth.edit"
+ },
+ new
+ {
+ Id = 201,
+ Description = "Разрешение просматривать 0",
+ Name = "Auth.get"
+ },
+ new
+ {
+ Id = 202,
+ Description = "Разрешение просматривать Кусты",
+ Name = "Cluster.get"
+ },
+ new
+ {
+ Id = 203,
+ Description = "Разрешение просматривать Месторождения",
+ Name = "Deposit.get"
+ },
+ new
+ {
+ Id = 204,
+ Description = "Разрешение удалять РТК",
+ Name = "DrillFlowChart.delete"
+ },
+ new
+ {
+ Id = 205,
+ Description = "Разрешение редактировать РТК",
+ Name = "DrillFlowChart.edit"
+ },
+ new
+ {
+ Id = 206,
+ Description = "Разрешение просматривать РТК",
+ Name = "DrillFlowChart.get"
+ },
+ new
+ {
+ Id = 207,
+ Description = "Разрешение удалять Программу бурения",
+ Name = "DrillingProgram.delete"
+ },
+ new
+ {
+ Id = 208,
+ Description = "Разрешение редактировать Программу бурения",
+ Name = "DrillingProgram.edit"
+ },
+ new
+ {
+ Id = 209,
+ Description = "Разрешение просматривать Программу бурения",
+ Name = "DrillingProgram.get"
+ },
+ new
+ {
+ Id = 210,
+ Description = "Разрешение удалять Режимы бурения",
+ Name = "DrillParams.delete"
+ },
+ new
+ {
+ Id = 211,
+ Description = "Разрешение редактировать Режимы бурения",
+ Name = "DrillParams.edit"
+ },
+ new
+ {
+ Id = 212,
+ Description = "Разрешение просматривать Режимы бурения",
+ Name = "DrillParams.get"
+ },
+ new
+ {
+ Id = 213,
+ Description = "Разрешение удалять Файлы",
+ Name = "File.delete"
+ },
+ new
+ {
+ Id = 214,
+ Description = "Разрешение редактировать Файлы",
+ Name = "File.edit"
+ },
+ new
+ {
+ Id = 215,
+ Description = "Разрешение просматривать Файлы",
+ Name = "File.get"
+ },
+ new
+ {
+ Id = 216,
+ Description = "Разрешение удалять Измерения",
+ Name = "Measure.delete"
+ },
+ new
+ {
+ Id = 217,
+ Description = "Разрешение редактировать Измерения",
+ Name = "Measure.edit"
+ },
+ new
+ {
+ Id = 218,
+ Description = "Разрешение просматривать Измерения",
+ Name = "Measure.get"
+ },
+ new
+ {
+ Id = 219,
+ Description = "Разрешение просматривать Сообщения телеметрии",
+ Name = "Message.get"
+ },
+ new
+ {
+ Id = 220,
+ Description = "Разрешение просматривать Статистику по операциям",
+ Name = "OperationStat.get"
+ },
+ new
+ {
+ Id = 221,
+ Description = "Разрешение редактировать Рапорта",
+ Name = "Report.edit"
+ },
+ new
+ {
+ Id = 222,
+ Description = "Разрешение просматривать Рапорта",
+ Name = "Report.get"
+ },
+ new
+ {
+ Id = 223,
+ Description = "Разрешение просматривать админ. Системная статистика",
+ Name = "RequestTracker.get"
+ },
+ new
+ {
+ Id = 224,
+ Description = "Разрешение удалять Рекомендации уставок",
+ Name = "Setpoints.delete"
+ },
+ new
+ {
+ Id = 225,
+ Description = "Разрешение редактировать Рекомендации уставок",
+ Name = "Setpoints.edit"
+ },
+ new
+ {
+ Id = 226,
+ Description = "Разрешение просматривать Рекомендации уставок",
+ Name = "Setpoints.get"
+ },
+ new
+ {
+ Id = 227,
+ Description = "Разрешение редактировать Телеметрии",
+ Name = "Telemetry.edit"
+ },
+ new
+ {
+ Id = 228,
+ Description = "Разрешение просматривать Анализ телеметрии",
+ Name = "TelemetryAnalytics.get"
+ },
+ new
+ {
+ Id = 229,
+ Description = "Разрешение редактировать Данные телеметрии по САУБ",
+ Name = "TelemetryDataSaub.edit"
+ },
+ new
+ {
+ Id = 230,
+ Description = "Разрешение просматривать Данные телеметрии по САУБ",
+ Name = "TelemetryDataSaub.get"
+ },
+ new
+ {
+ Id = 231,
+ Description = "Разрешение редактировать Данные телеметрии по SpinMaster",
+ Name = "TelemetryDataSpin.edit"
+ },
+ new
+ {
+ Id = 232,
+ Description = "Разрешение просматривать Данные телеметрии по SpinMaster",
+ Name = "TelemetryDataSpin.get"
+ },
+ new
+ {
+ Id = 233,
+ Description = "Разрешение редактировать Скважины",
+ Name = "Well.edit"
+ },
+ new
+ {
+ Id = 234,
+ Description = "Разрешение просматривать Скважины",
+ Name = "Well.get"
+ },
+ new
+ {
+ Id = 235,
+ Description = "Разрешение редактировать Композитные скважины",
+ Name = "WellComposite.edit"
+ },
+ new
+ {
+ Id = 236,
+ Description = "Разрешение просматривать Композитные скважины",
+ Name = "WellComposite.get"
+ },
+ new
+ {
+ Id = 237,
+ Description = "Разрешение удалять Операции по скважинам",
+ Name = "WellOperation.delete"
+ },
+ new
+ {
+ Id = 238,
+ Description = "Разрешение редактировать Операции по скважинам",
+ Name = "WellOperation.edit"
+ },
+ new
+ {
+ Id = 239,
+ Description = "Разрешение просматривать Операции по скважинам",
+ Name = "WellOperation.get"
+ },
+ new
+ {
+ Id = 240,
+ Description = "Разрешение редактировать Файлы категории 1 (Растворный сервис)",
+ Name = "File.edit1"
+ },
+ new
+ {
+ Id = 241,
+ Description = "Разрешение редактировать Файлы категории 2 (Цементирование)",
+ Name = "File.edit2"
+ },
+ new
+ {
+ Id = 242,
+ Description = "Разрешение редактировать Файлы категории 3 (ННБ)",
+ Name = "File.edit3"
+ },
+ new
+ {
+ Id = 243,
+ Description = "Разрешение редактировать Файлы категории 4 (ГТИ)",
+ Name = "File.edit4"
+ },
+ new
+ {
+ Id = 244,
+ Description = "Разрешение редактировать Файлы категории 5 (Документы по скважине)",
+ Name = "File.edit5"
+ },
+ new
+ {
+ Id = 245,
+ Description = "Разрешение редактировать Файлы категории 6 (Супервайзер)",
+ Name = "File.edit6"
+ },
+ new
+ {
+ Id = 246,
+ Description = "Разрешение редактировать Файлы категории 7 (Мастер)",
+ Name = "File.edit7"
+ },
+ new
+ {
+ Id = 247,
+ Description = "Разрешение редактировать Файлы категории 8 (Долотный сервис)",
+ Name = "File.edit8"
+ },
+ new
+ {
+ Id = 248,
+ Description = "Разрешение редактировать Файлы категории 9 (Буровой подрядчик)",
+ Name = "File.edit9"
+ },
+ new
+ {
+ Id = 249,
+ Description = "Разрешение редактировать Файлы категории 10 (Сервис по заканчиванию скважины)",
+ Name = "File.edit10"
+ },
+ new
+ {
+ Id = 250,
+ Description = "Разрешение редактировать Файлы категории 11 (Рапорт)",
+ Name = "File.edit11"
+ },
+ new
+ {
+ Id = 251,
+ Description = "Разрешение редактировать Файлы категории 12",
+ Name = "File.edit12"
+ },
+ new
+ {
+ Id = 252,
+ Description = "Разрешение редактировать Файлы категории 12",
+ Name = "File.edit13"
+ },
+ new
+ {
+ Id = 253,
+ Description = "Разрешение редактировать Файлы категории 13",
+ Name = "File.edit14"
+ },
+ new
+ {
+ Id = 254,
+ Description = "Разрешение редактировать Файлы категории 14",
+ Name = "File.edit15"
+ },
+ new
+ {
+ Id = 255,
+ Description = "Разрешение редактировать Файлы категории 15",
+ Name = "File.edit16"
+ },
+ new
+ {
+ Id = 256,
+ Description = "Разрешение редактировать Файлы категории 16",
+ Name = "File.edit17"
+ },
+ new
+ {
+ Id = 257,
+ Description = "Разрешение редактировать Файлы категории 17",
+ Name = "File.edit18"
+ },
+ new
+ {
+ Id = 258,
+ Description = "Разрешение редактировать Файлы категории 18",
+ Name = "File.edit19"
+ },
+ new
+ {
+ Id = 259,
+ Description = "Разрешение редактировать Файлы категории 19",
+ Name = "File.edit20"
+ },
+ new
+ {
+ Id = 260,
+ Description = "Разрешение редактировать Файлы категории 20",
+ Name = "File.edit21"
+ },
+ new
+ {
+ Id = 261,
+ Description = "Разрешение редактировать Файлы категории 21",
+ Name = "File.edit22"
+ },
+ new
+ {
+ Id = 262,
+ Description = "Разрешение редактировать Файлы категории 22",
+ Name = "File.edit23"
+ },
+ new
+ {
+ Id = 263,
+ Description = "Разрешение редактировать Файлы категории 23",
+ Name = "File.edit24"
+ },
+ new
+ {
+ Id = 264,
+ Description = "Разрешение редактировать Файлы категории 24",
+ Name = "File.edit25"
+ },
+ new
+ {
+ Id = 265,
+ Description = "Разрешение редактировать Файлы категории 25",
+ Name = "File.edit26"
+ },
+ new
+ {
+ Id = 266,
+ Description = "Разрешение редактировать Файлы категории 26",
+ Name = "File.edit27"
+ },
+ new
+ {
+ Id = 267,
+ Description = "Разрешение редактировать Файлы категории 27",
+ Name = "File.edit28"
+ },
+ new
+ {
+ Id = 268,
+ Description = "Разрешение редактировать Файлы категории 28",
+ Name = "File.edit29"
+ },
+ new
+ {
+ Id = 269,
+ Description = "Разрешение редактировать Файлы категории 29",
+ Name = "File.edit30"
+ },
+ new
+ {
+ Id = 380,
+ Description = "Разрешение просматривать список бурильщиков",
+ Name = "Driller.get"
+ },
+ new
+ {
+ Id = 381,
+ Description = "Разрешение редактировать бурильщика",
+ Name = "Driller.edit"
+ },
+ new
+ {
+ Id = 382,
+ Description = "Разрешение удалять бурильщик",
+ Name = "Driller.delete"
+ },
+ new
+ {
+ Id = 383,
+ Description = "Разрешение просматривать графики бурильщиков",
+ Name = "Schedule.get"
+ },
+ new
+ {
+ Id = 384,
+ Description = "Разрешение редактировать график бурильщика",
+ Name = "Schedule.edit"
+ },
+ new
+ {
+ Id = 385,
+ Description = "Разрешение удалять график бурильщика",
+ Name = "Schedule.delete"
+ },
+ new
+ {
+ Id = 386,
+ Description = "Разрешение просматривать суточный рапорт",
+ Name = "DailyReport.get"
+ },
+ new
+ {
+ Id = 387,
+ Description = "Разрешение редактировать суточный рапорт",
+ Name = "DailyReport.edit"
+ },
+ new
+ {
+ Id = 388,
+ Description = "Разрешение просматривать авто. определенные операции",
+ Name = "DetectedOperation.get"
+ },
+ new
+ {
+ Id = 389,
+ Description = "Разрешение просматривать целевые значения",
+ Name = "OperationValue.get"
+ },
+ new
+ {
+ Id = 390,
+ Description = "Разрешение редактировать целевые значения",
+ Name = "OperationValue.edit"
+ },
+ new
+ {
+ Id = 391,
+ Description = "Разрешение удалять целевые значения",
+ Name = "OperationValue.delete"
+ },
+ new
+ {
+ Id = 400,
+ Description = "Разрешение просматривать инфо по wits параметрам",
+ Name = "WitsInfo.get"
+ },
+ new
+ {
+ Id = 401,
+ Description = "Разрешение просматривать WITS record 1",
+ Name = "WitsRecord1.get"
+ },
+ new
+ {
+ Id = 407,
+ Description = "Разрешение просматривать WITS record 7",
+ Name = "WitsRecord7.get"
+ },
+ new
+ {
+ Id = 408,
+ Description = "Разрешение просматривать WITS record 8",
+ Name = "WitsRecord8.get"
+ },
+ new
+ {
+ Id = 450,
+ Description = "Разрешение просматривать WITS record 50",
+ Name = "WitsRecord50.get"
+ },
+ new
+ {
+ Id = 460,
+ Description = "Разрешение просматривать WITS record 60",
+ Name = "WitsRecord60.get"
+ },
+ new
+ {
+ Id = 461,
+ Description = "Разрешение просматривать WITS record 61",
+ Name = "WitsRecord61.get"
+ },
+ new
+ {
+ Id = 500,
+ Description = "Разрешение удалять Категорий документов файлов",
+ Name = "FileCategory.delete"
+ },
+ new
+ {
+ Id = 501,
+ Description = "Разрешение редактировать Категорий документов файлов",
+ Name = "FileCategory.edit"
+ },
+ new
+ {
+ Id = 502,
+ Description = "Разрешение просматривать Категорий документов файлов",
+ Name = "FileCategory.get"
+ },
+ new
+ {
+ Id = 503,
+ Description = "Разрешение удалять Дело скважины",
+ Name = "WellFinalDocuments.delete"
+ },
+ new
+ {
+ Id = 504,
+ Description = "Разрешение редактировать Дело скважины",
+ Name = "WellFinalDocuments.edit"
+ },
+ new
+ {
+ Id = 505,
+ Description = "Разрешение просматривать Дело скважины",
+ Name = "WellFinalDocuments.get"
+ },
+ new
+ {
+ Id = 506,
+ Description = "Разрешение редактировать ответственных за загрузку файла Дело скважины",
+ Name = "WellFinalDocuments.editPublisher"
+ });
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.RelationCompanyWell", b =>
+ {
+ b.Property("IdCompany")
+ .HasColumnType("integer")
+ .HasColumnName("id_company");
+
+ b.Property("IdWell")
+ .HasColumnType("integer")
+ .HasColumnName("id_well");
+
+ b.HasKey("IdCompany", "IdWell");
+
+ b.HasIndex("IdWell");
+
+ b.ToTable("t_relation_company_well");
+
+ b.HasComment("отношение скважин и компаний");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.RelationUserDrillingProgramPart", b =>
+ {
+ b.Property("IdUser")
+ .HasColumnType("integer")
+ .HasColumnName("id_user");
+
+ b.Property("IdDrillingProgramPart")
+ .HasColumnType("integer")
+ .HasColumnName("id_drilling_program_part");
+
+ b.Property("IdUserRole")
+ .HasColumnType("integer")
+ .HasColumnName("id_role")
+ .HasComment("1 - publisher, 2 - approver");
+
+ b.HasKey("IdUser", "IdDrillingProgramPart")
+ .HasName("t_relation_user_drilling_program_part_pk");
+
+ b.HasIndex("IdDrillingProgramPart");
+
+ b.ToTable("t_relation_user_drilling_program_part");
+
+ b.HasComment("Отношение пользователей и частей ПБ");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.RelationUserRolePermission", b =>
+ {
+ b.Property("IdUserRole")
+ .HasColumnType("integer")
+ .HasColumnName("id_user_role");
+
+ b.Property("IdPermission")
+ .HasColumnType("integer")
+ .HasColumnName("id_permission");
+
+ b.HasKey("IdUserRole", "IdPermission");
+
+ b.HasIndex("IdPermission");
+
+ b.ToTable("t_relation_user_role_permission");
+
+ b.HasComment("Отношение ролей пользователей и разрешений доступа");
+
+ b.HasData(
+ new
+ {
+ IdUserRole = 1100,
+ IdPermission = 102
+ },
+ new
+ {
+ IdUserRole = 1100,
+ IdPermission = 111
+ },
+ new
+ {
+ IdUserRole = 1101,
+ IdPermission = 101
+ },
+ new
+ {
+ IdUserRole = 1101,
+ IdPermission = 100
+ },
+ new
+ {
+ IdUserRole = 1102,
+ IdPermission = 105
+ },
+ new
+ {
+ IdUserRole = 1102,
+ IdPermission = 108
+ },
+ new
+ {
+ IdUserRole = 1103,
+ IdPermission = 104
+ },
+ new
+ {
+ IdUserRole = 1103,
+ IdPermission = 103
+ },
+ new
+ {
+ IdUserRole = 1104,
+ IdPermission = 108
+ },
+ new
+ {
+ IdUserRole = 1105,
+ IdPermission = 107
+ },
+ new
+ {
+ IdUserRole = 1105,
+ IdPermission = 106
+ },
+ new
+ {
+ IdUserRole = 1106,
+ IdPermission = 111
+ },
+ new
+ {
+ IdUserRole = 1107,
+ IdPermission = 110
+ },
+ new
+ {
+ IdUserRole = 1107,
+ IdPermission = 109
+ },
+ new
+ {
+ IdUserRole = 1108,
+ IdPermission = 114
+ },
+ new
+ {
+ IdUserRole = 1109,
+ IdPermission = 113
+ },
+ new
+ {
+ IdUserRole = 1109,
+ IdPermission = 112
+ },
+ new
+ {
+ IdUserRole = 1110,
+ IdPermission = 123
+ },
+ new
+ {
+ IdUserRole = 1110,
+ IdPermission = 114
+ },
+ new
+ {
+ IdUserRole = 1111,
+ IdPermission = 122
+ },
+ new
+ {
+ IdUserRole = 1111,
+ IdPermission = 121
+ },
+ new
+ {
+ IdUserRole = 1112,
+ IdPermission = 117
+ },
+ new
+ {
+ IdUserRole = 1113,
+ IdPermission = 105
+ },
+ new
+ {
+ IdUserRole = 1113,
+ IdPermission = 123
+ },
+ new
+ {
+ IdUserRole = 1113,
+ IdPermission = 120
+ },
+ new
+ {
+ IdUserRole = 1114,
+ IdPermission = 119
+ },
+ new
+ {
+ IdUserRole = 1114,
+ IdPermission = 118
+ },
+ new
+ {
+ IdUserRole = 1114,
+ IdPermission = 200
+ },
+ new
+ {
+ IdUserRole = 1115,
+ IdPermission = 223
+ },
+ new
+ {
+ IdUserRole = 1116,
+ IdPermission = 105
+ },
+ new
+ {
+ IdUserRole = 1116,
+ IdPermission = 102
+ },
+ new
+ {
+ IdUserRole = 1116,
+ IdPermission = 117
+ },
+ new
+ {
+ IdUserRole = 1116,
+ IdPermission = 126
+ },
+ new
+ {
+ IdUserRole = 1117,
+ IdPermission = 125
+ },
+ new
+ {
+ IdUserRole = 1117,
+ IdPermission = 124
+ },
+ new
+ {
+ IdUserRole = 1200,
+ IdPermission = 203
+ },
+ new
+ {
+ IdUserRole = 1200,
+ IdPermission = 230
+ },
+ new
+ {
+ IdUserRole = 1201,
+ IdPermission = 202
+ },
+ new
+ {
+ IdUserRole = 1201,
+ IdPermission = 203
+ },
+ new
+ {
+ IdUserRole = 1201,
+ IdPermission = 220
+ },
+ new
+ {
+ IdUserRole = 1202,
+ IdPermission = 203
+ },
+ new
+ {
+ IdUserRole = 1202,
+ IdPermission = 220
+ },
+ new
+ {
+ IdUserRole = 1202,
+ IdPermission = 236
+ },
+ new
+ {
+ IdUserRole = 1202,
+ IdPermission = 212
+ },
+ new
+ {
+ IdUserRole = 1203,
+ IdPermission = 235
+ },
+ new
+ {
+ IdUserRole = 1204,
+ IdPermission = 202
+ },
+ new
+ {
+ IdUserRole = 1204,
+ IdPermission = 203
+ },
+ new
+ {
+ IdUserRole = 1205,
+ IdPermission = 215
+ },
+ new
+ {
+ IdUserRole = 1206,
+ IdPermission = 203
+ },
+ new
+ {
+ IdUserRole = 1206,
+ IdPermission = 206
+ },
+ new
+ {
+ IdUserRole = 1207,
+ IdPermission = 205
+ },
+ new
+ {
+ IdUserRole = 1208,
+ IdPermission = 218
+ },
+ new
+ {
+ IdUserRole = 1209,
+ IdPermission = 217
+ },
+ new
+ {
+ IdUserRole = 1210,
+ IdPermission = 203
+ },
+ new
+ {
+ IdUserRole = 1210,
+ IdPermission = 230
+ },
+ new
+ {
+ IdUserRole = 1210,
+ IdPermission = 219
+ },
+ new
+ {
+ IdUserRole = 1211,
+ IdPermission = 203
+ },
+ new
+ {
+ IdUserRole = 1211,
+ IdPermission = 220
+ },
+ new
+ {
+ IdUserRole = 1211,
+ IdPermission = 239
+ },
+ new
+ {
+ IdUserRole = 1212,
+ IdPermission = 238
+ },
+ new
+ {
+ IdUserRole = 1212,
+ IdPermission = 237
+ },
+ new
+ {
+ IdUserRole = 1213,
+ IdPermission = 203
+ },
+ new
+ {
+ IdUserRole = 1213,
+ IdPermission = 239
+ },
+ new
+ {
+ IdUserRole = 1213,
+ IdPermission = 212
+ },
+ new
+ {
+ IdUserRole = 1214,
+ IdPermission = 211
+ },
+ new
+ {
+ IdUserRole = 1214,
+ IdPermission = 210
+ },
+ new
+ {
+ IdUserRole = 1215,
+ IdPermission = 203
+ },
+ new
+ {
+ IdUserRole = 1215,
+ IdPermission = 222
+ },
+ new
+ {
+ IdUserRole = 1216,
+ IdPermission = 221
+ },
+ new
+ {
+ IdUserRole = 1217,
+ IdPermission = 226
+ },
+ new
+ {
+ IdUserRole = 1218,
+ IdPermission = 225
+ },
+ new
+ {
+ IdUserRole = 1218,
+ IdPermission = 224
+ },
+ new
+ {
+ IdUserRole = 1219,
+ IdPermission = 203
+ },
+ new
+ {
+ IdUserRole = 1219,
+ IdPermission = 206
+ },
+ new
+ {
+ IdUserRole = 1219,
+ IdPermission = 230
+ },
+ new
+ {
+ IdUserRole = 1219,
+ IdPermission = 232
+ },
+ new
+ {
+ IdUserRole = 1220,
+ IdPermission = 203
+ },
+ new
+ {
+ IdUserRole = 1220,
+ IdPermission = 228
+ },
+ new
+ {
+ IdUserRole = 1221,
+ IdPermission = 202
+ },
+ new
+ {
+ IdUserRole = 1221,
+ IdPermission = 203
+ },
+ new
+ {
+ IdUserRole = 1221,
+ IdPermission = 220
+ },
+ new
+ {
+ IdUserRole = 1221,
+ IdPermission = 234
+ },
+ new
+ {
+ IdUserRole = 1501,
+ IdPermission = 214
+ },
+ new
+ {
+ IdUserRole = 1501,
+ IdPermission = 213
+ },
+ new
+ {
+ IdUserRole = 1502,
+ IdPermission = 207
+ },
+ new
+ {
+ IdUserRole = 1502,
+ IdPermission = 208
+ },
+ new
+ {
+ IdUserRole = 2000,
+ IdPermission = 205
+ },
+ new
+ {
+ IdUserRole = 2000,
+ IdPermission = 204
+ },
+ new
+ {
+ IdUserRole = 2000,
+ IdPermission = 245
+ },
+ new
+ {
+ IdUserRole = 2001,
+ IdPermission = 244
+ },
+ new
+ {
+ IdUserRole = 2001,
+ IdPermission = 245
+ },
+ new
+ {
+ IdUserRole = 2002,
+ IdPermission = 244
+ },
+ new
+ {
+ IdUserRole = 2002,
+ IdPermission = 246
+ },
+ new
+ {
+ IdUserRole = 2002,
+ IdPermission = 237
+ },
+ new
+ {
+ IdUserRole = 2002,
+ IdPermission = 238
+ },
+ new
+ {
+ IdUserRole = 2003,
+ IdPermission = 240
+ },
+ new
+ {
+ IdUserRole = 2003,
+ IdPermission = 217
+ },
+ new
+ {
+ IdUserRole = 2003,
+ IdPermission = 216
+ },
+ new
+ {
+ IdUserRole = 2004,
+ IdPermission = 242
+ },
+ new
+ {
+ IdUserRole = 2004,
+ IdPermission = 217
+ },
+ new
+ {
+ IdUserRole = 2004,
+ IdPermission = 216
+ },
+ new
+ {
+ IdUserRole = 2004,
+ IdPermission = 205
+ },
+ new
+ {
+ IdUserRole = 2004,
+ IdPermission = 204
+ },
+ new
+ {
+ IdUserRole = 2005,
+ IdPermission = 247
+ },
+ new
+ {
+ IdUserRole = 2005,
+ IdPermission = 205
+ },
+ new
+ {
+ IdUserRole = 2005,
+ IdPermission = 204
+ },
+ new
+ {
+ IdUserRole = 2006,
+ IdPermission = 243
+ },
+ new
+ {
+ IdUserRole = 2006,
+ IdPermission = 205
+ },
+ new
+ {
+ IdUserRole = 2006,
+ IdPermission = 204
+ },
+ new
+ {
+ IdUserRole = 2007,
+ IdPermission = 241
+ },
+ new
+ {
+ IdUserRole = 2007,
+ IdPermission = 205
+ },
+ new
+ {
+ IdUserRole = 2007,
+ IdPermission = 204
+ },
+ new
+ {
+ IdUserRole = 1,
+ IdPermission = 500
+ },
+ new
+ {
+ IdUserRole = 1,
+ IdPermission = 501
+ },
+ new
+ {
+ IdUserRole = 1,
+ IdPermission = 502
+ },
+ new
+ {
+ IdUserRole = 1,
+ IdPermission = 503
+ },
+ new
+ {
+ IdUserRole = 1,
+ IdPermission = 504
+ },
+ new
+ {
+ IdUserRole = 1,
+ IdPermission = 505
+ });
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.RelationUserRoleUserRole", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("integer")
+ .HasColumnName("id_user_role");
+
+ b.Property("IdInclude")
+ .HasColumnType("integer")
+ .HasColumnName("id_include_user_role");
+
+ b.HasKey("Id", "IdInclude")
+ .HasName("t_relation_user_role_user_role_pk");
+
+ b.HasIndex("IdInclude");
+
+ b.ToTable("t_relation_user_role_user_role");
+
+ b.HasComment("Отношение ролей к ролям");
+
+ b.HasData(
+ new
+ {
+ Id = 1101,
+ IdInclude = 1100
+ },
+ new
+ {
+ Id = 1103,
+ IdInclude = 1102
+ },
+ new
+ {
+ Id = 1105,
+ IdInclude = 1104
+ },
+ new
+ {
+ Id = 1107,
+ IdInclude = 1106
+ },
+ new
+ {
+ Id = 1109,
+ IdInclude = 1108
+ },
+ new
+ {
+ Id = 1111,
+ IdInclude = 1110
+ },
+ new
+ {
+ Id = 1114,
+ IdInclude = 1113
+ },
+ new
+ {
+ Id = 1117,
+ IdInclude = 1116
+ },
+ new
+ {
+ Id = 1203,
+ IdInclude = 1202
+ },
+ new
+ {
+ Id = 1207,
+ IdInclude = 1206
+ },
+ new
+ {
+ Id = 1209,
+ IdInclude = 1208
+ },
+ new
+ {
+ Id = 1212,
+ IdInclude = 1211
+ },
+ new
+ {
+ Id = 1214,
+ IdInclude = 1213
+ },
+ new
+ {
+ Id = 1216,
+ IdInclude = 1215
+ },
+ new
+ {
+ Id = 1218,
+ IdInclude = 1217
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1200
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1201
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1202
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1204
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1205
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1206
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1208
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1210
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1211
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1213
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1215
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1217
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1219
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1220
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1221
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1500
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1501
+ },
+ new
+ {
+ Id = 2000,
+ IdInclude = 1502
+ },
+ new
+ {
+ Id = 2001,
+ IdInclude = 1500
+ },
+ new
+ {
+ Id = 2001,
+ IdInclude = 1501
+ },
+ new
+ {
+ Id = 2001,
+ IdInclude = 1502
+ },
+ new
+ {
+ Id = 2002,
+ IdInclude = 1500
+ },
+ new
+ {
+ Id = 2002,
+ IdInclude = 1501
+ },
+ new
+ {
+ Id = 2002,
+ IdInclude = 1502
+ },
+ new
+ {
+ Id = 2003,
+ IdInclude = 1500
+ },
+ new
+ {
+ Id = 2003,
+ IdInclude = 1501
+ },
+ new
+ {
+ Id = 2003,
+ IdInclude = 1502
+ },
+ new
+ {
+ Id = 2004,
+ IdInclude = 1500
+ },
+ new
+ {
+ Id = 2004,
+ IdInclude = 1501
+ },
+ new
+ {
+ Id = 2004,
+ IdInclude = 1502
+ },
+ new
+ {
+ Id = 2005,
+ IdInclude = 1500
+ },
+ new
+ {
+ Id = 2005,
+ IdInclude = 1501
+ },
+ new
+ {
+ Id = 2005,
+ IdInclude = 1502
+ },
+ new
+ {
+ Id = 2006,
+ IdInclude = 1500
+ },
+ new
+ {
+ Id = 2006,
+ IdInclude = 1501
+ },
+ new
+ {
+ Id = 2006,
+ IdInclude = 1502
+ },
+ new
+ {
+ Id = 2007,
+ IdInclude = 1500
+ },
+ new
+ {
+ Id = 2007,
+ IdInclude = 1501
+ },
+ new
+ {
+ Id = 2007,
+ IdInclude = 1502
+ });
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.RelationUserUserRole", b =>
+ {
+ b.Property("IdUser")
+ .HasColumnType("integer")
+ .HasColumnName("id_user");
+
+ b.Property("IdUserRole")
+ .HasColumnType("integer")
+ .HasColumnName("id_user_role");
+
+ b.HasKey("IdUser", "IdUserRole");
+
+ b.HasIndex("IdUserRole");
+
+ b.ToTable("t_relation_user_user_role");
+
+ b.HasComment("Отношение пользователей и ролей");
+
+ b.HasData(
+ new
+ {
+ IdUser = 1,
+ IdUserRole = 1
+ });
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.ReportProperty", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Begin")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("begin");
+
+ b.Property("End")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("end")
+ .HasComment("timestamp with time zone");
+
+ b.Property("Format")
+ .HasColumnType("integer")
+ .HasColumnName("format")
+ .HasComment("Формат отчета");
+
+ b.Property("IdFile")
+ .HasColumnType("integer")
+ .HasColumnName("id_file")
+ .HasComment("id файла-родителя");
+
+ b.Property("IdWell")
+ .HasColumnType("integer")
+ .HasColumnName("id_well")
+ .HasComment("id скважины");
+
+ b.Property("Step")
+ .HasColumnType("integer")
+ .HasColumnName("step")
+ .HasComment("размер шага в секундах");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdFile");
+
+ b.HasIndex("IdWell");
+
+ b.ToTable("t_report_property");
+
+ b.HasComment("Отчеты с данными по буровым");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.Schedule", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasComment("Идентификатор");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DrillEnd")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("drill_end")
+ .HasComment("Конец вахты");
+
+ b.Property("DrillStart")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("drill_start")
+ .HasComment("Начало вахты");
+
+ b.Property("IdDriller")
+ .HasColumnType("integer")
+ .HasColumnName("id_driller")
+ .HasComment("Идентификатор бурильщика");
+
+ b.Property("IdWell")
+ .HasColumnType("integer")
+ .HasColumnName("id_well")
+ .HasComment("Идентификатор скважины");
+
+ b.Property("ShiftEnd")
+ .HasColumnType("time without time zone")
+ .HasColumnName("shift_end")
+ .HasComment("Конец смены");
+
+ b.Property("ShiftStart")
+ .HasColumnType("time without time zone")
+ .HasColumnName("shift_start")
+ .HasComment("Начало смены");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdDriller");
+
+ b.HasIndex("IdWell");
+
+ b.ToTable("t_schedule");
+
+ b.HasComment("График работы бурильщика");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.SetpointsRequest", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Comment")
+ .HasColumnType("text")
+ .HasColumnName("comment")
+ .HasComment("комментарий для оператора");
+
+ b.Property("IdAuthor")
+ .HasColumnType("integer")
+ .HasColumnName("id_author")
+ .HasComment("Id пользователя, загрузившего файл");
+
+ b.Property("IdState")
+ .HasColumnType("integer")
+ .HasColumnName("id_state")
+ .HasComment("0: неизвестно, 1:ожидает отправки, 2: отправлено, 3: принято оператором, 4: отклонено оператором, 5: устарело");
+
+ b.Property("IdWell")
+ .HasColumnType("integer")
+ .HasColumnName("id_well")
+ .HasComment("id скважины");
+
+ b.Property("ObsolescenceSec")
+ .HasColumnType("integer")
+ .HasColumnName("obsolescence")
+ .HasComment("сек. до устаревания");
+
+ b.Property("Setpoints")
+ .HasColumnType("jsonb")
+ .HasColumnName("setpoint_set")
+ .HasComment("Набор уставок");
+
+ b.Property("UploadDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("date");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdAuthor");
+
+ b.HasIndex("IdWell");
+
+ b.ToTable("t_setpoints_rquest");
+
+ b.HasComment("Запросы на изменение уставок панели оператора");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.Subsystems.Subsystem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Description")
+ .HasMaxLength(255)
+ .HasColumnType("character varying(255)")
+ .HasColumnName("description");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(255)
+ .HasColumnType("character varying(255)")
+ .HasColumnName("name");
+
+ b.HasKey("Id");
+
+ b.ToTable("t_subsystem");
+
+ b.HasComment("Описание подсистем");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Description = "Совместная работа режимов \"Бурение в роторе\" и \"Бурение в слайде\"",
+ Name = "АКБ"
+ },
+ new
+ {
+ Id = 2,
+ Description = "Алгоритм поиска оптимальных параметров бурения САУБ",
+ Name = "MSE"
+ },
+ new
+ {
+ Id = 65536,
+ Description = "Spin master",
+ Name = "Spin master"
+ },
+ new
+ {
+ Id = 65537,
+ Description = "Torque master",
+ Name = "Torque master"
+ });
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.Subsystems.SubsystemOperationTime", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DateEnd")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("date_end")
+ .HasComment("дата/время выключения подсистемы");
+
+ b.Property("DateStart")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("date_start")
+ .HasComment("дата/время включения подсистемы");
+
+ b.Property("DepthEnd")
+ .HasColumnType("real")
+ .HasColumnName("depth_end")
+ .HasComment("глубина забоя на момент выключения подсистемы");
+
+ b.Property("DepthStart")
+ .HasColumnType("real")
+ .HasColumnName("depth_start")
+ .HasComment("глубина забоя на момент включения подсистемы");
+
+ b.Property("IdSubsystem")
+ .HasColumnType("integer")
+ .HasColumnName("id_subsystem");
+
+ b.Property("IdTelemetry")
+ .HasColumnType("integer")
+ .HasColumnName("id_telemetry")
+ .HasComment("ИД телеметрии по которой выдается информация");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IdSubsystem");
+
+ b.HasIndex("IdTelemetry");
+
+ b.ToTable("t_subsystem_operation_time");
+
+ b.HasComment("наработки подсистем");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.Telemetry", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Info")
+ .HasColumnType("jsonb")
+ .HasColumnName("info")
+ .HasComment("Информация с панели о скважине");
+
+ b.Property("RemoteUid")
+ .HasColumnType("text")
+ .HasColumnName("remote_uid")
+ .HasComment("Идентификатор передающего устройства. Может повторяться в списке, так как комплекты оборудования переезжают от скв. к скв.");
+
+ b.Property("TimeZone")
+ .HasColumnType("jsonb")
+ .HasColumnName("timezone")
+ .HasComment("Смещение часового пояса от UTC");
+
+ b.HasKey("Id");
+
+ b.HasIndex(new[] { "RemoteUid" }, "t_telemetry_remote_uid_index");
+
+ b.ToTable("t_telemetry");
+
+ b.HasComment("таблица привязки телеметрии от комплектов к конкретной скважине.");
+ });
+
+ modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSaub", b =>
+ {
+ b.Property("IdTelemetry")
+ .HasColumnType("integer")
+ .HasColumnName("id_telemetry");
+
+ b.Property("DateTime")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("date")
+ .HasComment("'2021-10-19 18:23:54+05'");
+
+ b.Property("AxialLoad")
+ .HasColumnType("real")
+ .HasColumnName("axial_load")
+ .HasComment("Осевая нагрузка");
+
+ b.Property("AxialLoadLimitMax")
+ .HasColumnType("real")
+ .HasColumnName("axial_load_limit_max")
+ .HasComment("Осевая нагрузка. Аварийная макс.");
+
+ b.Property("AxialLoadSp")
+ .HasColumnType("real")
+ .HasColumnName("axial_load_sp")
+ .HasComment("Осевая нагрузка. Задание");
+
+ b.Property("BitDepth")
+ .HasColumnType("real")
+ .HasColumnName("bit_depth")
+ .HasComment("Положение инструмента");
+
+ b.Property("BlockPosition")
+ .HasColumnType("real")
+ .HasColumnName("block_position")
+ .HasComment("Высота талевого блока");
+
+ b.Property("BlockPositionMax")
+ .HasColumnType("real")
+ .HasColumnName("block_position_max")
+ .HasComment("Талевый блок. Макс положение");
+
+ b.Property("BlockPositionMin")
+ .HasColumnType("real")
+ .HasColumnName("block_position_min")
+ .HasComment("Талевый блок. Мин положение");
+
+ b.Property