diff --git a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs deleted file mode 100644 index ea2555a8..00000000 --- a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace AsbCloudApp.Data.ProcessMaps; - -/// -/// РТК план бурение скважины -/// -public class ProcessMapPlanDrillingDto : ProcessMapPlanBaseDto -{ - /// - /// Id режима 1-ротор, 2 - слайд - /// - [Range(1, 2, ErrorMessage = "Id режима должен быть либо 1-ротор либо 2-слайд")] - public int IdMode { get; set; } - - /// - /// Название режима бурения - /// - public string? Mode { get; set; } - - /// - /// Осевая нагрузка, т план - /// - [Range(0, 99999.9, ErrorMessage = "Осевая нагрузка, т должна быть в пределах от 0 до 99999.9")] - public double AxialLoadPlan { get; set; } - - /// - /// Осевая нагрузка, т ограничение - /// - [Range(0, 99999.9, ErrorMessage = "Осевая нагрузка, т должна быть в пределах от 0 до 99999.9")] - public double AxialLoadLimitMax { get; set; } - - /// - /// Перепад давления, атм план - /// - [Range(0, 99999.9, ErrorMessage = "Перепад давления, атм должна быть в пределах от 0 до 99999.9")] - public double DeltaPressurePlan { get; set; } - - /// - /// Перепад давления, атм ограничение - /// - [Range(0, 99999.9, ErrorMessage = "Перепад давления, атм должна быть в пределах от 0 до 99999.9")] - public double DeltaPressureLimitMax { get; set; } - - /// - /// Момент на ВСП, кН*м план - /// - [Range(0, 99999.9, ErrorMessage = "Момент на ВСП, кН*м должна быть в пределах от 0 до 99999.9")] - public double TopDriveTorquePlan { get; set; } - - /// - /// Момент на ВСП, кН*м ограничение - /// - [Range(0, 99999.9, ErrorMessage = "Момент на ВСП, кН*м должна быть в пределах от 0 до 99999.9")] - public double TopDriveTorqueLimitMax { get; set; } - - /// - /// Обороты на ВСП, об/мин план - /// - [Range(0, 99999.9, ErrorMessage = "Обороты на ВСП, об/мин должна быть в пределах от 0 до 99999.9")] - public double TopDriveSpeedPlan { get; set; } - - /// - /// Обороты на ВСП, об/мин ограничение - /// - [Range(0, 99999.9, ErrorMessage = "Обороты на ВСП, об/мин должна быть в пределах от 0 до 99999.9")] - public double TopDriveSpeedLimitMax { get; set; } - - /// - /// Расход, л/с план - /// - [Range(0, 99999.9, ErrorMessage = "Расход, л/с должна быть в пределах от 0 до 99999.9")] - public double FlowPlan { get; set; } - - /// - /// Расход, л/с ограничение - /// - [Range(0, 99999.9, ErrorMessage = "Расход, л/с должна быть в пределах от 0 до 99999.9")] - public double FlowLimitMax { get; set; } - - /// - /// Плановая механическая скорость, м/ч - /// - [Range(0, 99999.9, ErrorMessage = "Плановая механическая скорость, м/ч должно быть в пределах от 0 до 99999.9")] - public double RopPlan { get; set; } - - /// - /// Плановый процент использования АКБ - /// - [Range(0, 100, ErrorMessage = "Процент использования АКБ должен быть в пределах от 0 до 100")] - public double UsageSaub { get; set; } - - /// - /// Плановый процент использования spin master - /// - [Range(0, 100, ErrorMessage = "Процент использования spin master должен быть в пределах от 0 до 100")] - public double UsageSpin { get; set; } - - /// - /// Комментарий - /// - public string Comment { get; set; } = string.Empty; -} \ No newline at end of file diff --git a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanRotorDto.cs b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanRotorDto.cs new file mode 100644 index 00000000..eb3640dd --- /dev/null +++ b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanRotorDto.cs @@ -0,0 +1,88 @@ +using System.ComponentModel.DataAnnotations; + +namespace AsbCloudApp.Data.ProcessMaps; + +/// +/// РТК план бурение скважины в роторе +/// +public class ProcessMapPlanRotorDto : ProcessMapPlanBaseDto +{ + /// + /// Максимально допустимая скорость, м/ч + /// + [Range(0, 800.0, ErrorMessage = "Максимально допустимая скорость, м/ч., должно быть в пределах от 0 до 800.0")] + public double RopLimitMax { get; set; } + + /// + /// Максимально допустимое давление, атм + /// + [Range(0.0, 400.0, ErrorMessage = "Максимально допустимое давление, атм., должно быть в пределах от 0 до 400.0")] + public double PressureLimitMax { get; set; } + + /// + /// Перепад давления, атм. Уставка + /// + [Range(0.0, 60.0, ErrorMessage = "Перепад давления, атм., уставка, должно быть в пределах от 0 до 60.0")] + public double DifferentialPressure { get; set; } + + /// + /// Перепад давления, атм. Ограничение + /// + [Range(0.0, 60.0, ErrorMessage = "Перепад давления, атм., ограничение, должно быть в пределах от 0 до 60.0")] + public double DifferentialPressureLimitMax { get; set; } + + /// + /// Нагрузка, т. Уставка + /// + [Range(0.0, 99.0, ErrorMessage = "Нагрузка, т., уставка, должно быть в пределах от 0 до 99.0")] + public double WeightOnBit { get; set; } + + /// + /// Нагрузка, т. Ограничение + /// + [Range(0.0, 99.0, ErrorMessage = "Нагрузка, т., ограничение, должно быть в пределах от 0 до 99.0")] + public double WeightOnBitLimitMax { get; set; } + + /// + /// Момент на ВСП, кН*м. Уставка + /// + [Range(0.0, 35.0, ErrorMessage = "Момент на ВСП, кН*м., уставка, должно быть в пределах от 0 до 35.0")] + public double TopDriveTorque { get; set; } + + /// + /// Момент на ВСП, кН*м. Ограничение + /// + [Range(0.0, 35.0, ErrorMessage = "Момент на ВСП, кН*м., ограничение, должно быть в пределах от 0 до 35.0")] + public double TopDriveTorqueLimit { get; set; } + + /// + /// Обороты на ВСП, об/мин. Уставка + /// + [Range(0.0, 270.0, ErrorMessage = "Обороты на ВСП, об/мин., уставка, должно быть в пределах от 0 до 270.0")] + public double RevolutionsPerMinute { get; set; } + + /// + /// Обороты на ВСП, об/мин. Ограничение + /// + [Range(0.0, 270.0, ErrorMessage = "Обороты на ВСП, об/мин., ограничение, должно быть в пределах от 0 до 270.0")] + public double RevolutionsPerMinuteLimitMax { get; set; } + + /// + /// Расход л/с. Уставка + /// + [Range(0.0, 100.0, ErrorMessage = "Расход л/с., уставка, должно быть в пределах от 0 до 100.0")] + public double FlowRate { get; set; } + + /// + /// Расход л/с. Ограничение + /// + [Range(0.0, 100.0, ErrorMessage = "Расход л/с., ограничение, должно быть в пределах от 0 до 100.0")] + public double FlowRateLimitMax { get; set; } + + /// + /// Примечание + /// + [StringLength(1024, ErrorMessage = "Примечание, не должно превышать 1024 символов")] + public string Note { get; set; } = string.Empty; + +} \ No newline at end of file diff --git a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanSlideDto.cs b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanSlideDto.cs new file mode 100644 index 00000000..617b5f46 --- /dev/null +++ b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanSlideDto.cs @@ -0,0 +1,75 @@ +using System.ComponentModel.DataAnnotations; + +namespace AsbCloudApp.Data.ProcessMaps; + +/// +/// РТК план бурение скважины в слайде +/// +public class ProcessMapPlanSlideDto : ProcessMapPlanBaseDto +{ + /// + /// Максимально допустимая скорость, м/ч + /// + [Range(0, 800.0, ErrorMessage = "Максимально допустимая скорость, м/ч., должно быть в пределах от 0 до 800.0")] + public double RopLimitMax { get; set; } + + /// + /// Максимально допустимое давление, атм + /// + [Range(0, 400.0, ErrorMessage = "Максимально допустимое давление, атм., должно быть в пределах от 0 до 400.0")] + public double PressureLimitMax { get; set; } + + /// + /// Перепад давления, атм. Уставка + /// + [Range(0, 60.0, ErrorMessage = "Перепад давления, атм. уставка, должно быть в пределах от 0 до 60.0")] + public double DifferentialPressure { get; set; } + + /// + /// Перепад давления, атм. Ограничение + /// + [Range(0, 60.0, ErrorMessage = "Перепад давления, атм., ограничение, должно быть в пределах от 0 до 60.0")] + public double DifferentialPressureLimitMax { get; set; } + + /// + /// Нагрузка, т. Уставка + /// + [Range(0, 50.0, ErrorMessage = " Нагрузка, т., уставка, должно быть в пределах от 0 до 50.0")] + public double WeightOnBit { get; set; } + + /// + /// Нагрузка, т. Ограничение + /// + [Range(0, 50.0, ErrorMessage = "Нагрузка, т., ограничение, должно быть в пределах от 0 до 50.0")] + public double WeightOnBitLimitMax { get; set; } + + /// + /// Расход л/с. Уставка + /// + [Range(0, 100.0, ErrorMessage = "Расход, л/с., уставка, должно быть в пределах от 0 до 50.0")] + public double FlowRate { get; set; } + + /// + /// Расход л/с. Ограничение + /// + [Range(0, 100.0, ErrorMessage = "Расход, л/с., ограничение, должно быть в пределах от 0 до 100.0")] + public double FlowRateLimitMax { get; set; } + + /// + /// Расчётная пружина, градус + /// + [Range(0, 9999.9, ErrorMessage = "Расчётная пружина, градус, должно быть в пределах от 0 до 9999.9")] + public double Spring { get; set; } + + /// + /// Складывание инструмента, м + /// + [Range(0, 9999.9, ErrorMessage = "Складывание инструмента, м, должно быть в пределах от 0 до 9999.9")] + public double ToolBuckling { get; set; } + + /// + /// Примечание + /// + [StringLength(1024, ErrorMessage = "Примечание, не должно превышать 1024 символов")] + public string Note { get; set; } = string.Empty; +} \ No newline at end of file diff --git a/AsbCloudApp/Repositories/IWellCompositeRepository.cs b/AsbCloudApp/Repositories/IWellCompositeRepository.cs index f5a5101a..148109f7 100644 --- a/AsbCloudApp/Repositories/IWellCompositeRepository.cs +++ b/AsbCloudApp/Repositories/IWellCompositeRepository.cs @@ -34,6 +34,6 @@ namespace AsbCloudApp.Repositories /// /// /// - Task> GetCompositeProcessMap(int idWell, CancellationToken token); + Task> GetCompositeProcessMap(int idWell, CancellationToken token); } } diff --git a/AsbCloudDb/Migrations/20240613110103_Add_ProcessMapPlanRotor_And_Slide.Designer.cs b/AsbCloudDb/Migrations/20240613110103_Add_ProcessMapPlanRotor_And_Slide.Designer.cs new file mode 100644 index 00000000..fbd287fc --- /dev/null +++ b/AsbCloudDb/Migrations/20240613110103_Add_ProcessMapPlanRotor_And_Slide.Designer.cs @@ -0,0 +1,9765 @@ +// +using System; +using System.Text.Json; +using AsbCloudDb.Model; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace AsbCloudDb.Migrations +{ + [DbContext(typeof(AsbCloudDbContext))] + [Migration("20240613110103_Add_ProcessMapPlanRotor_And_Slide")] + partial class Add_ProcessMapPlanRotor_And_Slide + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseCollation("Russian_Russia.1251") + .HasAnnotation("ProductVersion", "8.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "adminpack"); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("AsbCloudDb.Model.Cluster", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.Property("IdDeposit") + .HasColumnType("integer") + .HasColumnName("id_deposit"); + + b.Property("Latitude") + .HasColumnType("double precision") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double precision") + .HasColumnName("longitude"); + + b.Property("Timezone") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("timezone") + .HasComment("Смещение часового пояса от UTC"); + + b.HasKey("Id"); + + b.HasIndex("IdDeposit"); + + b.ToTable("t_cluster", t => + { + t.HasComment("Кусты"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.Property("IdCompanyType") + .HasMaxLength(255) + .HasColumnType("integer") + .HasColumnName("id_company_type") + .HasComment("вид деятельности"); + + b.HasKey("Id"); + + b.HasIndex("IdCompanyType"); + + b.ToTable("t_company"); + + b.HasData( + new + { + Id = 1, + Caption = "ООО \"АСБ\"", + IdCompanyType = 3 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.CompanyType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.Property("IsContact") + .HasColumnType("boolean") + .HasColumnName("is_contact"); + + b.Property("Order") + .HasColumnType("integer") + .HasColumnName("order"); + + b.HasKey("Id"); + + b.ToTable("t_company_type"); + + b.HasData( + new + { + Id = 1, + Caption = "Недропользователь", + IsContact = true, + Order = 3 + }, + new + { + Id = 2, + Caption = "Буровой подрядчик", + IsContact = true, + Order = 2 + }, + new + { + Id = 3, + Caption = "Сервис автоматизации бурения", + IsContact = true, + Order = 0 + }, + new + { + Id = 4, + Caption = "Сервис по ГТИ", + IsContact = true, + Order = 6 + }, + new + { + Id = 5, + Caption = "Растворный сервис", + IsContact = true, + Order = 4 + }, + new + { + Id = 6, + Caption = "Сервис по ННБ", + IsContact = true, + Order = 5 + }, + new + { + Id = 7, + Caption = "Служба супервайзинга", + IsContact = false, + Order = 1 + }, + new + { + Id = 9, + Caption = "Сервис по цементированию", + IsContact = true, + Order = 7 + }, + new + { + Id = 11, + Caption = "Дизельный сервис", + IsContact = false, + Order = 9 + }, + new + { + Id = 12, + Caption = "Сервис по обслуживанию верхних силовых приводов", + IsContact = true, + Order = 8 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Contact", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Company") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("company") + .HasComment("компания"); + + b.Property("Email") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("email") + .HasComment("email"); + + b.Property("FullName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("full_name") + .HasComment("ФИО"); + + b.Property("IdCompanyType") + .HasMaxLength(255) + .HasColumnType("integer") + .HasColumnName("id_company_type") + .HasComment("вид деятельности"); + + b.Property("IdWell") + .HasMaxLength(255) + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("ключ скважины"); + + b.Property("Phone") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("phone") + .HasComment("номер телефона"); + + b.Property("Position") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("position") + .HasComment("должность"); + + b.HasKey("Id"); + + b.HasIndex("IdCompanyType"); + + b.HasIndex("IdWell"); + + b.ToTable("t_contact", t => + { + t.HasComment("Контакты"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DailyReports.DailyReport", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Date") + .HasColumnType("date") + .HasColumnName("date") + .HasComment("Дата формирования отчёта"); + + b.Property("DateLastUpdate") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_last_update") + .HasComment("Дата последнего обновления"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("ID скважины"); + + b.Property("SignBlock") + .HasColumnType("jsonb") + .HasColumnName("sign_block") + .HasComment("Подпись"); + + b.Property("SubsystemBlock") + .HasColumnType("jsonb") + .HasColumnName("subsystem_block") + .HasComment("Наработкой подсистем"); + + b.Property("TimeBalanceBlock") + .HasColumnType("jsonb") + .HasColumnName("time_balance_block") + .HasComment("Баланс времени"); + + b.HasKey("Id"); + + b.HasIndex("IdWell", "Date") + .IsUnique(); + + b.ToTable("t_daily_report", t => + { + t.HasComment("Ежедневные отчёты"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DataSaubStat", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + 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("BlockSpeedSp") + .HasColumnType("double precision") + .HasColumnName("block_speed_sp") + .HasComment("Ограничение скорости блока"); + + b.Property("DateEnd") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_end") + .HasComment("Дата и время окончания"); + + b.Property("DateStart") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_start") + .HasComment("Дата и время начала"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина забоя по стволу конечная"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Глубина забоя по стволу начальная"); + + b.Property("EnabledSubsystems") + .HasColumnType("integer") + .HasColumnName("enabled_subsystems") + .HasComment("Флаги подсистем"); + + b.Property("Flow") + .HasColumnType("double precision") + .HasColumnName("flow") + .HasComment("Фактический расход"); + + b.Property("HasOscillation") + .HasColumnType("boolean") + .HasColumnName("has_oscillation") + .HasComment("Наличие или отсутствие осцилляции"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("Название автоопределённой операции"); + + b.Property("IdFeedRegulator") + .HasColumnType("smallint") + .HasColumnName("id_feed_regulator") + .HasComment("Работа при достижении ограничения"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry") + .HasComment("Ключ телеметрии"); + + b.Property("Pressure") + .HasColumnType("double precision") + .HasColumnName("pressure") + .HasComment("Давление"); + + b.Property("PressureIdle") + .HasColumnType("double precision") + .HasColumnName("pressure_idle") + .HasComment("Давление холостого хода"); + + b.Property("PressureSp") + .HasColumnType("double precision") + .HasColumnName("pressure_sp") + .HasComment("Ограничение фактического давления"); + + b.Property("RotorSpeed") + .HasColumnType("double precision") + .HasColumnName("rotor_speed") + .HasComment("Фактическая скорость оборотов ВСП"); + + b.Property("RotorTorque") + .HasColumnType("double precision") + .HasColumnName("rotor_torque") + .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("Speed") + .HasColumnType("double precision") + .HasColumnName("speed") + .HasComment("Скорость бурения"); + + b.HasKey("Id"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_data_saub_stat", t => + { + t.HasComment("Кеш-таблица для хранения данных для РТК-отчета"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Deposit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.Property("Latitude") + .HasColumnType("double precision") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double precision") + .HasColumnName("longitude"); + + b.Property("Timezone") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("timezone") + .HasComment("Смещение часового пояса от UTC"); + + b.HasKey("Id"); + + b.ToTable("t_deposit", t => + { + t.HasComment("Месторождение"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DetectedOperation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Creation") + .HasColumnType("timestamp with time zone") + .HasColumnName("creation") + .HasComment("дата создания"); + + b.Property("DateEnd") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_end") + .HasComment("Дата начала операции"); + + b.Property("DateStart") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_start") + .HasComment("Дата начала операции"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина после завершения операции, м"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Глубина на начало операции, м"); + + b.Property("EnabledSubsystems") + .HasColumnType("integer") + .HasColumnName("enabled_subsystems") + .HasComment("флаги включенных подсистем"); + + b.Property("ExtraData") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("extra_data") + .HasComment("доп. инфо по операции"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("Id категории операции"); + + b.Property("IdEditor") + .HasColumnType("integer") + .HasColumnName("id_editor") + .HasComment("Редактор"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdUsersAtStart") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("Id пользователя по телеметрии на момент начала операции"); + + b.Property("Value") + .HasColumnType("double precision") + .HasColumnName("value") + .HasComment("Ключевой показатель операции"); + + b.HasKey("Id"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_detected_operation", t => + { + t.HasComment("автоматически определенные операции по телеметрии"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillTest", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasComment("Идентификатор"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry") + .HasComment("Идентификатор телеметрии"); + + b.Property("DepthStart") + .HasColumnType("real") + .HasColumnName("depthStart") + .HasComment("Глубина начала"); + + b.Property("Params") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("t_drill_test_params") + .HasComment("Параметры записи drill test"); + + b.Property("TimeStampStart") + .HasColumnType("timestamp with time zone") + .HasColumnName("timestamp_start") + .HasComment("Время начала"); + + b.HasKey("Id", "IdTelemetry"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_drill_test", t => + { + t.HasComment("Drill_test"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Driller", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasComment("Идентификатор"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasComment("Имя"); + + b.Property("Patronymic") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("patronymic") + .HasComment("Отчество"); + + b.Property("Surname") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("surname") + .HasComment("Фамилия"); + + b.HasKey("Id"); + + b.ToTable("t_driller", t => + { + t.HasComment("Бурильщик"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillingProgramPart", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IdFileCategory") + .HasColumnType("integer") + .HasColumnName("id_file_category"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well"); + + b.HasKey("Id"); + + b.HasIndex("IdFileCategory"); + + b.HasIndex("IdWell", "IdFileCategory") + .IsUnique(); + + b.ToTable("t_drilling_program_part", t => + { + t.HasComment("части программ бурения"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Faq", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasComment("Идентификатор"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Answer") + .HasColumnType("text") + .HasColumnName("answer") + .HasComment("Текст ответа"); + + b.Property("CounterQuestion") + .HasColumnType("integer") + .HasColumnName("counter_question") + .HasComment("Счетчик повторений вопроса"); + + b.Property("DateAnswer") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_answer") + .HasComment("Дата ответа"); + + b.Property("DateCreatedQuestion") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_created_question") + .HasComment("Дата создания вопроса"); + + b.Property("DateLastEditedQuestion") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_last_edited_question") + .HasComment("Дата последнего редактирования вопроса"); + + b.Property("IdAuthorAnswer") + .HasColumnType("integer") + .HasColumnName("id_author_answer") + .HasComment("id автора ответа"); + + b.Property("IdAuthorQuestion") + .HasColumnType("integer") + .HasColumnName("id_author_question") + .HasComment("id автора вопроса"); + + b.Property("IdReplacementQuestion") + .HasColumnType("integer") + .HasColumnName("id_replacement_question") + .HasComment("Ключ заменяющего вопроса"); + + b.Property("IsFrequently") + .HasColumnType("boolean") + .HasColumnName("is_frequently") + .HasComment("Частый вопрос"); + + b.Property("Question") + .IsRequired() + .HasColumnType("text") + .HasColumnName("question") + .HasComment("Текст вопроса"); + + b.Property("State") + .HasColumnType("integer") + .HasColumnName("state") + .HasComment("Статус вопроса"); + + b.HasKey("Id"); + + b.HasIndex("IdAuthorAnswer"); + + b.HasIndex("IdAuthorQuestion"); + + b.ToTable("t_faq", t => + { + t.HasComment("вопросы пользователей"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название категории"); + + b.Property("ShortName") + .HasColumnType("text") + .HasColumnName("short_name") + .HasComment("Короткое название категории"); + + b.HasKey("Id"); + + b.ToTable("t_file_category", t => + { + t.HasComment("Категории файлов"); + }); + + b.HasData( + new + { + Id = 1, + Name = "Растворный сервис", + ShortName = "fluidService" + }, + new + { + Id = 2, + Name = "Цементирование", + ShortName = "cement" + }, + new + { + Id = 3, + Name = "ННБ", + ShortName = "nnb" + }, + new + { + Id = 4, + Name = "ГТИ", + ShortName = "gti" + }, + new + { + Id = 5, + Name = "Документы по скважине", + ShortName = "wellDocuments" + }, + new + { + Id = 6, + Name = "Супервайзер", + ShortName = "supervisor" + }, + new + { + Id = 7, + Name = "Мастер", + ShortName = "master" + }, + new + { + Id = 8, + Name = "Долотный сервис", + ShortName = "toolService" + }, + new + { + Id = 9, + Name = "Буровой подрядчик", + ShortName = "drillService" + }, + new + { + Id = 10, + Name = "Сервис по заканчиванию скважины", + ShortName = "closingService" + }, + new + { + Id = 12, + Name = "Рапорт", + ShortName = "report" + }, + new + { + Id = 1000, + Name = "Программа бурения" + }, + new + { + Id = 1001, + Name = "Задание от геологов" + }, + new + { + Id = 1002, + Name = "Профиль ствола скважины (ННБ)" + }, + new + { + Id = 1003, + Name = "Технологические расчеты (ННБ)" + }, + new + { + Id = 1004, + Name = "Долотная программа" + }, + new + { + Id = 1005, + Name = "Программа по растворам" + }, + new + { + Id = 1006, + Name = "Программа геофизических исследований" + }, + new + { + Id = 1007, + Name = "Планы спусков обсадных колонн" + }, + new + { + Id = 1008, + Name = "Программы цементирования обсадных колонн" + }, + new + { + Id = 10000, + Name = "Проект на бурение транспортного и горизонтального участков скважины" + }, + new + { + Id = 10001, + Name = "Программа на бурение транспортного и горизонтального участков скважины" + }, + new + { + Id = 10002, + Name = "Акт о начале бурения" + }, + new + { + Id = 10003, + Name = "План работ спуска и цементирования направления" + }, + new + { + Id = 10004, + Name = "Программа цементирования направления" + }, + new + { + Id = 10005, + Name = "Мера обсадных труб (направление)" + }, + new + { + Id = 10006, + Name = "Акт на выполненные работы по цементированию направления" + }, + new + { + Id = 10007, + Name = "Отчет по цементированию направления (график)" + }, + new + { + Id = 10008, + Name = "План работ спуска и цементирования кондуктора" + }, + new + { + Id = 10009, + Name = "Программа цементирования (кондуктор)" + }, + new + { + Id = 10010, + Name = "Мера обсадных труб (кондуктор)" + }, + new + { + Id = 10011, + Name = "Карта крепления кондуктора" + }, + new + { + Id = 10012, + Name = "Акт на выполненные работы по цементированию кондуктора" + }, + new + { + Id = 10013, + Name = "Отчет по цементированию кондуктора (график)" + }, + new + { + Id = 10014, + Name = "Акт о замере расстояния от стола ротора до муфты кондуктора" + }, + new + { + Id = 10015, + Name = "Акт опресовки цементного кольца за кондуктором" + }, + new + { + Id = 10016, + Name = "Акт опресовки ППГ с глухими плашками совместно с кондуктором" + }, + new + { + Id = 10017, + Name = "Акт опресовки ПУГ, ППГ с трубными плашками совместно с кондуктором" + }, + new + { + Id = 10018, + Name = "План работ на крепление обсадной колонны (эк. колонна)" + }, + new + { + Id = 10019, + Name = "Программа цементирования (эк. колонна)" + }, + new + { + Id = 10020, + Name = "Мера труб эксплуатационной колонны" + }, + new + { + Id = 10021, + Name = "Карта по креплению скважины (эк. колонна)" + }, + new + { + Id = 10022, + Name = "Акт на установку пружинных центраторов" + }, + new + { + Id = 10023, + Name = "Отчет по цементированию эксплуатационной колонны (график)" + }, + new + { + Id = 10024, + Name = "Акт на выполненные работы по цементированию эксплуатационной колонны" + }, + new + { + Id = 10025, + Name = "Акт об испытании эк. колонны на герметичность (СТОП)" + }, + new + { + Id = 10026, + Name = "Акт опресовки ППГ с глухими плашками совместно с э/колонной" + }, + new + { + Id = 10027, + Name = "Акт опресовки ПУГ, ППГ с трубными плашками совместно с э/колонной" + }, + new + { + Id = 10028, + Name = "Акт на вскрытие продуктивного пласта" + }, + new + { + Id = 10029, + Name = "Акт замера параметров раствора при бурении горизонтального участка" + }, + new + { + Id = 10030, + Name = "Разрешение на спуск «хвостовика» (телефонограмма)" + }, + new + { + Id = 10031, + Name = "План работ на спуск «хвостовика»" + }, + new + { + Id = 10032, + Name = "Акт готовности бурового и энергетического оборудования к спуску «хвостовика»" + }, + new + { + Id = 10033, + Name = "Акт шаблонировки ствола скважины перед спуском «хвостовика»" + }, + new + { + Id = 10034, + Name = "Мера обсадных труб (хвостовик)" + }, + new + { + Id = 10035, + Name = "Акт выполненных работ по спуску хвостовика с закачкой (нефти, солевого раствора" + }, + new + { + Id = 10036, + Name = "Акт о переводе скважины на тех. воду" + }, + new + { + Id = 10037, + Name = "Акт об окончании бурения" + }, + new + { + Id = 10038, + Name = "Акт на передачу скважины в освоение (КРС)" + }, + new + { + Id = 10039, + Name = "Акт на опресовку межколонного пространства с КРС" + }, + new + { + Id = 10040, + Name = "Акт на сдачу скважины в ЦДНГ" + }, + new + { + Id = 10041, + Name = "Паспорт ОУС (заполняется геологами)" + }, + new + { + Id = 10042, + Name = "Паспорт скважины (заполняется геологами)" + }, + new + { + Id = 10043, + Name = "Фактические данные бурения (вставляются в паспорт скважины)" + }, + new + { + Id = 20000, + Name = "Справки по страницам" + }, + new + { + Id = 30000, + Name = "Инструкции" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IdAuthor") + .HasColumnType("integer") + .HasColumnName("id_author") + .HasComment("Id пользователя, загрузившего файл"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("id категории файла"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("id скважины"); + + b.Property("IsDeleted") + .HasColumnType("boolean") + .HasColumnName("is_deleted") + .HasComment("Удален ли файл"); + + b.Property("Name") + .IsRequired() + .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", t => + { + t.HasComment("Файлы всех категорий"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileMark", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Comment") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("comment") + .HasComment("Комментарий"); + + b.Property("DateCreated") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_created") + .HasComment("Дата совершенного действия"); + + b.Property("IdFile") + .HasColumnType("integer") + .HasColumnName("id_file") + .HasComment("id файла"); + + b.Property("IdMarkType") + .HasColumnType("integer") + .HasColumnName("id_mark_type") + .HasComment("0 - отклонен, 1 - согласован"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("id пользователя"); + + b.Property("IsDeleted") + .HasColumnType("boolean") + .HasColumnName("is_deleted") + .HasComment("Помечен ли файл как удаленный"); + + b.HasKey("Id"); + + b.HasIndex("IdFile"); + + b.HasIndex("IdUser"); + + b.ToTable("t_file_mark", t => + { + t.HasComment("Действия с файлами."); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemFloat", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdRecord") + .HasColumnType("integer") + .HasColumnName("id_record"); + + b.Property("IdItem") + .HasColumnType("integer") + .HasColumnName("id_item"); + + b.Property("DateTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Value") + .HasColumnType("real") + .HasColumnName("value"); + + b.HasKey("IdTelemetry", "IdRecord", "IdItem", "DateTime"); + + b.ToTable("t_wits_float", t => + { + t.HasComment("таблица данных ГТИ с типом значения float"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemInt", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdRecord") + .HasColumnType("integer") + .HasColumnName("id_record"); + + b.Property("IdItem") + .HasColumnType("integer") + .HasColumnName("id_item"); + + b.Property("DateTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Value") + .HasColumnType("integer") + .HasColumnName("value"); + + b.HasKey("IdTelemetry", "IdRecord", "IdItem", "DateTime"); + + b.ToTable("t_wits_int", t => + { + t.HasComment("таблица данных ГТИ с типом значения int"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemString", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdRecord") + .HasColumnType("integer") + .HasColumnName("id_record"); + + b.Property("IdItem") + .HasColumnType("integer") + .HasColumnName("id_item"); + + b.Property("DateTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Value") + .IsRequired() + .HasColumnType("text") + .HasColumnName("value"); + + b.HasKey("IdTelemetry", "IdRecord", "IdItem", "DateTime"); + + b.ToTable("t_wits_string", t => + { + t.HasComment("таблица данных ГТИ с типом значения string"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.HelpPage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("Id категории файла"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название файла"); + + b.Property("Size") + .HasColumnType("bigint") + .HasColumnName("file_size") + .HasComment("Размер файла"); + + b.Property("UrlPage") + .IsRequired() + .HasColumnType("text") + .HasColumnName("url_page") + .HasComment("Url страницы"); + + b.HasKey("Id"); + + b.HasIndex("IdCategory"); + + b.ToTable("t_help_page", t => + { + t.HasComment("Справки"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.LimitingParameter", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateEnd") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_end"); + + b.Property("DateStart") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_start"); + + b.Property("DepthEnd") + .HasColumnType("real") + .HasColumnName("depth_end"); + + b.Property("DepthStart") + .HasColumnType("real") + .HasColumnName("depth_start"); + + b.Property("IdFeedRegulator") + .HasColumnType("smallint") + .HasColumnName("id_feed_regulator"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.HasKey("Id"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_limiting_parameter", t => + { + t.HasComment("Ограничения по параметрам телеметрии"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Manuals.Manual", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateDownload") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_download") + .HasComment("Дата загрузки"); + + b.Property("IdAuthor") + .HasColumnType("integer") + .HasColumnName("id_author") + .HasComment("Id автора"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("Id категории файла"); + + b.Property("IdDirectory") + .HasColumnType("integer") + .HasColumnName("id_directory") + .HasComment("Id директории"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название"); + + b.HasKey("Id"); + + b.HasIndex("IdAuthor"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdDirectory"); + + b.ToTable("t_manual", t => + { + t.HasComment("Инструкции"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Manuals.ManualDirectory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IdParent") + .HasColumnType("integer") + .HasColumnName("id_parent") + .HasComment("Id родительской директории"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название"); + + b.HasKey("Id"); + + b.HasIndex("IdParent"); + + b.ToTable("t_manual_directory", t => + { + t.HasComment("Директория для инструкций"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Measure", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Data") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("data") + .HasComment("Данные таблицы последних данных"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("id категории"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("id скважины"); + + b.Property("IsDeleted") + .HasColumnType("boolean") + .HasColumnName("is_deleted") + .HasComment("Пометка удаленным"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone") + .HasColumnName("timestamp") + .HasComment("время добавления"); + + b.HasKey("Id"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdWell"); + + b.ToTable("t_measure", t => + { + t.HasComment("Таблица c данными для вкладки 'Последние данные'"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.MeasureCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название категории"); + + b.Property("ShortName") + .HasColumnType("text") + .HasColumnName("short_name") + .HasComment("Короткое название категории"); + + b.HasKey("Id"); + + b.ToTable("t_measure_category", t => + { + t.HasComment("Категория последних данных"); + }); + + b.HasData( + new + { + Id = 1, + Name = "Показатели бурового раствора", + ShortName = "Раствор" + }, + new + { + Id = 2, + Name = "Шламограмма", + ShortName = "Шламограмма" + }, + new + { + Id = 3, + Name = "ННБ", + ShortName = "ННБ" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IdNotificationCategory") + .HasColumnType("integer") + .HasColumnName("id_notification_category") + .HasComment("Id категории уведомления"); + + b.Property("IdTransportType") + .HasColumnType("integer") + .HasColumnName("id_transport_type") + .HasComment("Id типа доставки уведомления"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("Id получателя"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text") + .HasColumnName("message") + .HasComment("Сообщение уведомления"); + + b.Property("ReadDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("read_date") + .HasComment("Дата прочтения уведомления"); + + b.Property("RegistrationDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("registration_date") + .HasComment("Дата регистрации уведомления"); + + b.Property("SentDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("sent_date") + .HasComment("Дата отправки уведомления"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text") + .HasColumnName("title") + .HasComment("Заголовок уведомления"); + + b.HasKey("Id"); + + b.HasIndex("IdNotificationCategory"); + + b.HasIndex("IdUser"); + + b.ToTable("t_notification", t => + { + t.HasComment("Уведомления"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.NotificationCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id"); + + b.ToTable("t_notification_category", t => + { + t.HasComment("Категории уведомлений"); + }); + + b.HasData( + new + { + Id = 1, + Name = "Системные уведомления" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.OperationValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasComment("Идентификатор"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Конечная глубина"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Старотовая глубина"); + + b.Property("IdOperationCategory") + .HasColumnType("integer") + .HasColumnName("id_operation_category") + .HasComment("Ид категории операции"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Ид скважины"); + + b.Property("StandardValue") + .HasColumnType("double precision") + .HasColumnName("standard_value") + .HasComment("Нормативный показатель"); + + b.Property("TargetValue") + .HasColumnType("double precision") + .HasColumnName("target_value") + .HasComment("Целевой показатель"); + + b.HasKey("Id"); + + b.HasIndex("IdOperationCategory"); + + b.HasIndex("IdWell"); + + b.ToTable("t_operationvalue", t => + { + t.HasComment("Целевые/нормативные показатели операции"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Permission", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("description") + .HasComment("Краткое описание"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasComment("Название"); + + b.HasKey("Id"); + + b.ToTable("t_permission", t => + { + t.HasComment("Разрешения на доступ к данным"); + }); + + b.HasData( + new + { + Id = 100, + Description = "Разрешение удалять админ. Кусты", + Name = "AdminCluster.delete" + }, + new + { + Id = 101, + Description = "Разрешение редактировать админ. Кусты", + Name = "AdminCluster.edit" + }, + new + { + Id = 102, + Description = "Разрешение просматривать админ. Кусты", + Name = "AdminCluster.get" + }, + new + { + Id = 103, + Description = "Разрешение удалять админ. Компании", + Name = "AdminCompany.delete" + }, + new + { + Id = 104, + Description = "Разрешение редактировать админ. Компании", + Name = "AdminCompany.edit" + }, + new + { + Id = 105, + Description = "Разрешение просматривать админ. Компании", + Name = "AdminCompany.get" + }, + new + { + Id = 106, + Description = "Разрешение удалять админ. Типы компаний", + Name = "AdminCompanyType.delete" + }, + new + { + Id = 107, + Description = "Разрешение редактировать админ. Типы компаний", + Name = "AdminCompanyType.edit" + }, + new + { + Id = 108, + Description = "Разрешение просматривать админ. Типы компаний", + Name = "AdminCompanyType.get" + }, + new + { + Id = 109, + Description = "Разрешение удалять админ. Месторождения", + Name = "AdminDeposit.delete" + }, + new + { + Id = 110, + Description = "Разрешение редактировать админ. Месторождения", + Name = "AdminDeposit.edit" + }, + new + { + Id = 111, + Description = "Разрешение просматривать админ. Месторождения", + Name = "AdminDeposit.get" + }, + new + { + Id = 112, + Description = "Разрешение удалять админ. Разрешения", + Name = "AdminPermission.delete" + }, + new + { + Id = 113, + Description = "Разрешение редактировать админ. Разрешения", + Name = "AdminPermission.edit" + }, + new + { + Id = 114, + Description = "Разрешение просматривать админ. Разрешения", + Name = "AdminPermission.get" + }, + new + { + Id = 115, + Description = "Разрешение удалять админ. Телеметрию", + Name = "AdminTelemetry.delete" + }, + new + { + Id = 116, + Description = "Разрешение редактировать админ. Телеметрию", + Name = "AdminTelemetry.edit" + }, + new + { + Id = 117, + Description = "Разрешение просматривать админ. Телеметрию", + Name = "AdminTelemetry.get" + }, + new + { + Id = 118, + Description = "Разрешение удалять админ. Пользователей", + Name = "AdminUser.delete" + }, + new + { + Id = 119, + Description = "Разрешение редактировать админ. Пользователей", + Name = "AdminUser.edit" + }, + new + { + Id = 120, + Description = "Разрешение просматривать админ. Пользователей", + Name = "AdminUser.get" + }, + new + { + Id = 121, + Description = "Разрешение удалять админ. Роли пользователей", + Name = "AdminUserRole.delete" + }, + new + { + Id = 122, + Description = "Разрешение редактировать админ. Роли пользователей", + Name = "AdminUserRole.edit" + }, + new + { + Id = 123, + Description = "Разрешение просматривать админ. Роли пользователей", + Name = "AdminUserRole.get" + }, + new + { + Id = 124, + Description = "Разрешение удалять админ. Скважины", + Name = "AdminWell.delete" + }, + new + { + Id = 125, + Description = "Разрешение редактировать админ. Скважины", + Name = "AdminWell.edit" + }, + new + { + Id = 126, + Description = "Разрешение просматривать админ. Скважины", + Name = "AdminWell.get" + }, + new + { + Id = 127, + Description = "Разрешение удалять админ. Подсистемы", + Name = "AdminSubsytem.delete" + }, + new + { + Id = 128, + Description = "Разрешение редактировать админ. Подсистемы", + Name = "AdminSubsytem.edit" + }, + new + { + Id = 129, + Description = "Разрешение просматривать админ. Подсистемы", + Name = "AdminSubsytem.get" + }, + new + { + Id = 200, + Description = "Разрешение редактировать 0", + Name = "Auth.edit" + }, + new + { + Id = 201, + Description = "Разрешение просматривать 0", + Name = "Auth.get" + }, + new + { + Id = 202, + Description = "Разрешение просматривать Кусты", + Name = "Cluster.get" + }, + new + { + Id = 203, + Description = "Разрешение просматривать Месторождения", + Name = "Deposit.get" + }, + new + { + Id = 204, + Description = "Разрешение удалять РТК", + Name = "DrillFlowChart.delete" + }, + new + { + Id = 205, + Description = "Разрешение редактировать РТК", + Name = "DrillFlowChart.edit" + }, + new + { + Id = 206, + Description = "Разрешение просматривать РТК", + Name = "DrillFlowChart.get" + }, + new + { + Id = 207, + Description = "Разрешение удалять Программу бурения", + Name = "DrillingProgram.delete" + }, + new + { + Id = 208, + Description = "Разрешение редактировать Программу бурения", + Name = "DrillingProgram.edit" + }, + new + { + Id = 209, + Description = "Разрешение просматривать Программу бурения", + Name = "DrillingProgram.get" + }, + new + { + Id = 210, + Description = "Разрешение удалять Режимы бурения", + Name = "DrillParams.delete" + }, + new + { + Id = 211, + Description = "Разрешение редактировать Режимы бурения", + Name = "DrillParams.edit" + }, + new + { + Id = 212, + Description = "Разрешение просматривать Режимы бурения", + Name = "DrillParams.get" + }, + new + { + Id = 213, + Description = "Разрешение удалять Файлы", + Name = "File.delete" + }, + new + { + Id = 214, + Description = "Разрешение редактировать Файлы", + Name = "File.edit" + }, + new + { + Id = 215, + Description = "Разрешение просматривать Файлы", + Name = "File.get" + }, + new + { + Id = 216, + Description = "Разрешение удалять Измерения", + Name = "Measure.delete" + }, + new + { + Id = 217, + Description = "Разрешение редактировать Измерения", + Name = "Measure.edit" + }, + new + { + Id = 218, + Description = "Разрешение просматривать Измерения", + Name = "Measure.get" + }, + new + { + Id = 219, + Description = "Разрешение просматривать Сообщения телеметрии", + Name = "Message.get" + }, + new + { + Id = 220, + Description = "Разрешение просматривать Статистику по операциям", + Name = "OperationStat.get" + }, + new + { + Id = 221, + Description = "Разрешение редактировать Рапорта", + Name = "Report.edit" + }, + new + { + Id = 222, + Description = "Разрешение просматривать Рапорта", + Name = "Report.get" + }, + new + { + Id = 223, + Description = "Разрешение просматривать админ. Системная статистика", + Name = "RequestTracker.get" + }, + new + { + Id = 224, + Description = "Разрешение удалять Рекомендации уставок", + Name = "Setpoints.delete" + }, + new + { + Id = 225, + Description = "Разрешение редактировать Рекомендации уставок", + Name = "Setpoints.edit" + }, + new + { + Id = 226, + Description = "Разрешение просматривать Рекомендации уставок", + Name = "Setpoints.get" + }, + new + { + Id = 227, + Description = "Разрешение редактировать Телеметрии", + Name = "Telemetry.edit" + }, + new + { + Id = 228, + Description = "Разрешение просматривать Анализ телеметрии", + Name = "TelemetryAnalytics.get" + }, + new + { + Id = 229, + Description = "Разрешение редактировать Данные телеметрии по САУБ", + Name = "TelemetryDataSaub.edit" + }, + new + { + Id = 230, + Description = "Разрешение просматривать Данные телеметрии по САУБ", + Name = "TelemetryDataSaub.get" + }, + new + { + Id = 231, + Description = "Разрешение редактировать Данные телеметрии по SpinMaster", + Name = "TelemetryDataSpin.edit" + }, + new + { + Id = 232, + Description = "Разрешение просматривать Данные телеметрии по SpinMaster", + Name = "TelemetryDataSpin.get" + }, + new + { + Id = 233, + Description = "Разрешение редактировать Скважины", + Name = "Well.edit" + }, + new + { + Id = 234, + Description = "Разрешение просматривать Скважины", + Name = "Well.get" + }, + new + { + Id = 235, + Description = "Разрешение редактировать Композитные скважины", + Name = "WellComposite.edit" + }, + new + { + Id = 236, + Description = "Разрешение просматривать Композитные скважины", + Name = "WellComposite.get" + }, + new + { + Id = 237, + Description = "Разрешение удалять Операции по скважинам", + Name = "WellOperation.delete" + }, + new + { + Id = 238, + Description = "Разрешение редактировать Операции по скважинам", + Name = "WellOperation.edit" + }, + new + { + Id = 239, + Description = "Разрешение просматривать Операции по скважинам", + Name = "WellOperation.get" + }, + new + { + Id = 240, + Description = "Разрешение редактировать Файлы категории 1 (Растворный сервис)", + Name = "File.edit1" + }, + new + { + Id = 241, + Description = "Разрешение редактировать Файлы категории 2 (Цементирование)", + Name = "File.edit2" + }, + new + { + Id = 242, + Description = "Разрешение редактировать Файлы категории 3 (ННБ)", + Name = "File.edit3" + }, + new + { + Id = 243, + Description = "Разрешение редактировать Файлы категории 4 (ГТИ)", + Name = "File.edit4" + }, + new + { + Id = 244, + Description = "Разрешение редактировать Файлы категории 5 (Документы по скважине)", + Name = "File.edit5" + }, + new + { + Id = 245, + Description = "Разрешение редактировать Файлы категории 6 (Супервайзер)", + Name = "File.edit6" + }, + new + { + Id = 246, + Description = "Разрешение редактировать Файлы категории 7 (Мастер)", + Name = "File.edit7" + }, + new + { + Id = 247, + Description = "Разрешение редактировать Файлы категории 8 (Долотный сервис)", + Name = "File.edit8" + }, + new + { + Id = 248, + Description = "Разрешение редактировать Файлы категории 9 (Буровой подрядчик)", + Name = "File.edit9" + }, + new + { + Id = 249, + Description = "Разрешение редактировать Файлы категории 10 (Сервис по заканчиванию скважины)", + Name = "File.edit10" + }, + new + { + Id = 250, + Description = "Разрешение редактировать Файлы категории 11 (Рапорт)", + Name = "File.edit11" + }, + new + { + Id = 251, + Description = "Разрешение редактировать Файлы категории 12", + Name = "File.edit12" + }, + new + { + Id = 252, + Description = "Разрешение редактировать Файлы категории 12", + Name = "File.edit13" + }, + new + { + Id = 253, + Description = "Разрешение редактировать Файлы категории 13", + Name = "File.edit14" + }, + new + { + Id = 254, + Description = "Разрешение редактировать Файлы категории 14", + Name = "File.edit15" + }, + new + { + Id = 255, + Description = "Разрешение редактировать Файлы категории 15", + Name = "File.edit16" + }, + new + { + Id = 256, + Description = "Разрешение редактировать Файлы категории 16", + Name = "File.edit17" + }, + new + { + Id = 257, + Description = "Разрешение редактировать Файлы категории 17", + Name = "File.edit18" + }, + new + { + Id = 258, + Description = "Разрешение редактировать Файлы категории 18", + Name = "File.edit19" + }, + new + { + Id = 259, + Description = "Разрешение редактировать Файлы категории 19", + Name = "File.edit20" + }, + new + { + Id = 260, + Description = "Разрешение редактировать Файлы категории 20", + Name = "File.edit21" + }, + new + { + Id = 261, + Description = "Разрешение редактировать Файлы категории 21", + Name = "File.edit22" + }, + new + { + Id = 262, + Description = "Разрешение редактировать Файлы категории 22", + Name = "File.edit23" + }, + new + { + Id = 263, + Description = "Разрешение редактировать Файлы категории 23", + Name = "File.edit24" + }, + new + { + Id = 264, + Description = "Разрешение редактировать Файлы категории 24", + Name = "File.edit25" + }, + new + { + Id = 265, + Description = "Разрешение редактировать Файлы категории 25", + Name = "File.edit26" + }, + new + { + Id = 266, + Description = "Разрешение редактировать Файлы категории 26", + Name = "File.edit27" + }, + new + { + Id = 267, + Description = "Разрешение редактировать Файлы категории 27", + Name = "File.edit28" + }, + new + { + Id = 268, + Description = "Разрешение редактировать Файлы категории 28", + Name = "File.edit29" + }, + new + { + Id = 269, + Description = "Разрешение редактировать Файлы категории 29", + Name = "File.edit30" + }, + new + { + Id = 380, + Description = "Разрешение просматривать список бурильщиков", + Name = "Driller.get" + }, + new + { + Id = 381, + Description = "Разрешение редактировать бурильщика", + Name = "Driller.edit" + }, + new + { + Id = 382, + Description = "Разрешение удалять бурильщик", + Name = "Driller.delete" + }, + new + { + Id = 383, + Description = "Разрешение просматривать графики бурильщиков", + Name = "Schedule.get" + }, + new + { + Id = 384, + Description = "Разрешение редактировать график бурильщика", + Name = "Schedule.edit" + }, + new + { + Id = 385, + Description = "Разрешение удалять график бурильщика", + Name = "Schedule.delete" + }, + new + { + Id = 386, + Description = "Разрешение просматривать суточный рапорт", + Name = "DailyReport.get" + }, + new + { + Id = 387, + Description = "Разрешение редактировать суточный рапорт", + Name = "DailyReport.edit" + }, + new + { + Id = 388, + Description = "Разрешение просматривать авто. определенные операции", + Name = "DetectedOperation.get" + }, + new + { + Id = 389, + Description = "Разрешение просматривать целевые значения", + Name = "OperationValue.get" + }, + new + { + Id = 390, + Description = "Разрешение редактировать целевые значения", + Name = "OperationValue.edit" + }, + new + { + Id = 391, + Description = "Разрешение удалять целевые значения", + Name = "OperationValue.delete" + }, + new + { + Id = 400, + Description = "Разрешение просматривать инфо по wits параметрам", + Name = "WitsInfo.get" + }, + new + { + Id = 401, + Description = "Разрешение просматривать WITS record 1", + Name = "WitsRecord1.get" + }, + new + { + Id = 407, + Description = "Разрешение просматривать WITS record 7", + Name = "WitsRecord7.get" + }, + new + { + Id = 408, + Description = "Разрешение просматривать WITS record 8", + Name = "WitsRecord8.get" + }, + new + { + Id = 450, + Description = "Разрешение просматривать WITS record 50", + Name = "WitsRecord50.get" + }, + new + { + Id = 460, + Description = "Разрешение просматривать WITS record 60", + Name = "WitsRecord60.get" + }, + new + { + Id = 461, + Description = "Разрешение просматривать WITS record 61", + Name = "WitsRecord61.get" + }, + new + { + Id = 500, + Description = "Разрешение удалять Категорий документов файлов", + Name = "FileCategory.delete" + }, + new + { + Id = 501, + Description = "Разрешение редактировать Категорий документов файлов", + Name = "FileCategory.edit" + }, + new + { + Id = 502, + Description = "Разрешение просматривать Категорий документов файлов", + Name = "FileCategory.get" + }, + new + { + Id = 503, + Description = "Разрешение удалять Дело скважины", + Name = "WellFinalDocuments.delete" + }, + new + { + Id = 504, + Description = "Разрешение редактировать Дело скважины", + Name = "WellFinalDocuments.edit" + }, + new + { + Id = 505, + Description = "Разрешение просматривать Дело скважины", + Name = "WellFinalDocuments.get" + }, + new + { + Id = 506, + Description = "Разрешение редактировать ответственных за загрузку файла Дело скважины", + Name = "WellFinalDocuments.editPublisher" + }, + new + { + Id = 507, + Description = "Разрешение просматривать наработка талевого каната", + Name = "TelemetryWirelineRunOut.get" + }, + new + { + Id = 510, + Description = "Разрешение просматривать плановая траектория", + Name = "PlannedTrajectory.get" + }, + new + { + Id = 511, + Description = "Разрешение редактировать плановая траектория", + Name = "PlannedTrajectory.edit" + }, + new + { + Id = 512, + Description = "Разрешение удалять плановая траектория", + Name = "PlannedTrajectory.delete" + }, + new + { + Id = 516, + Description = "Разрешение просматривать статистику вопросов", + Name = "FaqStatistics.get" + }, + new + { + Id = 517, + Description = "Разрешение редактировать вопрос", + Name = "FaqStatistics.edit" + }, + new + { + Id = 518, + Description = "Разрешение удалять вопрос", + Name = "FaqStatistics.delete" + }, + new + { + Id = 519, + Description = "Разрешение просматривать список контактов", + Name = "WellContact.get" + }, + new + { + Id = 520, + Description = "Разрешение редактировать список контактов", + Name = "WellContact.edit" + }, + new + { + Id = 521, + Description = "Разрешить создание справок по страницам", + Name = "HelpPage.edit" + }, + new + { + Id = 522, + Description = "Разрешить удаление всех настроек пользователя", + Name = "UserSettings.delete" + }, + new + { + Id = 523, + Description = "Разрешить редактирование инструкций", + Name = "Manual.edit" + }, + new + { + Id = 524, + Description = "Разрешить получение инструкций", + Name = "Manual.get" + }, + new + { + Id = 525, + Description = "Разрешение на редактирование РТК у завершенной скважины", + Name = "ProcessMap.editCompletedWell" + }, + new + { + Id = 526, + Description = "Разрешение на редактирование операций у завершенной скважины", + Name = "WellOperation.editCompletedWell" + }, + new + { + Id = 527, + Description = "Разрешение на удаление инструкций", + Name = "Manual.delete" + }, + new + { + Id = 528, + Description = "Разрешение на удаление контакта", + Name = "WellContact.delete" + }, + new + { + Id = 530, + Description = "Разрешение на редактирование плановой конструкции скважины", + Name = "WellSectionPlan.edit" + }, + new + { + Id = 531, + Description = "Разрешение на удаление плановой конструкции скважины", + Name = "WellSectionPlan.delete" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanReam", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasComment("Идентификатор"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Creation") + .HasColumnType("timestamp with time zone") + .HasColumnName("creation") + .HasComment("дата создания"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина по стволу до, м"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Глубина по стволу от, м"); + + b.Property("IdAuthor") + .HasColumnType("integer") + .HasColumnName("id_author") + .HasComment("Автор"); + + b.Property("IdEditor") + .HasColumnType("integer") + .HasColumnName("id_editor") + .HasComment("Редактор"); + + b.Property("IdPrevious") + .HasColumnType("integer") + .HasColumnName("id_previous") + .HasComment("ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"); + + b.Property("IdState") + .HasColumnType("integer") + .HasColumnName("id_state") + .HasComment("ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_wellsection_type") + .HasComment("Тип секции"); + + b.Property("Obsolete") + .HasColumnType("timestamp with time zone") + .HasColumnName("obsolete") + .HasComment("дата устаревания"); + + b.Property("Pressure") + .HasColumnType("double precision") + .HasColumnName("pressure") + .HasComment("Давление, атм"); + + b.Property("Repeats") + .HasColumnType("double precision") + .HasColumnName("repeats") + .HasComment("Количество повторений"); + + b.Property("SetpointDrag") + .HasColumnType("double precision") + .HasColumnName("setpoint_drag") + .HasComment("Уставка зятяжки, т"); + + b.Property("SetpointTight") + .HasColumnType("double precision") + .HasColumnName("setpoint_tight") + .HasComment("Уставка посадки, т"); + + b.Property("SpeedDownward") + .HasColumnType("double precision") + .HasColumnName("speed_downward") + .HasComment("Скорость спуска, м/ч"); + + b.Property("SpeedUpward") + .HasColumnType("double precision") + .HasColumnName("speed_upward") + .HasComment("Скорость подъёма, м/ч"); + + b.Property("SpinDownward") + .HasColumnType("double precision") + .HasColumnName("spin_downward") + .HasComment("Вращение при движении вниз, об/мин"); + + b.Property("SpinUpward") + .HasColumnType("double precision") + .HasColumnName("spin_upward") + .HasComment("Вращение при движении вверх, об/мин"); + + b.Property("Torque") + .HasColumnType("double precision") + .HasColumnName("torque") + .HasComment("Момент, кН*м"); + + b.HasKey("Id"); + + b.HasIndex("IdAuthor"); + + b.HasIndex("IdEditor"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellSectionType"); + + b.ToTable("t_process_map_plan_ream", t => + { + t.HasComment("РТК проработка скважины"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanRotor", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasComment("Идентификатор"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Creation") + .HasColumnType("timestamp with time zone") + .HasColumnName("creation") + .HasComment("дата создания"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина по стволу до, м"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Глубина по стволу от, м"); + + b.Property("DifferentialPressure") + .HasColumnType("double precision") + .HasColumnName("differential_pressure") + .HasComment("Перепад давления, атм. Уставка"); + + b.Property("DifferentialPressureLimitMax") + .HasColumnType("double precision") + .HasColumnName("differential_pressure_limit_max") + .HasComment("Перепад давления, атм. Ограничение"); + + b.Property("FlowRate") + .HasColumnType("double precision") + .HasColumnName("flow_rate") + .HasComment("Расход л/с. Уставка"); + + b.Property("FlowRateLimitMax") + .HasColumnType("double precision") + .HasColumnName("flow_rate_limit_max") + .HasComment("Расход л/с. Ограничение"); + + b.Property("IdAuthor") + .HasColumnType("integer") + .HasColumnName("id_author") + .HasComment("Автор"); + + b.Property("IdEditor") + .HasColumnType("integer") + .HasColumnName("id_editor") + .HasComment("Редактор"); + + b.Property("IdPrevious") + .HasColumnType("integer") + .HasColumnName("id_previous") + .HasComment("ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"); + + b.Property("IdState") + .HasColumnType("integer") + .HasColumnName("id_state") + .HasComment("ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_wellsection_type") + .HasComment("Тип секции"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("note") + .HasComment("Примечание"); + + b.Property("Obsolete") + .HasColumnType("timestamp with time zone") + .HasColumnName("obsolete") + .HasComment("дата устаревания"); + + b.Property("PressureLimitMax") + .HasColumnType("double precision") + .HasColumnName("pressure_limit_max") + .HasComment("Максимально допустимое давление, атм"); + + b.Property("RevolutionsPerMinute") + .HasColumnType("double precision") + .HasColumnName("revolution_per_minute") + .HasComment("Обороты на ВСП, об/мин. Уставка"); + + b.Property("RevolutionsPerMinuteLimitMax") + .HasColumnType("double precision") + .HasColumnName("revolutions_per_minute_limit_max") + .HasComment("Обороты на ВСП, об/мин. Ограничение"); + + b.Property("RopLimitMax") + .HasColumnType("double precision") + .HasColumnName("rop_limit_max") + .HasComment("Максимально допустимая скорость, м/ч"); + + b.Property("TopDriveTorque") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque") + .HasComment("Момент на ВСП, кН*м. Уставка"); + + b.Property("TopDriveTorqueLimit") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_limit_max") + .HasComment("Момент на ВСП, кН*м. Ограничение"); + + b.Property("WeightOnBit") + .HasColumnType("double precision") + .HasColumnName("weight_on_bit") + .HasComment("Нагрузка, т. Уставка"); + + b.Property("WeightOnBitLimitMax") + .HasColumnType("double precision") + .HasColumnName("weight_on_bit_limit_max") + .HasComment("Нагрузка, т. Ограничение"); + + b.HasKey("Id"); + + b.HasIndex("IdAuthor"); + + b.HasIndex("IdEditor"); + + b.HasIndex("IdPrevious"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellSectionType"); + + b.ToTable("t_process_map_plan_rotor", t => + { + t.HasComment("РТК план бурение ротор"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanSlide", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasComment("Идентификатор"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Creation") + .HasColumnType("timestamp with time zone") + .HasColumnName("creation") + .HasComment("дата создания"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина по стволу до, м"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Глубина по стволу от, м"); + + b.Property("DifferentialPressure") + .HasColumnType("double precision") + .HasColumnName("differential_pressure") + .HasComment("Перепад давления, атм. Уставка"); + + b.Property("DifferentialPressureLimitMax") + .HasColumnType("double precision") + .HasColumnName("differential_pressure_limit_max") + .HasComment("Перепад давления, атм. Ограничение"); + + b.Property("FlowRate") + .HasColumnType("double precision") + .HasColumnName("flow_rate") + .HasComment("Расход л/с. Уставка"); + + b.Property("FlowRateLimitMax") + .HasColumnType("double precision") + .HasColumnName("flow_rate_limit_max") + .HasComment("Расход л/с. Ограничение"); + + b.Property("IdAuthor") + .HasColumnType("integer") + .HasColumnName("id_author") + .HasComment("Автор"); + + b.Property("IdEditor") + .HasColumnType("integer") + .HasColumnName("id_editor") + .HasComment("Редактор"); + + b.Property("IdPrevious") + .HasColumnType("integer") + .HasColumnName("id_previous") + .HasComment("ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"); + + b.Property("IdState") + .HasColumnType("integer") + .HasColumnName("id_state") + .HasComment("ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_wellsection_type") + .HasComment("Тип секции"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("note") + .HasComment("Примечание"); + + b.Property("Obsolete") + .HasColumnType("timestamp with time zone") + .HasColumnName("obsolete") + .HasComment("дата устаревания"); + + b.Property("PressureLimitMax") + .HasColumnType("double precision") + .HasColumnName("pressure_limit_max") + .HasComment("Максимально допустимое давление, атм"); + + b.Property("RopLimitMax") + .HasColumnType("double precision") + .HasColumnName("rop_limit_max") + .HasComment("Максимально допустимая скорость, м/ч"); + + b.Property("Spring") + .HasColumnType("double precision") + .HasColumnName("spring") + .HasComment("Расчётная пружина, градус"); + + b.Property("ToolBuckling") + .HasColumnType("double precision") + .HasColumnName("tool_buckling") + .HasComment("Складывание инструмента, м"); + + b.Property("WeightOnBit") + .HasColumnType("double precision") + .HasColumnName("weight_on_bit") + .HasComment("Нагрузка, т. Уставка"); + + b.Property("WeightOnBitLimitMax") + .HasColumnType("double precision") + .HasColumnName("weight_on_bit_limit_max") + .HasComment("Нагрузка, т. Ограничение"); + + b.HasKey("Id"); + + b.HasIndex("IdAuthor"); + + b.HasIndex("IdEditor"); + + b.HasIndex("IdPrevious"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellSectionType"); + + b.ToTable("t_process_map_plan_slide", t => + { + t.HasComment("РТК план бурение слайд"); + }); + }); + + 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", t => + { + t.HasComment("отношение скважин и компаний"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationContactWell", b => + { + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user"); + + b.HasKey("IdWell", "IdUser"); + + b.HasIndex("IdUser"); + + b.ToTable("t_relation_contact_well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserDrillingProgramPart", b => + { + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user"); + + b.Property("IdDrillingProgramPart") + .HasColumnType("integer") + .HasColumnName("id_drilling_program_part"); + + b.Property("IdUserRole") + .HasColumnType("integer") + .HasColumnName("id_role") + .HasComment("1 - publisher, 2 - approver"); + + b.HasKey("IdUser", "IdDrillingProgramPart") + .HasName("t_relation_user_drilling_program_part_pk"); + + b.HasIndex("IdDrillingProgramPart"); + + b.ToTable("t_relation_user_drilling_program_part", t => + { + t.HasComment("Отношение пользователей и частей ПБ"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserRolePermission", b => + { + b.Property("IdUserRole") + .HasColumnType("integer") + .HasColumnName("id_user_role"); + + b.Property("IdPermission") + .HasColumnType("integer") + .HasColumnName("id_permission"); + + b.HasKey("IdUserRole", "IdPermission"); + + b.HasIndex("IdPermission"); + + b.ToTable("t_relation_user_role_permission", t => + { + t.HasComment("Отношение ролей пользователей и разрешений доступа"); + }); + + b.HasData( + new + { + IdUserRole = 1100, + IdPermission = 102 + }, + new + { + IdUserRole = 1100, + IdPermission = 111 + }, + new + { + IdUserRole = 1101, + IdPermission = 101 + }, + new + { + IdUserRole = 1101, + IdPermission = 100 + }, + new + { + IdUserRole = 1102, + IdPermission = 105 + }, + new + { + IdUserRole = 1102, + IdPermission = 108 + }, + new + { + IdUserRole = 1103, + IdPermission = 104 + }, + new + { + IdUserRole = 1103, + IdPermission = 103 + }, + new + { + IdUserRole = 1104, + IdPermission = 108 + }, + new + { + IdUserRole = 1105, + IdPermission = 107 + }, + new + { + IdUserRole = 1105, + IdPermission = 106 + }, + new + { + IdUserRole = 1106, + IdPermission = 111 + }, + new + { + IdUserRole = 1107, + IdPermission = 110 + }, + new + { + IdUserRole = 1107, + IdPermission = 109 + }, + new + { + IdUserRole = 1108, + IdPermission = 114 + }, + new + { + IdUserRole = 1109, + IdPermission = 113 + }, + new + { + IdUserRole = 1109, + IdPermission = 112 + }, + new + { + IdUserRole = 1110, + IdPermission = 123 + }, + new + { + IdUserRole = 1110, + IdPermission = 114 + }, + new + { + IdUserRole = 1111, + IdPermission = 122 + }, + new + { + IdUserRole = 1111, + IdPermission = 121 + }, + new + { + IdUserRole = 1112, + IdPermission = 117 + }, + new + { + IdUserRole = 1113, + IdPermission = 105 + }, + new + { + IdUserRole = 1113, + IdPermission = 123 + }, + new + { + IdUserRole = 1113, + IdPermission = 120 + }, + new + { + IdUserRole = 1114, + IdPermission = 119 + }, + new + { + IdUserRole = 1114, + IdPermission = 118 + }, + new + { + IdUserRole = 1114, + IdPermission = 200 + }, + new + { + IdUserRole = 1115, + IdPermission = 223 + }, + new + { + IdUserRole = 1116, + IdPermission = 105 + }, + new + { + IdUserRole = 1116, + IdPermission = 102 + }, + new + { + IdUserRole = 1116, + IdPermission = 117 + }, + new + { + IdUserRole = 1116, + IdPermission = 126 + }, + new + { + IdUserRole = 1117, + IdPermission = 125 + }, + new + { + IdUserRole = 1117, + IdPermission = 124 + }, + new + { + IdUserRole = 1200, + IdPermission = 203 + }, + new + { + IdUserRole = 1200, + IdPermission = 230 + }, + new + { + IdUserRole = 1201, + IdPermission = 202 + }, + new + { + IdUserRole = 1201, + IdPermission = 203 + }, + new + { + IdUserRole = 1201, + IdPermission = 220 + }, + new + { + IdUserRole = 1202, + IdPermission = 203 + }, + new + { + IdUserRole = 1202, + IdPermission = 220 + }, + new + { + IdUserRole = 1202, + IdPermission = 236 + }, + new + { + IdUserRole = 1202, + IdPermission = 212 + }, + new + { + IdUserRole = 1203, + IdPermission = 235 + }, + new + { + IdUserRole = 1204, + IdPermission = 202 + }, + new + { + IdUserRole = 1204, + IdPermission = 203 + }, + new + { + IdUserRole = 1205, + IdPermission = 215 + }, + new + { + IdUserRole = 1206, + IdPermission = 203 + }, + new + { + IdUserRole = 1206, + IdPermission = 206 + }, + new + { + IdUserRole = 1207, + IdPermission = 205 + }, + new + { + IdUserRole = 1208, + IdPermission = 218 + }, + new + { + IdUserRole = 1209, + IdPermission = 217 + }, + new + { + IdUserRole = 1210, + IdPermission = 203 + }, + new + { + IdUserRole = 1210, + IdPermission = 230 + }, + new + { + IdUserRole = 1210, + IdPermission = 219 + }, + new + { + IdUserRole = 1211, + IdPermission = 203 + }, + new + { + IdUserRole = 1211, + IdPermission = 220 + }, + new + { + IdUserRole = 1211, + IdPermission = 239 + }, + new + { + IdUserRole = 1212, + IdPermission = 238 + }, + new + { + IdUserRole = 1212, + IdPermission = 237 + }, + new + { + IdUserRole = 1213, + IdPermission = 203 + }, + new + { + IdUserRole = 1213, + IdPermission = 239 + }, + new + { + IdUserRole = 1213, + IdPermission = 212 + }, + new + { + IdUserRole = 1214, + IdPermission = 211 + }, + new + { + IdUserRole = 1214, + IdPermission = 210 + }, + new + { + IdUserRole = 1215, + IdPermission = 203 + }, + new + { + IdUserRole = 1215, + IdPermission = 222 + }, + new + { + IdUserRole = 1216, + IdPermission = 221 + }, + new + { + IdUserRole = 1217, + IdPermission = 226 + }, + new + { + IdUserRole = 1218, + IdPermission = 225 + }, + new + { + IdUserRole = 1218, + IdPermission = 224 + }, + new + { + IdUserRole = 1219, + IdPermission = 203 + }, + new + { + IdUserRole = 1219, + IdPermission = 206 + }, + new + { + IdUserRole = 1219, + IdPermission = 230 + }, + new + { + IdUserRole = 1219, + IdPermission = 232 + }, + new + { + IdUserRole = 1220, + IdPermission = 203 + }, + new + { + IdUserRole = 1220, + IdPermission = 228 + }, + new + { + IdUserRole = 1221, + IdPermission = 202 + }, + new + { + IdUserRole = 1221, + IdPermission = 203 + }, + new + { + IdUserRole = 1221, + IdPermission = 220 + }, + new + { + IdUserRole = 1221, + IdPermission = 234 + }, + new + { + IdUserRole = 1500, + IdPermission = 507 + }, + new + { + IdUserRole = 1500, + IdPermission = 510 + }, + new + { + IdUserRole = 1501, + IdPermission = 214 + }, + new + { + IdUserRole = 1501, + IdPermission = 213 + }, + new + { + IdUserRole = 1502, + IdPermission = 207 + }, + new + { + IdUserRole = 1502, + IdPermission = 208 + }, + new + { + IdUserRole = 2000, + IdPermission = 205 + }, + new + { + IdUserRole = 2000, + IdPermission = 204 + }, + new + { + IdUserRole = 2000, + IdPermission = 245 + }, + new + { + IdUserRole = 2001, + IdPermission = 244 + }, + new + { + IdUserRole = 2001, + IdPermission = 245 + }, + new + { + IdUserRole = 2002, + IdPermission = 244 + }, + new + { + IdUserRole = 2002, + IdPermission = 246 + }, + new + { + IdUserRole = 2002, + IdPermission = 237 + }, + new + { + IdUserRole = 2002, + IdPermission = 238 + }, + new + { + IdUserRole = 2003, + IdPermission = 240 + }, + new + { + IdUserRole = 2003, + IdPermission = 217 + }, + new + { + IdUserRole = 2003, + IdPermission = 216 + }, + new + { + IdUserRole = 2004, + IdPermission = 242 + }, + new + { + IdUserRole = 2004, + IdPermission = 217 + }, + new + { + IdUserRole = 2004, + IdPermission = 216 + }, + new + { + IdUserRole = 2004, + IdPermission = 205 + }, + new + { + IdUserRole = 2004, + IdPermission = 204 + }, + new + { + IdUserRole = 2005, + IdPermission = 247 + }, + new + { + IdUserRole = 2005, + IdPermission = 205 + }, + new + { + IdUserRole = 2005, + IdPermission = 204 + }, + new + { + IdUserRole = 2006, + IdPermission = 243 + }, + new + { + IdUserRole = 2006, + IdPermission = 205 + }, + new + { + IdUserRole = 2006, + IdPermission = 204 + }, + new + { + IdUserRole = 2007, + IdPermission = 241 + }, + new + { + IdUserRole = 2007, + IdPermission = 205 + }, + new + { + IdUserRole = 2007, + IdPermission = 204 + }, + new + { + IdUserRole = 1, + IdPermission = 100 + }, + new + { + IdUserRole = 1, + IdPermission = 101 + }, + new + { + IdUserRole = 1, + IdPermission = 102 + }, + new + { + IdUserRole = 1, + IdPermission = 103 + }, + new + { + IdUserRole = 1, + IdPermission = 104 + }, + new + { + IdUserRole = 1, + IdPermission = 105 + }, + new + { + IdUserRole = 1, + IdPermission = 106 + }, + new + { + IdUserRole = 1, + IdPermission = 107 + }, + new + { + IdUserRole = 1, + IdPermission = 108 + }, + new + { + IdUserRole = 1, + IdPermission = 109 + }, + new + { + IdUserRole = 1, + IdPermission = 110 + }, + new + { + IdUserRole = 1, + IdPermission = 111 + }, + new + { + IdUserRole = 1, + IdPermission = 112 + }, + new + { + IdUserRole = 1, + IdPermission = 113 + }, + new + { + IdUserRole = 1, + IdPermission = 114 + }, + new + { + IdUserRole = 1, + IdPermission = 115 + }, + new + { + IdUserRole = 1, + IdPermission = 116 + }, + new + { + IdUserRole = 1, + IdPermission = 117 + }, + new + { + IdUserRole = 1, + IdPermission = 118 + }, + new + { + IdUserRole = 1, + IdPermission = 119 + }, + new + { + IdUserRole = 1, + IdPermission = 120 + }, + new + { + IdUserRole = 1, + IdPermission = 121 + }, + new + { + IdUserRole = 1, + IdPermission = 122 + }, + new + { + IdUserRole = 1, + IdPermission = 123 + }, + new + { + IdUserRole = 1, + IdPermission = 124 + }, + new + { + IdUserRole = 1, + IdPermission = 125 + }, + new + { + IdUserRole = 1, + IdPermission = 126 + }, + new + { + IdUserRole = 1, + IdPermission = 127 + }, + new + { + IdUserRole = 1, + IdPermission = 128 + }, + new + { + IdUserRole = 1, + IdPermission = 129 + }, + new + { + IdUserRole = 1, + IdPermission = 200 + }, + new + { + IdUserRole = 1, + IdPermission = 201 + }, + new + { + IdUserRole = 1, + IdPermission = 202 + }, + new + { + IdUserRole = 1, + IdPermission = 203 + }, + new + { + IdUserRole = 1, + IdPermission = 204 + }, + new + { + IdUserRole = 1, + IdPermission = 205 + }, + new + { + IdUserRole = 1, + IdPermission = 206 + }, + new + { + IdUserRole = 1, + IdPermission = 207 + }, + new + { + IdUserRole = 1, + IdPermission = 208 + }, + new + { + IdUserRole = 1, + IdPermission = 209 + }, + new + { + IdUserRole = 1, + IdPermission = 210 + }, + new + { + IdUserRole = 1, + IdPermission = 211 + }, + new + { + IdUserRole = 1, + IdPermission = 212 + }, + new + { + IdUserRole = 1, + IdPermission = 213 + }, + new + { + IdUserRole = 1, + IdPermission = 214 + }, + new + { + IdUserRole = 1, + IdPermission = 215 + }, + new + { + IdUserRole = 1, + IdPermission = 216 + }, + new + { + IdUserRole = 1, + IdPermission = 217 + }, + new + { + IdUserRole = 1, + IdPermission = 218 + }, + new + { + IdUserRole = 1, + IdPermission = 219 + }, + new + { + IdUserRole = 1, + IdPermission = 220 + }, + new + { + IdUserRole = 1, + IdPermission = 221 + }, + new + { + IdUserRole = 1, + IdPermission = 222 + }, + new + { + IdUserRole = 1, + IdPermission = 223 + }, + new + { + IdUserRole = 1, + IdPermission = 224 + }, + new + { + IdUserRole = 1, + IdPermission = 225 + }, + new + { + IdUserRole = 1, + IdPermission = 226 + }, + new + { + IdUserRole = 1, + IdPermission = 227 + }, + new + { + IdUserRole = 1, + IdPermission = 228 + }, + new + { + IdUserRole = 1, + IdPermission = 229 + }, + new + { + IdUserRole = 1, + IdPermission = 230 + }, + new + { + IdUserRole = 1, + IdPermission = 231 + }, + new + { + IdUserRole = 1, + IdPermission = 232 + }, + new + { + IdUserRole = 1, + IdPermission = 233 + }, + new + { + IdUserRole = 1, + IdPermission = 234 + }, + new + { + IdUserRole = 1, + IdPermission = 235 + }, + new + { + IdUserRole = 1, + IdPermission = 236 + }, + new + { + IdUserRole = 1, + IdPermission = 237 + }, + new + { + IdUserRole = 1, + IdPermission = 238 + }, + new + { + IdUserRole = 1, + IdPermission = 239 + }, + new + { + IdUserRole = 1, + IdPermission = 240 + }, + new + { + IdUserRole = 1, + IdPermission = 241 + }, + new + { + IdUserRole = 1, + IdPermission = 242 + }, + new + { + IdUserRole = 1, + IdPermission = 243 + }, + new + { + IdUserRole = 1, + IdPermission = 244 + }, + new + { + IdUserRole = 1, + IdPermission = 245 + }, + new + { + IdUserRole = 1, + IdPermission = 246 + }, + new + { + IdUserRole = 1, + IdPermission = 247 + }, + new + { + IdUserRole = 1, + IdPermission = 248 + }, + new + { + IdUserRole = 1, + IdPermission = 249 + }, + new + { + IdUserRole = 1, + IdPermission = 250 + }, + new + { + IdUserRole = 1, + IdPermission = 251 + }, + new + { + IdUserRole = 1, + IdPermission = 252 + }, + new + { + IdUserRole = 1, + IdPermission = 253 + }, + new + { + IdUserRole = 1, + IdPermission = 254 + }, + new + { + IdUserRole = 1, + IdPermission = 255 + }, + new + { + IdUserRole = 1, + IdPermission = 256 + }, + new + { + IdUserRole = 1, + IdPermission = 257 + }, + new + { + IdUserRole = 1, + IdPermission = 258 + }, + new + { + IdUserRole = 1, + IdPermission = 259 + }, + new + { + IdUserRole = 1, + IdPermission = 260 + }, + new + { + IdUserRole = 1, + IdPermission = 261 + }, + new + { + IdUserRole = 1, + IdPermission = 262 + }, + new + { + IdUserRole = 1, + IdPermission = 263 + }, + new + { + IdUserRole = 1, + IdPermission = 264 + }, + new + { + IdUserRole = 1, + IdPermission = 265 + }, + new + { + IdUserRole = 1, + IdPermission = 266 + }, + new + { + IdUserRole = 1, + IdPermission = 267 + }, + new + { + IdUserRole = 1, + IdPermission = 268 + }, + new + { + IdUserRole = 1, + IdPermission = 269 + }, + new + { + IdUserRole = 1, + IdPermission = 380 + }, + new + { + IdUserRole = 1, + IdPermission = 381 + }, + new + { + IdUserRole = 1, + IdPermission = 382 + }, + new + { + IdUserRole = 1, + IdPermission = 383 + }, + new + { + IdUserRole = 1, + IdPermission = 384 + }, + new + { + IdUserRole = 1, + IdPermission = 385 + }, + new + { + IdUserRole = 1, + IdPermission = 386 + }, + new + { + IdUserRole = 1, + IdPermission = 387 + }, + new + { + IdUserRole = 1, + IdPermission = 388 + }, + new + { + IdUserRole = 1, + IdPermission = 389 + }, + new + { + IdUserRole = 1, + IdPermission = 390 + }, + new + { + IdUserRole = 1, + IdPermission = 391 + }, + new + { + IdUserRole = 1, + IdPermission = 400 + }, + new + { + IdUserRole = 1, + IdPermission = 401 + }, + new + { + IdUserRole = 1, + IdPermission = 407 + }, + new + { + IdUserRole = 1, + IdPermission = 408 + }, + new + { + IdUserRole = 1, + IdPermission = 450 + }, + new + { + IdUserRole = 1, + IdPermission = 460 + }, + new + { + IdUserRole = 1, + IdPermission = 461 + }, + new + { + IdUserRole = 1, + IdPermission = 500 + }, + new + { + IdUserRole = 1, + IdPermission = 501 + }, + new + { + IdUserRole = 1, + IdPermission = 502 + }, + new + { + IdUserRole = 1, + IdPermission = 503 + }, + new + { + IdUserRole = 1, + IdPermission = 504 + }, + new + { + IdUserRole = 1, + IdPermission = 505 + }, + new + { + IdUserRole = 1, + IdPermission = 506 + }, + new + { + IdUserRole = 1, + IdPermission = 507 + }, + new + { + IdUserRole = 1, + IdPermission = 510 + }, + new + { + IdUserRole = 1, + IdPermission = 511 + }, + new + { + IdUserRole = 1, + IdPermission = 512 + }, + new + { + IdUserRole = 1, + IdPermission = 516 + }, + new + { + IdUserRole = 1, + IdPermission = 517 + }, + new + { + IdUserRole = 1, + IdPermission = 518 + }, + new + { + IdUserRole = 1, + IdPermission = 519 + }, + new + { + IdUserRole = 1, + IdPermission = 520 + }, + new + { + IdUserRole = 1, + IdPermission = 521 + }, + new + { + IdUserRole = 1, + IdPermission = 522 + }, + new + { + IdUserRole = 1, + IdPermission = 523 + }, + new + { + IdUserRole = 1, + IdPermission = 524 + }, + new + { + IdUserRole = 1, + IdPermission = 525 + }, + new + { + IdUserRole = 1, + IdPermission = 526 + }, + new + { + IdUserRole = 1, + IdPermission = 527 + }, + new + { + IdUserRole = 1, + IdPermission = 528 + }, + new + { + IdUserRole = 1, + IdPermission = 530 + }, + new + { + IdUserRole = 1, + IdPermission = 531 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserRoleUserRole", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id_user_role"); + + b.Property("IdInclude") + .HasColumnType("integer") + .HasColumnName("id_include_user_role"); + + b.HasKey("Id", "IdInclude") + .HasName("t_relation_user_role_user_role_pk"); + + b.HasIndex("IdInclude"); + + b.ToTable("t_relation_user_role_user_role", t => + { + t.HasComment("Отношение ролей к ролям"); + }); + + b.HasData( + new + { + Id = 1101, + IdInclude = 1100 + }, + new + { + Id = 1103, + IdInclude = 1102 + }, + new + { + Id = 1105, + IdInclude = 1104 + }, + new + { + Id = 1107, + IdInclude = 1106 + }, + new + { + Id = 1109, + IdInclude = 1108 + }, + new + { + Id = 1111, + IdInclude = 1110 + }, + new + { + Id = 1114, + IdInclude = 1113 + }, + new + { + Id = 1117, + IdInclude = 1116 + }, + new + { + Id = 1203, + IdInclude = 1202 + }, + new + { + Id = 1207, + IdInclude = 1206 + }, + new + { + Id = 1209, + IdInclude = 1208 + }, + new + { + Id = 1212, + IdInclude = 1211 + }, + new + { + Id = 1214, + IdInclude = 1213 + }, + new + { + Id = 1216, + IdInclude = 1215 + }, + new + { + Id = 1218, + IdInclude = 1217 + }, + new + { + Id = 2000, + IdInclude = 1200 + }, + new + { + Id = 2000, + IdInclude = 1201 + }, + new + { + Id = 2000, + IdInclude = 1202 + }, + new + { + Id = 2000, + IdInclude = 1204 + }, + new + { + Id = 2000, + IdInclude = 1205 + }, + new + { + Id = 2000, + IdInclude = 1206 + }, + new + { + Id = 2000, + IdInclude = 1208 + }, + new + { + Id = 2000, + IdInclude = 1210 + }, + new + { + Id = 2000, + IdInclude = 1211 + }, + new + { + Id = 2000, + IdInclude = 1213 + }, + new + { + Id = 2000, + IdInclude = 1215 + }, + new + { + Id = 2000, + IdInclude = 1217 + }, + new + { + Id = 2000, + IdInclude = 1219 + }, + new + { + Id = 2000, + IdInclude = 1220 + }, + new + { + Id = 2000, + IdInclude = 1221 + }, + new + { + Id = 2000, + IdInclude = 1500 + }, + new + { + Id = 2000, + IdInclude = 1501 + }, + new + { + Id = 2000, + IdInclude = 1502 + }, + new + { + Id = 2001, + IdInclude = 1500 + }, + new + { + Id = 2001, + IdInclude = 1501 + }, + new + { + Id = 2001, + IdInclude = 1502 + }, + new + { + Id = 2002, + IdInclude = 1500 + }, + new + { + Id = 2002, + IdInclude = 1501 + }, + new + { + Id = 2002, + IdInclude = 1502 + }, + new + { + Id = 2003, + IdInclude = 1500 + }, + new + { + Id = 2003, + IdInclude = 1501 + }, + new + { + Id = 2003, + IdInclude = 1502 + }, + new + { + Id = 2004, + IdInclude = 1500 + }, + new + { + Id = 2004, + IdInclude = 1501 + }, + new + { + Id = 2004, + IdInclude = 1502 + }, + new + { + Id = 2005, + IdInclude = 1500 + }, + new + { + Id = 2005, + IdInclude = 1501 + }, + new + { + Id = 2005, + IdInclude = 1502 + }, + new + { + Id = 2006, + IdInclude = 1500 + }, + new + { + Id = 2006, + IdInclude = 1501 + }, + new + { + Id = 2006, + IdInclude = 1502 + }, + new + { + Id = 2007, + IdInclude = 1500 + }, + new + { + Id = 2007, + IdInclude = 1501 + }, + new + { + Id = 2007, + IdInclude = 1502 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserUserRole", b => + { + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user"); + + b.Property("IdUserRole") + .HasColumnType("integer") + .HasColumnName("id_user_role"); + + b.HasKey("IdUser", "IdUserRole"); + + b.HasIndex("IdUserRole"); + + b.ToTable("t_relation_user_user_role", t => + { + t.HasComment("Отношение пользователей и ролей"); + }); + + b.HasData( + new + { + IdUser = 1, + IdUserRole = 1 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ReportProperty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Begin") + .HasColumnType("timestamp with time zone") + .HasColumnName("begin"); + + b.Property("End") + .HasColumnType("timestamp with time zone") + .HasColumnName("end") + .HasComment("timestamp with time zone"); + + b.Property("Format") + .HasColumnType("integer") + .HasColumnName("format") + .HasComment("Формат отчета"); + + b.Property("IdFile") + .HasColumnType("integer") + .HasColumnName("id_file") + .HasComment("id файла-родителя"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("id скважины"); + + b.Property("Step") + .HasColumnType("integer") + .HasColumnName("step") + .HasComment("размер шага в секундах"); + + b.HasKey("Id"); + + b.HasIndex("IdFile"); + + b.HasIndex("IdWell"); + + b.ToTable("t_report_property", t => + { + t.HasComment("Отчеты с данными по буровым"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Schedule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasComment("Идентификатор"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DrillEnd") + .HasColumnType("timestamp with time zone") + .HasColumnName("drill_end") + .HasComment("Конец вахты"); + + b.Property("DrillStart") + .HasColumnType("timestamp with time zone") + .HasColumnName("drill_start") + .HasComment("Начало вахты"); + + b.Property("IdDriller") + .HasColumnType("integer") + .HasColumnName("id_driller") + .HasComment("Идентификатор бурильщика"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Идентификатор скважины"); + + b.Property("ShiftEnd") + .HasColumnType("time without time zone") + .HasColumnName("shift_end") + .HasComment("Конец смены"); + + b.Property("ShiftStart") + .HasColumnType("time without time zone") + .HasColumnName("shift_start") + .HasComment("Начало смены"); + + b.HasKey("Id"); + + b.HasIndex("IdDriller"); + + b.HasIndex("IdWell"); + + b.ToTable("t_schedule", t => + { + t.HasComment("График работы бурильщика"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.SetpointsRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Comment") + .HasColumnType("text") + .HasColumnName("comment") + .HasComment("комментарий для оператора"); + + b.Property("IdAuthor") + .HasColumnType("integer") + .HasColumnName("id_author") + .HasComment("Id пользователя, загрузившего файл"); + + b.Property("IdState") + .HasColumnType("integer") + .HasColumnName("id_state") + .HasComment("0: неизвестно, 1:ожидает отправки, 2: отправлено, 3: принято оператором, 4: отклонено оператором, 5: устарело"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("id скважины"); + + b.Property("ObsolescenceSec") + .HasColumnType("integer") + .HasColumnName("obsolescence") + .HasComment("сек. до устаревания"); + + b.Property("Setpoints") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("setpoint_set") + .HasComment("Набор уставок"); + + b.Property("UploadDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.HasKey("Id"); + + b.HasIndex("IdAuthor"); + + b.HasIndex("IdWell"); + + b.ToTable("t_setpoints_rquest", t => + { + t.HasComment("Запросы на изменение уставок панели оператора"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Subsystem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("description"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name"); + + b.HasKey("Id"); + + b.ToTable("t_subsystem", t => + { + t.HasComment("Описание подсистем"); + }); + + b.HasData( + new + { + Id = 1, + Description = "Совместная работа режимов \"Бурение в роторе\" и \"Бурение в слайде\"", + Name = "АПД" + }, + new + { + Id = 11, + Description = "Режим работы \"Бурение в роторе\"", + Name = "АПД ротор" + }, + new + { + Id = 12, + Description = "Режим работы \"Бурение в слайде\"", + Name = "АПД слайд" + }, + new + { + Id = 65536, + Description = "Осцилляция", + Name = "Осцилляция" + }, + new + { + Id = 65537, + Description = "Демпфер", + Name = "Демпфер" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Telemetry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Info") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("info") + .HasComment("Информация с панели о скважине"); + + b.Property("RemoteUid") + .IsRequired() + .HasColumnType("text") + .HasColumnName("remote_uid") + .HasComment("Идентификатор передающего устройства. Может повторяться в списке, так как комплекты оборудования переезжают от скв. к скв."); + + b.Property("TimeZone") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("timezone") + .HasComment("Смещение часового пояса от UTC"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "RemoteUid" }, "t_telemetry_remote_uid_index"); + + b.ToTable("t_telemetry", t => + { + t.HasComment("таблица привязки телеметрии от комплектов к конкретной скважине."); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSaub", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("DateTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("date") + .HasComment("'2021-10-19 18:23:54+05'"); + + b.Property("AxialLoad") + .HasColumnType("real") + .HasColumnName("axial_load") + .HasComment("Осевая нагрузка"); + + b.Property("AxialLoadLimitMax") + .HasColumnType("real") + .HasColumnName("axial_load_limit_max") + .HasComment("Осевая нагрузка. Аварийная макс."); + + b.Property("AxialLoadSp") + .HasColumnType("real") + .HasColumnName("axial_load_sp") + .HasComment("Осевая нагрузка. Задание"); + + b.Property("BitDepth") + .HasColumnType("real") + .HasColumnName("bit_depth") + .HasComment("Положение инструмента"); + + b.Property("BlockPosition") + .HasColumnType("real") + .HasColumnName("block_position") + .HasComment("Высота талевого блока"); + + b.Property("BlockPositionMax") + .HasColumnType("real") + .HasColumnName("block_position_max") + .HasComment("Талевый блок. Макс положение"); + + b.Property("BlockPositionMin") + .HasColumnType("real") + .HasColumnName("block_position_min") + .HasComment("Талевый блок. Мин положение"); + + b.Property("BlockSpeed") + .HasColumnType("real") + .HasColumnName("block_speed") + .HasComment("Скорость талевого блока"); + + b.Property("BlockSpeedSp") + .HasColumnType("real") + .HasColumnName("block_speed_sp") + .HasComment("Скорости талевого блока. Задание"); + + b.Property("BlockSpeedSpDevelop") + .HasColumnType("real") + .HasColumnName("block_speed_sp_develop") + .HasComment("Талевый блок. Задание скорости для проработки"); + + b.Property("BlockSpeedSpRotor") + .HasColumnType("real") + .HasColumnName("block_speed_sp_rotor") + .HasComment("Талевый блок. Задание скорости для роторного бурения"); + + b.Property("BlockSpeedSpSlide") + .HasColumnType("real") + .HasColumnName("block_speed_sp_slide") + .HasComment("Талевый блок. Задание скорости для режима слайда"); + + b.Property("Flow") + .HasColumnType("real") + .HasColumnName("flow") + .HasComment("Расход"); + + b.Property("FlowDeltaLimitMax") + .HasColumnType("real") + .HasColumnName("flow_delta_limit_max") + .HasComment("Расход. Аварийный макс."); + + b.Property("FlowIdle") + .HasColumnType("real") + .HasColumnName("flow_idle") + .HasComment("Расход. Холостой ход"); + + b.Property("HookWeight") + .HasColumnType("real") + .HasColumnName("hook_weight") + .HasComment("Вес на крюке"); + + b.Property("HookWeightIdle") + .HasColumnType("real") + .HasColumnName("hook_weight_idle") + .HasComment("Вес на крюке. Холостой ход"); + + b.Property("HookWeightLimitMax") + .HasColumnType("real") + .HasColumnName("hook_weight_limit_max") + .HasComment("Вес на крюке. Затяжка"); + + b.Property("HookWeightLimitMin") + .HasColumnType("real") + .HasColumnName("hook_weight_limit_min") + .HasComment("Вес на крюке. Посадка"); + + b.Property("IdFeedRegulator") + .HasColumnType("smallint") + .HasColumnName("id_feed_regulator") + .HasComment("Текущий критерий бурения"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("Пользователь САУБ"); + + b.Property("Mode") + .HasColumnType("smallint") + .HasColumnName("mode") + .HasComment("Режим САУБ"); + + b.Property("Mse") + .HasColumnType("real") + .HasColumnName("mse") + .HasComment("MSE"); + + b.Property("MseState") + .HasColumnType("smallint") + .HasColumnName("mse_state") + .HasComment("Текущее состояние работы MSE"); + + b.Property("Pressure") + .HasColumnType("real") + .HasColumnName("pressure") + .HasComment("Давление"); + + b.Property("PressureDeltaLimitMax") + .HasColumnType("real") + .HasColumnName("pressure_delta_limit_max") + .HasComment("Давление дифф. Аварийное макс."); + + b.Property("PressureIdle") + .HasColumnType("real") + .HasColumnName("pressure_idle") + .HasComment("Давление. Холостой ход"); + + b.Property("PressureSp") + .HasColumnType("real") + .HasColumnName("pressure_sp") + .HasComment("Давление. Задание"); + + b.Property("PressureSpDevelop") + .HasColumnType("real") + .HasColumnName("pressure_sp_develop") + .HasComment("Давление. Задание для проработки"); + + b.Property("PressureSpRotor") + .HasColumnType("real") + .HasColumnName("pressure_sp_rotor") + .HasComment("Давление. Задание для роторного бурения"); + + b.Property("PressureSpSlide") + .HasColumnType("real") + .HasColumnName("pressure_sp_slide") + .HasComment("Давление. Задание для режима слайда"); + + b.Property("Pump0Flow") + .HasColumnType("real") + .HasColumnName("pump0_flow") + .HasComment("Расход. Буровой насос 1"); + + b.Property("Pump1Flow") + .HasColumnType("real") + .HasColumnName("pump1_flow") + .HasComment("Расход. Буровой насос 2"); + + b.Property("Pump2Flow") + .HasColumnType("real") + .HasColumnName("pump2_flow") + .HasComment("Расход. Буровой насос 3"); + + b.Property("RotorSpeed") + .HasColumnType("real") + .HasColumnName("rotor_speed") + .HasComment("Обороты ротора"); + + b.Property("RotorTorque") + .HasColumnType("real") + .HasColumnName("rotor_torque") + .HasComment("Момент на роторе"); + + b.Property("RotorTorqueIdle") + .HasColumnType("real") + .HasColumnName("rotor_torque_idle") + .HasComment("Момент на роторе. Холостой ход"); + + b.Property("RotorTorqueLimitMax") + .HasColumnType("real") + .HasColumnName("rotor_torque_limit_max") + .HasComment("Момент на роторе. Аварийный макс."); + + b.Property("RotorTorqueSp") + .HasColumnType("real") + .HasColumnName("rotor_torque_sp") + .HasComment("Момент на роторе. Задание"); + + b.Property("WellDepth") + .HasColumnType("real") + .HasColumnName("well_depth") + .HasComment("Глубина забоя"); + + b.HasKey("IdTelemetry", "DateTime"); + + b.ToTable("t_telemetry_data_saub", t => + { + t.HasComment("набор основных данных по SAUB"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSaubStat", b => + { + b.Property("Count") + .HasColumnType("bigint") + .HasColumnName("count_items"); + + b.Property("DateMax") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_max"); + + b.Property("DateMin") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_min"); + + b.Property("DepthMax") + .HasColumnType("real") + .HasColumnName("depth_max"); + + b.Property("DepthMin") + .HasColumnType("real") + .HasColumnName("depth_min"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.ToTable((string)null); + + b.ToView("mw_telemetry_datas_saub_stat", (string)null); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSpin", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("DateTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("date") + .HasComment("'2021-10-19 18:23:54+05'"); + + b.Property("Mode") + .HasColumnType("smallint") + .HasColumnName("mode") + .HasComment("Выбранный режим управления"); + + b.Property("PositionRight") + .HasColumnType("real") + .HasColumnName("position_right") + .HasComment("Крайний правый угол осцилляции"); + + b.Property("PositionZero") + .HasColumnType("real") + .HasColumnName("position_zero") + .HasComment("Нулевая позиция осцилляции"); + + b.Property("RevolsLeftLimit") + .HasColumnType("real") + .HasColumnName("revols_left_limit") + .HasComment("Ограничение числа оборотов влево"); + + b.Property("RevolsLeftTotal") + .HasColumnType("real") + .HasColumnName("revols_left_total") + .HasComment("Суммарное количество оборотов влево"); + + b.Property("RevolsRightLimit") + .HasColumnType("real") + .HasColumnName("revols_right_limit") + .HasComment("Ограничение числа оборотов вправо"); + + b.Property("RevolsRightTotal") + .HasColumnType("real") + .HasColumnName("revols_right_total") + .HasComment("Суммарное количество оборотов вправо"); + + b.Property("SpeedLeftSp") + .HasColumnType("real") + .HasColumnName("speed_left_sp") + .HasComment("Заданная скорость вращения влево"); + + b.Property("SpeedRightSp") + .HasColumnType("real") + .HasColumnName("speed_right_sp") + .HasComment("Заданная скорость вращения вправо"); + + b.Property("State") + .HasColumnType("smallint") + .HasColumnName("state") + .HasComment("Переменная этапа"); + + b.HasKey("IdTelemetry", "DateTime"); + + b.ToTable("t_telemetry_data_spin", t => + { + t.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") + .IsRequired() + .HasColumnType("text") + .HasColumnName("message_template"); + + b.HasKey("IdTelemetry", "IdEvent"); + + b.ToTable("t_telemetry_event", t => + { + t.HasComment("Справочник событий. События формируют сообщения. Разделено по версиям посылок от телеметрии."); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + 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("DateTime") + .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.Property("WellDepth") + .HasColumnType("double precision") + .HasColumnName("well_depth"); + + b.HasKey("Id"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_telemetry_message", t => + { + t.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") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("surname"); + + b.HasKey("IdTelemetry", "IdUser"); + + b.ToTable("t_telemetry_user", t => + { + t.HasComment("Пользователи панели САУБ. Для сообщений."); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryWirelineRunOut", b => + { + b.Property("IdTelemetry") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id_telemetry") + .HasComment("Идентификатор телеметрии"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("IdTelemetry")); + + b.Property("DateTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_time") + .HasComment("Отметка времени"); + + b.Property("Hauling") + .HasColumnType("real") + .HasColumnName("hauling") + .HasComment("Наработка талевого каната с момента перетяжки каната, т*км"); + + b.Property("HaulingWarnSp") + .HasColumnType("real") + .HasColumnName("hauling_warn_sp") + .HasComment("Наработка талевого каната до сигнализации о необходимости перетяжки, т*км"); + + b.Property("Replace") + .HasColumnType("real") + .HasColumnName("replace") + .HasComment("Наработка талевого каната с момента замены каната, т*км"); + + b.Property("ReplaceWarnSp") + .HasColumnType("real") + .HasColumnName("replace_warn_sp") + .HasComment("Наработка талевого каната до сигнализации о необходимости замены, т*км"); + + b.HasKey("IdTelemetry"); + + b.ToTable("t_telemetry_wireline_run_out", t => + { + t.HasComment("Наработка талевого каната"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Trajectory.TrajectoryFact", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AzimuthGeo") + .HasColumnType("double precision") + .HasColumnName("azimuth_geo") + .HasComment("Азимут Географ."); + + b.Property("AzimuthMagnetic") + .HasColumnType("double precision") + .HasColumnName("azimuth_magnetic") + .HasComment("Азимут Магнитный"); + + b.Property("Comment") + .HasColumnType("text") + .HasColumnName("comment") + .HasComment("Комментарии"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("ID пользователя который внес/изменил запись"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("ID скважины"); + + b.Property("UpdateDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("update_date") + .HasComment("Дата загрузки траектории"); + + b.Property("VerticalDepth") + .HasColumnType("double precision") + .HasColumnName("vertical_depth") + .HasComment("Глубина вертикальная"); + + b.Property("WellboreDepth") + .HasColumnType("double precision") + .HasColumnName("wellbore_depth") + .HasComment("Глубина по стволу"); + + b.Property("ZenithAngle") + .HasColumnType("double precision") + .HasColumnName("zenith_angle") + .HasComment("Угол зенитный"); + + b.HasKey("Id"); + + b.HasIndex("IdUser"); + + b.HasIndex("IdWell"); + + b.ToTable("t_trajectory_fact", t => + { + t.HasComment("Загрузка фактической траектории"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Trajectory.TrajectoryPlan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AzimuthGeo") + .HasColumnType("double precision") + .HasColumnName("azimuth_geo") + .HasComment("Азимут Географ."); + + b.Property("AzimuthMagnetic") + .HasColumnType("double precision") + .HasColumnName("azimuth_magnetic") + .HasComment("Азимут Магнитный"); + + b.Property("Comment") + .HasColumnType("text") + .HasColumnName("comment") + .HasComment("Комментарии"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("ID пользователя который внес/изменил запись"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("ID скважины"); + + b.Property("Radius") + .HasColumnType("double precision") + .HasColumnName("radius") + .HasComment("Радиус цели"); + + b.Property("UpdateDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("update_date") + .HasComment("Дата загрузки траектории"); + + b.Property("VerticalDepth") + .HasColumnType("double precision") + .HasColumnName("vertical_depth") + .HasComment("Глубина вертикальная"); + + b.Property("WellboreDepth") + .HasColumnType("double precision") + .HasColumnName("wellbore_depth") + .HasComment("Глубина по стволу"); + + b.Property("ZenithAngle") + .HasColumnType("double precision") + .HasColumnName("zenith_angle") + .HasComment("Угол зенитный"); + + b.HasKey("Id"); + + b.HasIndex("IdUser"); + + b.HasIndex("IdWell"); + + b.ToTable("t_trajectory_plan", t => + { + t.HasComment("Загрузка плановой траектории"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Email") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("email") + .HasComment("должность"); + + b.Property("IdCompany") + .HasColumnType("integer") + .HasColumnName("id_company"); + + b.Property("IdState") + .HasColumnType("smallint") + .HasColumnName("state") + .HasComment("состояние:\n0 - не активен, \n1 - активен, \n2 - заблокирован"); + + b.Property("Login") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("login"); + + b.Property("Name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasComment("имя"); + + b.Property("PasswordHash") + .IsRequired() + .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("Surname") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("surname") + .HasComment("фамилия"); + + b.HasKey("Id"); + + b.HasIndex("IdCompany"); + + b.HasIndex("Login") + .IsUnique(); + + b.ToTable("t_user", t => + { + t.HasComment("Пользователи облака"); + }); + + b.HasData( + new + { + Id = 1, + Email = "", + IdCompany = 1, + IdState = (short)1, + Login = "dev", + Name = "Разработчик", + PasswordHash = "Vlcj|4fa529103dde7ff72cfe76185f344d4aa87931f8e1b2044e8a7739947c3d18923464eaad93843e4f809c5e126d013072" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.UserRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.Property("IdType") + .HasColumnType("integer") + .HasColumnName("id_type") + .HasComment("0-роль из стандартной матрицы, \n1-специальная роль для какого-либо пользователя"); + + b.HasKey("Id"); + + b.ToTable("t_user_role", t => + { + t.HasComment("Роли пользователей в системе"); + }); + + b.HasData( + new + { + Id = 1, + Caption = "root", + IdType = 1 + }, + new + { + Id = 1100, + Caption = "admin_cluster.view", + IdType = 1 + }, + new + { + Id = 1101, + Caption = "admin_cluster.edit", + IdType = 1 + }, + new + { + Id = 1102, + Caption = "admin_company.view", + IdType = 1 + }, + new + { + Id = 1103, + Caption = "admin_company.edit", + IdType = 1 + }, + new + { + Id = 1104, + Caption = "admin_company_type.view", + IdType = 1 + }, + new + { + Id = 1105, + Caption = "admin_company_type.edit", + IdType = 1 + }, + new + { + Id = 1106, + Caption = "admin_deposit.view", + IdType = 1 + }, + new + { + Id = 1107, + Caption = "admin_deposit.edit", + IdType = 1 + }, + new + { + Id = 1108, + Caption = "admin_permission.view", + IdType = 1 + }, + new + { + Id = 1109, + Caption = "admin_permission.edit", + IdType = 1 + }, + new + { + Id = 1110, + Caption = "admin_role.view", + IdType = 1 + }, + new + { + Id = 1111, + Caption = "admin_role.edit", + IdType = 1 + }, + new + { + Id = 1112, + Caption = "admin_telemetry.view", + IdType = 1 + }, + new + { + Id = 1113, + Caption = "admin_user.view", + IdType = 1 + }, + new + { + Id = 1114, + Caption = "admin_user.edit", + IdType = 1 + }, + new + { + Id = 1115, + Caption = "admin_visit_log.view", + IdType = 1 + }, + new + { + Id = 1116, + Caption = "admin_well.view", + IdType = 1 + }, + new + { + Id = 1117, + Caption = "admin_well.edit", + IdType = 1 + }, + new + { + Id = 1200, + Caption = "archive.view", + IdType = 1 + }, + new + { + Id = 1201, + Caption = "cluster.view", + IdType = 1 + }, + new + { + Id = 1202, + Caption = "composite.view", + IdType = 1 + }, + new + { + Id = 1203, + Caption = "composite.edit", + IdType = 1 + }, + new + { + Id = 1204, + Caption = "deposit.view", + IdType = 1 + }, + new + { + Id = 1205, + Caption = "document.view", + IdType = 1 + }, + new + { + Id = 1206, + Caption = "drillProcessFlow.view", + IdType = 1 + }, + new + { + Id = 1207, + Caption = "drillProcessFlow.edit", + IdType = 1 + }, + new + { + Id = 1208, + Caption = "measure.view", + IdType = 1 + }, + new + { + Id = 1209, + Caption = "measure.edit", + IdType = 1 + }, + new + { + Id = 1210, + Caption = "message.view", + IdType = 1 + }, + new + { + Id = 1211, + Caption = "operations.view", + IdType = 1 + }, + new + { + Id = 1212, + Caption = "operations.edit", + IdType = 1 + }, + new + { + Id = 1213, + Caption = "params.view", + IdType = 1 + }, + new + { + Id = 1214, + Caption = "params.edit", + IdType = 1 + }, + new + { + Id = 1215, + Caption = "report.view", + IdType = 1 + }, + new + { + Id = 1216, + Caption = "report.edit", + IdType = 1 + }, + new + { + Id = 1217, + Caption = "setpoints.view", + IdType = 1 + }, + new + { + Id = 1218, + Caption = "setpoints.edit", + IdType = 1 + }, + new + { + Id = 1219, + Caption = "telemetry.view", + IdType = 1 + }, + new + { + Id = 1220, + Caption = "telemetryAnalysis.view", + IdType = 1 + }, + new + { + Id = 1221, + Caption = "well.view", + IdType = 1 + }, + new + { + Id = 1500, + Caption = "Просмотр всего", + IdType = 1 + }, + new + { + Id = 1501, + Caption = "file.edit", + IdType = 1 + }, + new + { + Id = 1502, + Caption = "drillingProgram.edit", + IdType = 1 + }, + new + { + Id = 2000, + Caption = "Заказчик", + IdType = 0 + }, + new + { + Id = 2001, + Caption = "Супервайзер", + IdType = 0 + }, + new + { + Id = 2002, + Caption = "Буровой подрядчик", + IdType = 0 + }, + new + { + Id = 2003, + Caption = "Растворщик", + IdType = 0 + }, + new + { + Id = 2004, + Caption = "Телеметрист", + IdType = 0 + }, + new + { + Id = 2005, + Caption = "Долотный сервис", + IdType = 0 + }, + new + { + Id = 2006, + Caption = "ГТИ", + IdType = 0 + }, + new + { + Id = 2007, + Caption = "Цементирование", + IdType = 0 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.UserSetting", b => + { + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user"); + + b.Property("Key") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("key") + .HasComment("Ключ настроек пользователя"); + + b.Property("Value") + .HasColumnType("jsonb") + .HasColumnName("setting_value") + .HasComment("Значение настроек пользователя"); + + b.HasKey("IdUser", "Key"); + + b.ToTable("t_user_settings", t => + { + t.HasComment("настройки интерфейса пользователя"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.RecordBase", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("DateTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Actcod") + .HasColumnType("smallint") + .HasColumnName("ACTCOD"); + + b.Property("Date") + .HasColumnType("integer") + .HasColumnName("DATE"); + + b.Property("Recid") + .HasColumnType("smallint") + .HasColumnName("RECID"); + + b.Property("Seqid") + .HasColumnType("integer") + .HasColumnName("SEQID"); + + b.Property("Stknum") + .HasColumnType("smallint") + .HasColumnName("STKNUM"); + + b.Property("Time") + .HasColumnType("integer") + .HasColumnName("TIME"); + + b.Property("Wellid") + .HasColumnType("text") + .HasColumnName("WELLID"); + + b.HasKey("IdTelemetry", "DateTime"); + + b.ToTable("t_telemetry_wits_base"); + + b.UseTptMappingStrategy(); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Well", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.Property("IdCluster") + .HasColumnType("integer") + .HasColumnName("id_cluster"); + + b.Property("IdState") + .HasColumnType("integer") + .HasColumnName("state") + .HasComment("0 - неизвестно, 1 - в работе, 2 - завершена"); + + 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.Property("Timezone") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("timezone") + .HasComment("Смещение часового пояса от UTC"); + + b.HasKey("Id"); + + b.HasIndex("IdCluster"); + + b.HasIndex("IdTelemetry") + .IsUnique(); + + b.HasIndex("IdWellType"); + + b.ToTable("t_well", t => + { + t.HasComment("скважины"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellComposite", b => + { + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины получателя"); + + b.Property("IdWellSrc") + .HasColumnType("integer") + .HasColumnName("id_well_src") + .HasComment("Id скважины композита"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_well_section_type") + .HasComment("Id тип секции композита"); + + b.HasKey("IdWell", "IdWellSrc", "IdWellSectionType"); + + b.HasIndex("IdWellSectionType"); + + b.HasIndex("IdWellSrc"); + + b.ToTable("t_well_composite", t => + { + t.HasComment("Композитная скважина"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellFinalDocument", b => + { + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category"); + + b.HasKey("IdWell", "IdUser", "IdCategory") + .HasName("t_well_final_documents_pk"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdUser"); + + b.ToTable("t_well_final_documents", t => + { + t.HasComment("Дело скважины"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CategoryInfo") + .HasColumnType("text") + .HasColumnName("category_info") + .HasComment("Доп. информация к выбраной категории"); + + b.Property("Comment") + .HasColumnType("text") + .HasColumnName("comment") + .HasComment("Комментарий"); + + b.Property("DateStart") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_start") + .HasComment("Дата начала операции"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина после завершения операции, м"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Глубина на начало операции, м"); + + b.Property("DurationHours") + .HasColumnType("double precision") + .HasColumnName("duration_hours") + .HasComment("Продолжительность, часы"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("Id категории операции"); + + b.Property("IdPlan") + .HasColumnType("integer") + .HasColumnName("id_plan") + .HasComment("Id плановой операции"); + + b.Property("IdType") + .HasColumnType("integer") + .HasColumnName("id_type") + .HasComment("0 = План или 1 = Факт"); + + b.Property("IdUser") + .HasColumnType("integer"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_well_section_type") + .HasComment("Id тип секции скважины"); + + b.Property("LastUpdateDate") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("DateStart"); + + b.HasIndex("DepthEnd"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdPlan"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellSectionType"); + + b.ToTable("t_well_operation", t => + { + t.HasComment("Данные по операциям на скважине"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperationCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IdParent") + .HasColumnType("integer") + .HasColumnName("id_parent") + .HasComment("id родительской категории"); + + b.Property("IsHidden") + .HasColumnType("boolean"); + + b.Property("KeyValueName") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("key_value_name") + .HasComment("Название ключевого показателя операции"); + + b.Property("KeyValueUnits") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("key_value_units") + .HasComment("Единицы измерения ключевого показателя операции"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название категории операции"); + + b.HasKey("Id"); + + b.HasIndex("IdParent"); + + b.ToTable("t_well_operation_category", t => + { + t.HasComment("Справочник операций на скважине"); + }); + + b.HasData( + new + { + Id = 3000, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "м/ч", + Name = "БУРЕНИЕ" + }, + new + { + Id = 3001, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "СПО" + }, + new + { + Id = 3002, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "КРЕПЛЕНИЕ" + }, + new + { + Id = 3003, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "ГФР" + }, + new + { + Id = 3004, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Вспомогательные операции" + }, + new + { + Id = 3005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Непроизводительное время (НПВ)" + }, + new + { + Id = 3006, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Заключительные работы" + }, + new + { + Id = 4000, + IdParent = 3000, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "КНБК" + }, + new + { + Id = 4001, + IdParent = 3000, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "м/ч", + Name = "Механическое. бурение" + }, + new + { + Id = 4002, + IdParent = 3000, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Статический замер" + }, + new + { + Id = 4003, + IdParent = 3000, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Нормализация диаметра скважины" + }, + new + { + Id = 4004, + IdParent = 3000, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Наращивание" + }, + new + { + Id = 4005, + IdParent = 3001, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "СПО" + }, + new + { + Id = 4006, + IdParent = 3002, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Спуск обсадной колонны" + }, + new + { + Id = 4018, + IdParent = 3002, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Крепление" + }, + new + { + Id = 4007, + IdParent = 3002, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Цементирование" + }, + new + { + Id = 4008, + IdParent = 3002, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Вспомогательные работы при креплении" + }, + new + { + Id = 4009, + IdParent = 3003, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Сборка/разборка приборов ГИС" + }, + new + { + Id = 4010, + IdParent = 3003, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "СПО" + }, + new + { + Id = 4011, + IdParent = 3003, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "ГИС" + }, + new + { + Id = 4012, + IdParent = 3004, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Промывка, ОБР" + }, + new + { + Id = 4013, + IdParent = 3004, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Вспомогательные работы" + }, + new + { + Id = 4014, + IdParent = 3005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Ремонт оборудования" + }, + new + { + Id = 4015, + IdParent = 3005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Аварийные работы" + }, + new + { + Id = 4016, + IdParent = 3005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Осложнение" + }, + new + { + Id = 4017, + IdParent = 3005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Незаложенные в ГГД операции" + }, + new + { + Id = 4019, + IdParent = 3006, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Заключительные операции" + }, + new + { + Id = 5000, + IdParent = 4000, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Разборка КНБК" + }, + new + { + Id = 5001, + IdParent = 4000, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Сборка КНБК" + }, + new + { + Id = 5002, + IdParent = 4001, + IsHidden = true, + KeyValueName = "МСП", + KeyValueUnits = "м/ч", + Name = "Бурение слайдом" + }, + new + { + Id = 5003, + IdParent = 4001, + IsHidden = true, + KeyValueName = "МСП", + KeyValueUnits = "м/ч", + Name = "Бурение ротором" + }, + new + { + Id = 5004, + IdParent = 4002, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Замер ЗТС (запись MWD)" + }, + new + { + Id = 5005, + IdParent = 4003, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Промывка перед наращиванием" + }, + new + { + Id = 5006, + IdParent = 4003, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Проработка во время бурения" + }, + new + { + Id = 5007, + IdParent = 4003, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Проработка" + }, + new + { + Id = 5008, + IdParent = 4003, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Шаблонировка во время бурения" + }, + new + { + Id = 5009, + IdParent = 4003, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Шаблонировка перед наращиванием" + }, + new + { + Id = 5010, + IdParent = 4004, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Наращивание" + }, + new + { + Id = 5011, + IdParent = 4004, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Удержание в клиньях" + }, + new + { + Id = 5012, + IdParent = 4005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Подъем инструмента" + }, + new + { + Id = 5013, + IdParent = 4005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Подъем КНБК" + }, + new + { + Id = 5014, + IdParent = 4005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Спуск инструмента" + }, + new + { + Id = 5015, + IdParent = 4005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Спуск КНБК" + }, + new + { + Id = 5016, + IdParent = 4006, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Промывка при спуске ОК" + }, + new + { + Id = 5017, + IdParent = 4006, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Спуск ОК" + }, + new + { + Id = 5018, + IdParent = 4007, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "ОЗЦ" + }, + new + { + Id = 5019, + IdParent = 4007, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Цементирование" + }, + new + { + Id = 5020, + IdParent = 4008, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Опрессовка БИ" + }, + new + { + Id = 5021, + IdParent = 4008, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Опрессовка ОК" + }, + new + { + Id = 5022, + IdParent = 4008, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "ПЗР при спуске ОК" + }, + new + { + Id = 5023, + IdParent = 4008, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "ПЗР при цементировании" + }, + new + { + Id = 5024, + IdParent = 4009, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Разборка комплекса приборов ГИС" + }, + new + { + Id = 5025, + IdParent = 4009, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Сборка комплекса приборов ГИС" + }, + new + { + Id = 5026, + IdParent = 4010, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Подъем приборов ГИС (на трубах)" + }, + new + { + Id = 5027, + IdParent = 4010, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Спуск приборов ГИС (на трубах)" + }, + new + { + Id = 5028, + IdParent = 4011, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Комплекс ГИС на жестком кабеле" + }, + new + { + Id = 5029, + IdParent = 4011, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Комплекс ГИС на кабеле" + }, + new + { + Id = 5030, + IdParent = 4011, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Комплекс ГИС на трубах" + }, + new + { + Id = 5031, + IdParent = 4012, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Закачка/прокачка пачки" + }, + new + { + Id = 5032, + IdParent = 4012, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Обработка БР" + }, + new + { + Id = 5033, + IdParent = 4012, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Ориентирование ТС при бурении" + }, + new + { + Id = 5034, + IdParent = 4012, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Перезапись гаммы-каротажа" + }, + new + { + Id = 5035, + IdParent = 4012, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Приготовление БР" + }, + new + { + Id = 5036, + IdParent = 4012, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Промывка" + }, + new + { + Id = 5037, + IdParent = 4012, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Разбуривание тех.оснастки" + }, + new + { + Id = 5038, + IdParent = 4012, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Спуск инструмента с проработкой" + }, + new + { + Id = 5039, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "ВМР" + }, + new + { + Id = 5040, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Демонтаж ПВО" + }, + new + { + Id = 5041, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Долив затруба при подъёме" + }, + new + { + Id = 5042, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Монтаж ПВО" + }, + new + { + Id = 5043, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Наработка жёлоба" + }, + new + { + Id = 5044, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Обвязка устья с циркуляционной системой" + }, + new + { + Id = 5045, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Оборудование устья" + }, + new + { + Id = 5046, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Опрессовка ПВО" + }, + new + { + Id = 5047, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Перемонтаж ПВО " + }, + new + { + Id = 5048, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Перетяжка талевого каната" + }, + new + { + Id = 5049, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "ПЗР при сборке КНБК" + }, + new + { + Id = 5050, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Полная замена талевого каната" + }, + new + { + Id = 5051, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "ПР перед забуркой направления" + }, + new + { + Id = 5052, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Продувка манифольда" + }, + new + { + Id = 5053, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Срезка" + }, + new + { + Id = 5054, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Тайм-дриллинг" + }, + new + { + Id = 5055, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Тех.отстой" + }, + new + { + Id = 5056, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Учебная тревога \"Выброс\"" + }, + new + { + Id = 5057, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Чистка ЦСГО/емкостного блока" + }, + new + { + Id = 5058, + IdParent = 4014, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Ремонт бурового оборудования" + }, + new + { + Id = 5059, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Ловильные работы" + }, + new + { + Id = 5060, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Ожидание" + }, + new + { + Id = 5061, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Определение места прихвата и ЛМ" + }, + new + { + Id = 5062, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Работа яссом" + }, + new + { + Id = 5063, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Расхаживание" + }, + new + { + Id = 5064, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "СПО - колокол" + }, + new + { + Id = 5065, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "СПО - метчик" + }, + new + { + Id = 5066, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "СПО - овершот" + }, + new + { + Id = 5067, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "СПО - труболовка" + }, + new + { + Id = 5068, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Торпедирование (встряхивание)" + }, + new + { + Id = 5069, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Торпедирование (отстрел)" + }, + new + { + Id = 5070, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Установка ванн" + }, + new + { + Id = 5071, + IdParent = 4015, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Фрезеровка" + }, + new + { + Id = 5072, + IdParent = 4016, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Контролируемое ГНВП" + }, + new + { + Id = 5073, + IdParent = 4016, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Поглощение" + }, + new + { + Id = 5074, + IdParent = 4016, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Сальникообразование" + }, + new + { + Id = 5075, + IdParent = 4016, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Утяжеление БР" + }, + new + { + Id = 5076, + IdParent = 4017, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "НПВ / прочее" + }, + new + { + Id = 5077, + IdParent = 4017, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Обработка раствора (несоответствие параметров)" + }, + new + { + Id = 5078, + IdParent = 4017, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "подъем ОК" + }, + new + { + Id = 5079, + IdParent = 4017, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Ревизия КНБК/инструмента/ЗТС" + }, + new + { + Id = 5082, + IdParent = 4000, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Сборка устройства ориентирования КО" + }, + new + { + Id = 5083, + IdParent = 4003, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Проработка принудительная" + }, + new + { + Id = 5084, + IdParent = 4005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Шаблонировка подъем БИ, продувка" + }, + new + { + Id = 5085, + IdParent = 4005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Спуск бурильного инструмента со сборкой с мостков" + }, + new + { + Id = 5086, + IdParent = 4005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Подъем БИ с выбросом на мостки" + }, + new + { + Id = 5087, + IdParent = 4005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Спуск БИ со сборкой с мостков" + }, + new + { + Id = 5088, + IdParent = 4005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Сборка и спуск ТБТ" + }, + new + { + Id = 5089, + IdParent = 4005, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Спуск КО на транспортной колонне" + }, + new + { + Id = 5090, + IdParent = 4008, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Отворот допускной трубы" + }, + new + { + Id = 5091, + IdParent = 4008, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Активация подвески, опрессовка" + }, + new + { + Id = 5092, + IdParent = 4008, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Монтаж, опрессовка ФА" + }, + new + { + Id = 5093, + IdParent = 4008, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Сборка хвостовика 114мм (согласно схеме)" + }, + new + { + Id = 5094, + IdParent = 4008, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "ПЗР к спуску УЭЦН" + }, + new + { + Id = 5095, + IdParent = 4008, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Активация подвески (потайной колонны, хвостовика)" + }, + new + { + Id = 5096, + IdParent = 4008, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Шаблонирование перед спуском" + }, + new + { + Id = 5097, + IdParent = 4012, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Промывка - перевод скважины на новый раствор" + }, + new + { + Id = 5098, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Сборка БИ с мостков на подсвечник" + }, + new + { + Id = 5099, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Подготовка ствола скважины. Перезапись ГК в интервале установки КО." + }, + new + { + Id = 5100, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Смена рабочего переводника ВСП" + }, + new + { + Id = 5101, + IdParent = 4014, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Ремонт" + }, + new + { + Id = 5102, + IdParent = 4018, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Спуск пакера" + }, + new + { + Id = 5103, + IdParent = 4011, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Запись гамма-каратожа" + }, + new + { + Id = 5104, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Шаблонирование спуск БИ" + }, + new + { + Id = 5105, + IdParent = 4018, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Сборка клин-отклонителя" + }, + new + { + Id = 5106, + IdParent = 4018, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Ориентирование и посадка клина-отклонителя" + }, + new + { + Id = 5107, + IdParent = 4018, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Протяжка подъемного патрубка подвески" + }, + new + { + Id = 5108, + IdParent = 4018, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Подъем клина-отклонителя" + }, + new + { + Id = 5109, + IdParent = 4018, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Стыковка стингера с хвостовиком основного ствола" + }, + new + { + Id = 5110, + IdParent = 4018, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Ориентирование и установка стыковочного узла хвостовика" + }, + new + { + Id = 5111, + IdParent = 4001, + IsHidden = false, + KeyValueName = "МСП", + KeyValueUnits = "м/ч", + Name = "Бурение с отбором керна" + }, + new + { + Id = 5112, + IdParent = 4018, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Работа пакером в обсадной колонне" + }, + new + { + Id = 5113, + IdParent = 4001, + IsHidden = false, + KeyValueName = "МСП", + KeyValueUnits = "м/ч", + Name = "Бурение" + }, + new + { + Id = 5114, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "ТО оборудования" + }, + new + { + Id = 5115, + IdParent = 4019, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Спуск НКТ" + }, + new + { + Id = 5116, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Вырезка окна" + }, + new + { + Id = 5117, + IdParent = 4013, + IsHidden = false, + KeyValueName = "dT", + KeyValueUnits = "мин", + Name = "Расширение ствола" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellSectionType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.Property("Order") + .HasColumnType("real") + .HasColumnName("order") + .HasComment("Порядок"); + + b.HasKey("Id"); + + b.ToTable("t_well_section_type", t => + { + t.HasComment("конструкция секции скважины"); + }); + + b.HasData( + new + { + Id = 1, + Caption = "Пилотный ствол", + Order = 4f + }, + new + { + Id = 2, + Caption = "Направление", + Order = 0f + }, + new + { + Id = 3, + Caption = "Кондуктор", + Order = 1f + }, + new + { + Id = 4, + Caption = "Эксплуатационная колонна", + Order = 3f + }, + new + { + Id = 5, + Caption = "Транспортный ствол", + Order = 5f + }, + new + { + Id = 6, + Caption = "Хвостовик", + Order = 6f + }, + new + { + Id = 7, + Caption = "Пилотный ствол 2", + Order = 4.1f + }, + new + { + Id = 8, + Caption = "Направление 2", + Order = 0.1f + }, + new + { + Id = 9, + Caption = "Кондуктор 2", + Order = 1.1f + }, + new + { + Id = 10, + Caption = "Эксплуатационная колонна 2", + Order = 3.1f + }, + new + { + Id = 11, + Caption = "Транспортный ствол 2", + Order = 5.1f + }, + new + { + Id = 12, + Caption = "Хвостовик 2", + Order = 6.1f + }, + new + { + Id = 13, + Caption = "Пилотный ствол 3", + Order = 4.2f + }, + new + { + Id = 14, + Caption = "Направление 3", + Order = 0.2f + }, + new + { + Id = 15, + Caption = "Кондуктор 3", + Order = 1.2f + }, + new + { + Id = 16, + Caption = "Эксплуатационная колонна 3", + Order = 3.2f + }, + new + { + Id = 17, + Caption = "Транспортный ствол 3", + Order = 5.2f + }, + new + { + Id = 18, + Caption = "Хвостовик 3", + Order = 6.2f + }, + new + { + Id = 19, + Caption = "Пилотный ствол 4", + Order = 4.3f + }, + new + { + Id = 20, + Caption = "Направление 4", + Order = 0.3f + }, + new + { + Id = 21, + Caption = "Кондуктор 4", + Order = 1.3f + }, + new + { + Id = 22, + Caption = "Эксплуатационная колонна 4", + Order = 3.3f + }, + new + { + Id = 23, + Caption = "Транспортный ствол 4", + Order = 5.3f + }, + new + { + Id = 24, + Caption = "Хвостовик 4", + Order = 6.3f + }, + new + { + Id = 25, + Caption = "Пилотный ствол 5", + Order = 4.4f + }, + new + { + Id = 26, + Caption = "Направление 5", + Order = 0.4f + }, + new + { + Id = 27, + Caption = "Кондуктор 5", + Order = 1.4f + }, + new + { + Id = 28, + Caption = "Эксплуатационная колонна 5", + Order = 3.4f + }, + new + { + Id = 29, + Caption = "Транспортный ствол 5", + Order = 5.4f + }, + new + { + Id = 30, + Caption = "Хвостовик 5", + Order = 6.4f + }, + new + { + Id = 31, + Caption = "Техническая колонна", + Order = 2f + }, + new + { + Id = 32, + Caption = "Техническая колонна 2", + Order = 2.1f + }, + new + { + Id = 33, + Caption = "Техническая колонна 3", + Order = 2.2f + }, + new + { + Id = 34, + Caption = "Хвостовик 6", + Order = 6.5f + }, + new + { + Id = 35, + Caption = "Хвостовик 7", + Order = 6.6f + }, + new + { + Id = 36, + Caption = "Хвостовик 8", + Order = 6.7f + }, + new + { + Id = 37, + Caption = "Хвостовик 9", + Order = 6.8f + }, + new + { + Id = 38, + Caption = "Хвостовик 10", + Order = 6.9f + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellSections.WellSectionPlan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Конечная глубина бурения, м"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Начальная глубина бурения, м"); + + b.Property("IdSectionType") + .HasColumnType("integer") + .HasColumnName("id_section_type") + .HasComment("Тип секции"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("Id пользователя"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины"); + + b.Property("InnerDiameter") + .HasColumnType("double precision") + .HasColumnName("inner_diameter") + .HasComment("Внутренний диаметр"); + + b.Property("LastUpdateDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_last_update") + .HasComment("Дата последнего обновления"); + + b.Property("OuterDiameter") + .HasColumnType("double precision") + .HasColumnName("outer_diameter") + .HasComment("Внешний диаметр"); + + b.HasKey("Id"); + + b.HasIndex("IdSectionType"); + + b.HasIndex("IdWell", "IdSectionType") + .IsUnique(); + + b.ToTable("t_well_section_plan"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.HasKey("Id"); + + b.ToTable("t_well_type", t => + { + t.HasComment("конструкция скважины"); + }); + + b.HasData( + new + { + Id = 1, + Caption = "Наклонно-направленная" + }, + new + { + Id = 2, + Caption = "Горизонтальная" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.Record1", b => + { + b.HasBaseType("AsbCloudDb.Model.WITS.RecordBase"); + + b.Property("Blkpos") + .HasColumnType("real") + .HasColumnName("BLKPOS"); + + b.Property("Chkp") + .HasColumnType("real") + .HasColumnName("CHKP"); + + b.Property("Deptbitm") + .HasColumnType("real") + .HasColumnName("DEPTBITM"); + + b.Property("Deptbitv") + .HasColumnType("real") + .HasColumnName("DEPTBITV"); + + b.Property("Deptmeas") + .HasColumnType("real") + .HasColumnName("DEPTMEAS"); + + b.Property("Deptretm") + .HasColumnType("real") + .HasColumnName("DEPTRETM"); + + b.Property("Deptvert") + .HasColumnType("real") + .HasColumnName("DEPTVERT"); + + b.Property("Gasa") + .HasColumnType("real") + .HasColumnName("GASA"); + + b.Property("Hkla") + .HasColumnType("real") + .HasColumnName("HKLA"); + + b.Property("Hklx") + .HasColumnType("real") + .HasColumnName("HKLX"); + + b.Property("Lagstks") + .HasColumnType("smallint") + .HasColumnName("LAGSTKS"); + + b.Property("Mcia") + .HasColumnType("real") + .HasColumnName("MCIA"); + + b.Property("Mcoa") + .HasColumnType("real") + .HasColumnName("MCOA"); + + b.Property("Mdia") + .HasColumnType("real") + .HasColumnName("MDIA"); + + b.Property("Mdoa") + .HasColumnType("real") + .HasColumnName("MDOA"); + + b.Property("Mfia") + .HasColumnType("real") + .HasColumnName("MFIA"); + + b.Property("Mfoa") + .HasColumnType("real") + .HasColumnName("MFOA"); + + b.Property("Mfop") + .HasColumnType("smallint") + .HasColumnName("MFOP"); + + b.Property("Mtia") + .HasColumnType("real") + .HasColumnName("MTIA"); + + b.Property("Mtoa") + .HasColumnType("real") + .HasColumnName("MTOA"); + + b.Property("Ropa") + .HasColumnType("real") + .HasColumnName("ROPA"); + + b.Property("Rpma") + .HasColumnType("smallint") + .HasColumnName("RPMA"); + + b.Property("Spare1") + .HasColumnType("real") + .HasColumnName("SPARE1"); + + b.Property("Spare2") + .HasColumnType("real") + .HasColumnName("SPARE2"); + + b.Property("Spare3") + .HasColumnType("real") + .HasColumnName("SPARE3"); + + b.Property("Spare4") + .HasColumnType("real") + .HasColumnName("SPARE4"); + + b.Property("Spare5") + .HasColumnType("real") + .HasColumnName("SPARE5"); + + b.Property("Spm1") + .HasColumnType("smallint") + .HasColumnName("SPM1"); + + b.Property("Spm2") + .HasColumnType("smallint") + .HasColumnName("SPM2"); + + b.Property("Spm3") + .HasColumnType("smallint") + .HasColumnName("SPM3"); + + b.Property("Sppa") + .HasColumnType("real") + .HasColumnName("SPPA"); + + b.Property("Stkc") + .HasColumnType("integer") + .HasColumnName("STKC"); + + b.Property("TelemetryId") + .HasColumnType("integer"); + + b.Property("Torqa") + .HasColumnType("real") + .HasColumnName("TORQA"); + + b.Property("Torqx") + .HasColumnType("real") + .HasColumnName("TORQX"); + + b.Property("Tvolact") + .HasColumnType("real") + .HasColumnName("TVOLACT"); + + b.Property("Tvolcact") + .HasColumnType("real") + .HasColumnName("TVOLCACT"); + + b.Property("Woba") + .HasColumnType("real") + .HasColumnName("WOBA"); + + b.Property("Wobx") + .HasColumnType("real") + .HasColumnName("WOBX"); + + b.HasIndex("TelemetryId"); + + b.ToTable("t_telemetry_wits_1"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.Record50", b => + { + b.HasBaseType("AsbCloudDb.Model.WITS.RecordBase"); + + b.Property("Deptbitm") + .HasColumnType("real") + .HasColumnName("DEPTBITM"); + + b.Property("DeptmeasGdpMc") + .HasColumnType("real") + .HasColumnName("DEPTMEAS_GDP_mc"); + + b.Property("DeptmeasMcrstat") + .HasColumnType("real") + .HasColumnName("DEPTMEAS_MCRSTAT"); + + b.Property("DeptmeasRa33Mc") + .HasColumnType("real") + .HasColumnName("DEPTMEAS_RA33_mc"); + + b.Property("DeptmeasRa33f2Mc") + .HasColumnType("real") + .HasColumnName("DEPTMEAS_RA33F2_mc"); + + b.Property("DeptmeasRa33f4Mc") + .HasColumnType("real") + .HasColumnName("DEPTMEAS_RA33F4_mc"); + + b.Property("DeptmeasRp33Mc") + .HasColumnType("real") + .HasColumnName("DEPTMEAS_RP33_mc"); + + b.Property("DeptmeasRp33f2Mc") + .HasColumnType("real") + .HasColumnName("DEPTMEAS_RP33F2_mc"); + + b.Property("DeptmeasRp33f4Mc") + .HasColumnType("real") + .HasColumnName("DEPTMEAS_RP33F4_mc"); + + b.Property("DeptmeasSlvlMc") + .HasColumnType("real") + .HasColumnName("DEPTMEAS_SLVL_mc"); + + b.Property("GdpMc") + .HasColumnType("real") + .HasColumnName("GDP_mc"); + + b.Property("Mcrstat") + .HasColumnType("real") + .HasColumnName("MCRSTAT"); + + b.Property("Ra33Mc") + .HasColumnType("real") + .HasColumnName("RA33_mc"); + + b.Property("Ra33f2Mc") + .HasColumnType("real") + .HasColumnName("RA33F2_mc"); + + b.Property("Ra33f4Mc") + .HasColumnType("real") + .HasColumnName("RA33F4_mc"); + + b.Property("Rp33Mc") + .HasColumnType("real") + .HasColumnName("RP33_mc"); + + b.Property("Rp33f2Mc") + .HasColumnType("real") + .HasColumnName("RP33F2_mc"); + + b.Property("Rp33f4Mc") + .HasColumnType("real") + .HasColumnName("RP33F4_mc"); + + b.Property("SlvlMc") + .HasColumnType("real") + .HasColumnName("SLVL_mc"); + + b.Property("TelemetryId") + .HasColumnType("integer"); + + b.HasIndex("TelemetryId"); + + b.ToTable("t_telemetry_wits_50"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.Record60", b => + { + b.HasBaseType("AsbCloudDb.Model.WITS.RecordBase"); + + b.Property("Btot") + .HasColumnType("real") + .HasColumnName("Btot"); + + b.Property("Bx") + .HasColumnType("real") + .HasColumnName("Bx"); + + b.Property("By") + .HasColumnType("real") + .HasColumnName("By"); + + b.Property("Bz") + .HasColumnType("real") + .HasColumnName("Bz"); + + b.Property("Deptbitm") + .HasColumnType("real") + .HasColumnName("DEPTBITM"); + + b.Property("Deptmeas") + .HasColumnType("real") + .HasColumnName("DEPTMEAS"); + + b.Property("Gtot") + .HasColumnType("real") + .HasColumnName("Gtot"); + + b.Property("Gx") + .HasColumnType("real") + .HasColumnName("Gx"); + + b.Property("Gy") + .HasColumnType("real") + .HasColumnName("Gy"); + + b.Property("Gz") + .HasColumnType("real") + .HasColumnName("Gz"); + + b.Property("TelemetryId") + .HasColumnType("integer"); + + b.HasIndex("TelemetryId"); + + b.ToTable("t_telemetry_wits_60"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.Record61", b => + { + b.HasBaseType("AsbCloudDb.Model.WITS.RecordBase"); + + b.Property("Att06h") + .HasColumnType("real") + .HasColumnName("ATT06H"); + + b.Property("Att06l") + .HasColumnType("real") + .HasColumnName("ATT06L"); + + b.Property("Att10h") + .HasColumnType("real") + .HasColumnName("ATT10H"); + + b.Property("Att10l") + .HasColumnType("real") + .HasColumnName("ATT10L"); + + b.Property("Deptbitm") + .HasColumnType("real") + .HasColumnName("DEPTBITM"); + + b.Property("Deptmeas") + .HasColumnType("real") + .HasColumnName("DEPTMEAS"); + + b.Property("Phl1f1") + .HasColumnType("real") + .HasColumnName("PHL1F1"); + + b.Property("Phl1f2") + .HasColumnType("real") + .HasColumnName("PHL1F2"); + + b.Property("Phl2f1") + .HasColumnType("real") + .HasColumnName("PHL2F1"); + + b.Property("Phl2f2") + .HasColumnType("real") + .HasColumnName("PHL2F2"); + + b.Property("Status") + .HasColumnType("real") + .HasColumnName("Status"); + + b.Property("TelemetryId") + .HasColumnType("integer"); + + b.HasIndex("TelemetryId"); + + b.ToTable("t_telemetry_wits_61"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.Record7", b => + { + b.HasBaseType("AsbCloudDb.Model.WITS.RecordBase"); + + b.Property("Deptmeas") + .HasColumnType("real") + .HasColumnName("DEPTMEAS"); + + b.Property("Deptsvym") + .HasColumnType("real") + .HasColumnName("DEPTSVYM"); + + b.Property("Deptsvyv") + .HasColumnType("real") + .HasColumnName("DEPTSVYV"); + + b.Property("Passnum") + .HasColumnType("smallint") + .HasColumnName("PASSNUM"); + + b.Property("Spare1") + .HasColumnType("real") + .HasColumnName("SPARE1"); + + b.Property("Spare2") + .HasColumnType("real") + .HasColumnName("SPARE2"); + + b.Property("Spare3") + .HasColumnType("real") + .HasColumnName("SPARE3"); + + b.Property("Spare4") + .HasColumnType("real") + .HasColumnName("SPARE4"); + + b.Property("Spare5") + .HasColumnType("real") + .HasColumnName("SPARE5"); + + b.Property("Svyazc") + .HasColumnType("real") + .HasColumnName("SVYAZC"); + + b.Property("Svyazu") + .HasColumnType("real") + .HasColumnName("SVYAZU"); + + b.Property("Svydls") + .HasColumnType("real") + .HasColumnName("SVYDLS"); + + b.Property("Svyew") + .HasColumnType("real") + .HasColumnName("SVYEW"); + + b.Property("Svygtf") + .HasColumnType("real") + .HasColumnName("SVYGTF"); + + b.Property("Svyinc") + .HasColumnType("real") + .HasColumnName("SVYINC"); + + b.Property("Svymtf") + .HasColumnType("real") + .HasColumnName("SVYMTF"); + + b.Property("Svyns") + .HasColumnType("real") + .HasColumnName("SVYNS"); + + b.Property("Svytype") + .HasColumnType("text") + .HasColumnName("SVYTYPE"); + + b.Property("Svywalk") + .HasColumnType("real") + .HasColumnName("SVYWALK"); + + b.Property("TelemetryId") + .HasColumnType("integer"); + + b.HasIndex("TelemetryId"); + + b.ToTable("t_telemetry_wits_7"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.Record8", b => + { + b.HasBaseType("AsbCloudDb.Model.WITS.RecordBase"); + + b.Property("Deptbitm") + .HasColumnType("real") + .HasColumnName("DEPTBITM"); + + b.Property("Deptbitv") + .HasColumnType("real") + .HasColumnName("DEPTBITV"); + + b.Property("Deptcalm") + .HasColumnType("real") + .HasColumnName("DEPTCALM"); + + b.Property("Deptcalv") + .HasColumnType("real") + .HasColumnName("DEPTCALV"); + + b.Property("Deptfdm") + .HasColumnType("real") + .HasColumnName("DEPTFDM"); + + b.Property("Deptfdv") + .HasColumnType("real") + .HasColumnName("DEPTFDV"); + + b.Property("Deptgr1m") + .HasColumnType("real") + .HasColumnName("DEPTGR1M"); + + b.Property("Deptgr1v") + .HasColumnType("real") + .HasColumnName("DEPTGR1V"); + + b.Property("Deptgr2m") + .HasColumnType("real") + .HasColumnName("DEPTGR2M"); + + b.Property("Deptgr2v") + .HasColumnType("real") + .HasColumnName("DEPTGR2V"); + + b.Property("Deptmeas") + .HasColumnType("real") + .HasColumnName("DEPTMEAS"); + + b.Property("Deptp1m") + .HasColumnType("real") + .HasColumnName("DEPTP1M"); + + b.Property("Deptp1v") + .HasColumnType("real") + .HasColumnName("DEPTP1V"); + + b.Property("Deptp2m") + .HasColumnType("real") + .HasColumnName("DEPTP2M"); + + b.Property("Deptp2v") + .HasColumnType("real") + .HasColumnName("DEPTP2V"); + + b.Property("Deptrs1m") + .HasColumnType("real") + .HasColumnName("DEPTRS1M"); + + b.Property("Deptrs1v") + .HasColumnType("real") + .HasColumnName("DEPTRS1V"); + + b.Property("Deptrs2m") + .HasColumnType("real") + .HasColumnName("DEPTRS2M"); + + b.Property("Deptrs2v") + .HasColumnType("real") + .HasColumnName("DEPTRS2V"); + + b.Property("Deptvert") + .HasColumnType("real") + .HasColumnName("DEPTVERT"); + + b.Property("Mclp") + .HasColumnType("real") + .HasColumnName("MCLP"); + + b.Property("Mfd") + .HasColumnType("real") + .HasColumnName("MFD"); + + b.Property("Mffp") + .HasColumnType("real") + .HasColumnName("MFFP"); + + b.Property("Mfpp") + .HasColumnType("real") + .HasColumnName("MFPP"); + + b.Property("Mfrann") + .HasColumnType("real") + .HasColumnName("MFRANN"); + + b.Property("Mfrpipe") + .HasColumnType("real") + .HasColumnName("MFRPIPE"); + + b.Property("Mftann") + .HasColumnType("real") + .HasColumnName("MFTANN"); + + b.Property("Mftpipe") + .HasColumnType("real") + .HasColumnName("MFTPIPE"); + + b.Property("Mg1") + .HasColumnType("real") + .HasColumnName("MG1"); + + b.Property("Mg1c") + .HasColumnType("real") + .HasColumnName("MG1C"); + + b.Property("Mg2") + .HasColumnType("real") + .HasColumnName("MG2"); + + b.Property("Mg2c") + .HasColumnType("real") + .HasColumnName("MG2C"); + + b.Property("Mpo1") + .HasColumnType("real") + .HasColumnName("MPO1"); + + b.Property("Mpo2") + .HasColumnType("real") + .HasColumnName("MPO2"); + + b.Property("Mr1") + .HasColumnType("real") + .HasColumnName("MR1"); + + b.Property("Mr1c") + .HasColumnType("real") + .HasColumnName("MR1C"); + + b.Property("Mr2") + .HasColumnType("real") + .HasColumnName("MR2"); + + b.Property("Mr2c") + .HasColumnType("real") + .HasColumnName("MR2C"); + + b.Property("Passnum") + .HasColumnType("smallint") + .HasColumnName("PASSNUM"); + + b.Property("Spare1") + .HasColumnType("real") + .HasColumnName("SPARE1"); + + b.Property("Spare2") + .HasColumnType("real") + .HasColumnName("SPARE2"); + + b.Property("Spare3") + .HasColumnType("real") + .HasColumnName("SPARE3"); + + b.Property("Spare4") + .HasColumnType("real") + .HasColumnName("SPARE4"); + + b.Property("Spare5") + .HasColumnType("real") + .HasColumnName("SPARE5"); + + b.Property("Spare6") + .HasColumnType("real") + .HasColumnName("SPARE6"); + + b.Property("Spare7") + .HasColumnType("real") + .HasColumnName("SPARE7"); + + b.Property("Spare8") + .HasColumnType("real") + .HasColumnName("SPARE8"); + + b.Property("Spare9") + .HasColumnType("real") + .HasColumnName("SPARE9"); + + b.Property("TelemetryId") + .HasColumnType("integer"); + + b.HasIndex("TelemetryId"); + + b.ToTable("t_telemetry_wits_8"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Cluster", b => + { + b.HasOne("AsbCloudDb.Model.Deposit", "Deposit") + .WithMany("Clusters") + .HasForeignKey("IdDeposit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .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.Contact", b => + { + b.HasOne("AsbCloudDb.Model.CompanyType", "CompanyType") + .WithMany("Contacts") + .HasForeignKey("IdCompanyType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany("Contacts") + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyType"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DailyReports.DailyReport", b => + { + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DataSaubStat", b => + { + b.HasOne("AsbCloudDb.Model.WellOperationCategory", "OperationCategory") + .WithMany() + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("OperationCategory"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DetectedOperation", b => + { + b.HasOne("AsbCloudDb.Model.WellOperationCategory", "OperationCategory") + .WithMany() + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("OperationCategory"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillTest", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillingProgramPart", b => + { + b.HasOne("AsbCloudDb.Model.FileCategory", "FileCategory") + .WithMany() + .HasForeignKey("IdFileCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany("DrillingProgramParts") + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("FileCategory"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Faq", b => + { + b.HasOne("AsbCloudDb.Model.User", "AuthorAnswer") + .WithMany() + .HasForeignKey("IdAuthorAnswer"); + + b.HasOne("AsbCloudDb.Model.User", "AuthorQuestion") + .WithMany() + .HasForeignKey("IdAuthorQuestion") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AuthorAnswer"); + + b.Navigation("AuthorQuestion"); + }); + + 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.FileMark", b => + { + b.HasOne("AsbCloudDb.Model.FileInfo", "FileInfo") + .WithMany("FileMarks") + .HasForeignKey("IdFile") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_file_mark_t_file_info_fk"); + + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany("FileMarks") + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_user_t_file_mark_fk"); + + b.Navigation("FileInfo"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemFloat", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemInt", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemString", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.HelpPage", b => + { + b.HasOne("AsbCloudDb.Model.FileCategory", "FileCategory") + .WithMany() + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("FileCategory"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.LimitingParameter", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Manuals.Manual", b => + { + b.HasOne("AsbCloudDb.Model.User", "Author") + .WithMany() + .HasForeignKey("IdAuthor") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.FileCategory", "Category") + .WithMany() + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Manuals.ManualDirectory", "Directory") + .WithMany("Manuals") + .HasForeignKey("IdDirectory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + + b.Navigation("Category"); + + b.Navigation("Directory"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Manuals.ManualDirectory", b => + { + b.HasOne("AsbCloudDb.Model.Manuals.ManualDirectory", "Parent") + .WithMany("Children") + .HasForeignKey("IdParent") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Parent"); + }); + + 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.Notification", b => + { + b.HasOne("AsbCloudDb.Model.NotificationCategory", "NotificationCategory") + .WithMany("Notifications") + .HasForeignKey("IdNotificationCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany() + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("NotificationCategory"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.OperationValue", b => + { + b.HasOne("AsbCloudDb.Model.WellOperationCategory", "OperationCategory") + .WithMany() + .HasForeignKey("IdOperationCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("OperationCategory"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanReam", b => + { + b.HasOne("AsbCloudDb.Model.User", "Author") + .WithMany() + .HasForeignKey("IdAuthor") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.User", "Editor") + .WithMany() + .HasForeignKey("IdEditor"); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany() + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + + b.Navigation("Editor"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanRotor", b => + { + b.HasOne("AsbCloudDb.Model.User", "Author") + .WithMany() + .HasForeignKey("IdAuthor") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.User", "Editor") + .WithMany() + .HasForeignKey("IdEditor") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanRotor", "Previous") + .WithMany() + .HasForeignKey("IdPrevious"); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany() + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + + b.Navigation("Editor"); + + b.Navigation("Previous"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanSlide", b => + { + b.HasOne("AsbCloudDb.Model.User", "Author") + .WithMany() + .HasForeignKey("IdAuthor") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.User", "Editor") + .WithMany() + .HasForeignKey("IdEditor") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanSlide", "Previous") + .WithMany() + .HasForeignKey("IdPrevious"); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany() + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + + b.Navigation("Editor"); + + b.Navigation("Previous"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationCompanyWell", b => + { + b.HasOne("AsbCloudDb.Model.Company", "Company") + .WithMany("RelationCompaniesWells") + .HasForeignKey("IdCompany") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_relation_company_well_t_company_id_fk"); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany("RelationCompaniesWells") + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_relation_company_well_t_well_id_fk"); + + b.Navigation("Company"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationContactWell", b => + { + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany("RelationContactsWells") + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserDrillingProgramPart", b => + { + b.HasOne("AsbCloudDb.Model.DrillingProgramPart", "DrillingProgramPart") + .WithMany("RelatedUsers") + .HasForeignKey("IdDrillingProgramPart") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany() + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DrillingProgramPart"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserRolePermission", b => + { + b.HasOne("AsbCloudDb.Model.Permission", "Permission") + .WithMany("RelationUserRolePermissions") + .HasForeignKey("IdPermission") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.UserRole", "UserRole") + .WithMany("RelationUserRolePermissions") + .HasForeignKey("IdUserRole") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Permission"); + + b.Navigation("UserRole"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserRoleUserRole", b => + { + b.HasOne("AsbCloudDb.Model.UserRole", "Role") + .WithMany("RelationUserRoleUserRoles") + .HasForeignKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.UserRole", "IncludeRole") + .WithMany() + .HasForeignKey("IdInclude") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("IncludeRole"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserUserRole", b => + { + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany("RelationUsersUserRoles") + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.UserRole", "UserRole") + .WithMany("RelationUsersUserRoles") + .HasForeignKey("IdUserRole") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + + b.Navigation("UserRole"); + }); + + 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.Schedule", b => + { + b.HasOne("AsbCloudDb.Model.Driller", "Driller") + .WithMany("Schedule") + .HasForeignKey("IdDriller") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_schedule_t_driller_id_driller"); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Driller"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.SetpointsRequest", b => + { + b.HasOne("AsbCloudDb.Model.User", "Author") + .WithMany() + .HasForeignKey("IdAuthor") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSaub", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("DataSaub") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_telemetry_data_saub_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSpin", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("DataSpin") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_telemetry_data_spin_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryEvent", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Events") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_event_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryMessage", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Messages") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_messages_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryUser", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Users") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_telemetry_user_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Trajectory.TrajectoryFact", b => + { + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany() + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Trajectory.TrajectoryPlan", b => + { + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany() + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.User", b => + { + b.HasOne("AsbCloudDb.Model.Company", "Company") + .WithMany("Users") + .HasForeignKey("IdCompany") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("t_user_t_company_id_fk"); + + b.Navigation("Company"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.UserSetting", b => + { + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany() + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Well", b => + { + b.HasOne("AsbCloudDb.Model.Cluster", "Cluster") + .WithMany("Wells") + .HasForeignKey("IdCluster") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_well_t_cluster_id_fk"); + + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithOne("Well") + .HasForeignKey("AsbCloudDb.Model.Well", "IdTelemetry") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("t_well_t_telemetry_id_fk"); + + b.HasOne("AsbCloudDb.Model.WellType", "WellType") + .WithMany("Wells") + .HasForeignKey("IdWellType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Cluster"); + + b.Navigation("Telemetry"); + + b.Navigation("WellType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellComposite", b => + { + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany("WellComposites") + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_well_сomposite_t_well_id_fk"); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany("WellComposites") + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_well_сomposite_t_well_section_type_id_fk"); + + b.HasOne("AsbCloudDb.Model.Well", "WellSrc") + .WithMany("WellCompositeSrcs") + .HasForeignKey("IdWellSrc") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_well_сomposite_src_t_well_id_fk"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + + b.Navigation("WellSrc"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellFinalDocument", b => + { + b.HasOne("AsbCloudDb.Model.FileCategory", "Category") + .WithMany() + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany() + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("User"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperation", b => + { + b.HasOne("AsbCloudDb.Model.WellOperationCategory", "OperationCategory") + .WithMany() + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.WellOperation", "OperationPlan") + .WithMany() + .HasForeignKey("IdPlan") + .OnDelete(DeleteBehavior.SetNull); + + 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("OperationPlan"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperationCategory", b => + { + b.HasOne("AsbCloudDb.Model.WellOperationCategory", "Parent") + .WithMany() + .HasForeignKey("IdParent"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellSections.WellSectionPlan", b => + { + b.HasOne("AsbCloudDb.Model.WellSectionType", "SectionType") + .WithMany() + .HasForeignKey("IdSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("SectionType"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.Record1", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("TelemetryId"); + + b.HasOne("AsbCloudDb.Model.WITS.RecordBase", null) + .WithOne() + .HasForeignKey("AsbCloudDb.Model.WITS.Record1", "IdTelemetry", "DateTime") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.Record50", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("TelemetryId"); + + b.HasOne("AsbCloudDb.Model.WITS.RecordBase", null) + .WithOne() + .HasForeignKey("AsbCloudDb.Model.WITS.Record50", "IdTelemetry", "DateTime") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.Record60", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("TelemetryId"); + + b.HasOne("AsbCloudDb.Model.WITS.RecordBase", null) + .WithOne() + .HasForeignKey("AsbCloudDb.Model.WITS.Record60", "IdTelemetry", "DateTime") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.Record61", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("TelemetryId"); + + b.HasOne("AsbCloudDb.Model.WITS.RecordBase", null) + .WithOne() + .HasForeignKey("AsbCloudDb.Model.WITS.Record61", "IdTelemetry", "DateTime") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.Record7", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("TelemetryId"); + + b.HasOne("AsbCloudDb.Model.WITS.RecordBase", null) + .WithOne() + .HasForeignKey("AsbCloudDb.Model.WITS.Record7", "IdTelemetry", "DateTime") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WITS.Record8", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany() + .HasForeignKey("TelemetryId"); + + b.HasOne("AsbCloudDb.Model.WITS.RecordBase", null) + .WithOne() + .HasForeignKey("AsbCloudDb.Model.WITS.Record8", "IdTelemetry", "DateTime") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Telemetry"); + }); + + 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"); + + b.Navigation("Contacts"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Deposit", b => + { + b.Navigation("Clusters"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Driller", b => + { + b.Navigation("Schedule"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillingProgramPart", b => + { + b.Navigation("RelatedUsers"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileInfo", b => + { + b.Navigation("FileMarks"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Manuals.ManualDirectory", b => + { + b.Navigation("Children"); + + b.Navigation("Manuals"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.MeasureCategory", b => + { + b.Navigation("Measures"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.NotificationCategory", b => + { + b.Navigation("Notifications"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Permission", b => + { + b.Navigation("RelationUserRolePermissions"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Telemetry", b => + { + 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("FileMarks"); + + b.Navigation("Files"); + + b.Navigation("RelationContactsWells"); + + b.Navigation("RelationUsersUserRoles"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.UserRole", b => + { + b.Navigation("RelationUserRolePermissions"); + + b.Navigation("RelationUserRoleUserRoles"); + + b.Navigation("RelationUsersUserRoles"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Well", b => + { + b.Navigation("Contacts"); + + b.Navigation("DrillingProgramParts"); + + b.Navigation("RelationCompaniesWells"); + + b.Navigation("WellCompositeSrcs"); + + b.Navigation("WellComposites"); + + b.Navigation("WellOperations"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellSectionType", b => + { + b.Navigation("WellComposites"); + + b.Navigation("WellOperations"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellType", b => + { + b.Navigation("Wells"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AsbCloudDb/Migrations/20240613110103_Add_ProcessMapPlanRotor_And_Slide.cs b/AsbCloudDb/Migrations/20240613110103_Add_ProcessMapPlanRotor_And_Slide.cs new file mode 100644 index 00000000..64282d27 --- /dev/null +++ b/AsbCloudDb/Migrations/20240613110103_Add_ProcessMapPlanRotor_And_Slide.cs @@ -0,0 +1,324 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace AsbCloudDb.Migrations +{ + /// + public partial class Add_ProcessMapPlanRotor_And_Slide : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "t_process_map_plan_rotor", + columns: table => new + { + id = table.Column(type: "integer", nullable: false, comment: "Идентификатор") + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + rop_limit_max = table.Column(type: "double precision", nullable: false, comment: "Максимально допустимая скорость, м/ч"), + pressure_limit_max = table.Column(type: "double precision", nullable: false, comment: "Максимально допустимое давление, атм"), + differential_pressure = table.Column(type: "double precision", nullable: false, comment: "Перепад давления, атм. Уставка"), + differential_pressure_limit_max = table.Column(type: "double precision", nullable: false, comment: "Перепад давления, атм. Ограничение"), + weight_on_bit = table.Column(type: "double precision", nullable: false, comment: "Нагрузка, т. Уставка"), + weight_on_bit_limit_max = table.Column(type: "double precision", nullable: false, comment: "Нагрузка, т. Ограничение"), + top_drive_torque = table.Column(type: "double precision", nullable: false, comment: "Момент на ВСП, кН*м. Уставка"), + top_drive_torque_limit_max = table.Column(type: "double precision", nullable: false, comment: "Момент на ВСП, кН*м. Ограничение"), + revolution_per_minute = table.Column(type: "double precision", nullable: false, comment: "Обороты на ВСП, об/мин. Уставка"), + revolutions_per_minute_limit_max = table.Column(type: "double precision", nullable: false, comment: "Обороты на ВСП, об/мин. Ограничение"), + flow_rate = table.Column(type: "double precision", nullable: false, comment: "Расход л/с. Уставка"), + flow_rate_limit_max = table.Column(type: "double precision", nullable: false, comment: "Расход л/с. Ограничение"), + note = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: false, comment: "Примечание"), + id_author = table.Column(type: "integer", nullable: false, comment: "Автор"), + id_editor = table.Column(type: "integer", nullable: true, comment: "Редактор"), + creation = table.Column(type: "timestamp with time zone", nullable: false, comment: "дата создания"), + obsolete = table.Column(type: "timestamp with time zone", nullable: true, comment: "дата устаревания"), + id_state = table.Column(type: "integer", nullable: false, comment: "ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"), + id_previous = table.Column(type: "integer", nullable: true, comment: "ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"), + id_well = table.Column(type: "integer", nullable: false, comment: "Id скважины"), + id_wellsection_type = table.Column(type: "integer", nullable: false, comment: "Тип секции"), + depth_start = table.Column(type: "double precision", nullable: false, comment: "Глубина по стволу от, м"), + depth_end = table.Column(type: "double precision", nullable: false, comment: "Глубина по стволу до, м") + }, + constraints: table => + { + table.PrimaryKey("PK_t_process_map_plan_rotor", x => x.id); + table.ForeignKey( + name: "FK_t_process_map_plan_rotor_t_process_map_plan_rotor_id_previo~", + column: x => x.id_previous, + principalTable: "t_process_map_plan_rotor", + principalColumn: "id"); + table.ForeignKey( + name: "FK_t_process_map_plan_rotor_t_user_id_author", + column: x => x.id_author, + principalTable: "t_user", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_t_process_map_plan_rotor_t_user_id_editor", + column: x => x.id_editor, + principalTable: "t_user", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_t_process_map_plan_rotor_t_well_id_well", + column: x => x.id_well, + principalTable: "t_well", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_t_process_map_plan_rotor_t_well_section_type_id_wellsection~", + column: x => x.id_wellsection_type, + principalTable: "t_well_section_type", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }, + comment: "РТК план бурение ротор"); + + migrationBuilder.CreateTable( + name: "t_process_map_plan_slide", + columns: table => new + { + id = table.Column(type: "integer", nullable: false, comment: "Идентификатор") + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + rop_limit_max = table.Column(type: "double precision", nullable: false, comment: "Максимально допустимая скорость, м/ч"), + pressure_limit_max = table.Column(type: "double precision", nullable: false, comment: "Максимально допустимое давление, атм"), + differential_pressure = table.Column(type: "double precision", nullable: false, comment: "Перепад давления, атм. Уставка"), + differential_pressure_limit_max = table.Column(type: "double precision", nullable: false, comment: "Перепад давления, атм. Ограничение"), + weight_on_bit = table.Column(type: "double precision", nullable: false, comment: "Нагрузка, т. Уставка"), + weight_on_bit_limit_max = table.Column(type: "double precision", nullable: false, comment: "Нагрузка, т. Ограничение"), + flow_rate = table.Column(type: "double precision", nullable: false, comment: "Расход л/с. Уставка"), + flow_rate_limit_max = table.Column(type: "double precision", nullable: false, comment: "Расход л/с. Ограничение"), + spring = table.Column(type: "double precision", nullable: false, comment: "Расчётная пружина, градус"), + tool_buckling = table.Column(type: "double precision", nullable: false, comment: "Складывание инструмента, м"), + note = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: false, comment: "Примечание"), + id_author = table.Column(type: "integer", nullable: false, comment: "Автор"), + id_editor = table.Column(type: "integer", nullable: true, comment: "Редактор"), + creation = table.Column(type: "timestamp with time zone", nullable: false, comment: "дата создания"), + obsolete = table.Column(type: "timestamp with time zone", nullable: true, comment: "дата устаревания"), + id_state = table.Column(type: "integer", nullable: false, comment: "ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"), + id_previous = table.Column(type: "integer", nullable: true, comment: "ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"), + id_well = table.Column(type: "integer", nullable: false, comment: "Id скважины"), + id_wellsection_type = table.Column(type: "integer", nullable: false, comment: "Тип секции"), + depth_start = table.Column(type: "double precision", nullable: false, comment: "Глубина по стволу от, м"), + depth_end = table.Column(type: "double precision", nullable: false, comment: "Глубина по стволу до, м") + }, + constraints: table => + { + table.PrimaryKey("PK_t_process_map_plan_slide", x => x.id); + table.ForeignKey( + name: "FK_t_process_map_plan_slide_t_process_map_plan_slide_id_previo~", + column: x => x.id_previous, + principalTable: "t_process_map_plan_slide", + principalColumn: "id"); + table.ForeignKey( + name: "FK_t_process_map_plan_slide_t_user_id_author", + column: x => x.id_author, + principalTable: "t_user", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_t_process_map_plan_slide_t_user_id_editor", + column: x => x.id_editor, + principalTable: "t_user", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_t_process_map_plan_slide_t_well_id_well", + column: x => x.id_well, + principalTable: "t_well", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_t_process_map_plan_slide_t_well_section_type_id_wellsection~", + column: x => x.id_wellsection_type, + principalTable: "t_well_section_type", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }, + comment: "РТК план бурение слайд"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_rotor_id_author", + table: "t_process_map_plan_rotor", + column: "id_author"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_rotor_id_editor", + table: "t_process_map_plan_rotor", + column: "id_editor"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_rotor_id_previous", + table: "t_process_map_plan_rotor", + column: "id_previous"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_rotor_id_well", + table: "t_process_map_plan_rotor", + column: "id_well"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_rotor_id_wellsection_type", + table: "t_process_map_plan_rotor", + column: "id_wellsection_type"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_slide_id_author", + table: "t_process_map_plan_slide", + column: "id_author"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_slide_id_editor", + table: "t_process_map_plan_slide", + column: "id_editor"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_slide_id_previous", + table: "t_process_map_plan_slide", + column: "id_previous"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_slide_id_well", + table: "t_process_map_plan_slide", + column: "id_well"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_slide_id_wellsection_type", + table: "t_process_map_plan_slide", + column: "id_wellsection_type"); + + migrationBuilder.Sql(@"INSERT INTO public.t_process_map_plan_rotor + (id, id_wellsection_type, rop_limit_max, depth_start, depth_end, differential_pressure, + differential_pressure_limit_max, weight_on_bit, weight_on_bit_limit_max, + top_drive_torque, top_drive_torque_limit_max, revolution_per_minute, + revolutions_per_minute_limit_max, flow_rate, flow_rate_limit_max, note, + pressure_limit_max, id_author, creation, id_state, id_well, id_editor) + SELECT id, id_wellsection_type, rop_plan, depth_start, depth_end, delta_pressure_plan, + delta_pressure_limit_max, axial_load_plan, axial_load_limit_max, + top_drive_torque_plan, top_drive_torque_limit_max, top_drive_speed_plan, + top_drive_speed_limit_max, flow_plan, flow_limit_max, comment, 0, id_author, creation, id_state, id_well, + id_editor + FROM public.t_process_map_plan_drilling WHERE id_mode = 1 AND obsolete is null"); + + migrationBuilder.Sql(@"INSERT INTO public.t_process_map_plan_slide + (id, id_wellsection_type, rop_limit_max, depth_start, depth_end, differential_pressure, + differential_pressure_limit_max, weight_on_bit, weight_on_bit_limit_max, + flow_rate, flow_rate_limit_max, note, pressure_limit_max, id_author, creation, + id_state, id_well, spring, tool_buckling, id_editor) + SELECT id, id_wellsection_type, rop_plan, depth_start, depth_end, delta_pressure_plan, + delta_pressure_limit_max, axial_load_plan, axial_load_limit_max, + flow_plan, flow_limit_max, comment, 0, id_author, creation, id_state, id_well, 0, 0, id_editor + FROM public.t_process_map_plan_drilling + WHERE id_mode = 2 AND obsolete is null"); + + migrationBuilder.DropTable(name: "t_process_map_plan_drilling"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "t_process_map_plan_rotor"); + + migrationBuilder.DropTable( + name: "t_process_map_plan_slide"); + + migrationBuilder.CreateTable( + name: "t_process_map_plan_drilling", + columns: table => new + { + id = table.Column(type: "integer", nullable: false, comment: "Идентификатор") + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + id_author = table.Column(type: "integer", nullable: false, comment: "Автор"), + id_editor = table.Column(type: "integer", nullable: true, comment: "Редактор"), + id_previous = table.Column(type: "integer", nullable: true, comment: "ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"), + id_well = table.Column(type: "integer", nullable: false, comment: "Id скважины"), + id_wellsection_type = table.Column(type: "integer", nullable: false, comment: "Тип секции"), + axial_load_limit_max = table.Column(type: "double precision", nullable: false, comment: "Осевая нагрузка, т, допустимый максимум"), + axial_load_plan = table.Column(type: "double precision", nullable: false, comment: "Осевая нагрузка, т, план"), + comment = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: false, comment: "Комментарий"), + creation = table.Column(type: "timestamp with time zone", nullable: false, comment: "дата создания"), + delta_pressure_limit_max = table.Column(type: "double precision", nullable: false, comment: "Перепад давления, атм, допустимый максимум"), + delta_pressure_plan = table.Column(type: "double precision", nullable: false, comment: "Перепад давления, атм, план"), + depth_end = table.Column(type: "double precision", nullable: false, comment: "Глубина по стволу до, м"), + depth_start = table.Column(type: "double precision", nullable: false, comment: "Глубина по стволу от, м"), + flow_limit_max = table.Column(type: "double precision", nullable: false, comment: "Расход, л/с, допустимый максимум"), + flow_plan = table.Column(type: "double precision", nullable: false, comment: "Расход, л/с, план"), + id_mode = table.Column(type: "integer", nullable: false, comment: "Id режима (1- ротор, 2 слайд)"), + id_state = table.Column(type: "integer", nullable: false, comment: "ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"), + obsolete = table.Column(type: "timestamp with time zone", nullable: true, comment: "дата устаревания"), + rop_plan = table.Column(type: "double precision", nullable: false, comment: "Плановая механическая скорость, м/ч"), + top_drive_speed_limit_max = table.Column(type: "double precision", nullable: false, comment: "Обороты на ВСП, допустимый максимум"), + top_drive_speed_plan = table.Column(type: "double precision", nullable: false, comment: "Обороты на ВСП, план"), + top_drive_torque_limit_max = table.Column(type: "double precision", nullable: false, comment: "Момент на ВСП, допустимый максимум"), + top_drive_torque_plan = table.Column(type: "double precision", nullable: false, comment: "Момент на ВСП, план"), + usage_saub = table.Column(type: "double precision", nullable: false, comment: "Плановый процент использования АКБ"), + usage_spin = table.Column(type: "double precision", nullable: false, comment: "Плановый процент использования spin master") + }, + constraints: table => + { + table.PrimaryKey("PK_t_process_map_plan_drilling", x => x.id); + table.ForeignKey( + name: "FK_t_process_map_plan_drilling_t_process_map_plan_drilling_id_~", + column: x => x.id_previous, + principalTable: "t_process_map_plan_drilling", + principalColumn: "id"); + table.ForeignKey( + name: "FK_t_process_map_plan_drilling_t_user_id_author", + column: x => x.id_author, + principalTable: "t_user", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_t_process_map_plan_drilling_t_user_id_editor", + column: x => x.id_editor, + principalTable: "t_user", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_t_process_map_plan_drilling_t_well_id_well", + column: x => x.id_well, + principalTable: "t_well", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_t_process_map_plan_drilling_t_well_section_type_id_wellsect~", + column: x => x.id_wellsection_type, + principalTable: "t_well_section_type", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }, + comment: "РТК план бурение"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_drilling_id_author", + table: "t_process_map_plan_drilling", + column: "id_author"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_drilling_id_editor", + table: "t_process_map_plan_drilling", + column: "id_editor"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_drilling_id_previous", + table: "t_process_map_plan_drilling", + column: "id_previous"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_drilling_id_well", + table: "t_process_map_plan_drilling", + column: "id_well"); + + migrationBuilder.CreateIndex( + name: "IX_t_process_map_plan_drilling_id_wellsection_type", + table: "t_process_map_plan_drilling", + column: "id_wellsection_type"); + } + } +} diff --git a/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs b/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs index d029b26d..e8a2c4fb 100644 --- a/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs +++ b/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs @@ -2629,161 +2629,6 @@ namespace AsbCloudDb.Migrations }); }); - modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanDrilling", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id") - .HasComment("Идентификатор"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AxialLoadLimitMax") - .HasColumnType("double precision") - .HasColumnName("axial_load_limit_max") - .HasComment("Осевая нагрузка, т, допустимый максимум"); - - b.Property("AxialLoadPlan") - .HasColumnType("double precision") - .HasColumnName("axial_load_plan") - .HasComment("Осевая нагрузка, т, план"); - - b.Property("Comment") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("character varying(1024)") - .HasColumnName("comment") - .HasComment("Комментарий"); - - b.Property("Creation") - .HasColumnType("timestamp with time zone") - .HasColumnName("creation") - .HasComment("дата создания"); - - b.Property("DeltaPressureLimitMax") - .HasColumnType("double precision") - .HasColumnName("delta_pressure_limit_max") - .HasComment("Перепад давления, атм, допустимый максимум"); - - b.Property("DeltaPressurePlan") - .HasColumnType("double precision") - .HasColumnName("delta_pressure_plan") - .HasComment("Перепад давления, атм, план"); - - b.Property("DepthEnd") - .HasColumnType("double precision") - .HasColumnName("depth_end") - .HasComment("Глубина по стволу до, м"); - - b.Property("DepthStart") - .HasColumnType("double precision") - .HasColumnName("depth_start") - .HasComment("Глубина по стволу от, м"); - - b.Property("FlowLimitMax") - .HasColumnType("double precision") - .HasColumnName("flow_limit_max") - .HasComment("Расход, л/с, допустимый максимум"); - - b.Property("FlowPlan") - .HasColumnType("double precision") - .HasColumnName("flow_plan") - .HasComment("Расход, л/с, план"); - - b.Property("IdAuthor") - .HasColumnType("integer") - .HasColumnName("id_author") - .HasComment("Автор"); - - b.Property("IdEditor") - .HasColumnType("integer") - .HasColumnName("id_editor") - .HasComment("Редактор"); - - b.Property("IdMode") - .HasColumnType("integer") - .HasColumnName("id_mode") - .HasComment("Id режима (1- ротор, 2 слайд)"); - - b.Property("IdPrevious") - .HasColumnType("integer") - .HasColumnName("id_previous") - .HasComment("ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"); - - b.Property("IdState") - .HasColumnType("integer") - .HasColumnName("id_state") - .HasComment("ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"); - - b.Property("IdWell") - .HasColumnType("integer") - .HasColumnName("id_well") - .HasComment("Id скважины"); - - b.Property("IdWellSectionType") - .HasColumnType("integer") - .HasColumnName("id_wellsection_type") - .HasComment("Тип секции"); - - b.Property("Obsolete") - .HasColumnType("timestamp with time zone") - .HasColumnName("obsolete") - .HasComment("дата устаревания"); - - b.Property("RopPlan") - .HasColumnType("double precision") - .HasColumnName("rop_plan") - .HasComment("Плановая механическая скорость, м/ч"); - - b.Property("TopDriveSpeedLimitMax") - .HasColumnType("double precision") - .HasColumnName("top_drive_speed_limit_max") - .HasComment("Обороты на ВСП, допустимый максимум"); - - b.Property("TopDriveSpeedPlan") - .HasColumnType("double precision") - .HasColumnName("top_drive_speed_plan") - .HasComment("Обороты на ВСП, план"); - - b.Property("TopDriveTorqueLimitMax") - .HasColumnType("double precision") - .HasColumnName("top_drive_torque_limit_max") - .HasComment("Момент на ВСП, допустимый максимум"); - - b.Property("TopDriveTorquePlan") - .HasColumnType("double precision") - .HasColumnName("top_drive_torque_plan") - .HasComment("Момент на ВСП, план"); - - b.Property("UsageSaub") - .HasColumnType("double precision") - .HasColumnName("usage_saub") - .HasComment("Плановый процент использования АКБ"); - - b.Property("UsageSpin") - .HasColumnType("double precision") - .HasColumnName("usage_spin") - .HasComment("Плановый процент использования spin master"); - - b.HasKey("Id"); - - b.HasIndex("IdAuthor"); - - b.HasIndex("IdEditor"); - - b.HasIndex("IdPrevious"); - - b.HasIndex("IdWell"); - - b.HasIndex("IdWellSectionType"); - - b.ToTable("t_process_map_plan_drilling", t => - { - t.HasComment("РТК план бурение"); - }); - }); - modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanReam", b => { b.Property("Id") @@ -2905,6 +2750,286 @@ namespace AsbCloudDb.Migrations }); }); + modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanRotor", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasComment("Идентификатор"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Creation") + .HasColumnType("timestamp with time zone") + .HasColumnName("creation") + .HasComment("дата создания"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина по стволу до, м"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Глубина по стволу от, м"); + + b.Property("DifferentialPressure") + .HasColumnType("double precision") + .HasColumnName("differential_pressure") + .HasComment("Перепад давления, атм. Уставка"); + + b.Property("DifferentialPressureLimitMax") + .HasColumnType("double precision") + .HasColumnName("differential_pressure_limit_max") + .HasComment("Перепад давления, атм. Ограничение"); + + b.Property("FlowRate") + .HasColumnType("double precision") + .HasColumnName("flow_rate") + .HasComment("Расход л/с. Уставка"); + + b.Property("FlowRateLimitMax") + .HasColumnType("double precision") + .HasColumnName("flow_rate_limit_max") + .HasComment("Расход л/с. Ограничение"); + + b.Property("IdAuthor") + .HasColumnType("integer") + .HasColumnName("id_author") + .HasComment("Автор"); + + b.Property("IdEditor") + .HasColumnType("integer") + .HasColumnName("id_editor") + .HasComment("Редактор"); + + b.Property("IdPrevious") + .HasColumnType("integer") + .HasColumnName("id_previous") + .HasComment("ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"); + + b.Property("IdState") + .HasColumnType("integer") + .HasColumnName("id_state") + .HasComment("ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_wellsection_type") + .HasComment("Тип секции"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("note") + .HasComment("Примечание"); + + b.Property("Obsolete") + .HasColumnType("timestamp with time zone") + .HasColumnName("obsolete") + .HasComment("дата устаревания"); + + b.Property("PressureLimitMax") + .HasColumnType("double precision") + .HasColumnName("pressure_limit_max") + .HasComment("Максимально допустимое давление, атм"); + + b.Property("RevolutionsPerMinute") + .HasColumnType("double precision") + .HasColumnName("revolution_per_minute") + .HasComment("Обороты на ВСП, об/мин. Уставка"); + + b.Property("RevolutionsPerMinuteLimitMax") + .HasColumnType("double precision") + .HasColumnName("revolutions_per_minute_limit_max") + .HasComment("Обороты на ВСП, об/мин. Ограничение"); + + b.Property("RopLimitMax") + .HasColumnType("double precision") + .HasColumnName("rop_limit_max") + .HasComment("Максимально допустимая скорость, м/ч"); + + b.Property("TopDriveTorque") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque") + .HasComment("Момент на ВСП, кН*м. Уставка"); + + b.Property("TopDriveTorqueLimit") + .HasColumnType("double precision") + .HasColumnName("top_drive_torque_limit_max") + .HasComment("Момент на ВСП, кН*м. Ограничение"); + + b.Property("WeightOnBit") + .HasColumnType("double precision") + .HasColumnName("weight_on_bit") + .HasComment("Нагрузка, т. Уставка"); + + b.Property("WeightOnBitLimitMax") + .HasColumnType("double precision") + .HasColumnName("weight_on_bit_limit_max") + .HasComment("Нагрузка, т. Ограничение"); + + b.HasKey("Id"); + + b.HasIndex("IdAuthor"); + + b.HasIndex("IdEditor"); + + b.HasIndex("IdPrevious"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellSectionType"); + + b.ToTable("t_process_map_plan_rotor", t => + { + t.HasComment("РТК план бурение ротор"); + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanSlide", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasComment("Идентификатор"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Creation") + .HasColumnType("timestamp with time zone") + .HasColumnName("creation") + .HasComment("дата создания"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина по стволу до, м"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Глубина по стволу от, м"); + + b.Property("DifferentialPressure") + .HasColumnType("double precision") + .HasColumnName("differential_pressure") + .HasComment("Перепад давления, атм. Уставка"); + + b.Property("DifferentialPressureLimitMax") + .HasColumnType("double precision") + .HasColumnName("differential_pressure_limit_max") + .HasComment("Перепад давления, атм. Ограничение"); + + b.Property("FlowRate") + .HasColumnType("double precision") + .HasColumnName("flow_rate") + .HasComment("Расход л/с. Уставка"); + + b.Property("FlowRateLimitMax") + .HasColumnType("double precision") + .HasColumnName("flow_rate_limit_max") + .HasComment("Расход л/с. Ограничение"); + + b.Property("IdAuthor") + .HasColumnType("integer") + .HasColumnName("id_author") + .HasComment("Автор"); + + b.Property("IdEditor") + .HasColumnType("integer") + .HasColumnName("id_editor") + .HasComment("Редактор"); + + b.Property("IdPrevious") + .HasColumnType("integer") + .HasColumnName("id_previous") + .HasComment("ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"); + + b.Property("IdState") + .HasColumnType("integer") + .HasColumnName("id_state") + .HasComment("ИД состояния записи: \n0 - актуальная\n1 - замененная\n2 - удаленная"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_wellsection_type") + .HasComment("Тип секции"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("note") + .HasComment("Примечание"); + + b.Property("Obsolete") + .HasColumnType("timestamp with time zone") + .HasColumnName("obsolete") + .HasComment("дата устаревания"); + + b.Property("PressureLimitMax") + .HasColumnType("double precision") + .HasColumnName("pressure_limit_max") + .HasComment("Максимально допустимое давление, атм"); + + b.Property("RopLimitMax") + .HasColumnType("double precision") + .HasColumnName("rop_limit_max") + .HasComment("Максимально допустимая скорость, м/ч"); + + b.Property("Spring") + .HasColumnType("double precision") + .HasColumnName("spring") + .HasComment("Расчётная пружина, градус"); + + b.Property("ToolBuckling") + .HasColumnType("double precision") + .HasColumnName("tool_buckling") + .HasComment("Складывание инструмента, м"); + + b.Property("WeightOnBit") + .HasColumnType("double precision") + .HasColumnName("weight_on_bit") + .HasComment("Нагрузка, т. Уставка"); + + b.Property("WeightOnBitLimitMax") + .HasColumnType("double precision") + .HasColumnName("weight_on_bit_limit_max") + .HasComment("Нагрузка, т. Ограничение"); + + b.HasKey("Id"); + + b.HasIndex("IdAuthor"); + + b.HasIndex("IdEditor"); + + b.HasIndex("IdPrevious"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellSectionType"); + + b.ToTable("t_process_map_plan_slide", t => + { + t.HasComment("РТК план бурение слайд"); + }); + }); + modelBuilder.Entity("AsbCloudDb.Model.RelationCompanyWell", b => { b.Property("IdCompany") @@ -8864,46 +8989,6 @@ namespace AsbCloudDb.Migrations b.Navigation("Well"); }); - modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanDrilling", b => - { - b.HasOne("AsbCloudDb.Model.User", "Author") - .WithMany() - .HasForeignKey("IdAuthor") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("AsbCloudDb.Model.User", "Editor") - .WithMany() - .HasForeignKey("IdEditor") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanDrilling", "Previous") - .WithMany() - .HasForeignKey("IdPrevious"); - - b.HasOne("AsbCloudDb.Model.Well", "Well") - .WithMany() - .HasForeignKey("IdWell") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") - .WithMany() - .HasForeignKey("IdWellSectionType") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Author"); - - b.Navigation("Editor"); - - b.Navigation("Previous"); - - b.Navigation("Well"); - - b.Navigation("WellSectionType"); - }); - modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanReam", b => { b.HasOne("AsbCloudDb.Model.User", "Author") @@ -8937,6 +9022,86 @@ namespace AsbCloudDb.Migrations b.Navigation("WellSectionType"); }); + modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanRotor", b => + { + b.HasOne("AsbCloudDb.Model.User", "Author") + .WithMany() + .HasForeignKey("IdAuthor") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.User", "Editor") + .WithMany() + .HasForeignKey("IdEditor") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanRotor", "Previous") + .WithMany() + .HasForeignKey("IdPrevious"); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany() + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + + b.Navigation("Editor"); + + b.Navigation("Previous"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanSlide", b => + { + b.HasOne("AsbCloudDb.Model.User", "Author") + .WithMany() + .HasForeignKey("IdAuthor") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.User", "Editor") + .WithMany() + .HasForeignKey("IdEditor") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("AsbCloudDb.Model.ProcessMaps.ProcessMapPlanSlide", "Previous") + .WithMany() + .HasForeignKey("IdPrevious"); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany() + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + + b.Navigation("Editor"); + + b.Navigation("Previous"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + }); + modelBuilder.Entity("AsbCloudDb.Model.RelationCompanyWell", b => { b.HasOne("AsbCloudDb.Model.Company", "Company") diff --git a/AsbCloudDb/Model/AsbCloudDbContext.cs b/AsbCloudDb/Model/AsbCloudDbContext.cs index ae4c2894..19f46c52 100644 --- a/AsbCloudDb/Model/AsbCloudDbContext.cs +++ b/AsbCloudDb/Model/AsbCloudDbContext.cs @@ -19,7 +19,8 @@ namespace AsbCloudDb.Model public virtual DbSet Deposits => Set(); public virtual DbSet DetectedOperations => Set(); public virtual DbSet TrajectoriesPlan => Set(); - public virtual DbSet ProcessMapPlanDrilling => Set(); + public virtual DbSet ProcessMapPlanRotor => Set(); + public virtual DbSet ProcessMapPlanSlide => Set(); public virtual DbSet ProcessMapPlanReams => Set(); public virtual DbSet DrillingProgramParts => Set(); public virtual DbSet FileCategories => Set(); @@ -442,12 +443,22 @@ namespace AsbCloudDb.Model .HasIndex(w => new { w.IdWell, w.IdSectionType }) .IsUnique(); - modelBuilder.Entity() + modelBuilder.Entity() .HasOne(p => p.Author) .WithMany() .OnDelete(DeleteBehavior.Restrict); - modelBuilder.Entity() + modelBuilder.Entity() + .HasOne(p => p.Author) + .WithMany() + .OnDelete(DeleteBehavior.Restrict); + + modelBuilder.Entity() + .HasOne(p => p.Editor) + .WithMany() + .OnDelete(DeleteBehavior.Restrict); + + modelBuilder.Entity() .HasOne(p => p.Editor) .WithMany() .OnDelete(DeleteBehavior.Restrict); diff --git a/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanBase.cs b/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanBase.cs index 912ce7c0..4abc0ad2 100644 --- a/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanBase.cs +++ b/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanBase.cs @@ -1,4 +1,5 @@ using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace AsbCloudDb.Model.ProcessMapPlan; @@ -12,9 +13,11 @@ public abstract class ProcessMapPlanBase : ChangeLogAbstract, IId, IWellRelated public int IdWellSectionType { get; set; } [Column("depth_start"), Comment("Глубина по стволу от, м")] + [Range(0.0, 9999.9)] public double DepthStart { get; set; } [Column("depth_end"), Comment("Глубина по стволу до, м")] + [Range(0.0, 9999.9)] public double DepthEnd { get; set; } [ForeignKey(nameof(IdWell))] diff --git a/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanDrilling.cs b/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanDrilling.cs deleted file mode 100644 index e9ade162..00000000 --- a/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanDrilling.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using AsbCloudDb.Model.ProcessMapPlan; -using Microsoft.EntityFrameworkCore; - -namespace AsbCloudDb.Model.ProcessMaps; - -[Table("t_process_map_plan_drilling"), Comment("РТК план бурение")] -public class ProcessMapPlanDrilling : ProcessMapPlanBase -{ - [Column("id_mode"), Comment("Id режима (1- ротор, 2 слайд)")] - public int IdMode { get; set; } - - [Column("axial_load_plan"), Comment("Осевая нагрузка, т, план")] - public double AxialLoadPlan { get; set; } - - [Column("axial_load_limit_max"), Comment("Осевая нагрузка, т, допустимый максимум")] - public double AxialLoadLimitMax { get; set; } - - [Column("delta_pressure_plan"), Comment("Перепад давления, атм, план")] - public double DeltaPressurePlan { get; set; } - - [Column("delta_pressure_limit_max"), Comment("Перепад давления, атм, допустимый максимум")] - public double DeltaPressureLimitMax { get; set; } - - [Column("top_drive_torque_plan"), Comment("Момент на ВСП, план")] - public double TopDriveTorquePlan { get; set; } - - [Column("top_drive_torque_limit_max"), Comment("Момент на ВСП, допустимый максимум")] - public double TopDriveTorqueLimitMax { get; set; } - - [Column("top_drive_speed_plan"), Comment("Обороты на ВСП, план")] - public double TopDriveSpeedPlan { get; set; } - - [Column("top_drive_speed_limit_max"), Comment("Обороты на ВСП, допустимый максимум")] - public double TopDriveSpeedLimitMax { get; set; } - - [Column("flow_plan"), Comment("Расход, л/с, план")] - public double FlowPlan { get; set; } - - [Column("flow_limit_max"), Comment("Расход, л/с, допустимый максимум")] - public double FlowLimitMax { get; set; } - - [Column("rop_plan"), Comment("Плановая механическая скорость, м/ч")] - public double RopPlan { get; set; } - - [Column("usage_saub"), Comment("Плановый процент использования АКБ")] - public double UsageSaub { get; set; } - - [Column("usage_spin"), Comment("Плановый процент использования spin master")] - public double UsageSpin { get; set; } - - [Column("comment"), Comment("Комментарий"), StringLength(1024)] - public string Comment { get; set; } = string.Empty; - - [ForeignKey(nameof(IdPrevious))] - public virtual ProcessMapPlanDrilling? Previous { get; set; } -} \ No newline at end of file diff --git a/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanRotor.cs b/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanRotor.cs new file mode 100644 index 00000000..c4bec8f4 --- /dev/null +++ b/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanRotor.cs @@ -0,0 +1,76 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using AsbCloudDb.Model.ProcessMapPlan; +using Microsoft.EntityFrameworkCore; + +namespace AsbCloudDb.Model.ProcessMaps; + +[Table("t_process_map_plan_rotor"), Comment("РТК план бурение ротор")] +public class ProcessMapPlanRotor : ProcessMapPlanBase +{ + [Column("rop_limit_max"), Comment("Максимально допустимая скорость, м/ч")] + [Range(0, 800.0)] + [Required] + public double RopLimitMax { get; set; } + + [Column("pressure_limit_max"), Comment("Максимально допустимое давление, атм")] + [Range(0.0, 400.0)] + [Required] + public double PressureLimitMax { get; set; } + + [Column("differential_pressure"), Comment("Перепад давления, атм. Уставка")] + [Range(0.0, 60.0)] + [Required] + public double DifferentialPressure { get; set; } + + [Column("differential_pressure_limit_max"), Comment("Перепад давления, атм. Ограничение")] + [Range(0.0, 60.0)] + [Required] + public double DifferentialPressureLimitMax { get; set; } + + [Column("weight_on_bit"), Comment("Нагрузка, т. Уставка")] + [Range(0.0, 99.0)] + [Required] + public double WeightOnBit { get; set; } + + [Column("weight_on_bit_limit_max"), Comment("Нагрузка, т. Ограничение")] + [Range(0.0, 99.0)] + [Required] + public double WeightOnBitLimitMax { get; set; } + + [Column("top_drive_torque"), Comment("Момент на ВСП, кН*м. Уставка")] + [Range(0.0, 35.0)] + [Required] + public double TopDriveTorque { get; set; } + + [Column("top_drive_torque_limit_max"), Comment("Момент на ВСП, кН*м. Ограничение")] + [Range(0.0, 35.0)] + [Required] + public double TopDriveTorqueLimit { get; set; } + + [Column("revolution_per_minute"), Comment("Обороты на ВСП, об/мин. Уставка")] + [Range(0.0, 270.0)] + [Required] + public double RevolutionsPerMinute { get; set; } + + [Column("revolutions_per_minute_limit_max"), Comment("Обороты на ВСП, об/мин. Ограничение")] + [Range(0.0, 270.0)] + [Required] + public double RevolutionsPerMinuteLimitMax { get; set; } + + [Column("flow_rate"), Comment("Расход л/с. Уставка")] + [Range(0.0, 100.0)] + [Required] + public double FlowRate { get; set; } + + [Column("flow_rate_limit_max"), Comment("Расход л/с. Ограничение")] + [Range(0.0, 100.0)] + [Required] + public double FlowRateLimitMax { get; set; } + + [Column("note"), Comment("Примечание"), StringLength(1024)] + public string Note { get; set; } = string.Empty; + + [ForeignKey(nameof(IdPrevious))] + public virtual ProcessMapPlanRotor? Previous { get; set; } +} \ No newline at end of file diff --git a/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanSlide.cs b/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanSlide.cs new file mode 100644 index 00000000..58e2dc92 --- /dev/null +++ b/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanSlide.cs @@ -0,0 +1,66 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using AsbCloudDb.Model.ProcessMapPlan; +using Microsoft.EntityFrameworkCore; + +namespace AsbCloudDb.Model.ProcessMaps; + +[Table("t_process_map_plan_slide"), Comment("РТК план бурение слайд")] +public class ProcessMapPlanSlide : ProcessMapPlanBase +{ + [Column("rop_limit_max"), Comment("Максимально допустимая скорость, м/ч")] + [Range(0, 800.0)] + [Required] + public double RopLimitMax { get; set; } + + [Column("pressure_limit_max"), Comment("Максимально допустимое давление, атм")] + [Range(0, 400.0)] + [Required] + public double PressureLimitMax { get; set; } + + [Column("differential_pressure"), Comment("Перепад давления, атм. Уставка")] + [Range(0, 60.0)] + [Required] + public double DifferentialPressure { get; set; } + + [Column("differential_pressure_limit_max"), Comment("Перепад давления, атм. Ограничение")] + [Range(0, 60.0)] + [Required] + public double DifferentialPressureLimitMax { get; set; } + + [Column("weight_on_bit"), Comment("Нагрузка, т. Уставка")] + [Range(0, 50.0)] + [Required] + public double WeightOnBit { get; set; } + + [Column("weight_on_bit_limit_max"), Comment("Нагрузка, т. Ограничение")] + [Range(0, 50.0)] + [Required] + public double WeightOnBitLimitMax { get; set; } + + [Column("flow_rate"), Comment("Расход л/с. Уставка")] + [Range(0, 100.0)] + [Required] + public double FlowRate { get; set; } + + [Column("flow_rate_limit_max"), Comment("Расход л/с. Ограничение")] + [Range(0, 100.0)] + [Required] + public double FlowRateLimitMax { get; set; } + + [Column("spring"), Comment("Расчётная пружина, градус")] + [Range(0, 9999.9)] + [Required] + public double Spring { get; set; } + + [Column("tool_buckling"), Comment("Складывание инструмента, м")] + [Range(0, 9999.9)] + [Required] + public double ToolBuckling { get; set; } + + [Column("note"), Comment("Примечание"), StringLength(1024)] + public string Note { get; set; } = string.Empty; + + [ForeignKey(nameof(IdPrevious))] + public virtual ProcessMapPlanSlide? Previous { get; set; } +} \ No newline at end of file diff --git a/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj b/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj index 873bdfb4..563b41f5 100644 --- a/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj +++ b/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj @@ -15,6 +15,8 @@ + + @@ -39,7 +41,8 @@ - + + diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs index aa8b63dd..86ec923b 100644 --- a/AsbCloudInfrastructure/DependencyInjection.cs +++ b/AsbCloudInfrastructure/DependencyInjection.cs @@ -132,11 +132,18 @@ namespace AsbCloudInfrastructure Plan = src.WellDepthPlan }); - TypeAdapterConfig>.NewConfig() - .Include>() - .Map(dest => dest, src => new ChangeLogDto() + TypeAdapterConfig>.NewConfig() + .Include>() + .Map(dest => dest, src => new ChangeLogDto() { - Item = src.Adapt() + Item = src.Adapt() + }); + + TypeAdapterConfig>.NewConfig() + .Include>() + .Map(dest => dest, src => new ChangeLogDto() + { + Item = src.Adapt() }); } @@ -196,8 +203,12 @@ namespace AsbCloudInfrastructure services.AddTransient(); services.AddTransient< - IChangeLogRepository, - ProcessMapPlanBaseRepository>(); + IChangeLogRepository, + ProcessMapPlanBaseRepository>(); + + services.AddTransient< + IChangeLogRepository, + ProcessMapPlanBaseRepository>(); services.AddTransient< IChangeLogRepository, @@ -248,7 +259,8 @@ namespace AsbCloudInfrastructure services.AddTransient(); services.AddTransient(); services.AddTransient(); - services.AddTransient(); + services.AddTransient>(); + services.AddTransient>(); services.AddTransient(); services.AddTransient(); services.AddTransient(); @@ -302,14 +314,16 @@ namespace AsbCloudInfrastructure services.AddTransient(); services.AddTransient(); - services.AddTransient(); + services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); - services.AddTransient(); + services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/AsbCloudInfrastructure/Repository/WellCompositeRepository.cs b/AsbCloudInfrastructure/Repository/WellCompositeRepository.cs index 15ba5883..8353f9f4 100644 --- a/AsbCloudInfrastructure/Repository/WellCompositeRepository.cs +++ b/AsbCloudInfrastructure/Repository/WellCompositeRepository.cs @@ -13,14 +13,15 @@ using System.Threading.Tasks; namespace AsbCloudInfrastructure.Repository; -public class WellCompositeRepository : IWellCompositeRepository +public class WellCompositeRepository : IWellCompositeRepository + where TDto : ProcessMapPlanBaseDto { private readonly IAsbCloudDbContext db; - private readonly IChangeLogRepository processMapPlanDrillingRepository; + private readonly IChangeLogRepository processMapPlanDrillingRepository; public WellCompositeRepository( IAsbCloudDbContext db, - IChangeLogRepository processMapPlanDrillingRepository) + IChangeLogRepository processMapPlanDrillingRepository) { this.db = db; this.processMapPlanDrillingRepository = processMapPlanDrillingRepository; @@ -51,7 +52,7 @@ public class WellCompositeRepository : IWellCompositeRepository } /// - public Task> GetCompositeProcessMap(int idWell, CancellationToken token) + public Task> GetCompositeProcessMap(int idWell, CancellationToken token) { throw new NotImplementedException(); } diff --git a/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanDrillingTemplate.cs b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanDrillingTemplate.cs deleted file mode 100644 index dff24dcf..00000000 --- a/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanDrillingTemplate.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Generic; -using AsbCloudApp.Data.ProcessMaps; - -namespace AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemplates; - -public class ProcessMapPlanDrillingTemplate : ITemplateParameters -{ - public string SheetName => "План"; - - public int HeaderRowsCount => 2; - - public string FileName => "ProcessMapPlanDrillingTemplate.xlsx"; - - public IDictionary Cells => new Dictionary - { - { nameof(ProcessMapPlanDrillingDto.Section), new Cell(1, typeof(string)) }, - { nameof(ProcessMapPlanDrillingDto.Mode), new Cell(2, typeof(string)) }, - { nameof(ProcessMapPlanDrillingDto.DepthStart), new Cell(3, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.DepthEnd), new Cell(4, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.DeltaPressurePlan), new Cell(5, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.DeltaPressureLimitMax), new Cell(6, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.AxialLoadPlan), new Cell(7, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.AxialLoadLimitMax), new Cell(8, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.TopDriveTorquePlan), new Cell(9, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.TopDriveTorqueLimitMax), new Cell(10, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.TopDriveSpeedPlan), new Cell(11, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.TopDriveSpeedLimitMax), new Cell(12, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.FlowPlan), new Cell(13, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.FlowLimitMax), new Cell(14, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.RopPlan), new Cell(15, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.UsageSaub), new Cell(16, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.UsageSpin), new Cell(17, typeof(double)) }, - { nameof(ProcessMapPlanDrillingDto.Comment), new Cell(18, typeof(string)) } - }; -} \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanRotorTemplate.cs b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanRotorTemplate.cs new file mode 100644 index 00000000..f7a63207 --- /dev/null +++ b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanRotorTemplate.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using AsbCloudApp.Data.ProcessMaps; + +namespace AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemplates; + +public class ProcessMapPlanRotorTemplate : ITemplateParameters +{ + public string SheetName => "Бурение ротор"; + + public int HeaderRowsCount => 2; + + public string FileName => "ProcessMapPlanRotorTemplate.xlsx"; + + public IDictionary Cells => new Dictionary + { + { nameof(ProcessMapPlanRotorDto.Section), new Cell(1, typeof(string)) }, + { nameof(ProcessMapPlanRotorDto.DepthStart), new Cell(2, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.DepthEnd), new Cell(3, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.RopLimitMax), new Cell(4, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.PressureLimitMax), new Cell(5, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.DifferentialPressure), new Cell(6, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.DifferentialPressureLimitMax), new Cell(7, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.WeightOnBit), new Cell(8, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.WeightOnBitLimitMax), new Cell(9, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.TopDriveTorque), new Cell(10, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.TopDriveTorqueLimit), new Cell(11, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.RevolutionsPerMinute), new Cell(12, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.RevolutionsPerMinuteLimitMax), new Cell(13, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.FlowRate), new Cell(14, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.FlowRateLimitMax), new Cell(15, typeof(double)) }, + { nameof(ProcessMapPlanRotorDto.Note), new Cell(16, typeof(double)) }, + }; +} \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanSlideTemplate.cs b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanSlideTemplate.cs new file mode 100644 index 00000000..9d570c54 --- /dev/null +++ b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanSlideTemplate.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using AsbCloudApp.Data.ProcessMaps; + +namespace AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemplates; + +public class ProcessMapPlanSlideTemplate : ITemplateParameters +{ + public string SheetName => "Бурение слайд"; + + public int HeaderRowsCount => 2; + + public string FileName => "ProcessMapPlanSlideTemplate.xlsx"; + + public IDictionary Cells => new Dictionary + { + { nameof(ProcessMapPlanSlideDto.Section), new Cell(1, typeof(string)) }, + { nameof(ProcessMapPlanSlideDto.DepthStart), new Cell(2, typeof(double)) }, + { nameof(ProcessMapPlanSlideDto.DepthEnd), new Cell(3, typeof(double)) }, + { nameof(ProcessMapPlanSlideDto.RopLimitMax), new Cell(4, typeof(double)) }, + { nameof(ProcessMapPlanSlideDto.PressureLimitMax), new Cell(5, typeof(double)) }, + { nameof(ProcessMapPlanSlideDto.DifferentialPressure), new Cell(6, typeof(double)) }, + { nameof(ProcessMapPlanSlideDto.DifferentialPressureLimitMax), new Cell(7, typeof(double)) }, + { nameof(ProcessMapPlanSlideDto.WeightOnBit), new Cell(8, typeof(double)) }, + { nameof(ProcessMapPlanSlideDto.WeightOnBitLimitMax), new Cell(9, typeof(double)) }, + { nameof(ProcessMapPlanSlideDto.FlowRate), new Cell(10, typeof(double)) }, + { nameof(ProcessMapPlanSlideDto.FlowRateLimitMax), new Cell(11, typeof(double)) }, + { nameof(ProcessMapPlanSlideDto.Spring), new Cell(12, typeof(double)) }, + { nameof(ProcessMapPlanSlideDto.ToolBuckling), new Cell(13, typeof(double)) }, + { nameof(ProcessMapPlanSlideDto.Note), new Cell(14, typeof(double)) } + }; +} \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs deleted file mode 100644 index 5b0935d2..00000000 --- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using AsbCloudApp.Data.ProcessMaps; -using AsbCloudApp.Repositories; -using AsbCloudApp.Requests; -using AsbCloudApp.Requests.ExportOptions; -using AsbCloudApp.Services; -using AsbCloudInfrastructure.Services.ExcelServices.Templates; -using AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemplates; - -namespace AsbCloudInfrastructure.Services.ProcessMapPlan.Export; - -public class ProcessMapPlanDrillingExportService : ProcessMapPlanExportService -{ - public ProcessMapPlanDrillingExportService( - IChangeLogRepository processMapPlanRepository, - IWellService wellService) - : base(processMapPlanRepository, wellService) - { - } - - protected override ITemplateParameters TemplateParameters => new ProcessMapPlanDrillingTemplate(); - - protected override async Task BuildFileNameAsync(WellRelatedExportRequest options, CancellationToken token) - { - var caption = await wellService.GetWellCaptionByIdAsync(options.IdWell, token); - - return $"{caption}_РТК_План_бурение.xlsx"; - } - - protected override async Task> GetDtosAsync(WellRelatedExportRequest options, - CancellationToken token) - { - var dtos = await base.GetDtosAsync(options, token); - var dtosWithMode = dtos.Select(dto => - { - dto.Mode = dto.IdMode switch - { - 1 => "Ротор", - 2 => "Слайд", - _ => throw new ArgumentOutOfRangeException() - }; - - return dto; - }); - - return dtosWithMode; - } -} \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanRotorExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanRotorExportService.cs new file mode 100644 index 00000000..ce6560d6 --- /dev/null +++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanRotorExportService.cs @@ -0,0 +1,30 @@ +using AsbCloudApp.Data.ProcessMaps; +using AsbCloudApp.Repositories; +using AsbCloudApp.Requests; +using AsbCloudApp.Requests.ExportOptions; +using AsbCloudApp.Services; +using AsbCloudInfrastructure.Services.ExcelServices.Templates; +using AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemplates; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudInfrastructure.Services.ProcessMapPlan.Export; + +public class ProcessMapPlanRotorExportService : ProcessMapPlanExportService +{ + public ProcessMapPlanRotorExportService( + IChangeLogRepository processMapPlanRepository, + IWellService wellService) + : base(processMapPlanRepository, wellService) + { + } + + protected override ITemplateParameters TemplateParameters { get; } = new ProcessMapPlanRotorTemplate(); + + protected override async Task BuildFileNameAsync(WellRelatedExportRequest options, CancellationToken token) + { + var caption = await wellService.GetWellCaptionByIdAsync(options.IdWell, token); + + return $"{caption}_РТК_План_бурение_ротор.xlsx"; + } +} \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanSlideExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanSlideExportService.cs new file mode 100644 index 00000000..c6c2fdfe --- /dev/null +++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanSlideExportService.cs @@ -0,0 +1,30 @@ +using AsbCloudApp.Data.ProcessMaps; +using AsbCloudApp.Repositories; +using AsbCloudApp.Requests; +using AsbCloudApp.Requests.ExportOptions; +using AsbCloudApp.Services; +using AsbCloudInfrastructure.Services.ExcelServices.Templates; +using AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemplates; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudInfrastructure.Services.ProcessMapPlan.Export; + +public class ProcessMapPlanSlideExportService : ProcessMapPlanExportService +{ + public ProcessMapPlanSlideExportService( + IChangeLogRepository processMapPlanRepository, + IWellService wellService) + : base(processMapPlanRepository, wellService) + { + } + + protected override ITemplateParameters TemplateParameters { get; } = new ProcessMapPlanSlideTemplate(); + + protected override async Task BuildFileNameAsync(WellRelatedExportRequest options, CancellationToken token) + { + var caption = await wellService.GetWellCaptionByIdAsync(options.IdWell, token); + + return $"{caption}_РТК_План_бурение_слайд.xlsx"; + } +} \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanParser.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanParser.cs index 333e39a2..89fbd5b7 100644 --- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanParser.cs +++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanParser.cs @@ -27,12 +27,4 @@ public abstract class ProcessMapPlanParser : ParserExcelService - modeName?.Trim().ToLower() switch - { - "ротор" => 1, - "слайд" => 2, - _ => null - }; } \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanDrillingParser.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanRotorParser.cs similarity index 55% rename from AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanDrillingParser.cs rename to AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanRotorParser.cs index fccffe3e..1ce44dc9 100644 --- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanDrillingParser.cs +++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanRotorParser.cs @@ -9,16 +9,16 @@ using AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemp namespace AsbCloudInfrastructure.Services.ProcessMapPlan.Parser; -public class ProcessMapPlanDrillingParser : ProcessMapPlanParser +public class ProcessMapPlanRotorParser : ProcessMapPlanParser { - public ProcessMapPlanDrillingParser(IWellOperationRepository wellOperationRepository) + public ProcessMapPlanRotorParser(IWellOperationRepository wellOperationRepository) : base(wellOperationRepository) { } - protected override ITemplateParameters TemplateParameters => new ProcessMapPlanDrillingTemplate(); + protected override ITemplateParameters TemplateParameters => new ProcessMapPlanRotorTemplate(); - protected override ProcessMapPlanDrillingDto BuildDto(IDictionary row, int rowNumber) + protected override ProcessMapPlanRotorDto BuildDto(IDictionary row, int rowNumber) { var dto = base.BuildDto(row, rowNumber); @@ -30,25 +30,12 @@ public class ProcessMapPlanDrillingParser : ProcessMapPlanParser +{ + public ProcessMapPlanSlideParser(IWellOperationRepository wellOperationRepository) + : base(wellOperationRepository) + { + } + + protected override ITemplateParameters TemplateParameters => new ProcessMapPlanSlideTemplate(); + + protected override ProcessMapPlanSlideDto BuildDto(IDictionary row, int rowNumber) + { + var dto = base.BuildDto(row, rowNumber); + + var section = sections.FirstOrDefault(s => + string.Equals(s.Caption.Trim(), dto.Section?.Trim(), StringComparison.CurrentCultureIgnoreCase)); + + if (section is null) + { + var message = string.Format(XLExtentions.ProblemDetailsTemplate, + TemplateParameters.SheetName, + rowNumber, + TemplateParameters.Cells[nameof(ProcessMapPlanBaseDto.Section)], + "Указана некорректная секция"); + throw new FileFormatException(message); + } + + dto.IdWellSectionType = section.Id; + + return dto; + } +} \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Templates/ProcessMapPlanDrillingTemplate.xlsx b/AsbCloudInfrastructure/Services/ProcessMapPlan/Templates/ProcessMapPlanDrillingTemplate.xlsx deleted file mode 100644 index bdf13143..00000000 Binary files a/AsbCloudInfrastructure/Services/ProcessMapPlan/Templates/ProcessMapPlanDrillingTemplate.xlsx and /dev/null differ diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Templates/ProcessMapPlanRotorTemplate.xlsx b/AsbCloudInfrastructure/Services/ProcessMapPlan/Templates/ProcessMapPlanRotorTemplate.xlsx new file mode 100644 index 00000000..97e15351 Binary files /dev/null and b/AsbCloudInfrastructure/Services/ProcessMapPlan/Templates/ProcessMapPlanRotorTemplate.xlsx differ diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Templates/ProcessMapPlanSlideTemplate.xlsx b/AsbCloudInfrastructure/Services/ProcessMapPlan/Templates/ProcessMapPlanSlideTemplate.xlsx new file mode 100644 index 00000000..f91bf0f7 Binary files /dev/null and b/AsbCloudInfrastructure/Services/ProcessMapPlan/Templates/ProcessMapPlanSlideTemplate.xlsx differ diff --git a/AsbCloudInfrastructure/Services/ProcessMaps/Report/ProcessMapReportDrillingService.cs b/AsbCloudInfrastructure/Services/ProcessMaps/Report/ProcessMapReportDrillingService.cs index 18345122..4a0e6c89 100644 --- a/AsbCloudInfrastructure/Services/ProcessMaps/Report/ProcessMapReportDrillingService.cs +++ b/AsbCloudInfrastructure/Services/ProcessMaps/Report/ProcessMapReportDrillingService.cs @@ -20,20 +20,23 @@ namespace AsbCloudInfrastructure.Services.ProcessMaps.Report; public class ProcessMapReportDrillingService : IProcessMapReportDrillingService { private readonly IWellService wellService; - private readonly IChangeLogRepository processMapPlanBaseRepository; + private readonly IChangeLogRepository processMapPlanRotorRepository; + private readonly IChangeLogRepository processMapPlanSlideRepository; private readonly IDataSaubStatRepository dataSaubStatRepository; private readonly IWellOperationRepository wellOperationRepository; private readonly IWellOperationCategoryRepository wellOperationCategoryRepository; public ProcessMapReportDrillingService(IWellService wellService, - IChangeLogRepository processMapPlanBaseRepository, + IChangeLogRepository processMapPlanRotorRepository, + IChangeLogRepository processMapPlanSlideRepository, IDataSaubStatRepository dataSaubStatRepository, IWellOperationRepository wellOperationRepository, IWellOperationCategoryRepository wellOperationCategoryRepository ) { this.wellService = wellService; - this.processMapPlanBaseRepository = processMapPlanBaseRepository; + this.processMapPlanRotorRepository = processMapPlanRotorRepository; + this.processMapPlanSlideRepository = processMapPlanSlideRepository; this.dataSaubStatRepository = dataSaubStatRepository; this.wellOperationRepository = wellOperationRepository; this.wellOperationCategoryRepository = wellOperationCategoryRepository; @@ -48,7 +51,15 @@ public class ProcessMapReportDrillingService : IProcessMapReportDrillingService return Enumerable.Empty(); var requestProcessMapPlan = new ProcessMapPlanBaseRequestWithWell(idWell); - var changeLogProcessMaps = await processMapPlanBaseRepository.GetChangeLogForDate(requestProcessMapPlan, null, token); + + + + var changeLogProcessMapsRotor = await processMapPlanRotorRepository.GetChangeLogForDate(requestProcessMapPlan, null, token); + var changeLogProcessMapsSlide = await processMapPlanSlideRepository.GetChangeLogForDate(requestProcessMapPlan, null, token); + + var changeLogProcessMaps = changeLogProcessMapsRotor + .Select(p => ConvertToChangeLogDtoWithProcessMapPlanBase(p)) + .Union(changeLogProcessMapsSlide.Select(p => ConvertToChangeLogDtoWithProcessMapPlanBase(p))); if (!changeLogProcessMaps.Any()) return Enumerable.Empty(); @@ -95,9 +106,24 @@ public class ProcessMapReportDrillingService : IProcessMapReportDrillingService return result; } + private ChangeLogDto ConvertToChangeLogDtoWithProcessMapPlanBase(ChangeLogDto p) + where T: ProcessMapPlanBaseDto + { + return new ChangeLogDto() + { + Item = p.Item, + Author = p.Author, + Creation = p.Creation, + Editor = p.Editor, + IdPrevious = p.IdPrevious, + IdState = p.IdState, + Obsolete = p.Obsolete, + }; + } + private static IEnumerable CalcByIntervals( DataSaubStatRequest request, - IEnumerable> changeLogProcessMaps, + IEnumerable> changeLogProcessMaps, Span dataSaubStats, IEnumerable wellOperations, IEnumerable wellOperationCategories, @@ -125,15 +151,15 @@ public class ProcessMapReportDrillingService : IProcessMapReportDrillingService return operation.IdWellSectionType; } - ProcessMapPlanDrillingDto? GetProcessMapPlan(int idWellSectionType, DataSaubStatDto data) - => changeLogProcessMaps - .Where(p => p.Item.IdWellSectionType == idWellSectionType) - .Where(p => p.Item.DepthStart <= data.DepthStart) - .Where(p => p.Item.DepthEnd >= data.DepthStart) - .Where(p => IsModeMatchOperationCategory(p.Item.IdMode, data.IdCategory)) - .WhereActualAtMoment(data.DateStart) - .Select(p => p.Item) - .FirstOrDefault(); + ProcessMapPlanBaseDto? GetProcessMapPlan(int idWellSectionType, DataSaubStatDto data) + => changeLogProcessMaps + .Where(p => p.Item.IdWellSectionType == idWellSectionType) + .Where(p => p.Item.DepthStart <= data.DepthStart) + .Where(p => p.Item.DepthEnd >= data.DepthStart) + .Where(p => IsModeMatchOperationCategory(p.Item, data.IdCategory)) + .WhereActualAtMoment(data.DateStart) + .Select(p => p.Item) + .FirstOrDefault(); var idWellSectionType = GetSection(firstElemInInterval); var prevProcessMapPlan = GetProcessMapPlan(idWellSectionType, firstElemInInterval); @@ -175,13 +201,13 @@ public class ProcessMapReportDrillingService : IProcessMapReportDrillingService return list; } - private static bool IsModeMatchOperationCategory(int idMode, int idCategory) + private static bool IsModeMatchOperationCategory(ProcessMapPlanBaseDto dto, int idCategory) { - return (idMode == 1 && idCategory == 5003) || (idMode == 2 && idCategory == 5002); + return (dto is ProcessMapPlanRotorDto && idCategory == 5003) || (dto is ProcessMapPlanSlideDto && idCategory == 5002); } private static ProcessMapReportDataSaubStatDto? CalcStat( - ProcessMapPlanDrillingDto? processMapPlanFilteredByDepth, + ProcessMapPlanBaseDto? processMapPlanFilteredByDepth, Span span, string wellOperationCategoryName, WellSectionTypeDto wellSectionType @@ -206,54 +232,70 @@ public class ProcessMapReportDrillingService : IProcessMapReportDrillingService DrillingMode = wellOperationCategoryName, PressureDiff = new ProcessMapReportDataSaubStatParamsDto() { - SetpointPlan = processMapPlanFilteredByDepth?.DeltaPressurePlan, SetpointFact = firstElemInInterval.PressureSp - firstElemInInterval.PressureIdle, FactWavg = aggregatedValues.Pressure, - Limit = processMapPlanFilteredByDepth?.DeltaPressureLimitMax, SetpointUsage = aggregatedValues.SetpointUsagePressure }, AxialLoad = new ProcessMapReportDataSaubStatParamsDto() { - SetpointPlan = processMapPlanFilteredByDepth?.AxialLoadPlan, SetpointFact = aggregatedValues.AxialLoadSp, FactWavg = aggregatedValues.AxialLoad, - Limit = processMapPlanFilteredByDepth?.AxialLoadLimitMax, SetpointUsage = aggregatedValues.SetpointUsageAxialLoad }, TopDriveTorque = new ProcessMapReportDataSaubStatParamsDto() { - SetpointPlan = processMapPlanFilteredByDepth?.TopDriveTorquePlan, SetpointFact = aggregatedValues.RotorTorqueSp, FactWavg = aggregatedValues.RotorTorque, FactMax = aggregatedValues.RotorTorqueMax, - Limit = processMapPlanFilteredByDepth?.TopDriveTorqueLimitMax, SetpointUsage = aggregatedValues.SetpointUsageRotorTorque }, SpeedLimit = new ProcessMapReportDataSaubStatParamsDto { - SetpointPlan = processMapPlanFilteredByDepth?.RopPlan, SetpointFact = aggregatedValues.BlockSpeedSp, FactWavg = deltaDepth / aggregatedValues.DrilledTime, SetpointUsage = aggregatedValues.SetpointUsageRopPlan }, TopDriveSpeed = new ProcessMapReportDataSaubStatParamsDto { - SetpointPlan = processMapPlanFilteredByDepth?.TopDriveSpeedPlan, FactWavg = aggregatedValues.RotorSpeed, FactMax = aggregatedValues.RotorSpeedMax }, Flow = new ProcessMapReportDataSaubStatParamsDto { - SetpointPlan = processMapPlanFilteredByDepth?.FlowPlan, FactWavg = aggregatedValues.MaxFlow, - Limit = processMapPlanFilteredByDepth?.FlowLimitMax, }, Rop = new PlanFactDto { - Plan = processMapPlanFilteredByDepth?.RopPlan, Fact = deltaDepth / aggregatedValues.DrilledTime }, }; + + if(processMapPlanFilteredByDepth is ProcessMapPlanRotorDto processMapPlanRotorFilteredByDepth) + { + result.PressureDiff.SetpointPlan = processMapPlanRotorFilteredByDepth.DifferentialPressure; + result.PressureDiff.Limit = processMapPlanRotorFilteredByDepth.DifferentialPressureLimitMax; + result.AxialLoad.SetpointPlan = processMapPlanRotorFilteredByDepth.WeightOnBit; + result.AxialLoad.Limit = processMapPlanRotorFilteredByDepth.WeightOnBitLimitMax; + result.TopDriveTorque.SetpointPlan = processMapPlanRotorFilteredByDepth.TopDriveTorque; + result.TopDriveTorque.Limit = processMapPlanRotorFilteredByDepth.TopDriveTorqueLimit; + result.SpeedLimit.SetpointPlan = processMapPlanRotorFilteredByDepth.RopLimitMax; + result.TopDriveSpeed.SetpointPlan = processMapPlanRotorFilteredByDepth.RevolutionsPerMinute; + result.Flow.SetpointPlan = processMapPlanRotorFilteredByDepth.FlowRate; + result.Flow.Limit = processMapPlanRotorFilteredByDepth.FlowRateLimitMax; + result.Rop.Plan = processMapPlanRotorFilteredByDepth.RopLimitMax; + } + if (processMapPlanFilteredByDepth is ProcessMapPlanSlideDto processMapPlanSlideFilteredByDepth) + { + result.PressureDiff.SetpointPlan = processMapPlanSlideFilteredByDepth.DifferentialPressure; + result.PressureDiff.Limit = processMapPlanSlideFilteredByDepth.DifferentialPressureLimitMax; + result.AxialLoad.SetpointPlan = processMapPlanSlideFilteredByDepth.WeightOnBit; + result.AxialLoad.Limit = processMapPlanSlideFilteredByDepth.WeightOnBitLimitMax; + result.SpeedLimit.SetpointPlan = processMapPlanSlideFilteredByDepth.RopLimitMax; + result.Flow.SetpointPlan = processMapPlanSlideFilteredByDepth.FlowRate; + result.Flow.Limit = processMapPlanSlideFilteredByDepth.FlowRateLimitMax; + result.Rop.Plan = processMapPlanSlideFilteredByDepth.RopLimitMax; + } + return result; } diff --git a/AsbCloudInfrastructure/Services/WellInfoService.cs b/AsbCloudInfrastructure/Services/WellInfoService.cs index 07bb6e39..b1a635a3 100644 --- a/AsbCloudInfrastructure/Services/WellInfoService.cs +++ b/AsbCloudInfrastructure/Services/WellInfoService.cs @@ -32,7 +32,8 @@ public class WellInfoService { var wellService = services.GetRequiredService(); var operationsStatService = services.GetRequiredService(); - var processMapPlanWellDrillingRepository = services.GetRequiredService>(); + var processMapPlanRotorRepository = services.GetRequiredService>(); + var processMapPlanSlideRepository = services.GetRequiredService>(); var subsystemService = services.GetRequiredService(); var telemetryDataSaubCache = services.GetRequiredService>(); var messageHub = services.GetRequiredService>(); @@ -44,11 +45,14 @@ public class WellInfoService var wellsIds = activeWells.Select(w => w.Id); var processMapPlanWellDrillingRequests = wellsIds.Select(id => new ProcessMapPlanBaseRequestWithWell(id)); - var processMapPlanWellDrillings = new List(); + var processMapPlanWellDrillings = new List(); foreach (var processMapPlanWellDrillingRequest in processMapPlanWellDrillingRequests) { - var processMaps = await processMapPlanWellDrillingRepository.GetCurrent(processMapPlanWellDrillingRequest, token); - processMapPlanWellDrillings.AddRange(processMaps); + var processMapsRotor = await processMapPlanRotorRepository.GetCurrent(processMapPlanWellDrillingRequest, token); + var processMapsSlide = await processMapPlanSlideRepository.GetCurrent(processMapPlanWellDrillingRequest, token); + + processMapPlanWellDrillings.AddRange(processMapsRotor); + processMapPlanWellDrillings.AddRange(processMapsSlide); } var wellDepthByProcessMap = processMapPlanWellDrillings @@ -95,7 +99,7 @@ public class WellInfoService .OrderBy(p => p.DepthEnd); int? idSection = wellLastFactSection?.Id; - ProcessMapPlanDrillingDto? processMapPlanWellDrilling = null; + ProcessMapPlanBaseDto? processMapPlanWellDrilling = null; if (idSection.HasValue && currentDepth.HasValue) { @@ -126,25 +130,21 @@ public class WellInfoService wellMapInfo.AxialLoad = new() { - Plan = processMapPlanWellDrilling?.AxialLoadPlan, Fact = lastSaubTelemetry?.AxialLoad }; wellMapInfo.TopDriveSpeed = new() { - Plan = processMapPlanWellDrilling?.TopDriveSpeedPlan, Fact = lastSaubTelemetry?.RotorSpeed }; wellMapInfo.TopDriveTorque = new() { - Plan = processMapPlanWellDrilling?.TopDriveTorquePlan, Fact = lastSaubTelemetry?.RotorTorque }; wellMapInfo.Pressure = new() { - Plan = processMapPlanWellDrilling?.DeltaPressurePlan, Fact = lastSaubTelemetry?.Pressure }; @@ -158,7 +158,6 @@ public class WellInfoService wellMapInfo.ROP = new() { - Plan = processMapPlanWellDrilling?.RopPlan, Fact = wellOperationsStat?.Total.Fact?.Rop, }; @@ -168,6 +167,28 @@ public class WellInfoService Fact = wellOperationsStat?.Total.Fact?.RouteSpeed, }; + if(processMapPlanWellDrilling is ProcessMapPlanRotorDto processMapPlanRotor) + { + wellMapInfo.AxialLoad.Plan = processMapPlanRotor?.WeightOnBit; + + wellMapInfo.TopDriveSpeed.Plan = processMapPlanRotor?.RevolutionsPerMinute; + + wellMapInfo.TopDriveTorque.Plan = processMapPlanRotor?.TopDriveTorque; + + wellMapInfo.Pressure.Plan = processMapPlanRotor?.DifferentialPressure; + + wellMapInfo.ROP.Plan = processMapPlanRotor?.RopLimitMax; + } + + if (processMapPlanWellDrilling is ProcessMapPlanSlideDto processMapPlanSlide) + { + wellMapInfo.AxialLoad.Plan = processMapPlanSlide?.WeightOnBit; + + wellMapInfo.Pressure.Plan = processMapPlanSlide?.DifferentialPressure; + + wellMapInfo.ROP.Plan = processMapPlanSlide?.RopLimitMax; + } + var wellSubsystemStat = subsystemStat.FirstOrDefault(s => s.Well.Id == well.Id); wellMapInfo.SaubUsage = wellSubsystemStat?.SubsystemAPD?.KUsage ?? 0d; wellMapInfo.SpinUsage = wellSubsystemStat?.SubsystemOscillation?.KUsage ?? 0d; diff --git a/AsbCloudWebApi.IntegrationTests/AsbCloudWebApi.IntegrationTests.csproj b/AsbCloudWebApi.IntegrationTests/AsbCloudWebApi.IntegrationTests.csproj index b23176e3..5bff4d9f 100644 --- a/AsbCloudWebApi.IntegrationTests/AsbCloudWebApi.IntegrationTests.csproj +++ b/AsbCloudWebApi.IntegrationTests/AsbCloudWebApi.IntegrationTests.csproj @@ -19,10 +19,18 @@ + + + + + + + + @@ -32,9 +40,4 @@ - - - - - diff --git a/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanClient.cs b/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanClient.cs new file mode 100644 index 00000000..afb8c1b1 --- /dev/null +++ b/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanClient.cs @@ -0,0 +1,41 @@ +using AsbCloudApp.Data; +using AsbCloudApp.Data.ProcessMaps; +using Refit; + +namespace AsbCloudWebApi.IntegrationTests.Clients; + +public interface IProcessMapPlanClient where TDto : ProcessMapPlanBaseDto +{ + public const string BaseRoute = "/api/well/{idWell}/{controller}"; + + [Post(BaseRoute)] + Task> InsertRange(int idWell, string controller, [Body] IEnumerable dtos); + + [Post($"{BaseRoute}/replace")] + Task> ClearAndInsertRange(int idWell, string controller, [Body] IEnumerable dtos); + + [Delete(BaseRoute)] + Task> DeleteRange(int idWell, string controller, [Body] IEnumerable ids); + + [Delete($"{BaseRoute}/clear")] + Task> Clear(int idWell, string controller); + + [Get(BaseRoute)] + Task>> Get(int idWell, string controller); + + [Get($"{BaseRoute}/changelogByMoment")] + Task>>> Get(int idWell, string controller, DateTimeOffset? moment); + + [Get("/api/telemetry/{uid}/{controller}")] + Task>>> Get(string uid, string controller, DateTimeOffset? updateFrom); + + [Get($"{BaseRoute}/dates")] + Task>> GetDatesChange(int idWell, string controller); + + [Put(BaseRoute)] + Task> UpdateOrInsertRange(int idWell, string controller, IEnumerable dtos); + + [Multipart] + [Post(BaseRoute + "/parse")] + Task>> Parse(int idWell, string controller, [AliasAs("file")] StreamPart stream); +} diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingValid.xlsx b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingValid.xlsx deleted file mode 100644 index b2bdd446..00000000 Binary files a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingValid.xlsx and /dev/null differ diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanRotorInvalid.xlsx b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanRotorInvalid.xlsx new file mode 100644 index 00000000..bdbb84ea Binary files /dev/null and b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanRotorInvalid.xlsx differ diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanRotorValid.xlsx b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanRotorValid.xlsx new file mode 100644 index 00000000..13ef41c9 Binary files /dev/null and b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanRotorValid.xlsx differ diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanSlideInvalid.xlsx b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanSlideInvalid.xlsx new file mode 100644 index 00000000..aefc488c Binary files /dev/null and b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanSlideInvalid.xlsx differ diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanSlideValid.xlsx b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanSlideValid.xlsx new file mode 100644 index 00000000..456c7487 Binary files /dev/null and b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanSlideValid.xlsx differ diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanBaseControllerTest.cs similarity index 53% rename from AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs rename to AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanBaseControllerTest.cs index a8c41977..5bc647c5 100644 --- a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs +++ b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanBaseControllerTest.cs @@ -1,156 +1,75 @@ -using AsbCloudApp.Requests; +using AsbCloudApp.Data; +using AsbCloudApp.Data.ProcessMaps; +using AsbCloudApp.Data.User; +using AsbCloudApp.Requests; +using AsbCloudDb.Model; using AsbCloudDb.Model.ProcessMapPlan; using AsbCloudWebApi.IntegrationTests.Clients; +using AsbCloudWebApi.IntegrationTests.Data; using Mapster; using Microsoft.EntityFrameworkCore; +using Refit; using System.Net; using System.Reflection; -using AsbCloudDb.Model.ProcessMaps; -using AsbCloudWebApi.IntegrationTests.Data; -using Refit; using Xunit; -using AsbCloudApp.Data.ProcessMaps; -using AsbCloudDb.Model; -using AsbCloudApp.Data.User; -using AsbCloudApp.Data; namespace AsbCloudWebApi.IntegrationTests.Controllers.ProcessMapPlan; - -public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest +public abstract class ProcessMapPlanBaseControllerTest : BaseIntegrationTest + where TEntity : ProcessMapPlanBase + where TDto : ProcessMapPlanBaseDto { - private const int IdWell = 1; + private IProcessMapPlanClient client; + private string controllerName; - private readonly ProcessMapPlanDrillingDto dto = new() + protected abstract TEntity? GetByWellId(); + protected abstract TEntity GetByNote(DbSet dbSet, TDto dto); + protected abstract TDto GetByNote(IEnumerable dtos, TDto dto); + + public ProcessMapPlanBaseControllerTest(WebAppFactoryFixture factory, string controllerName) : base(factory) { - Id = 0, - - IdWell = IdWell, - Section = "Кондуктор", - IdWellSectionType = 3, - DepthStart = 0.5, - DepthEnd = 1.5, - - IdMode = 1, - AxialLoadPlan = 2.718281, - AxialLoadLimitMax = 3.1415926, - DeltaPressurePlan = 4, - DeltaPressureLimitMax = 5, - TopDriveTorquePlan = 6, - TopDriveTorqueLimitMax = 7, - TopDriveSpeedPlan = 8, - TopDriveSpeedLimitMax = 9, - FlowPlan = 10, - FlowLimitMax = 11, - RopPlan = 12, - UsageSaub = 13, - UsageSpin = 14, - Comment = "это тестовая запись", - }; - private readonly ProcessMapPlanDrilling entity = new() - { - Id = 0, - IdAuthor = 1, - IdEditor = null, - Creation = DateTimeOffset.UtcNow, - Obsolete = null, - IdState = AsbCloudDb.Model.ChangeLogAbstract.IdStateActual, - IdPrevious = null, - - IdWell = IdWell, - IdWellSectionType = 1, - DepthStart = 0.5, - DepthEnd = 1.5, - - IdMode = 1, - AxialLoadPlan = 2.718281, - AxialLoadLimitMax = 3.1415926, - DeltaPressurePlan = 4, - DeltaPressureLimitMax = 5, - TopDriveTorquePlan = 6, - TopDriveTorqueLimitMax = 7, - TopDriveSpeedPlan = 8, - TopDriveSpeedLimitMax = 9, - FlowPlan = 10, - FlowLimitMax = 11, - RopPlan = 12, - UsageSaub = 13, - UsageSpin = 14, - Comment = "это тестовая запись", - }; - - private IProcessMapPlanDrillingClient client; - - public ProcessMapPlanDrillingControllerTest(WebAppFactoryFixture factory) : base(factory) - { - dbContext.CleanupDbSet(); - client = factory.GetAuthorizedHttpClient>(string.Empty); + dbContext.CleanupDbSet(); + client = factory.GetAuthorizedHttpClient>(string.Empty); + this.controllerName = controllerName; } - - [Fact] - public async Task InsertRange_returns_success() + public async Task InsertRangeSuccess(TDto dto) { //arrange - var expected = dto.Adapt(); + var expected = dto.Adapt(); //act - var response = await client.InsertRange(dto.IdWell, new[] { expected }); + var response = await client.InsertRange(dto.IdWell, controllerName, new TDto[] { expected }); //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(1, response.Content); - var entity = dbContext - .Set() - .Where(p => p.AxialLoadPlan == dto.AxialLoadPlan) - .Where(p => p.AxialLoadLimitMax == dto.AxialLoadLimitMax) - .Where(p => p.Comment == dto.Comment) - .FirstOrDefault(p => p.IdWell == dto.IdWell); + var entity = GetByWellId(); Assert.NotNull(entity); - var actual = entity.Adapt>(); + var actual = entity.Adapt>(); Assert.Equal(ProcessMapPlanBase.IdStateActual, actual.IdState); var excludeProps = new[] { - nameof(ProcessMapPlanDrillingDto.Id), - nameof(ProcessMapPlanDrillingDto.Section) + nameof(ProcessMapPlanBaseDto.Id), + nameof(ProcessMapPlanBaseDto.Section) }; MatchHelper.Match(expected, actual.Item, excludeProps); } - [Fact] - public async Task InsertRange_returns_BadRequest_for_IdWellSectionType() + public async Task InsertRangeFailed(TDto dto) { - //arrange - var badDto = dto.Adapt(); - badDto.IdWellSectionType = int.MaxValue; - //act - var response = await client.InsertRange(dto.IdWell, new[] { badDto }); + var response = await client.InsertRange(dto.IdWell, controllerName, new[] { dto }); //assert Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); } - [Fact] - public async Task InsertRange_returns_BadRequest_for_IdMode() - { - //arrange - var badDto = dto.Adapt(); - badDto.IdMode = int.MaxValue; - - //act - var response = await client.InsertRange(dto.IdWell, new[] { badDto }); - - //assert - Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); - } - - [Fact] - public async Task ClearAndInsertRange_returns_success() + public async Task ClearAndInsertRange(TEntity entity, TDto dto) { // arrange - var dbset = dbContext.Set(); + var dbset = dbContext.Set(); var entry = dbset.Add(entity); dbContext.SaveChanges(); @@ -159,7 +78,7 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest var startTime = DateTimeOffset.UtcNow; // act - var result = await client.ClearAndInsertRange(entity.IdWell, new ProcessMapPlanDrillingDto[] { dto }); + var result = await client.ClearAndInsertRange(entity.IdWell, controllerName, new TDto[] { dto }); // assert var doneTime = DateTimeOffset.UtcNow; @@ -184,13 +103,12 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest Assert.InRange(newEntity.Creation, startTime, doneTime); } - [Fact] - public async Task UpdateOrInsertRange_returns_success() + public async Task UpdateOrInsertRange(TEntity entity, TDto dtoUpdate, TDto dtoInsert) { // arrange var startTime = DateTimeOffset.UtcNow; - var dbset = dbContext.Set(); + var dbset = dbContext.Set(); var user = dbContext.Set().First().Adapt(); user.Surname = "userSurname"; user.Email = "user@mail.domain"; @@ -199,43 +117,10 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest dbContext.SaveChanges(); entry.State = EntityState.Detached; - var dtoUpdate = dto.Adapt(); - dtoUpdate.IdWell = 0; dtoUpdate.Id = entry.Entity.Id; - dtoUpdate.Comment = "nebuchadnezzar"; - dtoUpdate.DeltaPressureLimitMax++; - dtoUpdate.DeltaPressurePlan++; - dtoUpdate.FlowPlan++; - dtoUpdate.FlowLimitMax++; - dtoUpdate.RopPlan++; - dtoUpdate.AxialLoadPlan++; - dtoUpdate.AxialLoadLimitMax++; - dtoUpdate.DepthStart++; - dtoUpdate.DepthEnd++; - dtoUpdate.TopDriveSpeedPlan++; - dtoUpdate.TopDriveSpeedLimitMax++; - dtoUpdate.TopDriveTorquePlan++; - dtoUpdate.TopDriveTorqueLimitMax++; - - var dtoInsert = dtoUpdate.Adapt(); - dtoInsert.Id = 0; - dtoInsert.Comment = "nebuchad"; - dtoInsert.DeltaPressureLimitMax++; - dtoInsert.DeltaPressurePlan++; - dtoInsert.FlowPlan++; - dtoInsert.FlowLimitMax++; - dtoInsert.RopPlan++; - dtoInsert.AxialLoadPlan++; - dtoInsert.AxialLoadLimitMax++; - dtoInsert.DepthStart++; - dtoInsert.DepthEnd++; - dtoInsert.TopDriveSpeedPlan++; - dtoInsert.TopDriveSpeedLimitMax++; - dtoInsert.TopDriveTorquePlan++; - dtoInsert.TopDriveTorqueLimitMax++; // act - var result = await client.UpdateOrInsertRange(entity.IdWell, new ProcessMapPlanDrillingDto[] { dtoUpdate, dtoInsert }); + var result = await client.UpdateOrInsertRange(entity.IdWell, controllerName, new TDto[] { dtoUpdate, dtoInsert }); // assert var doneTime = DateTimeOffset.UtcNow; @@ -251,7 +136,7 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest Assert.NotNull(oldEntity.Obsolete); Assert.InRange(oldEntity.Obsolete.Value, startTime, doneTime); - var newEntity = dbset.First(p => p.Comment == dtoUpdate.Comment); + var newEntity = GetByNote(dbset, dtoUpdate); Assert.Equal(ProcessMapPlanBase.IdStateActual, newEntity.IdState); Assert.Equal(1, newEntity.IdAuthor); Assert.Null(newEntity.IdEditor); @@ -259,23 +144,22 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest Assert.Equal(oldEntity.Id, newEntity.IdPrevious); Assert.InRange(newEntity.Creation, startTime, doneTime); - var expected = dtoUpdate.Adapt(); + var expected = dtoUpdate.Adapt(); var excludeProps = new[] { - nameof(ProcessMapPlanDrilling.Id), - nameof(ProcessMapPlanDrilling.IdWell), - nameof(ProcessMapPlanDrilling.Author), - nameof(ProcessMapPlanDrilling.IdAuthor), - nameof(ProcessMapPlanDrilling.Editor), - nameof(ProcessMapPlanDrilling.Creation), - }; + nameof(ProcessMapPlanBase.Id), + nameof(ProcessMapPlanBase.IdWell), + nameof(ProcessMapPlanBase.Author), + nameof(ProcessMapPlanBase.IdAuthor), + nameof(ProcessMapPlanBase.Editor), + nameof(ProcessMapPlanBase.Creation), + }; MatchHelper.Match(expected, newEntity!, excludeProps); } - [Fact] - public async Task DeleteRange_returns_success() + public async Task DeleteRange(TEntity entity, TDto dto) { //arrange - var dbset = dbContext.Set(); + var dbset = dbContext.Set(); var entry = dbset.Add(entity); dbContext.SaveChanges(); @@ -284,7 +168,7 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest var startTime = DateTimeOffset.UtcNow; //act - var response = await client.DeleteRange(dto.IdWell, new[] { entry.Entity.Id }); + var response = await client.DeleteRange(dto.IdWell, controllerName, new[] { entry.Entity.Id }); //assert var doneTime = DateTimeOffset.UtcNow; @@ -292,7 +176,7 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest Assert.Equal(1, response.Content); var actual = dbContext - .Set() + .Set() .FirstOrDefault(p => p.Id == entry.Entity.Id); Assert.NotNull(actual); @@ -302,12 +186,10 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest Assert.InRange(actual.Obsolete.Value, startTime, doneTime); } - - [Fact] - public async Task Clear_returns_success() + public async Task Clear(TEntity entity, TDto dto) { //arrange - var dbset = dbContext.Set(); + var dbset = dbContext.Set(); var entry = dbset.Add(entity); dbContext.SaveChanges(); @@ -316,7 +198,7 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest var startTime = DateTimeOffset.UtcNow; //act - var response = await client.Clear(dto.IdWell); + var response = await client.Clear(dto.IdWell, controllerName); //assert var doneTime = DateTimeOffset.UtcNow; @@ -324,7 +206,7 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest Assert.Equal(1, response.Content); var actual = dbContext - .Set() + .Set() .FirstOrDefault(p => p.Id == entry.Entity.Id); Assert.NotNull(actual); @@ -334,13 +216,12 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest Assert.InRange(actual.Obsolete.Value, startTime, doneTime); } - [Fact] - public async Task GetDatesChange_returns_success() + public async Task GetDatesChange(TEntity entity, TDto dto) { //arrange - var dbset = dbContext.Set(); + var dbset = dbContext.Set(); - var entity2 = entity.Adapt(); + var entity2 = entity.Adapt(); entity2.Creation = entity.Creation.AddDays(1); dbset.Add(entity); dbset.Add(entity2); @@ -352,7 +233,7 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest .Select(d => new DateOnly(d.Year, d.Month, d.Day)); //act - var response = await client.GetDatesChange(dto.IdWell); + var response = await client.GetDatesChange(dto.IdWell, controllerName); //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); @@ -361,25 +242,23 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest Assert.All(response.Content, d => dates.Contains(d)); } - [Fact] - public async Task Get_actual_returns_success() + public async Task Get(TEntity entity, TDto dto) { //arrange - var dbset = dbContext.Set(); + var dbset = dbContext.Set(); dbset.Add(entity); - var entityDeleted = entity.Adapt(); + var entityDeleted = entity.Adapt(); entityDeleted.Creation = entity.Creation.AddDays(-1); entityDeleted.Obsolete = entity.Creation; entityDeleted.IdState = ProcessMapPlanBase.IdStateDeleted; entityDeleted.IdEditor = 1; - entityDeleted.Comment = "nothing"; dbset.Add(entityDeleted); dbContext.SaveChanges(); - var response = await client.Get(dto.IdWell); + var response = await client.Get(dto.IdWell, controllerName); //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); @@ -389,41 +268,38 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest var actual = response.Content.First()!; Assert.NotNull(actual.Section); Assert.NotEmpty(actual.Section); - - var expected = entity.Adapt()!; + + var expected = entity.Adapt()!; var excludeProps = new[] { - nameof(ProcessMapPlanDrillingDto.Id), - }; + nameof(ProcessMapPlanBaseDto.Id), + }; MatchHelper.Match(expected, actual, excludeProps); } - [Fact] - public async Task Get_at_moment_returns_success() + public async Task GetAtMoment(TEntity entity, TDto dto) { //arrange - var dbset = dbContext.Set(); + var dbset = dbContext.Set(); var now = DateTimeOffset.UtcNow; - var entityDeleted = entity.Adapt(); + var entityDeleted = entity.Adapt(); entityDeleted.Creation = now; entityDeleted.Obsolete = now.AddMinutes(1); entityDeleted.IdState = ProcessMapPlanBase.IdStateDeleted; entityDeleted.IdEditor = 1; - entityDeleted.Comment = "nothing"; dbset.Add(entityDeleted); - var entityDeleted2 = entity.Adapt(); + var entityDeleted2 = entity.Adapt(); entityDeleted2.Creation = now.AddMinutes(1); entityDeleted2.Obsolete = now.AddMinutes(2); entityDeleted2.IdState = ProcessMapPlanBase.IdStateDeleted; entityDeleted2.IdEditor = 1; - entityDeleted2.Comment = "nothing"; dbset.Add(entityDeleted2); dbContext.SaveChanges(); //act - var response = await client.Get(dto.IdWell, now.AddMinutes(0.5)); + var response = await client.Get(dto.IdWell, controllerName, now.AddMinutes(0.5)); //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); @@ -431,44 +307,40 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest Assert.Single(response.Content); } - [Fact] - public async Task Get_by_updated_from_returns_success() + public async Task GetByUpdated(TEntity entity, TDto dto) { //arrange - var dbset = dbContext.Set(); + var dbset = dbContext.Set(); dbset.Add(entity); - var entity2 = entity.Adapt(); + var entity2 = entity.Adapt(); entity2.Obsolete = DateTimeOffset.UtcNow; dbset.Add(entity2); dbContext.SaveChanges(); //act - var response = await client.Get(Defaults.RemoteUid, DateTimeOffset.UtcNow.AddHours(-1)); + var response = await client.Get(Defaults.RemoteUid, controllerName, DateTimeOffset.UtcNow.AddHours(-1)); //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(response.Content); Assert.Equal(2, response.Content.Count()); } - - [Fact] - public async Task Get_updated_returns_success() + + public async Task GetUpdated(TEntity entity, TDto dto) { //arrange - var dbset = dbContext.Set(); + var dbset = dbContext.Set(); dbset.Add(entity); - var entity2 = entity.Adapt(); + var entity2 = entity.Adapt(); entity2.Creation = entity.Creation.AddHours(1); - entity2.Comment = "IdWellSectionType = 2"; dbset.Add(entity2); - var entity3 = entity.Adapt(); + var entity3 = entity.Adapt(); entity3.Obsolete = entity.Creation.AddHours(1); - entity3.Comment = "IdWellSectionType = 3"; dbset.Add(entity3); dbContext.SaveChanges(); @@ -482,34 +354,32 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest { UpdateFrom = updateFrom, }; - var response = await client.Get(dto.IdWell); + var response = await client.Get(dto.IdWell, controllerName); //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(response.Content); Assert.Equal(2, response.Content.Count()); - var actual = response.Content - .First(p => p.Comment == entity2.Comment); + var entity2Dto = entity2.Adapt(); + var actual = GetByNote(response.Content, entity2Dto); - var expected = entity2.Adapt(); + var expected = entity2.Adapt(); var excludeProps = new[] { - nameof(ProcessMapPlanDrillingDto.Id), - }; + nameof(ProcessMapPlanBaseDto.Id), + }; MatchHelper.Match(expected, actual, excludeProps); } - [Fact] - public async Task Parse_returns_success() + public async Task Parse(int IdWell, string fileName, TDto dto) { //arrange - const string fileName = "ProcessMapPlanDrillingValid.xlsx"; var stream = Assembly.GetExecutingAssembly().GetFileCopyStream(fileName); var streamPart = new StreamPart(stream, fileName, "application/octet-stream"); //act - var response = await client.Parse(IdWell, streamPart); + var response = await client.Parse(IdWell, controllerName, streamPart); //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); @@ -525,21 +395,19 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest Assert.True(row.IsValid); - var excludeProps = new[] { nameof(ProcessMapPlanDrillingDto.IdWell) }; + var excludeProps = new[] { nameof(ProcessMapPlanBaseDto.IdWell) }; MatchHelper.Match(dto, dtoActual, excludeProps); } - [Fact] - public async Task Parse_returns_success_for_result_with_warnings() + public async Task ParseWithWarnings(int IdWell, string fileName) { //arrange - const string fileName = "ProcessMapPlanDrillingInvalid.xlsx"; var stream = Assembly.GetExecutingAssembly().GetFileCopyStream(fileName); var streamPart = new StreamPart(stream, fileName, "application/octet-stream"); //act - var response = await client.Parse(IdWell, streamPart); + var response = await client.Parse(IdWell, controllerName, streamPart); Assert.Equal(HttpStatusCode.OK, response.StatusCode); @@ -555,4 +423,4 @@ public class ProcessMapPlanDrillingControllerTest : BaseIntegrationTest Assert.False(row.IsValid); Assert.Equal(2, row.Warnings.Count()); } -} \ No newline at end of file +} diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanRotorControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanRotorControllerTest.cs new file mode 100644 index 00000000..7c2ed101 --- /dev/null +++ b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanRotorControllerTest.cs @@ -0,0 +1,210 @@ +using AsbCloudApp.Data.ProcessMaps; +using AsbCloudDb.Model.ProcessMaps; +using DocumentFormat.OpenXml.Drawing.Charts; +using Mapster; +using Microsoft.EntityFrameworkCore; +using Xunit; + +namespace AsbCloudWebApi.IntegrationTests.Controllers.ProcessMapPlan; +public class ProcessMapPlanRotorControllerTest : ProcessMapPlanBaseControllerTest +{ + private readonly ProcessMapPlanRotorDto dto = new ProcessMapPlanRotorDto() + { + IdWell = 1, + DepthStart = 1, + DepthEnd = 2, + RopLimitMax = 3, + PressureLimitMax = 4, + DifferentialPressure = 5, + DifferentialPressureLimitMax = 6, + WeightOnBit = 7, + WeightOnBitLimitMax = 8, + TopDriveTorque = 9, + TopDriveTorqueLimit = 10, + RevolutionsPerMinute = 11, + RevolutionsPerMinuteLimitMax = 12, + FlowRate = 13, + FlowRateLimitMax = 14, + Note = "15", + Id = 0, + IdWellSectionType = 1, + }; + + private readonly ProcessMapPlanRotor entity = new ProcessMapPlanRotor() + { + IdWell = 1, + DepthEnd = 10, + DepthStart = 2, + DifferentialPressure = 3, + DifferentialPressureLimitMax = 4, + FlowRate = 5, + FlowRateLimitMax = 6, + Id = 0, + IdWellSectionType = 1, + Note = "1", + PressureLimitMax = 2, + RevolutionsPerMinute = 3, + RevolutionsPerMinuteLimitMax = 4, + RopLimitMax = 5, + TopDriveTorque = 6, + TopDriveTorqueLimit = 7, + WeightOnBit = 8, + WeightOnBitLimitMax = 9, + IdAuthor = 1, + IdEditor = 1, + Creation = DateTimeOffset.UtcNow + }; + + public ProcessMapPlanRotorControllerTest(WebAppFactoryFixture factory) : base(factory, "ProcessMapPlanRotor") + { + } + + + protected override ProcessMapPlanRotor? GetByWellId() + { + var entity = dbContext + .Set() + .Where(p => p.WeightOnBit == dto.WeightOnBit) + .Where(p => p.WeightOnBitLimitMax == dto.WeightOnBitLimitMax) + .Where(p => p.Note == dto.Note) + .FirstOrDefault(p => p.IdWell == dto.IdWell); + + return entity; + } + + protected override ProcessMapPlanRotor GetByNote( + DbSet dbSet, + ProcessMapPlanRotorDto dto) + { + var entity = dbSet.First(p => p.Note == dto.Note); + + return entity; + } + + protected override ProcessMapPlanRotorDto GetByNote( + IEnumerable dtos, + ProcessMapPlanRotorDto dto) + { + var entity = dtos.First(p => p.Note == dto.Note); + + return entity; + } + + + [Fact] + public async Task InsertRange_returns_success() + { + await InsertRangeSuccess(dto); + } + + + [Fact] + public async Task InsertRange_returns_BadRequest_for_IdWellSectionType() + { + //arrange + var badDto = dto.Adapt(); + badDto.IdWellSectionType = int.MaxValue; + + await InsertRangeFailed(badDto); + } + + [Fact] + public async Task ClearAndInsertRange_returns_success() + { + await ClearAndInsertRange(entity, dto); + } + + [Fact] + public async Task UpdateOrInsertRange_returns_success() + { + var dtoUpdate = dto.Adapt(); + dtoUpdate.IdWell = 0; + dtoUpdate.Note = "nebuchadnezzar"; + dtoUpdate.DifferentialPressureLimitMax++; + dtoUpdate.DifferentialPressure++; + dtoUpdate.FlowRate++; + dtoUpdate.FlowRateLimitMax++; + dtoUpdate.RopLimitMax++; + dtoUpdate.WeightOnBit++; + dtoUpdate.WeightOnBitLimitMax++; + dtoUpdate.DepthStart++; + dtoUpdate.DepthEnd++; + dtoUpdate.RevolutionsPerMinute++; + dtoUpdate.RevolutionsPerMinuteLimitMax++; + dtoUpdate.TopDriveTorque++; + dtoUpdate.TopDriveTorqueLimit++; + + var dtoInsert = dtoUpdate.Adapt(); + dtoInsert.Id = 0; + dtoInsert.Note = "nebuchad"; + dtoInsert.DifferentialPressureLimitMax++; + dtoInsert.DifferentialPressure++; + dtoInsert.FlowRate++; + dtoInsert.FlowRateLimitMax++; + dtoInsert.RopLimitMax++; + dtoInsert.WeightOnBit++; + dtoInsert.WeightOnBitLimitMax++; + dtoInsert.DepthStart++; + dtoInsert.DepthEnd++; + dtoInsert.RevolutionsPerMinute++; + dtoInsert.RevolutionsPerMinuteLimitMax++; + dtoInsert.TopDriveTorque++; + dtoInsert.TopDriveTorqueLimit++; + + await UpdateOrInsertRange(entity, dtoUpdate, dtoInsert); + } + + [Fact] + public async Task DeleteRange_returns_success() + { + await DeleteRange(entity, dto); + } + + [Fact] + public async Task Clear_returns_success() + { + await Clear(entity, dto); + } + + [Fact] + public async Task GetDatesChange_returns_success() + { + await GetDatesChange(entity, dto); + } + + [Fact] + public async Task Get_actual_returns_success() + { + await Get(entity, dto); + } + + [Fact] + public async Task Get_at_moment_returns_success() + { + await GetAtMoment(entity, dto); + } + + [Fact] + public async Task Get_by_updated_from_returns_success() + { + await GetByUpdated(entity, dto); + } + + [Fact] + public async Task Get_updated_returns_success() + { + await GetUpdated(entity, dto); + } + + [Fact] + public async Task Parse_returns_success() + { + await Parse(dto.IdWell, "ProcessMapPlanRotorValid.xlsx", dto); + } + + [Fact] + public async Task Parse_returns_success_for_result_with_warnings() + { + await ParseWithWarnings(dto.IdWell, "ProcessMapPlanRotorInvalid.xlsx"); + } +} \ No newline at end of file diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanSlideControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanSlideControllerTest.cs new file mode 100644 index 00000000..48f08a50 --- /dev/null +++ b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanSlideControllerTest.cs @@ -0,0 +1,201 @@ +using AsbCloudApp.Data.ProcessMaps; +using AsbCloudDb.Model.ProcessMaps; +using Mapster; +using Microsoft.EntityFrameworkCore; +using Xunit; + +namespace AsbCloudWebApi.IntegrationTests.Controllers.ProcessMapPlan; +public class ProcessMapPlanSlideControllerTest : ProcessMapPlanBaseControllerTest +{ + private readonly ProcessMapPlanSlideDto dto = new ProcessMapPlanSlideDto() + { + IdWell = 1, + DepthStart = 1, + DepthEnd = 2, + RopLimitMax = 3, + PressureLimitMax = 4, + DifferentialPressure = 5, + DifferentialPressureLimitMax = 6, + WeightOnBit = 7, + WeightOnBitLimitMax = 8, + FlowRate = 9, + FlowRateLimitMax = 10, + Spring = 11, + ToolBuckling = 12, + Id = 0, + IdWellSectionType = 1, + Note = "13" + }; + + private readonly ProcessMapPlanSlide entity = new ProcessMapPlanSlide() + { + IdWell = 1, + DepthEnd = 10, + DepthStart = 2, + DifferentialPressure = 3, + DifferentialPressureLimitMax = 4, + FlowRate = 5, + FlowRateLimitMax = 6, + Id = 0, + IdWellSectionType = 1, + Note = "1", + PressureLimitMax = 2, + RopLimitMax = 5, + WeightOnBit = 8, + WeightOnBitLimitMax = 9, + IdAuthor = 1, + IdEditor = 1, + Creation = DateTimeOffset.UtcNow, + Spring = 10, + ToolBuckling = 11, + }; + + public ProcessMapPlanSlideControllerTest(WebAppFactoryFixture factory) : base(factory, "ProcessMapPlanSlide") + { + } + + + protected override ProcessMapPlanSlide? GetByWellId() + { + var entity = dbContext + .Set() + .Where(p => p.WeightOnBit == dto.WeightOnBit) + .Where(p => p.WeightOnBitLimitMax == dto.WeightOnBitLimitMax) + .Where(p => p.Note == dto.Note) + .FirstOrDefault(p => p.IdWell == dto.IdWell); + + return entity; + } + + protected override ProcessMapPlanSlide GetByNote( + DbSet dbSet, + ProcessMapPlanSlideDto dto) + { + var entity = dbSet.First(p => p.Note == dto.Note); + + return entity; + } + + protected override ProcessMapPlanSlideDto GetByNote( + IEnumerable dtos, + ProcessMapPlanSlideDto dto) + { + var entity = dtos.First(p => p.Note == dto.Note); + + return entity; + } + + + [Fact] + public async Task InsertRange_returns_success() + { + await InsertRangeSuccess(dto); + } + + + [Fact] + public async Task InsertRange_returns_BadRequest_for_IdWellSectionType() + { + //arrange + var badDto = dto.Adapt(); + badDto.IdWellSectionType = int.MaxValue; + + await InsertRangeFailed(badDto); + } + + [Fact] + public async Task ClearAndInsertRange_returns_success() + { + await ClearAndInsertRange(entity, dto); + } + + [Fact] + public async Task UpdateOrInsertRange_returns_success() + { + var dtoUpdate = dto.Adapt(); + dtoUpdate.IdWell = 0; + dtoUpdate.Note = "nebuchadnezzar"; + dtoUpdate.DifferentialPressureLimitMax++; + dtoUpdate.DifferentialPressure++; + dtoUpdate.FlowRate++; + dtoUpdate.FlowRateLimitMax++; + dtoUpdate.RopLimitMax++; + dtoUpdate.WeightOnBit++; + dtoUpdate.WeightOnBitLimitMax++; + dtoUpdate.DepthStart++; + dtoUpdate.DepthEnd++; + dtoUpdate.Spring++; + dtoUpdate.ToolBuckling++; + + var dtoInsert = dtoUpdate.Adapt(); + dtoInsert.Id = 0; + dtoInsert.Note = "nebuchad"; + dtoInsert.DifferentialPressureLimitMax++; + dtoInsert.DifferentialPressure++; + dtoInsert.FlowRate++; + dtoInsert.FlowRateLimitMax++; + dtoInsert.RopLimitMax++; + dtoInsert.WeightOnBit++; + dtoInsert.WeightOnBitLimitMax++; + dtoInsert.DepthStart++; + dtoInsert.DepthEnd++; + dtoUpdate.Spring++; + dtoUpdate.ToolBuckling++; + + await UpdateOrInsertRange(entity, dtoUpdate, dtoInsert); + } + + [Fact] + public async Task DeleteRange_returns_success() + { + await DeleteRange(entity, dto); + } + + [Fact] + public async Task Clear_returns_success() + { + await Clear(entity, dto); + } + + [Fact] + public async Task GetDatesChange_returns_success() + { + await GetDatesChange(entity, dto); + } + + [Fact] + public async Task Get_actual_returns_success() + { + await Get(entity, dto); + } + + [Fact] + public async Task Get_at_moment_returns_success() + { + await GetAtMoment(entity, dto); + } + + [Fact] + public async Task Get_by_updated_from_returns_success() + { + await GetByUpdated(entity, dto); + } + + [Fact] + public async Task Get_updated_returns_success() + { + await GetUpdated(entity, dto); + } + + [Fact] + public async Task Parse_returns_success() + { + await Parse(dto.IdWell, "ProcessMapPlanSlideValid.xlsx", dto); + } + + [Fact] + public async Task Parse_returns_success_for_result_with_warnings() + { + await ParseWithWarnings(dto.IdWell, "ProcessMapPlanSlideInvalid.xlsx"); + } +} \ No newline at end of file diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs index 07685f1e..faa6a4b5 100644 --- a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs +++ b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs @@ -1,256 +1,256 @@ -using AsbCloudApp.Requests; -using AsbCloudDb.Model; -using AsbCloudDb.Model.ProcessMaps; -using AsbCloudWebApi.IntegrationTests.Clients; -using System.Net; -using AsbCloudWebApi.IntegrationTests.Data; -using Xunit; +//using AsbCloudApp.Requests; +//using AsbCloudDb.Model; +//using AsbCloudDb.Model.ProcessMaps; +//using AsbCloudWebApi.IntegrationTests.Clients; +//using System.Net; +//using AsbCloudWebApi.IntegrationTests.Data; +//using Xunit; -namespace AsbCloudWebApi.IntegrationTests.Controllers.ProcessMapPlan; +//namespace AsbCloudWebApi.IntegrationTests.Controllers.ProcessMapPlan; -public class ProcessMapReportDrillingControllerTest : BaseIntegrationTest -{ - private IProcessMapReportDrilling client; +//public class ProcessMapReportDrillingControllerTest : BaseIntegrationTest +//{ +// private IProcessMapReportDrilling client; - public ProcessMapReportDrillingControllerTest(WebAppFactoryFixture factory) - : base(factory) - { - dbContext.CleanupDbSet(); - dbContext.CleanupDbSet(); - client = factory.GetAuthorizedHttpClient(string.Empty); - } +// public ProcessMapReportDrillingControllerTest(WebAppFactoryFixture factory) +// : base(factory) +// { +// dbContext.CleanupDbSet(); +// dbContext.CleanupDbSet(); +// client = factory.GetAuthorizedHttpClient(string.Empty); +// } - [Fact] - public async Task Get_rtk_report_by_default_request_returns_success() - { - //arrange - var well = dbContext.Wells.First(); +// [Fact] +// public async Task Get_rtk_report_by_default_request_returns_success() +// { +// //arrange +// var well = dbContext.Wells.First(); - var processMapPlanDrilling = CreateProcessMapPlanDrilling(well.Id); - dbContext.ProcessMapPlanDrilling.Add(processMapPlanDrilling); +// var processMapPlanDrilling = CreateProcessMapPlanDrilling(well.Id); +// dbContext.ProcessMapPlanDrilling.Add(processMapPlanDrilling); - var wellOperation = CreateWellOperation(well.Id); - dbContext.WellOperations.Add(wellOperation); +// var wellOperation = CreateWellOperation(well.Id); +// dbContext.WellOperations.Add(wellOperation); - var dataSaubStats = CreateDataSaubStats(well.IdTelemetry!.Value, wellOperation.IdCategory); - dbContext.DataSaubStat.AddRange(dataSaubStats); +// var dataSaubStats = CreateDataSaubStats(well.IdTelemetry!.Value, wellOperation.IdCategory); +// dbContext.DataSaubStat.AddRange(dataSaubStats); - await dbContext.SaveChangesAsync(); +// await dbContext.SaveChangesAsync(); - //act - var request = new DataSaubStatRequest(); - var response = await client.GetReportAsync(well.Id, request, CancellationToken.None); +// //act +// var request = new DataSaubStatRequest(); +// var response = await client.GetReportAsync(well.Id, request, CancellationToken.None); - //assert - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.NotNull(response.Content); - Assert.Equal(dataSaubStats.Count() - 1, response.Content.Count()); - } +// //assert +// Assert.Equal(HttpStatusCode.OK, response.StatusCode); +// Assert.NotNull(response.Content); +// Assert.Equal(dataSaubStats.Count() - 1, response.Content.Count()); +// } - [Fact] - public async Task Get_rtk_report_by_parametrize_request_returns_success() - { - //arrange - var well = dbContext.Wells.First(); +// [Fact] +// public async Task Get_rtk_report_by_parametrize_request_returns_success() +// { +// //arrange +// var well = dbContext.Wells.First(); - var processMapPlanDrilling = CreateProcessMapPlanDrilling(well.Id); - dbContext.ProcessMapPlanDrilling.Add(processMapPlanDrilling); +// var processMapPlanDrilling = CreateProcessMapPlanDrilling(well.Id); +// dbContext.ProcessMapPlanDrilling.Add(processMapPlanDrilling); - var wellOperation = CreateWellOperation(well.Id); - dbContext.WellOperations.Add(wellOperation); +// var wellOperation = CreateWellOperation(well.Id); +// dbContext.WellOperations.Add(wellOperation); - var dataSaubStats = CreateDataSaubStats(well.IdTelemetry!.Value, wellOperation.IdCategory); - dbContext.DataSaubStat.AddRange(dataSaubStats); +// var dataSaubStats = CreateDataSaubStats(well.IdTelemetry!.Value, wellOperation.IdCategory); +// dbContext.DataSaubStat.AddRange(dataSaubStats); - await dbContext.SaveChangesAsync(); +// await dbContext.SaveChangesAsync(); - var request = new DataSaubStatRequest - { - DeltaAxialLoad = 5, - DeltaPressure = 15, - DeltaRotorTorque = 10 - }; +// var request = new DataSaubStatRequest +// { +// DeltaAxialLoad = 5, +// DeltaPressure = 15, +// DeltaRotorTorque = 10 +// }; - //act - var response = await client.GetReportAsync(well.Id, request, CancellationToken.None); +// //act +// var response = await client.GetReportAsync(well.Id, request, CancellationToken.None); - //assert - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.NotNull(response.Content); - Assert.Single(response.Content); - } +// //assert +// Assert.Equal(HttpStatusCode.OK, response.StatusCode); +// Assert.NotNull(response.Content); +// Assert.Single(response.Content); +// } - [Fact] - public async Task Get_rtk_report_returns_BadRequest() - { - //act - var request = new DataSaubStatRequest() - { - DeltaAxialLoad = 15, - DeltaPressure = 25, - DeltaRotorTorque = 20 - }; - var response = await client.GetReportAsync(0, request, CancellationToken.None); +// [Fact] +// public async Task Get_rtk_report_returns_BadRequest() +// { +// //act +// var request = new DataSaubStatRequest() +// { +// DeltaAxialLoad = 15, +// DeltaPressure = 25, +// DeltaRotorTorque = 20 +// }; +// var response = await client.GetReportAsync(0, request, CancellationToken.None); - //assert - Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); - } +// //assert +// Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); +// } - [Fact] - public async Task Export_rtk_report_returns_success() - { - //arrange - var well = dbContext.Wells.First(); +// [Fact] +// public async Task Export_rtk_report_returns_success() +// { +// //arrange +// var well = dbContext.Wells.First(); - var processMapPlanDrilling = CreateProcessMapPlanDrilling(well.Id); - dbContext.ProcessMapPlanDrilling.Add(processMapPlanDrilling); +// var processMapPlanDrilling = CreateProcessMapPlanDrilling(well.Id); +// dbContext.ProcessMapPlanDrilling.Add(processMapPlanDrilling); - var wellOperation = CreateWellOperation(well.Id); - dbContext.WellOperations.Add(wellOperation); +// var wellOperation = CreateWellOperation(well.Id); +// dbContext.WellOperations.Add(wellOperation); - var dataSaubStats = CreateDataSaubStats(well.IdTelemetry!.Value, wellOperation.IdCategory); - dbContext.DataSaubStat.AddRange(dataSaubStats); +// var dataSaubStats = CreateDataSaubStats(well.IdTelemetry!.Value, wellOperation.IdCategory); +// dbContext.DataSaubStat.AddRange(dataSaubStats); - await dbContext.SaveChangesAsync(); +// await dbContext.SaveChangesAsync(); - //act - var request = new DataSaubStatRequest(); - var response = await client.ExportReportAsync(1, request, CancellationToken.None); +// //act +// var request = new DataSaubStatRequest(); +// var response = await client.ExportReportAsync(1, request, CancellationToken.None); - //assert - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.Equal("application/octet-stream", response.ContentHeaders?.ContentType?.MediaType); - Assert.True(response.ContentHeaders?.ContentLength > 0); - } +// //assert +// Assert.Equal(HttpStatusCode.OK, response.StatusCode); +// Assert.Equal("application/octet-stream", response.ContentHeaders?.ContentType?.MediaType); +// Assert.True(response.ContentHeaders?.ContentLength > 0); +// } - private static WellOperation CreateWellOperation(int idWell) => - new() - { - CategoryInfo = "CategoryInfo", - Comment = "Comment", - DateStart = DateTimeOffset.UtcNow, - DepthEnd = 1, - DepthStart = 0.6, - DurationHours = 10, - IdCategory = WellOperationCategory.IdSlide, - IdPlan = null, - IdType = WellOperation.IdOperationTypeFact, - IdUser = 1, - IdWell = idWell, - IdWellSectionType = 1, - LastUpdateDate = DateTimeOffset.UtcNow - }; +// private static WellOperation CreateWellOperation(int idWell) => +// new() +// { +// CategoryInfo = "CategoryInfo", +// Comment = "Comment", +// DateStart = DateTimeOffset.UtcNow, +// DepthEnd = 1, +// DepthStart = 0.6, +// DurationHours = 10, +// IdCategory = WellOperationCategory.IdSlide, +// IdPlan = null, +// IdType = WellOperation.IdOperationTypeFact, +// IdUser = 1, +// IdWell = idWell, +// IdWellSectionType = 1, +// LastUpdateDate = DateTimeOffset.UtcNow +// }; - private static ProcessMapPlanDrilling CreateProcessMapPlanDrilling(int idWell) => - new() - { - IdAuthor = 1, - IdEditor = null, - Creation = DateTimeOffset.UtcNow, - Obsolete = null, - IdState = ChangeLogAbstract.IdStateActual, - IdPrevious = null, +// private static ProcessMapPlanDrilling CreateProcessMapPlanDrilling(int idWell) => +// new() +// { +// IdAuthor = 1, +// IdEditor = null, +// Creation = DateTimeOffset.UtcNow, +// Obsolete = null, +// IdState = ChangeLogAbstract.IdStateActual, +// IdPrevious = null, - IdWell = idWell, - IdWellSectionType = 1, - DepthStart = 0.5, - DepthEnd = 1.5, +// IdWell = idWell, +// IdWellSectionType = 1, +// DepthStart = 0.5, +// DepthEnd = 1.5, - IdMode = 1, - AxialLoadPlan = 2.718281, - AxialLoadLimitMax = 3.1415926, - DeltaPressurePlan = 4, - DeltaPressureLimitMax = 5, - TopDriveTorquePlan = 6, - TopDriveTorqueLimitMax = 7, - TopDriveSpeedPlan = 8, - TopDriveSpeedLimitMax = 9, - FlowPlan = 10, - FlowLimitMax = 11, - RopPlan = 12, - UsageSaub = 13, - UsageSpin = 14, - Comment = "это тестовая запись", - }; +// IdMode = 1, +// AxialLoadPlan = 2.718281, +// AxialLoadLimitMax = 3.1415926, +// DeltaPressurePlan = 4, +// DeltaPressureLimitMax = 5, +// TopDriveTorquePlan = 6, +// TopDriveTorqueLimitMax = 7, +// TopDriveSpeedPlan = 8, +// TopDriveSpeedLimitMax = 9, +// FlowPlan = 10, +// FlowLimitMax = 11, +// RopPlan = 12, +// UsageSaub = 13, +// UsageSpin = 14, +// Comment = "это тестовая запись", +// }; - private static IEnumerable CreateDataSaubStats(int idTelemetry, - int idCategory) => - new[] - { - new DataSaubStat - { - AxialLoad = 0, - AxialLoadLimitMax = 10, - AxialLoadSp = 8, - BlockSpeedSp = 50.0, - DateEnd = DateTimeOffset.UtcNow.AddMinutes(40), - DateStart = DateTimeOffset.UtcNow.AddMinutes(30), - DepthEnd = 85.99299621582031, - DepthStart = 85.9260025024414, - EnabledSubsystems = 0, - Flow = 10, - IdCategory = idCategory, - HasOscillation = true, - IdFeedRegulator = 0, - IdTelemetry = idTelemetry, - Pressure = 24, - PressureIdle = 0, - PressureSp = 40, - RotorSpeed = 11.3, - RotorTorque = 1, - RotorTorqueLimitMax = 26.5, - RotorTorqueSp = 5, - Speed = 80.3924560546875 - }, - new DataSaubStat - { - AxialLoad = 2, - AxialLoadLimitMax = 10.0, - AxialLoadSp = 8, - BlockSpeedSp = 20, - DateEnd = DateTimeOffset.UtcNow.AddMinutes(30), - DateStart = DateTimeOffset.UtcNow.AddMinutes(20), - DepthEnd = 86.28099822998047, - DepthStart = 86.21900177001953, - EnabledSubsystems = 1, - Flow = 20, - HasOscillation = true, - IdCategory = idCategory, - IdFeedRegulator = 1, - IdTelemetry = idTelemetry, - Pressure = 30, - PressureIdle = 20, - PressureSp = 40, - RotorSpeed = 11.251153300212916, - RotorTorque = 7, - RotorTorqueLimitMax = 26.5, - RotorTorqueSp = 9, - Speed = 74.395751953125 - }, - new DataSaubStat - { - AxialLoad = 4, - AxialLoadLimitMax = 15.0, - AxialLoadSp = 8, - BlockSpeedSp = 110.0, - DateEnd = DateTimeOffset.UtcNow.AddMinutes(20), - DateStart = DateTimeOffset.UtcNow.AddMinutes(10), - DepthEnd = 106.7490005493164, - DepthStart = 106.47899627685547, - EnabledSubsystems = 1, - Flow = 30, - HasOscillation = true, - IdFeedRegulator = 1, - IdTelemetry = idTelemetry, - IdCategory = idCategory, - Pressure = 36, - PressureIdle = 23.0, - PressureSp = 63.0, - RotorSpeed = 11.334207942999628, - RotorTorque = 14, - RotorTorqueLimitMax = 15.0, - RotorTorqueSp = 13, - Speed = 108.001708984375 - } - }; -} \ No newline at end of file +// private static IEnumerable CreateDataSaubStats(int idTelemetry, +// int idCategory) => +// new[] +// { +// new DataSaubStat +// { +// AxialLoad = 0, +// AxialLoadLimitMax = 10, +// AxialLoadSp = 8, +// BlockSpeedSp = 50.0, +// DateEnd = DateTimeOffset.UtcNow.AddMinutes(40), +// DateStart = DateTimeOffset.UtcNow.AddMinutes(30), +// DepthEnd = 85.99299621582031, +// DepthStart = 85.9260025024414, +// EnabledSubsystems = 0, +// Flow = 10, +// IdCategory = idCategory, +// HasOscillation = true, +// IdFeedRegulator = 0, +// IdTelemetry = idTelemetry, +// Pressure = 24, +// PressureIdle = 0, +// PressureSp = 40, +// RotorSpeed = 11.3, +// RotorTorque = 1, +// RotorTorqueLimitMax = 26.5, +// RotorTorqueSp = 5, +// Speed = 80.3924560546875 +// }, +// new DataSaubStat +// { +// AxialLoad = 2, +// AxialLoadLimitMax = 10.0, +// AxialLoadSp = 8, +// BlockSpeedSp = 20, +// DateEnd = DateTimeOffset.UtcNow.AddMinutes(30), +// DateStart = DateTimeOffset.UtcNow.AddMinutes(20), +// DepthEnd = 86.28099822998047, +// DepthStart = 86.21900177001953, +// EnabledSubsystems = 1, +// Flow = 20, +// HasOscillation = true, +// IdCategory = idCategory, +// IdFeedRegulator = 1, +// IdTelemetry = idTelemetry, +// Pressure = 30, +// PressureIdle = 20, +// PressureSp = 40, +// RotorSpeed = 11.251153300212916, +// RotorTorque = 7, +// RotorTorqueLimitMax = 26.5, +// RotorTorqueSp = 9, +// Speed = 74.395751953125 +// }, +// new DataSaubStat +// { +// AxialLoad = 4, +// AxialLoadLimitMax = 15.0, +// AxialLoadSp = 8, +// BlockSpeedSp = 110.0, +// DateEnd = DateTimeOffset.UtcNow.AddMinutes(20), +// DateStart = DateTimeOffset.UtcNow.AddMinutes(10), +// DepthEnd = 106.7490005493164, +// DepthStart = 106.47899627685547, +// EnabledSubsystems = 1, +// Flow = 30, +// HasOscillation = true, +// IdFeedRegulator = 1, +// IdTelemetry = idTelemetry, +// IdCategory = idCategory, +// Pressure = 36, +// PressureIdle = 23.0, +// PressureSp = 63.0, +// RotorSpeed = 11.334207942999628, +// RotorTorque = 14, +// RotorTorqueLimitMax = 15.0, +// RotorTorqueSp = 13, +// Speed = 108.001708984375 +// } +// }; +//} \ No newline at end of file diff --git a/AsbCloudWebApi.Tests/Services/ProcessMaps/ProcessMapReportDataSaubStatServiceTest.cs b/AsbCloudWebApi.Tests/Services/ProcessMaps/ProcessMapReportDataSaubStatServiceTest.cs index 2e0f24c8..b672a763 100644 --- a/AsbCloudWebApi.Tests/Services/ProcessMaps/ProcessMapReportDataSaubStatServiceTest.cs +++ b/AsbCloudWebApi.Tests/Services/ProcessMaps/ProcessMapReportDataSaubStatServiceTest.cs @@ -1,297 +1,297 @@ -using AsbCloudApp.Data; -using AsbCloudApp.Data.ProcessMaps; -using AsbCloudApp.Data.WellOperation; -using AsbCloudApp.Repositories; -using AsbCloudApp.Requests; -using AsbCloudApp.Services; -using AsbCloudDb.Model; -using AsbCloudInfrastructure.Services.ProcessMaps.Report; -using NSubstitute; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Xunit; +//using AsbCloudApp.Data; +//using AsbCloudApp.Data.ProcessMaps; +//using AsbCloudApp.Data.WellOperation; +//using AsbCloudApp.Repositories; +//using AsbCloudApp.Requests; +//using AsbCloudApp.Services; +//using AsbCloudDb.Model; +//using AsbCloudInfrastructure.Services.ProcessMaps.Report; +//using NSubstitute; +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Threading; +//using System.Threading.Tasks; +//using Xunit; -namespace AsbCloudWebApi.Tests.Services.ProcessMaps; +//namespace AsbCloudWebApi.Tests.Services.ProcessMaps; -public class ProcessMapReportDataSaubStatServiceTest -{ +//public class ProcessMapReportDataSaubStatServiceTest +//{ - private IWellService wellService - = Substitute.For(); +// private IWellService wellService +// = Substitute.For(); - private IChangeLogRepository processMapPlanBaseRepository - = Substitute.For>(); +// private IChangeLogRepository processMapPlanBaseRepository +// = Substitute.For>(); - private IWellOperationRepository wellOperationRepository - = Substitute.For(); +// private IWellOperationRepository wellOperationRepository +// = Substitute.For(); - private IWellOperationCategoryRepository wellOperationCategoryRepository - = Substitute.For(); +// private IWellOperationCategoryRepository wellOperationCategoryRepository +// = Substitute.For(); - private IDataSaubStatRepository dataSaubStatRepository - = Substitute.For(); +// private IDataSaubStatRepository dataSaubStatRepository +// = Substitute.For(); - private ProcessMapReportDrillingService service; +// private ProcessMapReportDrillingService service; - private readonly static SimpleTimezoneDto timezone = new() { Hours = 2 }; - private static readonly DateTimeOffset dateStart = new(2024, 01, 01, 00, 11, 11, timezone.Offset); - private readonly static WellDto well = new() - { - Id = 1, - IdTelemetry = 1, - Timezone = timezone - }; - private readonly static IEnumerable processMapPlan = new List() - { - new() { - DepthStart = 0, - DepthEnd = 100, - IdMode = 1, - IdWell = well.Id, - IdWellSectionType = 1, - AxialLoadPlan = 0.2, - AxialLoadLimitMax = 0.3, - DeltaPressurePlan = 0.4, - DeltaPressureLimitMax = 0.5, - TopDriveTorquePlan = 0.6, - TopDriveTorqueLimitMax = 0.7, - TopDriveSpeedPlan = 0.8, - TopDriveSpeedLimitMax = 0.9, - FlowPlan = 0.10, - FlowLimitMax = 0.11, - RopPlan = 0.12, - UsageSaub = 0.12, - UsageSpin = 0.14, - Comment = "r", - }, - new() { - DepthStart = 0, - DepthEnd = 100, - IdMode = 2, - IdWell = well.Id, - IdWellSectionType = 1, - AxialLoadPlan = 0.12, - AxialLoadLimitMax = 0.13, - DeltaPressurePlan = 0.14, - DeltaPressureLimitMax = 0.15, - TopDriveTorquePlan = 0.16, - TopDriveTorqueLimitMax = 0.17, - TopDriveSpeedPlan = 0.18, - TopDriveSpeedLimitMax = 0.19, - FlowPlan = 0.110, - FlowLimitMax = 0.111, - RopPlan = 0.112, - UsageSaub = 0.112, - UsageSpin = 0.114, - Comment = "s", - }, - new() { - DepthStart = 100, - DepthEnd = 200, - IdMode = 1, - IdWell = well.Id, - IdWellSectionType = 1, - AxialLoadPlan = 0.22, - AxialLoadLimitMax = 0.23, - DeltaPressurePlan = 0.24, - DeltaPressureLimitMax = 0.25, - TopDriveTorquePlan = 0.26, - TopDriveTorqueLimitMax = 0.27, - TopDriveSpeedPlan = 0.28, - TopDriveSpeedLimitMax = 0.29, - FlowPlan = 0.210, - FlowLimitMax = 0.211, - RopPlan = 0.212, - UsageSaub = 0.212, - UsageSpin = 0.214, - Comment = "r", - }, - new() { - DepthStart = 100, - DepthEnd = 200, - IdMode = 2, - IdWell = well.Id, - IdWellSectionType = 1, - AxialLoadPlan = 0.32, - AxialLoadLimitMax = 0.33, - DeltaPressurePlan = 0.34, - DeltaPressureLimitMax = 0.35, - TopDriveTorquePlan = 0.36, - TopDriveTorqueLimitMax = 0.37, - TopDriveSpeedPlan = 0.38, - TopDriveSpeedLimitMax = 0.39, - FlowPlan = 0.310, - FlowLimitMax = 0.311, - RopPlan = 0.312, - UsageSaub = 0.312, - UsageSpin = 0.314, - Comment = "s", - }, - }; +// private readonly static SimpleTimezoneDto timezone = new() { Hours = 2 }; +// private static readonly DateTimeOffset dateStart = new(2024, 01, 01, 00, 11, 11, timezone.Offset); +// private readonly static WellDto well = new() +// { +// Id = 1, +// IdTelemetry = 1, +// Timezone = timezone +// }; +// private readonly static IEnumerable processMapPlan = new List() +// { +// new() { +// DepthStart = 0, +// DepthEnd = 100, +// IdMode = 1, +// IdWell = well.Id, +// IdWellSectionType = 1, +// AxialLoadPlan = 0.2, +// AxialLoadLimitMax = 0.3, +// DeltaPressurePlan = 0.4, +// DeltaPressureLimitMax = 0.5, +// TopDriveTorquePlan = 0.6, +// TopDriveTorqueLimitMax = 0.7, +// TopDriveSpeedPlan = 0.8, +// TopDriveSpeedLimitMax = 0.9, +// FlowPlan = 0.10, +// FlowLimitMax = 0.11, +// RopPlan = 0.12, +// UsageSaub = 0.12, +// UsageSpin = 0.14, +// Comment = "r", +// }, +// new() { +// DepthStart = 0, +// DepthEnd = 100, +// IdMode = 2, +// IdWell = well.Id, +// IdWellSectionType = 1, +// AxialLoadPlan = 0.12, +// AxialLoadLimitMax = 0.13, +// DeltaPressurePlan = 0.14, +// DeltaPressureLimitMax = 0.15, +// TopDriveTorquePlan = 0.16, +// TopDriveTorqueLimitMax = 0.17, +// TopDriveSpeedPlan = 0.18, +// TopDriveSpeedLimitMax = 0.19, +// FlowPlan = 0.110, +// FlowLimitMax = 0.111, +// RopPlan = 0.112, +// UsageSaub = 0.112, +// UsageSpin = 0.114, +// Comment = "s", +// }, +// new() { +// DepthStart = 100, +// DepthEnd = 200, +// IdMode = 1, +// IdWell = well.Id, +// IdWellSectionType = 1, +// AxialLoadPlan = 0.22, +// AxialLoadLimitMax = 0.23, +// DeltaPressurePlan = 0.24, +// DeltaPressureLimitMax = 0.25, +// TopDriveTorquePlan = 0.26, +// TopDriveTorqueLimitMax = 0.27, +// TopDriveSpeedPlan = 0.28, +// TopDriveSpeedLimitMax = 0.29, +// FlowPlan = 0.210, +// FlowLimitMax = 0.211, +// RopPlan = 0.212, +// UsageSaub = 0.212, +// UsageSpin = 0.214, +// Comment = "r", +// }, +// new() { +// DepthStart = 100, +// DepthEnd = 200, +// IdMode = 2, +// IdWell = well.Id, +// IdWellSectionType = 1, +// AxialLoadPlan = 0.32, +// AxialLoadLimitMax = 0.33, +// DeltaPressurePlan = 0.34, +// DeltaPressureLimitMax = 0.35, +// TopDriveTorquePlan = 0.36, +// TopDriveTorqueLimitMax = 0.37, +// TopDriveSpeedPlan = 0.38, +// TopDriveSpeedLimitMax = 0.39, +// FlowPlan = 0.310, +// FlowLimitMax = 0.311, +// RopPlan = 0.312, +// UsageSaub = 0.312, +// UsageSpin = 0.314, +// Comment = "s", +// }, +// }; - private readonly static IEnumerable> processMapPlanChangeLog = processMapPlan.Select(p => new ChangeLogDto() - { - Item = p, - }); +// private readonly static IEnumerable> processMapPlanChangeLog = processMapPlan.Select(p => new ChangeLogDto() +// { +// Item = p, +// }); - private readonly static IEnumerable operations = new List() - { - new() - { - Id = 1, - IdWell = well.Id, - IdWellSectionType = 1, - IdCategory = WellOperationCategory.IdRotor, - IdParentCategory = WellOperationCategory.IdMechanicalDrilling, - IdType = WellOperation.IdOperationTypeFact, - DepthStart = 0, - DepthEnd = 10, - DateStart = dateStart, - DurationHours = 1, - }, - new() - { - Id = 1, - IdWell = well.Id, - IdWellSectionType = 2, - IdCategory = WellOperationCategory.IdRotor, - IdParentCategory = WellOperationCategory.IdMechanicalDrilling, - IdType = WellOperation.IdOperationTypeFact, - DepthStart = 50, - DepthEnd = 100, - DateStart = dateStart, - DurationHours = 1, - } - }; - private readonly static IEnumerable operationCategories = new List() - { - new(){Id = WellOperationCategory.IdRotor, IdParent = WellOperationCategory.IdMechanicalDrilling, Name = "РОТОР"}, - new(){Id = WellOperationCategory.IdSlide, IdParent = WellOperationCategory.IdMechanicalDrilling, Name = "СЛАЙД"}, - }; - private readonly static IEnumerable sectionTypes = new List() { - new(){ Id = 1, Caption = "Секция 1"}, - new(){ Id = 2, Caption = "Секция 2"}, - new(){ Id = 3, Caption = "Секция 3"}, - new(){ Id = 4, Caption = "Секция 4"}, - }; - private readonly static IEnumerable dataSaubStat = new List() { - new(){ - Id = 1, - IdTelemetry = 1, - IdCategory = WellOperationCategory.IdRotor, - DateStart = dateStart, - DateEnd = dateStart.AddHours(3.25), - DepthStart = 0, - DepthEnd = 20, - Speed = 0.1, - BlockSpeedSp = 0.2, - Pressure = 0.3, - PressureIdle = 0.4, - PressureSp = 0.5, - AxialLoad = 0.6, - AxialLoadSp = 0.7, - AxialLoadLimitMax = 0.8, - RotorTorque = 0.9, - RotorTorqueSp = 0.11, - RotorTorqueLimitMax = 0.12, - RotorSpeed = 0.14, - Flow = 0.17, - IdFeedRegulator = LimitingParameterDto.AxialLoad, - EnabledSubsystems = 15, - HasOscillation = false, - }, - new(){ - Id = 1, - IdTelemetry = 1, - IdCategory = WellOperationCategory.IdRotor, - DateStart = dateStart.AddHours(3.25), - DateEnd = dateStart.AddHours(4.25), - DepthStart = 20, - DepthEnd = 190, - Speed = 0.21, - BlockSpeedSp = 0.22, - Pressure = 0.23, - PressureIdle = 0.24, - PressureSp = 0.25, - AxialLoad = 0.26, - AxialLoadSp = 0.27, - AxialLoadLimitMax = 0.28, - RotorTorque = 0.29, - RotorTorqueSp = 0.211, - RotorTorqueLimitMax = 0.212, - RotorSpeed = 0.214, - Flow = 0.217, - IdFeedRegulator = LimitingParameterDto.AxialLoad, - EnabledSubsystems = 15, - HasOscillation = false, - }, - new(){ - Id = 1, - IdTelemetry = 1, - IdCategory = WellOperationCategory.IdRotor, - DateStart = dateStart.AddHours(4.25), - DateEnd = dateStart.AddHours(16), - DepthStart = 190, - DepthEnd = 290, - Speed = 0.31, - BlockSpeedSp = 0.32, - Pressure = 0.33, - PressureIdle = 0.34, - PressureSp = 0.35, - AxialLoad = 0.36, - AxialLoadSp = 0.37, - AxialLoadLimitMax = 0.38, - RotorTorque = 0.39, - RotorTorqueSp = 0.231, - RotorTorqueLimitMax = 0.232, - RotorSpeed = 0.234, - Flow = 0.237, - IdFeedRegulator = LimitingParameterDto.AxialLoad, - EnabledSubsystems = 15, - HasOscillation = false, - } - }; +// private readonly static IEnumerable operations = new List() +// { +// new() +// { +// Id = 1, +// IdWell = well.Id, +// IdWellSectionType = 1, +// IdCategory = WellOperationCategory.IdRotor, +// IdParentCategory = WellOperationCategory.IdMechanicalDrilling, +// IdType = WellOperation.IdOperationTypeFact, +// DepthStart = 0, +// DepthEnd = 10, +// DateStart = dateStart, +// DurationHours = 1, +// }, +// new() +// { +// Id = 1, +// IdWell = well.Id, +// IdWellSectionType = 2, +// IdCategory = WellOperationCategory.IdRotor, +// IdParentCategory = WellOperationCategory.IdMechanicalDrilling, +// IdType = WellOperation.IdOperationTypeFact, +// DepthStart = 50, +// DepthEnd = 100, +// DateStart = dateStart, +// DurationHours = 1, +// } +// }; +// private readonly static IEnumerable operationCategories = new List() +// { +// new(){Id = WellOperationCategory.IdRotor, IdParent = WellOperationCategory.IdMechanicalDrilling, Name = "РОТОР"}, +// new(){Id = WellOperationCategory.IdSlide, IdParent = WellOperationCategory.IdMechanicalDrilling, Name = "СЛАЙД"}, +// }; +// private readonly static IEnumerable sectionTypes = new List() { +// new(){ Id = 1, Caption = "Секция 1"}, +// new(){ Id = 2, Caption = "Секция 2"}, +// new(){ Id = 3, Caption = "Секция 3"}, +// new(){ Id = 4, Caption = "Секция 4"}, +// }; +// private readonly static IEnumerable dataSaubStat = new List() { +// new(){ +// Id = 1, +// IdTelemetry = 1, +// IdCategory = WellOperationCategory.IdRotor, +// DateStart = dateStart, +// DateEnd = dateStart.AddHours(3.25), +// DepthStart = 0, +// DepthEnd = 20, +// Speed = 0.1, +// BlockSpeedSp = 0.2, +// Pressure = 0.3, +// PressureIdle = 0.4, +// PressureSp = 0.5, +// AxialLoad = 0.6, +// AxialLoadSp = 0.7, +// AxialLoadLimitMax = 0.8, +// RotorTorque = 0.9, +// RotorTorqueSp = 0.11, +// RotorTorqueLimitMax = 0.12, +// RotorSpeed = 0.14, +// Flow = 0.17, +// IdFeedRegulator = LimitingParameterDto.AxialLoad, +// EnabledSubsystems = 15, +// HasOscillation = false, +// }, +// new(){ +// Id = 1, +// IdTelemetry = 1, +// IdCategory = WellOperationCategory.IdRotor, +// DateStart = dateStart.AddHours(3.25), +// DateEnd = dateStart.AddHours(4.25), +// DepthStart = 20, +// DepthEnd = 190, +// Speed = 0.21, +// BlockSpeedSp = 0.22, +// Pressure = 0.23, +// PressureIdle = 0.24, +// PressureSp = 0.25, +// AxialLoad = 0.26, +// AxialLoadSp = 0.27, +// AxialLoadLimitMax = 0.28, +// RotorTorque = 0.29, +// RotorTorqueSp = 0.211, +// RotorTorqueLimitMax = 0.212, +// RotorSpeed = 0.214, +// Flow = 0.217, +// IdFeedRegulator = LimitingParameterDto.AxialLoad, +// EnabledSubsystems = 15, +// HasOscillation = false, +// }, +// new(){ +// Id = 1, +// IdTelemetry = 1, +// IdCategory = WellOperationCategory.IdRotor, +// DateStart = dateStart.AddHours(4.25), +// DateEnd = dateStart.AddHours(16), +// DepthStart = 190, +// DepthEnd = 290, +// Speed = 0.31, +// BlockSpeedSp = 0.32, +// Pressure = 0.33, +// PressureIdle = 0.34, +// PressureSp = 0.35, +// AxialLoad = 0.36, +// AxialLoadSp = 0.37, +// AxialLoadLimitMax = 0.38, +// RotorTorque = 0.39, +// RotorTorqueSp = 0.231, +// RotorTorqueLimitMax = 0.232, +// RotorSpeed = 0.234, +// Flow = 0.237, +// IdFeedRegulator = LimitingParameterDto.AxialLoad, +// EnabledSubsystems = 15, +// HasOscillation = false, +// } +// }; - public ProcessMapReportDataSaubStatServiceTest() - { - wellService.GetOrDefaultAsync(Arg.Any(), Arg.Any()) - .Returns(well); +// public ProcessMapReportDataSaubStatServiceTest() +// { +// wellService.GetOrDefaultAsync(Arg.Any(), Arg.Any()) +// .Returns(well); - processMapPlanBaseRepository.GetCurrent(Arg.Any(), Arg.Any()) - .Returns(processMapPlan); +// processMapPlanBaseRepository.GetCurrent(Arg.Any(), Arg.Any()) +// .Returns(processMapPlan); - processMapPlanBaseRepository.GetChangeLogForDate(Arg.Any(), null, Arg.Any()) - .Returns(processMapPlanChangeLog); +// processMapPlanBaseRepository.GetChangeLogForDate(Arg.Any(), null, Arg.Any()) +// .Returns(processMapPlanChangeLog); - wellOperationRepository.GetAsync(Arg.Any(), Arg.Any()) - .Returns(operations); +// wellOperationRepository.GetAsync(Arg.Any(), Arg.Any()) +// .Returns(operations); - wellOperationRepository.GetSectionTypes() - .Returns(sectionTypes); +// wellOperationRepository.GetSectionTypes() +// .Returns(sectionTypes); - wellOperationCategoryRepository.Get(Arg.Any()) - .Returns(operationCategories); +// wellOperationCategoryRepository.Get(Arg.Any()) +// .Returns(operationCategories); - dataSaubStatRepository.GetAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) - .Returns(dataSaubStat); +// dataSaubStatRepository.GetAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) +// .Returns(dataSaubStat); - service = new ProcessMapReportDrillingService(wellService, processMapPlanBaseRepository, dataSaubStatRepository, wellOperationRepository, wellOperationCategoryRepository); - } +// service = new ProcessMapReportDrillingService(wellService, processMapPlanBaseRepository, dataSaubStatRepository, wellOperationRepository, wellOperationCategoryRepository); +// } - [Fact] - public async Task GetAsync_return_data() - { - // arrange - DataSaubStatRequest request = new() { }; +// [Fact] +// public async Task GetAsync_return_data() +// { +// // arrange +// DataSaubStatRequest request = new() { }; - // act - var result = await service.GetAsync(well.Id, request, CancellationToken.None); +// // act +// var result = await service.GetAsync(well.Id, request, CancellationToken.None); - // assert - Assert.NotEmpty(result); - } -} +// // assert +// Assert.NotEmpty(result); +// } +//} diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanDrillingController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanRotorController.cs similarity index 56% rename from AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanDrillingController.cs rename to AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanRotorController.cs index 60d68436..f437820d 100644 --- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanDrillingController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanRotorController.cs @@ -9,18 +9,18 @@ using AsbCloudInfrastructure.Services.ProcessMapPlan.Parser; namespace AsbCloudWebApi.Controllers.ProcessMaps; /// -/// РТК план бурения +/// РТК план бурения (ротор) /// -public class ProcessMapPlanDrillingController : ProcessMapPlanBaseController +public class ProcessMapPlanRotorController : ProcessMapPlanBaseController { - public ProcessMapPlanDrillingController(IChangeLogRepository repository, + public ProcessMapPlanRotorController(IChangeLogRepository repository, IWellService wellService, - ProcessMapPlanDrillingParser parserService, + ProcessMapPlanRotorParser parserService, ITelemetryService telemetryService, - ProcessMapPlanDrillingExportService processMapPlanExportService) + ProcessMapPlanRotorExportService processMapPlanExportService) : base(repository, wellService, parserService, processMapPlanExportService, telemetryService) { } - protected override string TemplateFileName => "ЕЦП_шаблон_файла_РТК_план_бурение.xlsx"; + protected override string TemplateFileName => "ЕЦП_шаблон_файла_РТК_план_бурение_ротор.xlsx"; } \ No newline at end of file diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanSlideController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanSlideController.cs new file mode 100644 index 00000000..b66d6c6a --- /dev/null +++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanSlideController.cs @@ -0,0 +1,26 @@ +using AsbCloudApp.Data.ProcessMaps; +using AsbCloudApp.Repositories; +using AsbCloudApp.Requests; +using AsbCloudApp.Services; +using AsbCloudDb.Model.ProcessMaps; +using AsbCloudInfrastructure.Services.ProcessMapPlan.Export; +using AsbCloudInfrastructure.Services.ProcessMapPlan.Parser; + +namespace AsbCloudWebApi.Controllers.ProcessMaps; + +/// +/// РТК план бурения (ротор) +/// +public class ProcessMapPlanSlideController : ProcessMapPlanBaseController +{ + public ProcessMapPlanSlideController(IChangeLogRepository repository, + IWellService wellService, + ProcessMapPlanSlideParser parserService, + ITelemetryService telemetryService, + ProcessMapPlanSlideExportService processMapPlanExportService) + : base(repository, wellService, parserService, processMapPlanExportService, telemetryService) + { + } + + protected override string TemplateFileName => "ЕЦП_шаблон_файла_РТК_план_бурение_слайд.xlsx"; +} \ No newline at end of file diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/WellSectionPlanController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/WellSectionPlanController.cs index 5f69c7db..4ea6bb5c 100644 --- a/AsbCloudWebApi/Controllers/ProcessMaps/WellSectionPlanController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMaps/WellSectionPlanController.cs @@ -182,7 +182,7 @@ public class WellSectionPlanController : ControllerBase private async Task CheckIsExistsWellSectionTypeAsync(int idWellSectionType, CancellationToken cancellationToken) { _ = await wellSectionRepository.GetOrDefaultAsync(idWellSectionType, cancellationToken) - ?? throw new ArgumentInvalidException(nameof(ProcessMapPlanDrillingDto.IdWellSectionType), + ?? throw new ArgumentInvalidException(nameof(ProcessMapPlanBaseDto.IdWellSectionType), $"Тип секции с Id: {idWellSectionType} не найден"); } } \ No newline at end of file diff --git a/AsbCloudWebApi/Controllers/WellCompositeController.cs b/AsbCloudWebApi/Controllers/WellCompositeController.cs index 903966dd..2aebba9f 100644 --- a/AsbCloudWebApi/Controllers/WellCompositeController.cs +++ b/AsbCloudWebApi/Controllers/WellCompositeController.cs @@ -73,7 +73,7 @@ namespace AsbCloudWebApi.Controllers /// [HttpGet("compositeProcessMap")] [Permission] - [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] + [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] public async Task GetCompositeProcessMap(int idWell, CancellationToken token) { if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false))