From 35cd538b1db6556900cd4957ffdb2d45abe34338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D1=80=D0=BE=D0=BB=D0=BE=D0=B2?= Date: Tue, 14 Sep 2021 17:17:33 +0500 Subject: [PATCH] Refactor DataSaubBase to TelemetryDataSaub; Add generic TelemetryDataController; Add TelemetryDataSpin and model; Add migration; --- ...SaubBaseDto.cs => TelemetryDataSaubDto.cs} | 2 +- AsbCloudApp/Data/TelemetryDataSpinDto.cs | 78 + AsbCloudApp/Services/IDataService.cs | 4 +- AsbCloudApp/Services/ISaubDataCache.cs | 4 +- .../Services/ITelemetryAnalyticsService.cs | 2 +- ...14105045_RefactorTelemetryData.Designer.cs | 2362 +++++++++++++++++ .../20210914105045_RefactorTelemetryData.cs | 141 + .../AsbCloudDbContextModelSnapshot.cs | 772 ++++-- AsbCloudDb/Model/AsbCloudDbContext.cs | 20 +- AsbCloudDb/Model/IAsbCloudDbContext.cs | 2 +- AsbCloudDb/Model/Telemetry.cs | 9 +- .../{DataSaubBase.cs => TelemetryDataSaub.cs} | 6 +- AsbCloudDb/Model/TelemetryDataSpin.cs | 90 + AsbCloudDb/Readme.md | 1 + .../ReportDataSourcePgCloud.cs | 4 +- .../Services/DataService.cs | 18 +- .../Services/ReportService.cs | 2 +- .../Services/SaubDataCache.cs | 10 +- .../Services/TelemetryAnalyticsService.cs | 6 +- AsbCloudWebApi/Controllers/DataController.cs | 2 +- .../Controllers/TelemetryController.cs | 2 +- .../TelemetryDataBaseController.cs | 96 + .../Controllers/TelemetryDataSaub.cs | 16 + .../Controllers/TelemetryDataSpin.cs | 11 + AsbCloudWebApi/SignalR/ITelemetryHubClient.cs | 2 +- AsbCloudWebApi/SignalR/TelemetryHub.cs | 2 +- 26 files changed, 3403 insertions(+), 261 deletions(-) rename AsbCloudApp/Data/{DataSaubBaseDto.cs => TelemetryDataSaubDto.cs} (99%) create mode 100644 AsbCloudApp/Data/TelemetryDataSpinDto.cs create mode 100644 AsbCloudDb/Migrations/20210914105045_RefactorTelemetryData.Designer.cs create mode 100644 AsbCloudDb/Migrations/20210914105045_RefactorTelemetryData.cs rename AsbCloudDb/Model/{DataSaubBase.cs => TelemetryDataSaub.cs} (96%) create mode 100644 AsbCloudDb/Model/TelemetryDataSpin.cs create mode 100644 AsbCloudWebApi/Controllers/TelemetryDataBaseController.cs create mode 100644 AsbCloudWebApi/Controllers/TelemetryDataSaub.cs create mode 100644 AsbCloudWebApi/Controllers/TelemetryDataSpin.cs diff --git a/AsbCloudApp/Data/DataSaubBaseDto.cs b/AsbCloudApp/Data/TelemetryDataSaubDto.cs similarity index 99% rename from AsbCloudApp/Data/DataSaubBaseDto.cs rename to AsbCloudApp/Data/TelemetryDataSaubDto.cs index 20cedf1f..de457534 100644 --- a/AsbCloudApp/Data/DataSaubBaseDto.cs +++ b/AsbCloudApp/Data/TelemetryDataSaubDto.cs @@ -5,7 +5,7 @@ namespace AsbCloudApp.Data /// /// Сообщение получаемое по телеметрии и отправляемое в frontend /// - public class DataSaubBaseDto + public class TelemetryDataSaubDto { //[JsonPropertyName("date")] public DateTime Date { get; set; } diff --git a/AsbCloudApp/Data/TelemetryDataSpinDto.cs b/AsbCloudApp/Data/TelemetryDataSpinDto.cs new file mode 100644 index 00000000..bb30c0f3 --- /dev/null +++ b/AsbCloudApp/Data/TelemetryDataSpinDto.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AsbCloudApp.Data +{ + public class TelemetryDataSpinDto + { + public int Id { get; set; } + public int IdTelemetry { get; set; } + public DateTime Date { get; set; } + public double? TopDriveSpeed { get; set; } + public double? TopDriveSpeedMin { get; set; } + public double? TopDriveSpeedMax { get; set; } + public double? TopDriveSpeedOffset { get; set; } + public int? TopDriveSpeedErr { get; set; } + public double? TopDriveTorque { get; set; } + public double? TopDriveTorqueMin { get; set; } + public double? TopDriveTorqueMax { get; set; } + public double? TopDriveTorqueOffset { get; set; } + public int? TopDriveTorqueErr { get; set; } + public double? TopDriveSpeedSpFrom { get; set; } + public double? TopDriveSpeedSpFromMin { get; set; } + public double? TopDriveSpeedSpFromMax { get; set; } + public double? TopDriveSpeedSpFromOffset { get; set; } + public int? TopDriveSpeedSpFromErr { get; set; } + public double? TopDriveTorqueSpFrom { get; set; } + public double? TopDriveTorqueSpFromMin { get; set; } + public double? TopDriveTorqueSpFromMax { get; set; } + public double? TopDriveTorqueSpFromOffset { get; set; } + public int? TopDriveTorqueSpFromErr { get; set; } + public double? TopDriveSpeedSpTo { get; set; } + public double? TopDriveSpeedSpToMin { get; set; } + public double? TopDriveSpeedSpToMax { get; set; } + public double? TopDriveSpeedSpToOffset { get; set; } + public int? TopDriveSpeedSpToErr { get; set; } + public double? TopDriveTorqueSpTo { get; set; } + public double? TopDriveTorqueSpToMin { get; set; } + public double? TopDriveTorqueSpToMax { get; set; } + public double? TopDriveTorqueSpToOffset { get; set; } + public int? TopDriveTorqueSpToErr { get; set; } + public int? W2800 { get; set; } + public int? W2810 { get; set; } + public int? Mode { get; set; } + public int? W2808 { get; set; } + public double? TorqueStarting { get; set; } + public double? RotorTorqueAvg { get; set; } + public double? EncoderResolution { get; set; } + public double? Ratio { get; set; } + public double? TorqueRightLimit { get; set; } + public double? TorqueLeftLimit { get; set; } + public double? RevolsRightLimit { get; set; } + public double? RevolsLeftLimit { get; set; } + public double? SpeedRightSp { get; set; } + public double? SpeedLeftSp { get; set; } + public double? RevolsRightTotal { get; set; } + public double? RevolsLeftTotal { get; set; } + public double? TurnRightOnceByTorque { get; set; } + public double? TurnLeftOnceByTorque { get; set; } + public double? TurnRightOnceByAngle { get; set; } + public double? TurnLeftOnceByAngle { get; set; } + public double? TurnRightOnceByRevols { get; set; } + public double? TurnLeftOnceByRevols { get; set; } + public double? BreakAngleK { get; set; } + public double? ReverseKTorque { get; set; } + public double? PositionZero { get; set; } + public double? PositionRight { get; set; } + public double? TorqueRampTime { get; set; } + public double? Ver { get; set; } + public int? ReverseSpeedSpZeroTime { get; set; } + public double? UnlockBySectorOut { get; set; } + public double? PidMuxTorqueLeftLimit { get; set; } + public int? State { get; set; } + public double? BreakAngleLeft { get; set; } + } +} diff --git a/AsbCloudApp/Services/IDataService.cs b/AsbCloudApp/Services/IDataService.cs index ab9ad431..95605c38 100644 --- a/AsbCloudApp/Services/IDataService.cs +++ b/AsbCloudApp/Services/IDataService.cs @@ -8,11 +8,11 @@ namespace AsbCloudApp.Services { public interface IDataService { - Task> GetAsync(int idWell, DateTime dateBegin = default, + Task> GetAsync(int idWell, DateTime dateBegin = default, double intervalSec = 600d, int approxPointsCount = 1024, CancellationToken token = default); - Task UpdateDataAsync(string uid, IEnumerable dtos, + Task UpdateDataAsync(string uid, IEnumerable dtos, CancellationToken token); Task GetDataDatesRangeAsync(int idWell, CancellationToken token); diff --git a/AsbCloudApp/Services/ISaubDataCache.cs b/AsbCloudApp/Services/ISaubDataCache.cs index 8d509bca..aa3c86bb 100644 --- a/AsbCloudApp/Services/ISaubDataCache.cs +++ b/AsbCloudApp/Services/ISaubDataCache.cs @@ -6,7 +6,7 @@ namespace AsbCloudApp.Services public interface ISaubDataCache { TelemetryAnalysisDto CurrentAnalysis { get; set; } - IEnumerable GetOrCreateCache(int telemetryId); - void AddData(DataSaubBaseDto data); + IEnumerable GetOrCreateCache(int telemetryId); + void AddData(TelemetryDataSaubDto data); } } diff --git a/AsbCloudApp/Services/ITelemetryAnalyticsService.cs b/AsbCloudApp/Services/ITelemetryAnalyticsService.cs index 37e42ef4..065d6429 100644 --- a/AsbCloudApp/Services/ITelemetryAnalyticsService.cs +++ b/AsbCloudApp/Services/ITelemetryAnalyticsService.cs @@ -23,7 +23,7 @@ namespace AsbCloudApp.Services Task> GetOperationsToIntervalAsync(int idWell, int intervalHoursTimestamp, int workBeginTimestamp, CancellationToken token = default); - void SaveAnalytics(DataSaubBaseDto dataSaub); + void SaveAnalytics(TelemetryDataSaubDto dataSaub); Task GetOperationsDateRangeAsync(int idWell, CancellationToken token = default); } diff --git a/AsbCloudDb/Migrations/20210914105045_RefactorTelemetryData.Designer.cs b/AsbCloudDb/Migrations/20210914105045_RefactorTelemetryData.Designer.cs new file mode 100644 index 00000000..618d27f8 --- /dev/null +++ b/AsbCloudDb/Migrations/20210914105045_RefactorTelemetryData.Designer.cs @@ -0,0 +1,2362 @@ +// +using System; +using System.Collections.Generic; +using AsbCloudDb.Model; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +namespace AsbCloudDb.Migrations +{ + [DbContext(typeof(AsbCloudDbContext))] + [Migration("20210914105045_RefactorTelemetryData")] + partial class RefactorTelemetryData + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasPostgresExtension("adminpack") + .UseIdentityByDefaultColumns() + .HasAnnotation("Relational:Collation", "Russian_Russia.1251") + .HasAnnotation("Relational:MaxIdentifierLength", 63) + .HasAnnotation("ProductVersion", "5.0.2"); + + modelBuilder.Entity("AsbCloudDb.Model.Cluster", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + 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.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") + .UseIdentityByDefaultColumn(); + + 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") + .UseIdentityByDefaultColumn(); + + 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.Deposit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + 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.HasKey("Id"); + + b.ToTable("t_deposit"); + + b + .HasComment("Месторождение"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + 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 = "fluidPlanLastData" + }, + new + { + Id = 9, + Name = "Последний замер бурового раствора ФАКТ", + ShortName = "fluidFactLastData" + }, + new + { + Id = 10, + Name = "Последние данные Шламограммы", + ShortName = "mudLastData" + }, + new + { + Id = 11, + Name = "Последние данные ННБ", + ShortName = "nnbLastData" + }, + new + { + Id = 12, + Name = "Рапорт", + ShortName = "report" + }, + new + { + Id = 13, + Name = "Программа бурения, части", + ShortName = "ПБч" + }, + new + { + Id = 14, + Name = "Программа бурения", + ShortName = "ПБ" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + 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.Measure", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + 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 without 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") + .UseIdentityByDefaultColumn(); + + 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.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.ReportProperty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + 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.Telemetry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("Info") + .HasColumnType("jsonb") + .HasColumnName("info") + .HasComment("Информация с панели о скважине"); + + b.Property("RemoteUid") + .HasColumnType("text") + .HasColumnName("remote_uid") + .HasComment("Идентификатор передающего устройства. Может повторяться в списке, так как комплекты оборудования переезжают от скв. к скв."); + + b.HasKey("Id"); + + b.HasIndex(new[] { "RemoteUid" }, "t_telemetry_remote_uid_index"); + + b.ToTable("t_telemetry"); + + b + .HasComment("таблица привязки телеметрии от комплектов к конкретной скважине."); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryAnalysis", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("DurationSec") + .HasColumnType("integer") + .HasColumnName("duration_sec") + .HasComment("Кол-во секунд после предыдущей операции"); + + b.Property("IdOperation") + .HasColumnType("integer") + .HasColumnName("id_operation"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IsBitPositionDecreasing") + .HasColumnType("boolean") + .HasColumnName("is_bit_position_decreasing") + .HasComment("Долото поднимается"); + + b.Property("IsBitPositionIncreasing") + .HasColumnType("boolean") + .HasColumnName("is_bit_position_increasing") + .HasComment("Долото спускается"); + + b.Property("IsBitPositionLt20") + .HasColumnType("boolean") + .HasColumnName("is_bit_posision_lt_20") + .HasComment("Положение долота меньше 20м"); + + b.Property("IsBlockPositionDecreasing") + .HasColumnType("boolean") + .HasColumnName("is_block_posision_decresing") + .HasComment("Талевый блок поднимается"); + + b.Property("IsBlockPositionIncreasing") + .HasColumnType("boolean") + .HasColumnName("is_block_posision_incresing") + .HasComment("Талевый блок спускается"); + + b.Property("IsHookWeightLt3") + .HasColumnType("boolean") + .HasColumnName("is_hook_weight_lt_3") + .HasComment("Вес на крюке менее 3т"); + + b.Property("IsHookWeightNotChanges") + .HasColumnType("boolean") + .HasColumnName("is_hook_weight_not_changes") + .HasComment("Вес на крюке не меняется"); + + b.Property("IsPressureGt20") + .HasColumnType("boolean") + .HasColumnName("is_pressure_gt_20") + .HasComment("Давоение более 20"); + + b.Property("IsPressureLt20") + .HasColumnType("boolean") + .HasColumnName("is_pressure_lt_20") + .HasComment("Давление менее 20"); + + b.Property("IsRotorSpeedGt3") + .HasColumnType("boolean") + .HasColumnName("is_rotor_speed_gt_3") + .HasComment("Обороты ротора выше 3"); + + b.Property("IsRotorSpeedLt3") + .HasColumnType("boolean") + .HasColumnName("is_rotor_speed_lt_3") + .HasComment("Обороты ротора ниже 3"); + + b.Property("IsWellDepthDecreasing") + .HasColumnType("boolean") + .HasColumnName("is_well_depth_decreasing") + .HasComment("Глубина забоя не увеличивается"); + + b.Property("IsWellDepthIncreasing") + .HasColumnType("boolean") + .HasColumnName("is_well_depth_increasing") + .HasComment("Глубина забоя увеличивается"); + + b.Property("OperationEndDepth") + .HasColumnType("double precision") + .HasColumnName("operation_end_depth") + .HasComment("Глубина, на которой закончилась операция"); + + b.Property("OperationStartDepth") + .HasColumnType("double precision") + .HasColumnName("operation_start_depth") + .HasComment("Глубина, на которой началась операция"); + + b.Property("UnixDate") + .HasColumnType("bigint") + .HasColumnName("unix_date") + .HasComment("Unix timestamp для Linq запросов с вычислением дат"); + + b.HasKey("Id"); + + b.HasIndex("IdOperation"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_telemetry_analysis"); + + b + .HasComment("События на скважине"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSaub", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("AxialLoad") + .HasColumnType("double precision") + .HasColumnName("axial_load") + .HasComment("Осевая нагрузка"); + + b.Property("AxialLoadLimitMax") + .HasColumnType("double precision") + .HasColumnName("axial_load_limit_max") + .HasComment("Осевая нагрузка. Аварийная макс."); + + b.Property("AxialLoadSp") + .HasColumnType("double precision") + .HasColumnName("axial_load_sp") + .HasComment("Осевая нагрузка. Задание"); + + b.Property("BitDepth") + .HasColumnType("double precision") + .HasColumnName("bit_depth") + .HasComment("Положение инструмента"); + + b.Property("BlockPosition") + .HasColumnType("double precision") + .HasColumnName("block_position") + .HasComment("Высота талевого блока"); + + b.Property("BlockPositionMax") + .HasColumnType("double precision") + .HasColumnName("block_position_max") + .HasComment("Талевый блок. Макс положение"); + + b.Property("BlockPositionMin") + .HasColumnType("double precision") + .HasColumnName("block_position_min") + .HasComment("Талевый блок. Мин положение"); + + b.Property("BlockSpeed") + .HasColumnType("double precision") + .HasColumnName("block_speed") + .HasComment("Скорость талевого блока"); + + b.Property("BlockSpeedSp") + .HasColumnType("double precision") + .HasColumnName("block_speed_sp") + .HasComment("Скорости талевого блока. Задание"); + + b.Property("BlockSpeedSpDevelop") + .HasColumnType("double precision") + .HasColumnName("block_speed_sp_develop") + .HasComment("Талевый блок. Задание скорости для проработки"); + + b.Property("BlockSpeedSpRotor") + .HasColumnType("double precision") + .HasColumnName("block_speed_sp_rotor") + .HasComment("Талевый блок. Задание скорости для роторного бурения"); + + b.Property("BlockSpeedSpSlide") + .HasColumnType("double precision") + .HasColumnName("block_speed_sp_slide") + .HasComment("Талевый блок. Задание скорости для режима слайда"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date") + .HasComment("'2021-10-19 18:23:54+05'"); + + b.Property("Flow") + .HasColumnType("double precision") + .HasColumnName("flow") + .HasComment("Расход"); + + b.Property("FlowDeltaLimitMax") + .HasColumnType("double precision") + .HasColumnName("flow_delta_limit_max") + .HasComment("Расход. Аварийный макс."); + + b.Property("FlowIdle") + .HasColumnType("double precision") + .HasColumnName("flow_idle") + .HasComment("Расход. Холостой ход"); + + b.Property("HookWeight") + .HasColumnType("double precision") + .HasColumnName("hook_weight") + .HasComment("Вес на крюке"); + + b.Property("HookWeightIdle") + .HasColumnType("double precision") + .HasColumnName("hook_weight_idle") + .HasComment("Вес на крюке. Холостой ход"); + + b.Property("HookWeightLimitMax") + .HasColumnType("double precision") + .HasColumnName("hook_weight_limit_max") + .HasComment("Вес на крюке. Затяжка"); + + b.Property("HookWeightLimitMin") + .HasColumnType("double precision") + .HasColumnName("hook_weight_limit_min") + .HasComment("Вес на крюке. Посадка"); + + b.Property("IdFeedRegulator") + .HasColumnType("double precision") + .HasColumnName("id_feed_regulator") + .HasComment("Текущий критерий бурения"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("Пользователь САУБ"); + + b.Property("Mode") + .HasColumnType("integer") + .HasColumnName("mode") + .HasComment("Режим САУБ"); + + b.Property("MseState") + .HasColumnType("double precision") + .HasColumnName("mse_state") + .HasComment("Текущее состояние работы MSE"); + + b.Property("Pressure") + .HasColumnType("double precision") + .HasColumnName("pressure") + .HasComment("Давление"); + + b.Property("PressureDeltaLimitMax") + .HasColumnType("double precision") + .HasColumnName("pressure_delta_limit_max") + .HasComment("Давление дифф. Аварийное макс."); + + b.Property("PressureIdle") + .HasColumnType("double precision") + .HasColumnName("pressure_idle") + .HasComment("Давление. Холостой ход"); + + b.Property("PressureSp") + .HasColumnType("double precision") + .HasColumnName("pressure_sp") + .HasComment("Давление. Задание"); + + b.Property("PressureSpDevelop") + .HasColumnType("double precision") + .HasColumnName("pressure_sp_develop") + .HasComment("Давление. Задание для проработки"); + + b.Property("PressureSpRotor") + .HasColumnType("double precision") + .HasColumnName("pressure_sp_rotor") + .HasComment("Давление. Задание для роторного бурения"); + + b.Property("PressureSpSlide") + .HasColumnType("double precision") + .HasColumnName("pressure_sp_slide") + .HasComment("Давление. Задание для режима слайда"); + + b.Property("RotorSpeed") + .HasColumnType("double precision") + .HasColumnName("rotor_speed") + .HasComment("Обороты ротора"); + + b.Property("RotorTorque") + .HasColumnType("double precision") + .HasColumnName("rotor_torque") + .HasComment("Момент на роторе"); + + b.Property("RotorTorqueIdle") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_idle") + .HasComment("Момент на роторе. Холостой ход"); + + b.Property("RotorTorqueLimitMax") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_limit_max") + .HasComment("Момент на роторе. Аварийный макс."); + + b.Property("RotorTorqueSp") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_sp") + .HasComment("Момент на роторе. Задание"); + + b.Property("WellDepth") + .HasColumnType("double precision") + .HasColumnName("well_depth") + .HasComment("Глубина забоя"); + + b.HasKey("Id"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_telemetry_data_saub"); + + b + .HasComment("набор основных данных по SAUB"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSpin", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("BreakAngleK") + .HasColumnType("double precision") + .HasColumnName("break_angle_k") + .HasComment("Коэффициент для расчёта за какой угол нужно тормозить"); + + b.Property("BreakAngleLeft") + .HasColumnType("double precision") + .HasColumnName("break_angle_left") + .HasComment("Угол торможения влево при работе по моменту"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date") + .HasComment("'2021-10-19 18:23:54+05'"); + + b.Property("EncoderResolution") + .HasColumnType("double precision") + .HasColumnName("encoder_resolution ") + .HasComment(" Разрешение энкодера"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("Mode") + .HasColumnType("integer") + .HasColumnName("mode") + .HasComment("Выбранный режим управления"); + + b.Property("PidMuxTorqueLeftLimit") + .HasColumnType("double precision") + .HasColumnName("pid_mux_torque_left_limit") + .HasComment(" Момент при котором определяется ехать назад по моменту или по скорости"); + + b.Property("PositionRight") + .HasColumnType("double precision") + .HasColumnName("position_right") + .HasComment("Крайний правый угол осциляции"); + + b.Property("PositionZero") + .HasColumnType("double precision") + .HasColumnName("position_zero") + .HasComment("Нулевая позиция осциляции"); + + b.Property("Ratio") + .HasColumnType("double precision") + .HasColumnName("ratio") + .HasComment(" Коэффициент редукции редектора"); + + b.Property("ReverseKTorque") + .HasColumnType("double precision") + .HasColumnName("reverse_k_torque") + .HasComment("Коэффициент на который умножается момент, для того чтобы система поняла что мы движемся в обратную сторону"); + + b.Property("ReverseSpeedSpZeroTime") + .HasColumnType("integer") + .HasColumnName("reverse_speed_sp_zero_time") + .HasComment("Время выдачи сигнала нулевой скорости на при смене направления"); + + b.Property("RevolsLeftLimit") + .HasColumnType("double precision") + .HasColumnName("revols_left_limit") + .HasComment("Ограничение числа оборотов влево"); + + b.Property("RevolsLeftTotal") + .HasColumnType("double precision") + .HasColumnName("revols_left_total") + .HasComment("Суммарное количество оборотов влево"); + + b.Property("RevolsRightLimit") + .HasColumnType("double precision") + .HasColumnName("revols_right_limit") + .HasComment("Ограничение числа оборотов вправо"); + + b.Property("RevolsRightTotal") + .HasColumnType("double precision") + .HasColumnName("revols_right_total") + .HasComment("Суммарное количество оборотов вправо"); + + b.Property("RotorTorqueAvg") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_avg") + .HasComment(" Момент в роторе средний"); + + b.Property("SpeedLeftSp") + .HasColumnType("double precision") + .HasColumnName("speed_left_sp") + .HasComment("Заданная скорость вращения влево"); + + b.Property("SpeedRightSp") + .HasColumnType("double precision") + .HasColumnName("speed_right_sp") + .HasComment("Заданная скорость вращения вправо"); + + b.Property("State") + .HasColumnType("integer") + .HasColumnName("state") + .HasComment("Переменная этапа"); + + b.Property("TopDriveSpeed") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed") + .HasComment("Скорость СВП"); + + b.Property("TopDriveSpeedErr") + .HasColumnType("integer") + .HasColumnName("top_drive_speed_err"); + + b.Property("TopDriveSpeedMax") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_max") + .HasComment("верхний предел"); + + b.Property("TopDriveSpeedMin") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_min") + .HasComment("нижний предел"); + + b.Property("TopDriveSpeedOffset") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_offset") + .HasComment("смещение"); + + b.Property("TopDriveSpeedSpFrom") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_from") + .HasComment("Заданная скорость c СВП"); + + b.Property("TopDriveSpeedSpFromErr") + .HasColumnType("integer") + .HasColumnName("top_drive_speed_sp_from_err"); + + b.Property("TopDriveSpeedSpFromMax") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_from_max"); + + b.Property("TopDriveSpeedSpFromMin") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_from_min"); + + b.Property("TopDriveSpeedSpFromOffset") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_from_offset"); + + b.Property("TopDriveSpeedSpTo") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_to") + .HasComment("Задание скорости на СВП"); + + b.Property("TopDriveSpeedSpToErr") + .HasColumnType("integer") + .HasColumnName("top_drive_speed_sp_to_err"); + + b.Property("TopDriveSpeedSpToMax") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_to_max"); + + b.Property("TopDriveSpeedSpToMin") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_to_min"); + + b.Property("TopDriveSpeedSpToOffset") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_to_offset"); + + b.Property("TopDriveTorque") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque") + .HasComment("Момент СВП"); + + b.Property("TopDriveTorqueErr") + .HasColumnType("integer") + .HasColumnName("top_drive_torque_err"); + + b.Property("TopDriveTorqueMax") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_max"); + + b.Property("TopDriveTorqueMin") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_min"); + + b.Property("TopDriveTorqueOffset") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_offset"); + + b.Property("TopDriveTorqueSpFrom") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_from") + .HasComment("Заданный момент c СВП"); + + b.Property("TopDriveTorqueSpFromErr") + .HasColumnType("integer") + .HasColumnName("top_drive_torque_sp_from_err"); + + b.Property("TopDriveTorqueSpFromMax") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_from_max"); + + b.Property("TopDriveTorqueSpFromMin") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_from_min"); + + b.Property("TopDriveTorqueSpFromOffset") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_from_offset"); + + b.Property("TopDriveTorqueSpTo") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_to") + .HasComment("Задание момента на СВП"); + + b.Property("TopDriveTorqueSpToErr") + .HasColumnType("integer") + .HasColumnName("top_drive_torque_sp_to_err"); + + b.Property("TopDriveTorqueSpToMax") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_to_max"); + + b.Property("TopDriveTorqueSpToMin") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_to_min"); + + b.Property("TopDriveTorqueSpToOffset") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_to_offset"); + + b.Property("TorqueLeftLimit") + .HasColumnType("double precision") + .HasColumnName("torque_left_limit") + .HasComment("Ограничение крутящего момента влево"); + + b.Property("TorqueRampTime") + .HasColumnType("double precision") + .HasColumnName("torque_ramp_time") + .HasComment("Время нарастания момента"); + + b.Property("TorqueRightLimit") + .HasColumnType("double precision") + .HasColumnName("torque_right_limit") + .HasComment("Ограничение крутящего момента вправо"); + + b.Property("TorqueStarting") + .HasColumnType("double precision") + .HasColumnName("torque_starting") + .HasComment(" Страгивающий момент"); + + b.Property("TurnLeftOnceByAngle") + .HasColumnType("double precision") + .HasColumnName("turn_left_once_by_angle") + .HasComment("Доворот по градусам единожды влево"); + + b.Property("TurnLeftOnceByRevols") + .HasColumnType("double precision") + .HasColumnName("turn_left_once_by_revols") + .HasComment("Доворот по оборотам единожды влево"); + + b.Property("TurnLeftOnceByTorque") + .HasColumnType("double precision") + .HasColumnName("turn_left_once_by_torque") + .HasComment("Доворот по моменту единожды влево"); + + b.Property("TurnRightOnceByAngle") + .HasColumnType("double precision") + .HasColumnName("turn_right_once_by_angle") + .HasComment("Доворот по градусам единожды вправо"); + + b.Property("TurnRightOnceByRevols") + .HasColumnType("double precision") + .HasColumnName("turn_right_once_by_revols") + .HasComment("Доворот по оборотам единожды вправо"); + + b.Property("TurnRightOnceByTorque") + .HasColumnType("double precision") + .HasColumnName("turn_right_once_by_torque") + .HasComment("Доворот по моменту единожды вправо"); + + b.Property("UnlockBySectorOut") + .HasColumnType("double precision") + .HasColumnName("unlock_by_sector_out") + .HasComment(" Градус отклонения от сектора для автоматического сброса блокировки"); + + b.Property("Ver") + .HasColumnType("double precision") + .HasColumnName("ver") + .HasComment("Версия ПО ПЛК"); + + b.Property("W2800") + .HasColumnType("integer") + .HasColumnName("w2800") + .HasComment("Установка нуля энкодера"); + + b.Property("W2808") + .HasColumnType("integer") + .HasColumnName("w2808") + .HasComment("Неисправность энкодера"); + + b.Property("W2810") + .HasColumnType("integer") + .HasColumnName("w2810") + .HasComment(" автоматический сброс блокировки"); + + b.HasKey("Id"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_telemetry_data_spin"); + + b + .HasComment("набор основных данных по SpinMaster"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryEvent", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdEvent") + .HasColumnType("integer") + .HasColumnName("id_event"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category"); + + b.Property("MessageTemplate") + .HasColumnType("text") + .HasColumnName("message_template"); + + b.HasKey("IdTelemetry", "IdEvent"); + + b.ToTable("t_telemetry_event"); + + b + .HasComment("Справочник событий. События формируют сообщения. Разделено по версиям посылок от телеметрии."); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("Arg0") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("arg0") + .HasComment("Аргумент №0 для вставки в шаблон сообщения"); + + b.Property("Arg1") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("arg1"); + + b.Property("Arg2") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("arg2"); + + b.Property("Arg3") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("arg3"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("IdEvent") + .HasColumnType("integer") + .HasColumnName("id_event"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdTelemetryUser") + .HasColumnType("integer") + .HasColumnName("id_telemetry_user") + .HasComment("Пользователь панели отправляющей телеметрию. не пользователь облака."); + + b.HasKey("Id"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_telemetry_message"); + + b + .HasComment("Сообщения на буровых"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryUser", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user"); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level"); + + b.Property("Name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name"); + + b.Property("Patronymic") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("patronymic"); + + b.Property("Surname") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("surname"); + + b.HasKey("IdTelemetry", "IdUser"); + + b.ToTable("t_telemetry_user"); + + b + .HasComment("Пользователи панели САУБ. Для сообщений."); + }); + + modelBuilder.Entity("AsbCloudDb.Model.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("Email") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("email") + .HasComment("должность"); + + b.Property("IdCompany") + .HasColumnType("integer") + .HasColumnName("id_company"); + + b.Property("IdRole") + .HasColumnType("integer") + .HasColumnName("id_role"); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level"); + + b.Property("Login") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("login"); + + b.Property("Name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasComment("имя"); + + b.Property("PasswordHash") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("password_hash") + .HasComment("соленый хэш пароля.\nпервые 5 символов - соль"); + + b.Property("Patronymic") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("patronymic") + .HasComment("отчество"); + + b.Property("Phone") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("phone") + .HasComment("номер телефона"); + + b.Property("Position") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("position") + .HasComment("email"); + + b.Property("State") + .HasColumnType("smallint") + .HasColumnName("state") + .HasComment("состояние:\n100 - удален"); + + b.Property("Surname") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("surname") + .HasComment("фамилия"); + + b.HasKey("Id"); + + b.HasIndex("IdCompany"); + + b.HasIndex("IdRole"); + + b.HasIndex("Login") + .IsUnique(); + + b.ToTable("t_user"); + + b + .HasComment("Пользователи облака"); + + b.HasData( + new + { + Id = 1, + IdCompany = 1, + IdRole = 1, + Level = 2147483647, + Login = "dev", + Name = "Разработчик", + PasswordHash = "Vlcj|4fa529103dde7ff72cfe76185f344d4aa87931f8e1b2044e8a7739947c3d18923464eaad93843e4f809c5e126d013072" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.UserRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.HasKey("Id"); + + b.ToTable("t_user_role"); + + b + .HasComment("Роли пользователей в системе"); + + b.HasData( + new + { + Id = 1, + Caption = "Администратор" + }, + new + { + Id = 2, + Caption = "Пользователь" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Well", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.Property("IdCluster") + .HasColumnType("integer") + .HasColumnName("id_cluster"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdWellType") + .HasColumnType("integer") + .HasColumnName("id_well_type"); + + b.Property("Latitude") + .HasColumnType("double precision") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double precision") + .HasColumnName("longitude"); + + b.HasKey("Id"); + + b.HasIndex("IdCluster"); + + b.HasIndex("IdTelemetry") + .IsUnique(); + + b.HasIndex("IdWellType"); + + b.ToTable("t_well"); + + b + .HasComment("скважины"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("CategoryInfo") + .HasColumnType("text") + .HasColumnName("category_info") + .HasComment("Доп. информация к выбраной категории"); + + b.Property("Comment") + .HasColumnType("text") + .HasColumnName("comment") + .HasComment("Комментарий"); + + b.Property("DurationHours") + .HasColumnType("double precision") + .HasColumnName("duration_hours") + .HasComment("Продолжительность в часах"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("Id категории операции"); + + b.Property("IdType") + .HasColumnType("integer") + .HasColumnName("id_type") + .HasComment("0 = План или 1 = Факт"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_well_section_type") + .HasComment("Id тип секции скважины"); + + b.Property("StartDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("date") + .HasComment("Дата начала операции"); + + b.Property("WellDepth") + .HasColumnType("double precision") + .HasColumnName("depth") + .HasComment("Глубина, на которой производилась операция"); + + b.HasKey("Id"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellSectionType"); + + b.HasIndex("StartDate"); + + b.HasIndex("WellDepth"); + + b.ToTable("t_well_operation"); + + b + .HasComment("Данные по операциям на скважине"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperationCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("Code") + .HasColumnType("integer") + .HasColumnName("code") + .HasComment("Код операции"); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название категории операции"); + + b.HasKey("Id"); + + b.ToTable("t_well_operation_category"); + + b + .HasComment("Справочник операций на скважине"); + + b.HasData( + new + { + Id = 1, + Code = 0, + Name = "Невозможно определить операцию" + }, + new + { + Id = 2, + Code = 0, + Name = "Роторное бурение" + }, + new + { + Id = 3, + Code = 0, + Name = "Слайдирование" + }, + new + { + Id = 4, + Code = 0, + Name = "Подъем с проработкой" + }, + new + { + Id = 5, + Code = 0, + Name = "Спуск с проработкой" + }, + new + { + Id = 6, + Code = 0, + Name = "Подъем с промывкой" + }, + new + { + Id = 7, + Code = 0, + Name = "Спуск с промывкой" + }, + new + { + Id = 8, + Code = 0, + Name = "Спуск в скважину" + }, + new + { + Id = 9, + Code = 0, + Name = "Спуск с вращением" + }, + new + { + Id = 10, + Code = 0, + Name = "Подъем из скважины" + }, + new + { + Id = 11, + Code = 0, + Name = "Подъем с вращением" + }, + new + { + Id = 12, + Code = 0, + Name = "Промывка в покое" + }, + new + { + Id = 13, + Code = 0, + Name = "Промывка с вращением" + }, + new + { + Id = 14, + Code = 0, + Name = "Удержание в клиньях" + }, + new + { + Id = 15, + Code = 0, + Name = "Неподвижное состояние" + }, + new + { + Id = 16, + Code = 0, + Name = "Вращение без циркуляции" + }, + new + { + Id = 17, + Code = 0, + Name = "На поверхности" + }, + new + { + Id = 1001, + Code = 0, + Name = "Бурение в интервале" + }, + new + { + Id = 1002, + Code = 0, + Name = "ГИС" + }, + new + { + Id = 1003, + Code = 0, + Name = "ГФР" + }, + new + { + Id = 1004, + Code = 0, + Name = "Монтаж ПВО" + }, + new + { + Id = 1005, + Code = 0, + Name = "Демонтаж ПВО" + }, + new + { + Id = 1006, + Code = 0, + Name = "Установка ФА" + }, + new + { + Id = 1007, + Code = 0, + Name = "Оборудование устья" + }, + new + { + Id = 1008, + Code = 0, + Name = "ОЗЦ" + }, + new + { + Id = 1009, + Code = 0, + Name = "Оборудование устья" + }, + new + { + Id = 1010, + Code = 0, + Name = "ОЗЦ" + }, + new + { + Id = 1011, + Code = 0, + Name = "Начало цикла строительства скважины" + }, + new + { + Id = 1012, + Code = 0, + Name = "Окончание цикла строительства скважины" + }, + new + { + Id = 1013, + Code = 0, + Name = "Опрессовка ПВО" + }, + new + { + Id = 1014, + Code = 0, + Name = "Опресовка Ц.К." + }, + new + { + Id = 1015, + Code = 0, + Name = "Опрессовка ВЗД" + }, + new + { + Id = 1016, + Code = 0, + Name = "Перевод скв на другой тип промывочной жидкости" + }, + new + { + Id = 1017, + Code = 0, + Name = "Перезапись каротажа" + }, + new + { + Id = 1018, + Code = 0, + Name = "Перетяжка талевого каната" + }, + new + { + Id = 1020, + Code = 0, + Name = "Подъем инструмента" + }, + new + { + Id = 1021, + Code = 0, + Name = "Подъем инструмента с промывкой" + }, + new + { + Id = 1022, + Code = 0, + Name = "Обратная проработка" + }, + new + { + Id = 1023, + Code = 0, + Name = "Сборка инструмента" + }, + new + { + Id = 1024, + Code = 0, + Name = "Подготовительные работы" + }, + new + { + Id = 1025, + Code = 0, + Name = "Сборка КНБК" + }, + new + { + Id = 1026, + Code = 0, + Name = "Разборка КНБК" + }, + new + { + Id = 1027, + Code = 0, + Name = "Промывка" + }, + new + { + Id = 1028, + Code = 0, + Name = "Промежуточная промывка" + }, + new + { + Id = 1029, + Code = 0, + Name = "Прокачка пачек" + }, + new + { + Id = 1030, + Code = 0, + Name = "Разбуривание тех.оснастки" + }, + new + { + Id = 1031, + Code = 0, + Name = "Ремонт" + }, + new + { + Id = 1032, + Code = 0, + Name = "Спуск инструмента" + }, + new + { + Id = 1033, + Code = 0, + Name = "Спуск инструмента с промывкой" + }, + new + { + Id = 1034, + Code = 0, + Name = "Прямая проработка" + }, + new + { + Id = 1035, + Code = 0, + Name = "Принудительная проработка" + }, + new + { + Id = 1036, + Code = 0, + Name = "Спуск обсадной колонны" + }, + new + { + Id = 1037, + Code = 0, + Name = "Тех СПО-подъем" + }, + new + { + Id = 1038, + Code = 0, + Name = "Тех СПО-спуск" + }, + new + { + Id = 1039, + Code = 0, + Name = "Техническое обслуживание" + }, + new + { + Id = 1040, + Code = 0, + Name = "Цементаж" + }, + new + { + Id = 1041, + Code = 0, + Name = "Шаблонировка ствола" + }, + new + { + Id = 1042, + Code = 0, + Name = "Геологическое осложнение" + }, + new + { + Id = 1043, + Code = 0, + Name = "НПВ" + }, + new + { + Id = 1044, + Code = 0, + Name = "ВМР" + }, + new + { + Id = 1045, + Code = 0, + Name = "Прочее" + }, + new + { + Id = 1046, + Code = 0, + Name = "Спуск КНБК" + }, + new + { + Id = 1047, + Code = 0, + Name = "Подъем КНБК" + }, + new + { + Id = 1048, + Code = 0, + Name = "Спуск ОК" + }, + new + { + Id = 1050, + Code = 0, + Name = "Промывка при спуске ОК" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellSectionType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.HasKey("Id"); + + b.ToTable("t_well_section_type"); + + b + .HasComment("конструкция секции скважины"); + + b.HasData( + new + { + Id = 1, + Caption = "Пилотный ствол" + }, + new + { + Id = 2, + Caption = "Направление" + }, + new + { + Id = 3, + Caption = "Кондуктор" + }, + new + { + Id = 4, + Caption = "Эксплуатационная колонна" + }, + new + { + Id = 5, + Caption = "Транспортный ствол" + }, + new + { + Id = 6, + Caption = "Хвостовик" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.HasKey("Id"); + + b.ToTable("t_well_type"); + + b + .HasComment("конструкция скважины"); + + b.HasData( + new + { + Id = 1, + Caption = "Наклонно-направленная" + }, + new + { + Id = 2, + Caption = "Горизонтальная" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Cluster", b => + { + b.HasOne("AsbCloudDb.Model.Deposit", "Deposit") + .WithMany("Clusters") + .HasForeignKey("IdDeposit") + .HasConstraintName("t_cluster_t_deposit_id_fk"); + + b.Navigation("Deposit"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Company", b => + { + b.HasOne("AsbCloudDb.Model.CompanyType", "CompanyType") + .WithMany("Companies") + .HasForeignKey("IdCompanyType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileInfo", b => + { + b.HasOne("AsbCloudDb.Model.User", "Author") + .WithMany("Files") + .HasForeignKey("IdAuthor"); + + b.HasOne("AsbCloudDb.Model.FileCategory", "FileCategory") + .WithMany() + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + + b.Navigation("FileCategory"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Measure", b => + { + b.HasOne("AsbCloudDb.Model.MeasureCategory", "Category") + .WithMany("Measures") + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationCompanyWell", b => + { + b.HasOne("AsbCloudDb.Model.Company", "Company") + .WithMany("RelationCompaniesWells") + .HasForeignKey("IdCompany") + .HasConstraintName("t_relation_company_well_t_company_id_fk") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany("RelationCompaniesWells") + .HasForeignKey("IdWell") + .HasConstraintName("t_relation_company_well_t_well_id_fk") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ReportProperty", b => + { + b.HasOne("AsbCloudDb.Model.FileInfo", "File") + .WithMany() + .HasForeignKey("IdFile") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("File"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryAnalysis", b => + { + b.HasOne("AsbCloudDb.Model.WellOperationCategory", "Operation") + .WithMany("Analysis") + .HasForeignKey("IdOperation") + .HasConstraintName("t_analysis_t_operation_id_fk") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Analysis") + .HasForeignKey("IdTelemetry") + .HasConstraintName("t_analysis_t_telemetry_id_fk") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Operation"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSaub", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("DataSaub") + .HasForeignKey("IdTelemetry") + .HasConstraintName("t_data_saub_t_telemetry_id_fk") + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSpin", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("DataSpin") + .HasForeignKey("IdTelemetry") + .HasConstraintName("t_data_spin_t_telemetry_id_fk") + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryEvent", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Events") + .HasForeignKey("IdTelemetry") + .HasConstraintName("t_event_t_telemetry_id_fk") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryMessage", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Messages") + .HasForeignKey("IdTelemetry") + .HasConstraintName("t_messages_t_telemetry_id_fk") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryUser", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Users") + .HasForeignKey("IdTelemetry") + .HasConstraintName("t_telemetry_user_t_telemetry_id_fk") + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.User", b => + { + b.HasOne("AsbCloudDb.Model.Company", "Company") + .WithMany("Users") + .HasForeignKey("IdCompany") + .HasConstraintName("t_user_t_company_id_fk"); + + b.HasOne("AsbCloudDb.Model.UserRole", "Role") + .WithMany("Users") + .HasForeignKey("IdRole"); + + b.Navigation("Company"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Well", b => + { + b.HasOne("AsbCloudDb.Model.Cluster", "Cluster") + .WithMany("Wells") + .HasForeignKey("IdCluster") + .HasConstraintName("t_well_t_cluster_id_fk"); + + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithOne("Well") + .HasForeignKey("AsbCloudDb.Model.Well", "IdTelemetry") + .HasConstraintName("t_well_t_telemetry_id_fk"); + + b.HasOne("AsbCloudDb.Model.WellType", "WellType") + .WithMany("Wells") + .HasForeignKey("IdWellType"); + + b.Navigation("Cluster"); + + b.Navigation("Telemetry"); + + b.Navigation("WellType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperation", b => + { + b.HasOne("AsbCloudDb.Model.WellOperationCategory", "OperationCategory") + .WithMany() + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany("WellOperations") + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany("WellOperations") + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("OperationCategory"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Cluster", b => + { + b.Navigation("Wells"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Company", b => + { + b.Navigation("RelationCompaniesWells"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.CompanyType", b => + { + b.Navigation("Companies"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Deposit", b => + { + b.Navigation("Clusters"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.MeasureCategory", b => + { + b.Navigation("Measures"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Telemetry", b => + { + b.Navigation("Analysis"); + + b.Navigation("DataSaub"); + + b.Navigation("DataSpin"); + + b.Navigation("Events"); + + b.Navigation("Messages"); + + b.Navigation("Users"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.User", b => + { + b.Navigation("Files"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.UserRole", b => + { + b.Navigation("Users"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Well", b => + { + b.Navigation("RelationCompaniesWells"); + + b.Navigation("WellOperations"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperationCategory", b => + { + b.Navigation("Analysis"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellSectionType", b => + { + b.Navigation("WellOperations"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellType", b => + { + b.Navigation("Wells"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AsbCloudDb/Migrations/20210914105045_RefactorTelemetryData.cs b/AsbCloudDb/Migrations/20210914105045_RefactorTelemetryData.cs new file mode 100644 index 00000000..c8500f54 --- /dev/null +++ b/AsbCloudDb/Migrations/20210914105045_RefactorTelemetryData.cs @@ -0,0 +1,141 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +namespace AsbCloudDb.Migrations +{ + public partial class RefactorTelemetryData : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey(name: "t_data_saub_base_t_telemetry_id_fk", table: "t_data_saub_base"); + migrationBuilder.DropPrimaryKey(name: "PK_t_data_saub_base", table: "t_data_saub_base"); + + migrationBuilder.RenameTable(name: "t_data_saub_base", newName: "t_telemetry_data_saub"); + migrationBuilder.RenameIndex(name: "IX_t_data_saub_base_id_telemetry", newName: "IX_t_telemetry_data_saub_id_telemetry"); + + migrationBuilder.AddPrimaryKey(name: "PK_t_telemetry_data_saub", table: "t_telemetry_data_saub", column: "id"); + + migrationBuilder.AddForeignKey( + name: "t_telemetry_data_saub_t_telemetry_id_fk", + table: "t_telemetry_data_saub", + column: "id_telemetry", + principalTable: "t_telemetry", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.CreateTable( + name: "t_telemetry_data_spin", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + id_telemetry = table.Column(type: "integer", nullable: false), + date = table.Column(type: "timestamp with time zone", nullable: false, comment: "'2021-10-19 18:23:54+05'"), + top_drive_speed = table.Column(type: "double precision", nullable: true, comment: "Скорость СВП"), + top_drive_speed_min = table.Column(type: "double precision", nullable: true, comment: "нижний предел"), + top_drive_speed_max = table.Column(type: "double precision", nullable: true, comment: "верхний предел"), + top_drive_speed_offset = table.Column(type: "double precision", nullable: true, comment: "смещение"), + top_drive_speed_err = table.Column(type: "integer", nullable: true), + top_drive_torque = table.Column(type: "double precision", nullable: true, comment: "Момент СВП"), + top_drive_torque_min = table.Column(type: "double precision", nullable: true), + top_drive_torque_max = table.Column(type: "double precision", nullable: true), + top_drive_torque_offset = table.Column(type: "double precision", nullable: true), + top_drive_torque_err = table.Column(type: "integer", nullable: true), + top_drive_speed_sp_from = table.Column(type: "double precision", nullable: true, comment: "Заданная скорость c СВП"), + top_drive_speed_sp_from_min = table.Column(type: "double precision", nullable: true), + top_drive_speed_sp_from_max = table.Column(type: "double precision", nullable: true), + top_drive_speed_sp_from_offset = table.Column(type: "double precision", nullable: true), + top_drive_speed_sp_from_err = table.Column(type: "integer", nullable: true), + top_drive_torque_sp_from = table.Column(type: "double precision", nullable: true, comment: "Заданный момент c СВП"), + top_drive_torque_sp_from_min = table.Column(type: "double precision", nullable: true), + top_drive_torque_sp_from_max = table.Column(type: "double precision", nullable: true), + top_drive_torque_sp_from_offset = table.Column(type: "double precision", nullable: true), + top_drive_torque_sp_from_err = table.Column(type: "integer", nullable: true), + top_drive_speed_sp_to = table.Column(type: "double precision", nullable: true, comment: "Задание скорости на СВП"), + top_drive_speed_sp_to_min = table.Column(type: "double precision", nullable: true), + top_drive_speed_sp_to_max = table.Column(type: "double precision", nullable: true), + top_drive_speed_sp_to_offset = table.Column(type: "double precision", nullable: true), + top_drive_speed_sp_to_err = table.Column(type: "integer", nullable: true), + top_drive_torque_sp_to = table.Column(type: "double precision", nullable: true, comment: "Задание момента на СВП"), + top_drive_torque_sp_to_min = table.Column(type: "double precision", nullable: true), + top_drive_torque_sp_to_max = table.Column(type: "double precision", nullable: true), + top_drive_torque_sp_to_offset = table.Column(type: "double precision", nullable: true), + top_drive_torque_sp_to_err = table.Column(type: "integer", nullable: true), + w2800 = table.Column(type: "integer", nullable: true, comment: "Установка нуля энкодера"), + w2810 = table.Column(type: "integer", nullable: true, comment: " автоматический сброс блокировки"), + mode = table.Column(type: "integer", nullable: true, comment: "Выбранный режим управления"), + w2808 = table.Column(type: "integer", nullable: true, comment: "Неисправность энкодера"), + torque_starting = table.Column(type: "double precision", nullable: true, comment: " Страгивающий момент"), + rotor_torque_avg = table.Column(type: "double precision", nullable: true, comment: " Момент в роторе средний"), + encoder_resolution = table.Column(name: "encoder_resolution ", type: "double precision", nullable: true, comment: " Разрешение энкодера"), + ratio = table.Column(type: "double precision", nullable: true, comment: " Коэффициент редукции редектора"), + torque_right_limit = table.Column(type: "double precision", nullable: true, comment: "Ограничение крутящего момента вправо"), + torque_left_limit = table.Column(type: "double precision", nullable: true, comment: "Ограничение крутящего момента влево"), + revols_right_limit = table.Column(type: "double precision", nullable: true, comment: "Ограничение числа оборотов вправо"), + revols_left_limit = table.Column(type: "double precision", nullable: true, comment: "Ограничение числа оборотов влево"), + speed_right_sp = table.Column(type: "double precision", nullable: true, comment: "Заданная скорость вращения вправо"), + speed_left_sp = table.Column(type: "double precision", nullable: true, comment: "Заданная скорость вращения влево"), + revols_right_total = table.Column(type: "double precision", nullable: true, comment: "Суммарное количество оборотов вправо"), + revols_left_total = table.Column(type: "double precision", nullable: true, comment: "Суммарное количество оборотов влево"), + turn_right_once_by_torque = table.Column(type: "double precision", nullable: true, comment: "Доворот по моменту единожды вправо"), + turn_left_once_by_torque = table.Column(type: "double precision", nullable: true, comment: "Доворот по моменту единожды влево"), + turn_right_once_by_angle = table.Column(type: "double precision", nullable: true, comment: "Доворот по градусам единожды вправо"), + turn_left_once_by_angle = table.Column(type: "double precision", nullable: true, comment: "Доворот по градусам единожды влево"), + turn_right_once_by_revols = table.Column(type: "double precision", nullable: true, comment: "Доворот по оборотам единожды вправо"), + turn_left_once_by_revols = table.Column(type: "double precision", nullable: true, comment: "Доворот по оборотам единожды влево"), + break_angle_k = table.Column(type: "double precision", nullable: true, comment: "Коэффициент для расчёта за какой угол нужно тормозить"), + reverse_k_torque = table.Column(type: "double precision", nullable: true, comment: "Коэффициент на который умножается момент, для того чтобы система поняла что мы движемся в обратную сторону"), + position_zero = table.Column(type: "double precision", nullable: true, comment: "Нулевая позиция осциляции"), + position_right = table.Column(type: "double precision", nullable: true, comment: "Крайний правый угол осциляции"), + torque_ramp_time = table.Column(type: "double precision", nullable: true, comment: "Время нарастания момента"), + ver = table.Column(type: "double precision", nullable: true, comment: "Версия ПО ПЛК"), + reverse_speed_sp_zero_time = table.Column(type: "integer", nullable: true, comment: "Время выдачи сигнала нулевой скорости на при смене направления"), + unlock_by_sector_out = table.Column(type: "double precision", nullable: true, comment: " Градус отклонения от сектора для автоматического сброса блокировки"), + pid_mux_torque_left_limit = table.Column(type: "double precision", nullable: true, comment: " Момент при котором определяется ехать назад по моменту или по скорости"), + state = table.Column(type: "integer", nullable: true, comment: "Переменная этапа"), + break_angle_left = table.Column(type: "double precision", nullable: true, comment: "Угол торможения влево при работе по моменту") + }, + constraints: table => + { + table.PrimaryKey("PK_t_telemetry_data_spin", x => x.id); + table.ForeignKey( + name: "t_telemetry_data_spin_t_telemetry_id_fk", + column: x => x.id_telemetry, + principalTable: "t_telemetry", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + }, + comment: "набор основных данных по SpinMaster"); + + + + migrationBuilder.CreateIndex( + name: "IX_t_telemetry_data_spin_id_telemetry", + table: "t_telemetry_data_spin", + column: "id_telemetry"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "t_telemetry_data_spin"); + + migrationBuilder.DropForeignKey(name: "t_telemetry_data_saub_t_telemetry_id_fk", table: "t_telemetry_data_saub"); + migrationBuilder.DropPrimaryKey(name: "PK_t_telemetry_data_saub", table: "t_telemetry_data_saub"); + + migrationBuilder.RenameTable(name: "t_telemetry_data_saub", newName: "t_data_saub_base"); + migrationBuilder.RenameIndex(name: "IX_t_telemetry_data_saub_id_telemetry", newName: "IX_t_data_saub_base_id_telemetry"); + + migrationBuilder.AddPrimaryKey(name: "PK_t_telemetry_data_saub", table: "t_data_saub_base", column: "id"); + + migrationBuilder.AddForeignKey( + name: "t_data_saub_t_telemetry_id_fk", + table: "t_data_saub_base", + column: "id_telemetry", + principalTable: "t_telemetry", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + } + } +} diff --git a/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs b/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs index 398995af..37b42215 100644 --- a/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs +++ b/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs @@ -127,213 +127,6 @@ namespace AsbCloudDb.Migrations }); }); - modelBuilder.Entity("AsbCloudDb.Model.DataSaubBase", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id") - .UseIdentityByDefaultColumn(); - - b.Property("AxialLoad") - .HasColumnType("double precision") - .HasColumnName("axial_load") - .HasComment("Осевая нагрузка"); - - b.Property("AxialLoadLimitMax") - .HasColumnType("double precision") - .HasColumnName("axial_load_limit_max") - .HasComment("Осевая нагрузка. Аварийная макс."); - - b.Property("AxialLoadSp") - .HasColumnType("double precision") - .HasColumnName("axial_load_sp") - .HasComment("Осевая нагрузка. Задание"); - - b.Property("BitDepth") - .HasColumnType("double precision") - .HasColumnName("bit_depth") - .HasComment("Положение инструмента"); - - b.Property("BlockPosition") - .HasColumnType("double precision") - .HasColumnName("block_position") - .HasComment("Высота талевого блока"); - - b.Property("BlockPositionMax") - .HasColumnType("double precision") - .HasColumnName("block_position_max") - .HasComment("Талевый блок. Макс положение"); - - b.Property("BlockPositionMin") - .HasColumnType("double precision") - .HasColumnName("block_position_min") - .HasComment("Талевый блок. Мин положение"); - - b.Property("BlockSpeed") - .HasColumnType("double precision") - .HasColumnName("block_speed") - .HasComment("Скорость талевого блока"); - - b.Property("BlockSpeedSp") - .HasColumnType("double precision") - .HasColumnName("block_speed_sp") - .HasComment("Скорости талевого блока. Задание"); - - b.Property("BlockSpeedSpDevelop") - .HasColumnType("double precision") - .HasColumnName("block_speed_sp_develop") - .HasComment("Талевый блок. Задание скорости для проработки"); - - b.Property("BlockSpeedSpRotor") - .HasColumnType("double precision") - .HasColumnName("block_speed_sp_rotor") - .HasComment("Талевый блок. Задание скорости для роторного бурения"); - - b.Property("BlockSpeedSpSlide") - .HasColumnType("double precision") - .HasColumnName("block_speed_sp_slide") - .HasComment("Талевый блок. Задание скорости для режима слайда"); - - b.Property("Date") - .HasColumnType("timestamp with time zone") - .HasColumnName("date") - .HasComment("'2021-10-19 18:23:54+05'"); - - b.Property("Flow") - .HasColumnType("double precision") - .HasColumnName("flow") - .HasComment("Расход"); - - b.Property("FlowDeltaLimitMax") - .HasColumnType("double precision") - .HasColumnName("flow_delta_limit_max") - .HasComment("Расход. Аварийный макс."); - - b.Property("FlowIdle") - .HasColumnType("double precision") - .HasColumnName("flow_idle") - .HasComment("Расход. Холостой ход"); - - b.Property("HookWeight") - .HasColumnType("double precision") - .HasColumnName("hook_weight") - .HasComment("Вес на крюке"); - - b.Property("HookWeightIdle") - .HasColumnType("double precision") - .HasColumnName("hook_weight_idle") - .HasComment("Вес на крюке. Холостой ход"); - - b.Property("HookWeightLimitMax") - .HasColumnType("double precision") - .HasColumnName("hook_weight_limit_max") - .HasComment("Вес на крюке. Затяжка"); - - b.Property("HookWeightLimitMin") - .HasColumnType("double precision") - .HasColumnName("hook_weight_limit_min") - .HasComment("Вес на крюке. Посадка"); - - b.Property("IdFeedRegulator") - .HasColumnType("double precision") - .HasColumnName("id_feed_regulator") - .HasComment("Текущий критерий бурения"); - - b.Property("IdTelemetry") - .HasColumnType("integer") - .HasColumnName("id_telemetry"); - - b.Property("IdUser") - .HasColumnType("integer") - .HasColumnName("id_user") - .HasComment("Пользователь САУБ"); - - b.Property("Mode") - .HasColumnType("integer") - .HasColumnName("mode") - .HasComment("Режим САУБ"); - - b.Property("MseState") - .HasColumnType("double precision") - .HasColumnName("mse_state") - .HasComment("Текущее состояние работы MSE"); - - b.Property("Pressure") - .HasColumnType("double precision") - .HasColumnName("pressure") - .HasComment("Давление"); - - b.Property("PressureDeltaLimitMax") - .HasColumnType("double precision") - .HasColumnName("pressure_delta_limit_max") - .HasComment("Давление дифф. Аварийное макс."); - - b.Property("PressureIdle") - .HasColumnType("double precision") - .HasColumnName("pressure_idle") - .HasComment("Давление. Холостой ход"); - - b.Property("PressureSp") - .HasColumnType("double precision") - .HasColumnName("pressure_sp") - .HasComment("Давление. Задание"); - - b.Property("PressureSpDevelop") - .HasColumnType("double precision") - .HasColumnName("pressure_sp_develop") - .HasComment("Давление. Задание для проработки"); - - b.Property("PressureSpRotor") - .HasColumnType("double precision") - .HasColumnName("pressure_sp_rotor") - .HasComment("Давление. Задание для роторного бурения"); - - b.Property("PressureSpSlide") - .HasColumnType("double precision") - .HasColumnName("pressure_sp_slide") - .HasComment("Давление. Задание для режима слайда"); - - b.Property("RotorSpeed") - .HasColumnType("double precision") - .HasColumnName("rotor_speed") - .HasComment("Обороты ротора"); - - b.Property("RotorTorque") - .HasColumnType("double precision") - .HasColumnName("rotor_torque") - .HasComment("Момент на роторе"); - - b.Property("RotorTorqueIdle") - .HasColumnType("double precision") - .HasColumnName("rotor_torque_idle") - .HasComment("Момент на роторе. Холостой ход"); - - b.Property("RotorTorqueLimitMax") - .HasColumnType("double precision") - .HasColumnName("rotor_torque_limit_max") - .HasComment("Момент на роторе. Аварийный макс."); - - b.Property("RotorTorqueSp") - .HasColumnType("double precision") - .HasColumnName("rotor_torque_sp") - .HasComment("Момент на роторе. Задание"); - - b.Property("WellDepth") - .HasColumnType("double precision") - .HasColumnName("well_depth") - .HasComment("Глубина забоя"); - - b.HasKey("Id"); - - b.HasIndex("IdTelemetry"); - - b.ToTable("t_data_saub_base"); - - b - .HasComment("набор основных данных по SAUB"); - }); - modelBuilder.Entity("AsbCloudDb.Model.Deposit", b => { b.Property("Id") @@ -832,6 +625,534 @@ namespace AsbCloudDb.Migrations .HasComment("События на скважине"); }); + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSaub", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("AxialLoad") + .HasColumnType("double precision") + .HasColumnName("axial_load") + .HasComment("Осевая нагрузка"); + + b.Property("AxialLoadLimitMax") + .HasColumnType("double precision") + .HasColumnName("axial_load_limit_max") + .HasComment("Осевая нагрузка. Аварийная макс."); + + b.Property("AxialLoadSp") + .HasColumnType("double precision") + .HasColumnName("axial_load_sp") + .HasComment("Осевая нагрузка. Задание"); + + b.Property("BitDepth") + .HasColumnType("double precision") + .HasColumnName("bit_depth") + .HasComment("Положение инструмента"); + + b.Property("BlockPosition") + .HasColumnType("double precision") + .HasColumnName("block_position") + .HasComment("Высота талевого блока"); + + b.Property("BlockPositionMax") + .HasColumnType("double precision") + .HasColumnName("block_position_max") + .HasComment("Талевый блок. Макс положение"); + + b.Property("BlockPositionMin") + .HasColumnType("double precision") + .HasColumnName("block_position_min") + .HasComment("Талевый блок. Мин положение"); + + b.Property("BlockSpeed") + .HasColumnType("double precision") + .HasColumnName("block_speed") + .HasComment("Скорость талевого блока"); + + b.Property("BlockSpeedSp") + .HasColumnType("double precision") + .HasColumnName("block_speed_sp") + .HasComment("Скорости талевого блока. Задание"); + + b.Property("BlockSpeedSpDevelop") + .HasColumnType("double precision") + .HasColumnName("block_speed_sp_develop") + .HasComment("Талевый блок. Задание скорости для проработки"); + + b.Property("BlockSpeedSpRotor") + .HasColumnType("double precision") + .HasColumnName("block_speed_sp_rotor") + .HasComment("Талевый блок. Задание скорости для роторного бурения"); + + b.Property("BlockSpeedSpSlide") + .HasColumnType("double precision") + .HasColumnName("block_speed_sp_slide") + .HasComment("Талевый блок. Задание скорости для режима слайда"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date") + .HasComment("'2021-10-19 18:23:54+05'"); + + b.Property("Flow") + .HasColumnType("double precision") + .HasColumnName("flow") + .HasComment("Расход"); + + b.Property("FlowDeltaLimitMax") + .HasColumnType("double precision") + .HasColumnName("flow_delta_limit_max") + .HasComment("Расход. Аварийный макс."); + + b.Property("FlowIdle") + .HasColumnType("double precision") + .HasColumnName("flow_idle") + .HasComment("Расход. Холостой ход"); + + b.Property("HookWeight") + .HasColumnType("double precision") + .HasColumnName("hook_weight") + .HasComment("Вес на крюке"); + + b.Property("HookWeightIdle") + .HasColumnType("double precision") + .HasColumnName("hook_weight_idle") + .HasComment("Вес на крюке. Холостой ход"); + + b.Property("HookWeightLimitMax") + .HasColumnType("double precision") + .HasColumnName("hook_weight_limit_max") + .HasComment("Вес на крюке. Затяжка"); + + b.Property("HookWeightLimitMin") + .HasColumnType("double precision") + .HasColumnName("hook_weight_limit_min") + .HasComment("Вес на крюке. Посадка"); + + b.Property("IdFeedRegulator") + .HasColumnType("double precision") + .HasColumnName("id_feed_regulator") + .HasComment("Текущий критерий бурения"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("Пользователь САУБ"); + + b.Property("Mode") + .HasColumnType("integer") + .HasColumnName("mode") + .HasComment("Режим САУБ"); + + b.Property("MseState") + .HasColumnType("double precision") + .HasColumnName("mse_state") + .HasComment("Текущее состояние работы MSE"); + + b.Property("Pressure") + .HasColumnType("double precision") + .HasColumnName("pressure") + .HasComment("Давление"); + + b.Property("PressureDeltaLimitMax") + .HasColumnType("double precision") + .HasColumnName("pressure_delta_limit_max") + .HasComment("Давление дифф. Аварийное макс."); + + b.Property("PressureIdle") + .HasColumnType("double precision") + .HasColumnName("pressure_idle") + .HasComment("Давление. Холостой ход"); + + b.Property("PressureSp") + .HasColumnType("double precision") + .HasColumnName("pressure_sp") + .HasComment("Давление. Задание"); + + b.Property("PressureSpDevelop") + .HasColumnType("double precision") + .HasColumnName("pressure_sp_develop") + .HasComment("Давление. Задание для проработки"); + + b.Property("PressureSpRotor") + .HasColumnType("double precision") + .HasColumnName("pressure_sp_rotor") + .HasComment("Давление. Задание для роторного бурения"); + + b.Property("PressureSpSlide") + .HasColumnType("double precision") + .HasColumnName("pressure_sp_slide") + .HasComment("Давление. Задание для режима слайда"); + + b.Property("RotorSpeed") + .HasColumnType("double precision") + .HasColumnName("rotor_speed") + .HasComment("Обороты ротора"); + + b.Property("RotorTorque") + .HasColumnType("double precision") + .HasColumnName("rotor_torque") + .HasComment("Момент на роторе"); + + b.Property("RotorTorqueIdle") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_idle") + .HasComment("Момент на роторе. Холостой ход"); + + b.Property("RotorTorqueLimitMax") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_limit_max") + .HasComment("Момент на роторе. Аварийный макс."); + + b.Property("RotorTorqueSp") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_sp") + .HasComment("Момент на роторе. Задание"); + + b.Property("WellDepth") + .HasColumnType("double precision") + .HasColumnName("well_depth") + .HasComment("Глубина забоя"); + + b.HasKey("Id"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_telemetry_data_saub"); + + b + .HasComment("набор основных данных по SAUB"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSpin", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .UseIdentityByDefaultColumn(); + + b.Property("BreakAngleK") + .HasColumnType("double precision") + .HasColumnName("break_angle_k") + .HasComment("Коэффициент для расчёта за какой угол нужно тормозить"); + + b.Property("BreakAngleLeft") + .HasColumnType("double precision") + .HasColumnName("break_angle_left") + .HasComment("Угол торможения влево при работе по моменту"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date") + .HasComment("'2021-10-19 18:23:54+05'"); + + b.Property("EncoderResolution") + .HasColumnType("double precision") + .HasColumnName("encoder_resolution ") + .HasComment(" Разрешение энкодера"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("Mode") + .HasColumnType("integer") + .HasColumnName("mode") + .HasComment("Выбранный режим управления"); + + b.Property("PidMuxTorqueLeftLimit") + .HasColumnType("double precision") + .HasColumnName("pid_mux_torque_left_limit") + .HasComment(" Момент при котором определяется ехать назад по моменту или по скорости"); + + b.Property("PositionRight") + .HasColumnType("double precision") + .HasColumnName("position_right") + .HasComment("Крайний правый угол осциляции"); + + b.Property("PositionZero") + .HasColumnType("double precision") + .HasColumnName("position_zero") + .HasComment("Нулевая позиция осциляции"); + + b.Property("Ratio") + .HasColumnType("double precision") + .HasColumnName("ratio") + .HasComment(" Коэффициент редукции редектора"); + + b.Property("ReverseKTorque") + .HasColumnType("double precision") + .HasColumnName("reverse_k_torque") + .HasComment("Коэффициент на который умножается момент, для того чтобы система поняла что мы движемся в обратную сторону"); + + b.Property("ReverseSpeedSpZeroTime") + .HasColumnType("integer") + .HasColumnName("reverse_speed_sp_zero_time") + .HasComment("Время выдачи сигнала нулевой скорости на при смене направления"); + + b.Property("RevolsLeftLimit") + .HasColumnType("double precision") + .HasColumnName("revols_left_limit") + .HasComment("Ограничение числа оборотов влево"); + + b.Property("RevolsLeftTotal") + .HasColumnType("double precision") + .HasColumnName("revols_left_total") + .HasComment("Суммарное количество оборотов влево"); + + b.Property("RevolsRightLimit") + .HasColumnType("double precision") + .HasColumnName("revols_right_limit") + .HasComment("Ограничение числа оборотов вправо"); + + b.Property("RevolsRightTotal") + .HasColumnType("double precision") + .HasColumnName("revols_right_total") + .HasComment("Суммарное количество оборотов вправо"); + + b.Property("RotorTorqueAvg") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_avg") + .HasComment(" Момент в роторе средний"); + + b.Property("SpeedLeftSp") + .HasColumnType("double precision") + .HasColumnName("speed_left_sp") + .HasComment("Заданная скорость вращения влево"); + + b.Property("SpeedRightSp") + .HasColumnType("double precision") + .HasColumnName("speed_right_sp") + .HasComment("Заданная скорость вращения вправо"); + + b.Property("State") + .HasColumnType("integer") + .HasColumnName("state") + .HasComment("Переменная этапа"); + + b.Property("TopDriveSpeed") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed") + .HasComment("Скорость СВП"); + + b.Property("TopDriveSpeedErr") + .HasColumnType("integer") + .HasColumnName("top_drive_speed_err"); + + b.Property("TopDriveSpeedMax") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_max") + .HasComment("верхний предел"); + + b.Property("TopDriveSpeedMin") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_min") + .HasComment("нижний предел"); + + b.Property("TopDriveSpeedOffset") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_offset") + .HasComment("смещение"); + + b.Property("TopDriveSpeedSpFrom") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_from") + .HasComment("Заданная скорость c СВП"); + + b.Property("TopDriveSpeedSpFromErr") + .HasColumnType("integer") + .HasColumnName("top_drive_speed_sp_from_err"); + + b.Property("TopDriveSpeedSpFromMax") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_from_max"); + + b.Property("TopDriveSpeedSpFromMin") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_from_min"); + + b.Property("TopDriveSpeedSpFromOffset") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_from_offset"); + + b.Property("TopDriveSpeedSpTo") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_to") + .HasComment("Задание скорости на СВП"); + + b.Property("TopDriveSpeedSpToErr") + .HasColumnType("integer") + .HasColumnName("top_drive_speed_sp_to_err"); + + b.Property("TopDriveSpeedSpToMax") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_to_max"); + + b.Property("TopDriveSpeedSpToMin") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_to_min"); + + b.Property("TopDriveSpeedSpToOffset") + .HasColumnType("double precision") + .HasColumnName("top_drive_speed_sp_to_offset"); + + b.Property("TopDriveTorque") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque") + .HasComment("Момент СВП"); + + b.Property("TopDriveTorqueErr") + .HasColumnType("integer") + .HasColumnName("top_drive_torque_err"); + + b.Property("TopDriveTorqueMax") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_max"); + + b.Property("TopDriveTorqueMin") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_min"); + + b.Property("TopDriveTorqueOffset") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_offset"); + + b.Property("TopDriveTorqueSpFrom") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_from") + .HasComment("Заданный момент c СВП"); + + b.Property("TopDriveTorqueSpFromErr") + .HasColumnType("integer") + .HasColumnName("top_drive_torque_sp_from_err"); + + b.Property("TopDriveTorqueSpFromMax") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_from_max"); + + b.Property("TopDriveTorqueSpFromMin") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_from_min"); + + b.Property("TopDriveTorqueSpFromOffset") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_from_offset"); + + b.Property("TopDriveTorqueSpTo") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_to") + .HasComment("Задание момента на СВП"); + + b.Property("TopDriveTorqueSpToErr") + .HasColumnType("integer") + .HasColumnName("top_drive_torque_sp_to_err"); + + b.Property("TopDriveTorqueSpToMax") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_to_max"); + + b.Property("TopDriveTorqueSpToMin") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_to_min"); + + b.Property("TopDriveTorqueSpToOffset") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_sp_to_offset"); + + b.Property("TorqueLeftLimit") + .HasColumnType("double precision") + .HasColumnName("torque_left_limit") + .HasComment("Ограничение крутящего момента влево"); + + b.Property("TorqueRampTime") + .HasColumnType("double precision") + .HasColumnName("torque_ramp_time") + .HasComment("Время нарастания момента"); + + b.Property("TorqueRightLimit") + .HasColumnType("double precision") + .HasColumnName("torque_right_limit") + .HasComment("Ограничение крутящего момента вправо"); + + b.Property("TorqueStarting") + .HasColumnType("double precision") + .HasColumnName("torque_starting") + .HasComment(" Страгивающий момент"); + + b.Property("TurnLeftOnceByAngle") + .HasColumnType("double precision") + .HasColumnName("turn_left_once_by_angle") + .HasComment("Доворот по градусам единожды влево"); + + b.Property("TurnLeftOnceByRevols") + .HasColumnType("double precision") + .HasColumnName("turn_left_once_by_revols") + .HasComment("Доворот по оборотам единожды влево"); + + b.Property("TurnLeftOnceByTorque") + .HasColumnType("double precision") + .HasColumnName("turn_left_once_by_torque") + .HasComment("Доворот по моменту единожды влево"); + + b.Property("TurnRightOnceByAngle") + .HasColumnType("double precision") + .HasColumnName("turn_right_once_by_angle") + .HasComment("Доворот по градусам единожды вправо"); + + b.Property("TurnRightOnceByRevols") + .HasColumnType("double precision") + .HasColumnName("turn_right_once_by_revols") + .HasComment("Доворот по оборотам единожды вправо"); + + b.Property("TurnRightOnceByTorque") + .HasColumnType("double precision") + .HasColumnName("turn_right_once_by_torque") + .HasComment("Доворот по моменту единожды вправо"); + + b.Property("UnlockBySectorOut") + .HasColumnType("double precision") + .HasColumnName("unlock_by_sector_out") + .HasComment(" Градус отклонения от сектора для автоматического сброса блокировки"); + + b.Property("Ver") + .HasColumnType("double precision") + .HasColumnName("ver") + .HasComment("Версия ПО ПЛК"); + + b.Property("W2800") + .HasColumnType("integer") + .HasColumnName("w2800") + .HasComment("Установка нуля энкодера"); + + b.Property("W2808") + .HasColumnType("integer") + .HasColumnName("w2808") + .HasComment("Неисправность энкодера"); + + b.Property("W2810") + .HasColumnType("integer") + .HasColumnName("w2810") + .HasComment(" автоматический сброс блокировки"); + + b.HasKey("Id"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_telemetry_data_spin"); + + b + .HasComment("набор основных данных по SpinMaster"); + }); + modelBuilder.Entity("AsbCloudDb.Model.TelemetryEvent", b => { b.Property("IdTelemetry") @@ -1730,17 +2051,6 @@ namespace AsbCloudDb.Migrations b.Navigation("CompanyType"); }); - modelBuilder.Entity("AsbCloudDb.Model.DataSaubBase", b => - { - b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") - .WithMany("DataSaubBases") - .HasForeignKey("IdTelemetry") - .HasConstraintName("t_data_saub_base_t_telemetry_id_fk") - .IsRequired(); - - b.Navigation("Telemetry"); - }); - modelBuilder.Entity("AsbCloudDb.Model.FileInfo", b => { b.HasOne("AsbCloudDb.Model.User", "Author") @@ -1846,6 +2156,28 @@ namespace AsbCloudDb.Migrations b.Navigation("Telemetry"); }); + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSaub", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("DataSaub") + .HasForeignKey("IdTelemetry") + .HasConstraintName("t_data_saub_t_telemetry_id_fk") + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSpin", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("DataSpin") + .HasForeignKey("IdTelemetry") + .HasConstraintName("t_data_spin_t_telemetry_id_fk") + .IsRequired(); + + b.Navigation("Telemetry"); + }); + modelBuilder.Entity("AsbCloudDb.Model.TelemetryEvent", b => { b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") @@ -1978,7 +2310,9 @@ namespace AsbCloudDb.Migrations { b.Navigation("Analysis"); - b.Navigation("DataSaubBases"); + b.Navigation("DataSaub"); + + b.Navigation("DataSpin"); b.Navigation("Events"); diff --git a/AsbCloudDb/Model/AsbCloudDbContext.cs b/AsbCloudDb/Model/AsbCloudDbContext.cs index b768daed..59d178ea 100644 --- a/AsbCloudDb/Model/AsbCloudDbContext.cs +++ b/AsbCloudDb/Model/AsbCloudDbContext.cs @@ -15,7 +15,6 @@ namespace AsbCloudDb.Model { public virtual DbSet Clusters { get; set; } public virtual DbSet Companies { get; set; } - public virtual DbSet DataSaubBases { get; set; } public virtual DbSet Deposits { get; set; } public virtual DbSet FileCategories { get; set; } public virtual DbSet Files { get; set; } @@ -23,6 +22,8 @@ namespace AsbCloudDb.Model public virtual DbSet MeasureCategories { get; set; } public virtual DbSet ReportProperties { get; set; } public virtual DbSet Telemetries { get; set; } + public virtual DbSet TelemetryDataSaub { get; set; } + public virtual DbSet TelemetryDataSpin { get; set; } public virtual DbSet TelemetryAnalysis { get; set; } public virtual DbSet TelemetryEvents { get; set; } public virtual DbSet TelemetryMessages { get; set; } @@ -70,13 +71,22 @@ namespace AsbCloudDb.Model .HasConstraintName("t_cluster_t_deposit_id_fk"); }); - modelBuilder.Entity(entity => + modelBuilder.Entity(entity => { entity.HasOne(d => d.Telemetry) - .WithMany(p => p.DataSaubBases) + .WithMany(p => p.DataSaub) .HasForeignKey(d => d.IdTelemetry) .OnDelete(DeleteBehavior.ClientSetNull) - .HasConstraintName("t_data_saub_base_t_telemetry_id_fk"); + .HasConstraintName("t_telemetry_data_saub_t_telemetry_id_fk"); + }); + + modelBuilder.Entity(entity => + { + entity.HasOne(d => d.Telemetry) + .WithMany(p => p.DataSpin) + .HasForeignKey(d => d.IdTelemetry) + .OnDelete(DeleteBehavior.ClientSetNull) + .HasConstraintName("t_telemetry_data_spin_t_telemetry_id_fk"); }); modelBuilder.Entity(entity => @@ -378,7 +388,7 @@ namespace AsbCloudDb.Model using var command = Database.GetDbConnection().CreateCommand(); command.CommandText = $@"SELECT Min(t.bit_depth) AS MinDepth, Max(t.bit_depth) AS MaxDepth, Min(t.Date) AS dateStart - FROM t_data_saub_base AS t + FROM t_telemetry_data_saub AS t WHERE id_telemetry = {telemetryId} AND t.Id % 10 = 0 GROUP BY floor((extract(epoch from t.date) - {workStartTimestamp} + {timezoneOffset}) / {intervalHoursTimestamp});"; diff --git a/AsbCloudDb/Model/IAsbCloudDbContext.cs b/AsbCloudDb/Model/IAsbCloudDbContext.cs index 5ca813d6..3a5cd1d8 100644 --- a/AsbCloudDb/Model/IAsbCloudDbContext.cs +++ b/AsbCloudDb/Model/IAsbCloudDbContext.cs @@ -11,7 +11,7 @@ namespace AsbCloudDb.Model { DbSet Clusters { get; set; } DbSet Companies { get; set; } - DbSet DataSaubBases { get; set; } + DbSet TelemetryDataSaub { get; set; } DbSet Deposits { get; set; } DbSet TelemetryEvents { get; set; } DbSet TelemetryMessages { get; set; } diff --git a/AsbCloudDb/Model/Telemetry.cs b/AsbCloudDb/Model/Telemetry.cs index 935f2d7f..403f0c81 100644 --- a/AsbCloudDb/Model/Telemetry.cs +++ b/AsbCloudDb/Model/Telemetry.cs @@ -14,7 +14,7 @@ namespace AsbCloudDb.Model { public Telemetry() { - DataSaubBases = new HashSet(); + DataSaub = new HashSet(); Messages = new HashSet(); } @@ -31,8 +31,11 @@ namespace AsbCloudDb.Model [InverseProperty(nameof(Model.Well.Telemetry))] public virtual Well Well { get; set; } - [InverseProperty(nameof(DataSaubBase.Telemetry))] - public virtual ICollection DataSaubBases { get; set; } + [InverseProperty(nameof(TelemetryDataSaub.Telemetry))] + public virtual ICollection DataSaub { get; set; } + + [InverseProperty(nameof(TelemetryDataSpin.Telemetry))] + public virtual ICollection DataSpin { get; set; } [InverseProperty(nameof(TelemetryMessage.Telemetry))] public virtual ICollection Messages { get; set; } diff --git a/AsbCloudDb/Model/DataSaubBase.cs b/AsbCloudDb/Model/TelemetryDataSaub.cs similarity index 96% rename from AsbCloudDb/Model/DataSaubBase.cs rename to AsbCloudDb/Model/TelemetryDataSaub.cs index 4cc21111..bddf970f 100644 --- a/AsbCloudDb/Model/DataSaubBase.cs +++ b/AsbCloudDb/Model/TelemetryDataSaub.cs @@ -8,8 +8,8 @@ using System.Text.Json.Serialization; namespace AsbCloudDb.Model { - [Table("t_data_saub_base"), Comment("набор основных данных по SAUB")] - public partial class DataSaubBase : IId, IIdTelemetryDate + [Table("t_telemetry_data_saub"), Comment("набор основных данных по SAUB")] + public partial class TelemetryDataSaub : IId, IIdTelemetryDate { [Key] [Column("id")] @@ -113,7 +113,7 @@ namespace AsbCloudDb.Model [JsonIgnore] [ForeignKey(nameof(IdTelemetry))] - [InverseProperty(nameof(Model.Telemetry.DataSaubBases))] + [InverseProperty(nameof(Model.Telemetry.DataSaub))] public virtual Telemetry Telemetry { get; set; } } } diff --git a/AsbCloudDb/Model/TelemetryDataSpin.cs b/AsbCloudDb/Model/TelemetryDataSpin.cs new file mode 100644 index 00000000..c59d7b30 --- /dev/null +++ b/AsbCloudDb/Model/TelemetryDataSpin.cs @@ -0,0 +1,90 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text.Json.Serialization; + +namespace AsbCloudDb.Model +{ + [Table("t_telemetry_data_spin"), Comment("набор основных данных по SpinMaster")] + public class TelemetryDataSpin + { + [Key] + [Column("id")] + public int Id { get; set; } + + [Column("id_telemetry")] + public int IdTelemetry { get; set; } + [Column("date", TypeName = "timestamp with time zone"), Comment("'2021-10-19 18:23:54+05'")] + public DateTime Date { get; set; } + + [Column("top_drive_speed"), Comment("Скорость СВП")] public double? TopDriveSpeed { get; set; } + [Column("top_drive_speed_min"), Comment("нижний предел")] public double? TopDriveSpeedMin { get; set; } + [Column("top_drive_speed_max"), Comment("верхний предел")] public double? TopDriveSpeedMax { get; set; } + [Column("top_drive_speed_offset"), Comment("смещение")] public double? TopDriveSpeedOffset { get; set; } + [Column("top_drive_speed_err")] public int? TopDriveSpeedErr { get; set; } + [Column("top_drive_torque"), Comment("Момент СВП")] public double? TopDriveTorque { get; set; } + [Column("top_drive_torque_min")] public double? TopDriveTorqueMin { get; set; } + [Column("top_drive_torque_max")] public double? TopDriveTorqueMax { get; set; } + [Column("top_drive_torque_offset")] public double? TopDriveTorqueOffset { get; set; } + [Column("top_drive_torque_err")] public int? TopDriveTorqueErr { get; set; } + [Column("top_drive_speed_sp_from"), Comment("Заданная скорость c СВП")] public double? TopDriveSpeedSpFrom { get; set; } + [Column("top_drive_speed_sp_from_min")] public double? TopDriveSpeedSpFromMin { get; set; } + [Column("top_drive_speed_sp_from_max")] public double? TopDriveSpeedSpFromMax { get; set; } + [Column("top_drive_speed_sp_from_offset")] public double? TopDriveSpeedSpFromOffset { get; set; } + [Column("top_drive_speed_sp_from_err")] public int? TopDriveSpeedSpFromErr { get; set; } + [Column("top_drive_torque_sp_from"), Comment("Заданный момент c СВП")] public double? TopDriveTorqueSpFrom { get; set; } + [Column("top_drive_torque_sp_from_min")] public double? TopDriveTorqueSpFromMin { get; set; } + [Column("top_drive_torque_sp_from_max")] public double? TopDriveTorqueSpFromMax { get; set; } + [Column("top_drive_torque_sp_from_offset")] public double? TopDriveTorqueSpFromOffset { get; set; } + [Column("top_drive_torque_sp_from_err")] public int? TopDriveTorqueSpFromErr { get; set; } + [Column("top_drive_speed_sp_to"), Comment("Задание скорости на СВП")] public double? TopDriveSpeedSpTo { get; set; } + [Column("top_drive_speed_sp_to_min")] public double? TopDriveSpeedSpToMin { get; set; } + [Column("top_drive_speed_sp_to_max")] public double? TopDriveSpeedSpToMax { get; set; } + [Column("top_drive_speed_sp_to_offset")] public double? TopDriveSpeedSpToOffset { get; set; } + [Column("top_drive_speed_sp_to_err")] public int? TopDriveSpeedSpToErr { get; set; } + [Column("top_drive_torque_sp_to"), Comment("Задание момента на СВП")] public double? TopDriveTorqueSpTo { get; set; } + [Column("top_drive_torque_sp_to_min")] public double? TopDriveTorqueSpToMin { get; set; } + [Column("top_drive_torque_sp_to_max")] public double? TopDriveTorqueSpToMax { get; set; } + [Column("top_drive_torque_sp_to_offset")] public double? TopDriveTorqueSpToOffset { get; set; } + [Column("top_drive_torque_sp_to_err")] public int? TopDriveTorqueSpToErr { get; set; } + [Column("w2800"), Comment("Установка нуля энкодера")] public int? W2800 { get; set; } + [Column("w2810"), Comment(" автоматический сброс блокировки")] public int? W2810 { get; set; } + [Column("mode"), Comment("Выбранный режим управления")] public int? Mode { get; set; } + [Column("w2808"), Comment("Неисправность энкодера")] public int? W2808 { get; set; } + [Column("torque_starting"), Comment(" Страгивающий момент")] public double? TorqueStarting { get; set; } + [Column("rotor_torque_avg"), Comment(" Момент в роторе средний")] public double? RotorTorqueAvg { get; set; } + [Column("encoder_resolution "), Comment(" Разрешение энкодера")] public double? EncoderResolution { get; set; } + [Column("ratio"), Comment(" Коэффициент редукции редектора")] public double? Ratio { get; set; } + [Column("torque_right_limit"), Comment("Ограничение крутящего момента вправо")] public double? TorqueRightLimit { get; set; } + [Column("torque_left_limit"), Comment("Ограничение крутящего момента влево")] public double? TorqueLeftLimit { get; set; } + [Column("revols_right_limit"), Comment("Ограничение числа оборотов вправо")] public double? RevolsRightLimit { get; set; } + [Column("revols_left_limit"), Comment("Ограничение числа оборотов влево")] public double? RevolsLeftLimit { get; set; } + [Column("speed_right_sp"), Comment("Заданная скорость вращения вправо")] public double? SpeedRightSp { get; set; } + [Column("speed_left_sp"), Comment("Заданная скорость вращения влево")] public double? SpeedLeftSp { get; set; } + [Column("revols_right_total"), Comment("Суммарное количество оборотов вправо")] public double? RevolsRightTotal { get; set; } + [Column("revols_left_total"), Comment("Суммарное количество оборотов влево")] public double? RevolsLeftTotal { get; set; } + [Column("turn_right_once_by_torque"), Comment("Доворот по моменту единожды вправо")] public double? TurnRightOnceByTorque { get; set; } + [Column("turn_left_once_by_torque"), Comment("Доворот по моменту единожды влево")] public double? TurnLeftOnceByTorque { get; set; } + [Column("turn_right_once_by_angle"), Comment("Доворот по градусам единожды вправо")] public double? TurnRightOnceByAngle { get; set; } + [Column("turn_left_once_by_angle"), Comment("Доворот по градусам единожды влево")] public double? TurnLeftOnceByAngle { get; set; } + [Column("turn_right_once_by_revols"), Comment("Доворот по оборотам единожды вправо")] public double? TurnRightOnceByRevols { get; set; } + [Column("turn_left_once_by_revols"), Comment("Доворот по оборотам единожды влево")] public double? TurnLeftOnceByRevols { get; set; } + [Column("break_angle_k"), Comment("Коэффициент для расчёта за какой угол нужно тормозить")] public double? BreakAngleK { get; set; } + [Column("reverse_k_torque"), Comment("Коэффициент на который умножается момент, для того чтобы система поняла что мы движемся в обратную сторону")] public double? ReverseKTorque { get; set; } + [Column("position_zero"), Comment("Нулевая позиция осциляции")] public double? PositionZero { get; set; } + [Column("position_right"), Comment("Крайний правый угол осциляции")] public double? PositionRight { get; set; } + [Column("torque_ramp_time"), Comment("Время нарастания момента")] public double? TorqueRampTime { get; set; } + [Column("ver"), Comment("Версия ПО ПЛК")] public double? Ver { get; set; } + [Column("reverse_speed_sp_zero_time"), Comment("Время выдачи сигнала нулевой скорости на при смене направления")] public int? ReverseSpeedSpZeroTime { get; set; } + [Column("unlock_by_sector_out"), Comment(" Градус отклонения от сектора для автоматического сброса блокировки")] public double? UnlockBySectorOut { get; set; } + [Column("pid_mux_torque_left_limit"), Comment(" Момент при котором определяется ехать назад по моменту или по скорости")] public double? PidMuxTorqueLeftLimit { get; set; } + [Column("state"), Comment("Переменная этапа")] public int? State { get; set; } + [Column("break_angle_left"), Comment("Угол торможения влево при работе по моменту")] public double? BreakAngleLeft { get; set; } + + [JsonIgnore] + [ForeignKey(nameof(IdTelemetry))] + [InverseProperty(nameof(Model.Telemetry.DataSpin))] + public virtual Telemetry Telemetry { get; set; } + } +} diff --git a/AsbCloudDb/Readme.md b/AsbCloudDb/Readme.md index d11f34a0..6eb81615 100644 --- a/AsbCloudDb/Readme.md +++ b/AsbCloudDb/Readme.md @@ -7,6 +7,7 @@ dotnet ef migrations add --project AsbCloudDb dotnet ef migrations remvoe --project AsbCloudDb ``` - Name of migration class +После создания миграции обязательно прочитать сгенерированый код. Применить миграции ``` diff --git a/AsbCloudInfrastructure/ReportDataSourcePgCloud.cs b/AsbCloudInfrastructure/ReportDataSourcePgCloud.cs index ddaca704..ecb4285f 100644 --- a/AsbCloudInfrastructure/ReportDataSourcePgCloud.cs +++ b/AsbCloudInfrastructure/ReportDataSourcePgCloud.cs @@ -67,7 +67,7 @@ namespace AsbSaubReport var messagesMinDate = messagesQuery.Min(e => e.Date); var messagesMaxDate = messagesQuery.Max(e => e.Date); - var dataQuery = from item in context.DataSaubBases + var dataQuery = from item in context.TelemetryDataSaub where item.IdTelemetry == idTelemetry select item; @@ -85,7 +85,7 @@ namespace AsbSaubReport } public IQueryable GetDataSaubItems(DateTime begin, DateTime end) - => from item in context.DataSaubBases + => from item in context.TelemetryDataSaub where item.IdTelemetry == idTelemetry && item.Date >= begin && item.Date <= end diff --git a/AsbCloudInfrastructure/Services/DataService.cs b/AsbCloudInfrastructure/Services/DataService.cs index 277f0a1d..01153242 100644 --- a/AsbCloudInfrastructure/Services/DataService.cs +++ b/AsbCloudInfrastructure/Services/DataService.cs @@ -32,7 +32,7 @@ namespace AsbCloudInfrastructure.Services cacheWells = cacheDb.GetCachedTable((AsbCloudDbContext)db); } - public async Task> GetAsync(int idWell, + public async Task> GetAsync(int idWell, DateTime dateBegin = default, double intervalSec = 600d, int approxPointsCount = 1024, CancellationToken token = default) { @@ -49,7 +49,7 @@ namespace AsbCloudInfrastructure.Services var datEnd = dateBegin.AddSeconds(intervalSec); - var query = from data in db.DataSaubBases + var query = from data in db.TelemetryDataSaub where data.IdTelemetry == telemetry.Id && data.Date >= dateBegin && data.Date < datEnd select data; @@ -70,12 +70,12 @@ namespace AsbCloudInfrastructure.Services var entities = await query.AsNoTracking() .ToListAsync(token).ConfigureAwait(false); - var dtos = entities.Adapt(); + var dtos = entities.Adapt(); return dtos; } - public async Task UpdateDataAsync(string uid, IEnumerable dtos, + public async Task UpdateDataAsync(string uid, IEnumerable dtos, CancellationToken token = default) { if (dtos == default || !dtos.Any()) @@ -85,7 +85,7 @@ namespace AsbCloudInfrastructure.Services var dtoMinDate = dtos.Min(d => d.Date); var dtoMaxDate = dtos.Max(d => d.Date); - var oldDataSaubBase = await (from d in db.DataSaubBases + var oldDataSaubBase = await (from d in db.TelemetryDataSaub where d.IdTelemetry == telemetryId && d.Date > dtoMinDate && d.Date < dtoMaxDate @@ -94,17 +94,17 @@ namespace AsbCloudInfrastructure.Services .ConfigureAwait(false); if (oldDataSaubBase.Any()) - db.DataSaubBases.RemoveRange(oldDataSaubBase); + db.TelemetryDataSaub.RemoveRange(oldDataSaubBase); foreach (var dto in dtos) { - var dataSaub = dto.Adapt(); + var dataSaub = dto.Adapt(); var telemetryUser = await cacheTelemetryUsers .FirstOrDefaultAsync(u => u.IdTelemetry == telemetryId && (u.Name == dto.User || u.Surname == dto.User), token) .ConfigureAwait(false); dataSaub.IdUser = telemetryUser?.IdUser; dataSaub.IdTelemetry = telemetryId; - db.DataSaubBases.Add(dataSaub); + db.TelemetryDataSaub.Add(dataSaub); dto.IdTelemetry = telemetryId; analyticsService.SaveAnalytics(dto); @@ -120,7 +120,7 @@ namespace AsbCloudInfrastructure.Services if (telemetryId is null) return null; - var (From, To) = await db.GetDatesRangeAsync((int)telemetryId, token) + var (From, To) = await db.GetDatesRangeAsync((int)telemetryId, token) .ConfigureAwait(false); return new DatesRangeDto { From = From, To = To }; diff --git a/AsbCloudInfrastructure/Services/ReportService.cs b/AsbCloudInfrastructure/Services/ReportService.cs index 9d86141e..bb62d1cf 100644 --- a/AsbCloudInfrastructure/Services/ReportService.cs +++ b/AsbCloudInfrastructure/Services/ReportService.cs @@ -122,7 +122,7 @@ namespace AsbCloudInfrastructure.Services if (telemetryId is null) return null; - var datesRange = await (from d in db.DataSaubBases + var datesRange = await (from d in db.TelemetryDataSaub where d.IdTelemetry == telemetryId select d.Date).Union( from m in db.TelemetryMessages diff --git a/AsbCloudInfrastructure/Services/SaubDataCache.cs b/AsbCloudInfrastructure/Services/SaubDataCache.cs index 264dc6fc..29278925 100644 --- a/AsbCloudInfrastructure/Services/SaubDataCache.cs +++ b/AsbCloudInfrastructure/Services/SaubDataCache.cs @@ -8,18 +8,18 @@ namespace AsbCloudInfrastructure.Services { public TelemetryAnalysisDto CurrentAnalysis { get; set; } - private readonly Dictionary> saubData = - new Dictionary>(); + private readonly Dictionary> saubData = + new Dictionary>(); - public IEnumerable GetOrCreateCache(int telemetryId) + public IEnumerable GetOrCreateCache(int telemetryId) { if (!saubData.ContainsKey(telemetryId)) - saubData[telemetryId] = new List(); + saubData[telemetryId] = new List(); return saubData[telemetryId]; } - public void AddData(DataSaubBaseDto data) + public void AddData(TelemetryDataSaubDto data) { GetOrCreateCache(data.IdTelemetry); diff --git a/AsbCloudInfrastructure/Services/TelemetryAnalyticsService.cs b/AsbCloudInfrastructure/Services/TelemetryAnalyticsService.cs index 945a15e3..5c5b93fb 100644 --- a/AsbCloudInfrastructure/Services/TelemetryAnalyticsService.cs +++ b/AsbCloudInfrastructure/Services/TelemetryAnalyticsService.cs @@ -39,7 +39,7 @@ namespace AsbCloudInfrastructure.Services if (telemetryId is null) return null; - var depthToTimeData = (from d in db.DataSaubBases + var depthToTimeData = (from d in db.TelemetryDataSaub where d.IdTelemetry == telemetryId select new { @@ -231,7 +231,7 @@ namespace AsbCloudInfrastructure.Services return groupedOperationsList; } - public void SaveAnalytics(DataSaubBaseDto dataSaubDto) + public void SaveAnalytics(TelemetryDataSaubDto dataSaubDto) { saubDataCache.AddData(dataSaubDto); @@ -387,7 +387,7 @@ namespace AsbCloudInfrastructure.Services return groupedOperationsList; } - private TelemetryAnalysisDto GetDrillingAnalysis(IEnumerable dataSaubBases) + private TelemetryAnalysisDto GetDrillingAnalysis(IEnumerable dataSaubBases) { var lastSaubDate = dataSaubBases.Last().Date; diff --git a/AsbCloudWebApi/Controllers/DataController.cs b/AsbCloudWebApi/Controllers/DataController.cs index ec534106..77ffbbc2 100644 --- a/AsbCloudWebApi/Controllers/DataController.cs +++ b/AsbCloudWebApi/Controllers/DataController.cs @@ -38,7 +38,7 @@ namespace AsbCloudWebApi.Controllers /// Токен завершения задачи /// [HttpGet] - [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] + [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] public async Task GetDataAsync(int idWell, DateTime begin = default, int intervalSec = 600, int approxPointsCount = 1024, CancellationToken token = default) { diff --git a/AsbCloudWebApi/Controllers/TelemetryController.cs b/AsbCloudWebApi/Controllers/TelemetryController.cs index 0430abea..709db782 100644 --- a/AsbCloudWebApi/Controllers/TelemetryController.cs +++ b/AsbCloudWebApi/Controllers/TelemetryController.cs @@ -67,7 +67,7 @@ namespace AsbCloudWebApi.Controllers /// [HttpPost] [Route("{uid}/data")] - public async Task PostDataAsync(string uid, [FromBody] IEnumerable dtos, + public async Task PostDataAsync(string uid, [FromBody] IEnumerable dtos, CancellationToken token = default) { var idWell = telemetryService.GetidWellByTelemetryUid(uid); diff --git a/AsbCloudWebApi/Controllers/TelemetryDataBaseController.cs b/AsbCloudWebApi/Controllers/TelemetryDataBaseController.cs new file mode 100644 index 00000000..91a65af2 --- /dev/null +++ b/AsbCloudWebApi/Controllers/TelemetryDataBaseController.cs @@ -0,0 +1,96 @@ +using AsbCloudApp.Data; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudWebApi.Controllers +{ + [ApiController] + [Authorize] + [Route("api/[controller]")] + public abstract class TelemetryDataBaseController : ControllerBase + { + + /// + /// Принимает данные от разных систем по скважине + /// + /// Уникальный идентификатор отправителя + /// Данные + /// Токен для отмены задачи + /// + [HttpPost] + [Route("{uid}")] + public virtual async Task PostDataAsync(string uid, [FromBody] IEnumerable dtos, + CancellationToken token = default) + { + //var idWell = telemetryService.GetidWellByTelemetryUid(uid); + //await DataService.UpdateDataAsync(uid, dtos, token).ConfigureAwait(false); + + //if (idWell != null && dtos.Any()) + // await Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}") + // .SendAsync(nameof(ITelemetryHubClient.ReceiveDataSaub), dtos), token).ConfigureAwait(false); + + //telemetryTracker.SaveRequestDate(uid); + return Ok(); + } + + /// + /// Возвращает данные САУБ по скважине. + /// По умолчанию за последние 10 минут. + /// + /// id скважины + /// дата начала выборки. По умолчанию: текущее время - intervalSec + /// интервал времени даты начала выборки, секунды + /// желаемое количество точек. Если в выборке точек будет больше, то выборка будет прорежена. + /// Токен завершения задачи + /// + [HttpGet("{idWell}")] + //[ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] + public virtual async Task GetDataAsync(int idWell, DateTime begin = default, + int intervalSec = 600, int approxPointsCount = 1024, CancellationToken token = default) + { + //if (begin == default) + // begin = DateTime.Now.AddSeconds(-intervalSec); + //var content = await telemetryDataService.GetAsync(idWell, begin, + // intervalSec, approxPointsCount, token).ConfigureAwait(false); + + //if (content is null || !content.Any()) + // return NoContent(); + + return Ok(null); + } + + /// + /// Возвращает диапазон дат сохраненных данных. + /// + /// id скважины + /// Токен завершения задачи + /// + [HttpGet] + [Route("{idWell}/datesRange")] + [ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)] + public virtual async Task GetDataDatesRangeAsync(int idWell, + CancellationToken token = default) + { + //int? idCompany = User.GetCompanyId(); + + //if (idCompany is null) + // return Forbid(); + + //bool isCompanyOwnsWell = await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, + // idWell, token).ConfigureAwait(false); + + //if (!isCompanyOwnsWell) + // return Forbid(); + + //DatesRangeDto dataDatesRange = await telemetryDataService.GetDataDatesRangeAsync(idWell, + // token).ConfigureAwait(false); + + return Ok(null); + } + + } +} diff --git a/AsbCloudWebApi/Controllers/TelemetryDataSaub.cs b/AsbCloudWebApi/Controllers/TelemetryDataSaub.cs new file mode 100644 index 00000000..a8ac9838 --- /dev/null +++ b/AsbCloudWebApi/Controllers/TelemetryDataSaub.cs @@ -0,0 +1,16 @@ +using AsbCloudApp.Data; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace AsbCloudWebApi.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class TelemetryDataSaub : TelemetryDataBaseController + { + } +} diff --git a/AsbCloudWebApi/Controllers/TelemetryDataSpin.cs b/AsbCloudWebApi/Controllers/TelemetryDataSpin.cs new file mode 100644 index 00000000..179fb52a --- /dev/null +++ b/AsbCloudWebApi/Controllers/TelemetryDataSpin.cs @@ -0,0 +1,11 @@ +using AsbCloudApp.Data; +using Microsoft.AspNetCore.Mvc; + +namespace AsbCloudWebApi.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class TelemetryDataSpin : TelemetryDataBaseController + { + } +} diff --git a/AsbCloudWebApi/SignalR/ITelemetryHubClient.cs b/AsbCloudWebApi/SignalR/ITelemetryHubClient.cs index e566eefb..a568279a 100644 --- a/AsbCloudWebApi/SignalR/ITelemetryHubClient.cs +++ b/AsbCloudWebApi/SignalR/ITelemetryHubClient.cs @@ -6,7 +6,7 @@ namespace AsbCloudWebApi.SignalR { public interface ITelemetryHubClient { - Task ReceiveDataSaub(IEnumerable dtos); + Task ReceiveDataSaub(IEnumerable dtos); Task ReceiveMessages(IEnumerable dtos); } diff --git a/AsbCloudWebApi/SignalR/TelemetryHub.cs b/AsbCloudWebApi/SignalR/TelemetryHub.cs index 59ae127d..e67417c3 100644 --- a/AsbCloudWebApi/SignalR/TelemetryHub.cs +++ b/AsbCloudWebApi/SignalR/TelemetryHub.cs @@ -18,7 +18,7 @@ namespace AsbCloudWebApi.SignalR public Task RemoveFromGroup(string groupName) => Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName); - public Task SendDataSaub(string groupName, IEnumerable data) + public Task SendDataSaub(string groupName, IEnumerable data) => Clients.Group(groupName).ReceiveDataSaub(data); }