From 38559d65ae5027c3ccf21d239cd4f293cf3849b6 Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Wed, 26 Jun 2024 10:58:59 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=A2=D0=9A=20=D0=BF=D0=BB=D0=B0=D0=BD?= =?UTF-8?q?=20=D0=B4=D1=80=D0=B8=D0=BB=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProcessMapPlanOperationSwitchModeDto.cs | 33 ++++++++++ AsbCloudDb/Model/AsbCloudDbContext.cs | 60 +++++++++++-------- AsbCloudDb/Model/IAsbCloudDbContext.cs | 3 +- .../ProcessMapPlanFunctionsDrillTest.cs | 45 ++++++++++++++ AsbCloudInfrastructure/DependencyInjection.cs | 14 +++++ ...rocessMapPlanFunctionsDrillTestTemplate.cs | 17 ++++++ ...sMapPlanFunctionsDrillTestExportService.cs | 30 ++++++++++ .../ProcessMapPlanFunctionsDrillTestParser.cs | 42 +++++++++++++ ...cessMapPlanFunctionsDrillTestController.cs | 28 +++++++++ 9 files changed, 247 insertions(+), 25 deletions(-) create mode 100644 AsbCloudApp/Data/ProcessMaps/ProcessMapPlanOperationSwitchModeDto.cs create mode 100644 AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanFunctionsDrillTest.cs create mode 100644 AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanFunctionsDrillTestTemplate.cs create mode 100644 AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanFunctionsDrillTestExportService.cs create mode 100644 AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanFunctionsDrillTestParser.cs create mode 100644 AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanFunctionsDrillTestController.cs diff --git a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanOperationSwitchModeDto.cs b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanOperationSwitchModeDto.cs new file mode 100644 index 00000000..de8c571e --- /dev/null +++ b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanOperationSwitchModeDto.cs @@ -0,0 +1,33 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace AsbCloudApp.Data.ProcessMaps; + +/// +/// РТК план конструкция скважины +/// +public class ProcessMapPlanOperationSwitchModeDto : ProcessMapPlanBaseDto +{ + /// + /// Выход на плановый расход, время выхода буровых насосов на плановый расход, сек. + /// + [Range(0.0, 3600.0)] + public double ExitTimeConsumption { get; set; } + + /// + /// Выход на плановый расход, расход, л/с + /// + [Range(0.0, 100.0)] + public double ConsumptionFlowRate { get; set; } + + /// + /// Максимально допустимое давление, атм. + /// + [Range(0.0, 400.0)] + public double PressureLimitMax { get; set; } + + /// + /// Комментарий + /// + public double Comment { get; set; } +} \ No newline at end of file diff --git a/AsbCloudDb/Model/AsbCloudDbContext.cs b/AsbCloudDb/Model/AsbCloudDbContext.cs index 37bc58b2..c1e551f7 100644 --- a/AsbCloudDb/Model/AsbCloudDbContext.cs +++ b/AsbCloudDb/Model/AsbCloudDbContext.cs @@ -15,7 +15,7 @@ namespace AsbCloudDb.Model public virtual DbSet Clusters => Set(); public virtual DbSet Companies => Set(); public virtual DbSet CompaniesTypes => Set(); - public virtual DbSet DailyReports => Set (); + public virtual DbSet DailyReports => Set(); public virtual DbSet Deposits => Set(); public virtual DbSet DetectedOperations => Set(); public virtual DbSet TrajectoriesPlan => Set(); @@ -30,7 +30,8 @@ namespace AsbCloudDb.Model public virtual DbSet ProcessMapPlanOperationDeterminationOfOscillationAngles => Set(); public virtual DbSet ProcessMapPlanOperationTFOrientation => Set(); public virtual DbSet ProcessMapPlanOperationSwitchPump => Set(); - public virtual DbSet ProcessMapPlanSection => Set(); + public virtual DbSet ProcessMapPlanOperationSwitchMode => Set(); + public virtual DbSet ProcessMapPlanFunctionsDrillTest => Set(); public virtual DbSet DrillingProgramParts => Set(); public virtual DbSet FileCategories => Set(); public virtual DbSet Files => Set(); @@ -71,7 +72,7 @@ namespace AsbCloudDb.Model public virtual DbSet TelemetryWirelineRunOut => Set(); public virtual DbSet TrajectoriesFact => Set(); - + public virtual DbSet WellSectionsPlan => Set(); // GTR WITS @@ -118,7 +119,7 @@ namespace AsbCloudDb.Model } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { + { if (!optionsBuilder.IsConfigured) optionsBuilder.UseNpgsql("Host=localhost;Database=postgres;Username=postgres;Password=q;Persist Security Info=True;Include Error Detail=True;" //, builder=>builder.EnableRetryOnFailure(2, System.TimeSpan.FromMinutes(1)) @@ -145,7 +146,7 @@ namespace AsbCloudDb.Model entity.Property(e => e.Timezone) .HasJsonConversion(); - }); + }); modelBuilder.Entity(entity => { @@ -296,7 +297,7 @@ namespace AsbCloudDb.Model entity.HasIndex(d => d.DepthEnd); entity.HasIndex(d => d.DateStart); - entity.HasOne(o => o.OperationPlan) + entity.HasOne(o => o.OperationPlan) .WithMany() .HasForeignKey(o => o.IdPlan) .OnDelete(DeleteBehavior.SetNull); @@ -351,7 +352,7 @@ namespace AsbCloudDb.Model { entity.HasIndex(e => new { e.IdWell, e.Date }) .IsUnique(); - + entity.Property(e => e.SubsystemBlock) .HasJsonConversion(); @@ -363,7 +364,7 @@ namespace AsbCloudDb.Model }); modelBuilder.Entity(entity => entity - .Property(p=>p.ExtraData) + .Property(p => p.ExtraData) .HasJsonConversion()); modelBuilder.Entity(entity => @@ -380,7 +381,8 @@ namespace AsbCloudDb.Model .HasConstraintName("t_schedule_t_driller_id_driller"); }); - modelBuilder.Entity(entity => { + modelBuilder.Entity(entity => + { entity.Property(e => e.Setpoints) .HasJsonConversion(); }); @@ -392,7 +394,7 @@ namespace AsbCloudDb.Model nameof(WitsItemBase.IdRecord), nameof(WitsItemBase.IdItem), nameof(WitsItemBase.DateTime)); - }); + }); modelBuilder.Entity(entity => { entity.HasKey( @@ -432,7 +434,7 @@ namespace AsbCloudDb.Model .WithMany(mf => mf.Children) .HasForeignKey(mf => mf.IdParent) .OnDelete(DeleteBehavior.Cascade); - + modelBuilder.Entity() .HasOne(m => m.Directory) .WithMany(f => f.Manuals) @@ -488,24 +490,29 @@ namespace AsbCloudDb.Model .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() - .HasOne(p => p.Author) - .WithMany() - .OnDelete(DeleteBehavior.Restrict); + .HasOne(p => p.Author) + .WithMany() + .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() - .HasOne(p => p.Author) - .WithMany() - .OnDelete(DeleteBehavior.Restrict); + .HasOne(p => p.Author) + .WithMany() + .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() - .HasOne(p => p.Author) - .WithMany() - .OnDelete(DeleteBehavior.Restrict); + .HasOne(p => p.Author) + .WithMany() + .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() - .HasOne(p => p.Author) - .WithMany() - .OnDelete(DeleteBehavior.Restrict); + .HasOne(p => p.Author) + .WithMany() + .OnDelete(DeleteBehavior.Restrict); + + modelBuilder.Entity() + .HasOne(p => p.Author) + .WithMany() + .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(p => p.Editor) @@ -562,6 +569,11 @@ namespace AsbCloudDb.Model .WithMany() .OnDelete(DeleteBehavior.Restrict); + modelBuilder.Entity() + .HasOne(p => p.Editor) + .WithMany() + .OnDelete(DeleteBehavior.Restrict); + DefaultData.DefaultContextData.Fill(modelBuilder); } @@ -577,6 +589,6 @@ namespace AsbCloudDb.Model { var sql = $"REFRESH MATERIALIZED VIEW {materializedViewName};"; return Database.ExecuteSqlRawAsync(sql, token); - } + } } } diff --git a/AsbCloudDb/Model/IAsbCloudDbContext.cs b/AsbCloudDb/Model/IAsbCloudDbContext.cs index e22fd544..ea266d6f 100644 --- a/AsbCloudDb/Model/IAsbCloudDbContext.cs +++ b/AsbCloudDb/Model/IAsbCloudDbContext.cs @@ -91,7 +91,8 @@ namespace AsbCloudDb.Model DbSet ProcessMapPlanOperationDeterminationOfOscillationAngles { get; } DbSet ProcessMapPlanOperationTFOrientation { get; } DbSet ProcessMapPlanOperationSwitchPump { get; } - DbSet ProcessMapPlanSection { get; } + DbSet ProcessMapPlanOperationSwitchMode { get; } + DbSet ProcessMapPlanFunctionsDrillTest { get; } Task RefreshMaterializedViewAsync(string mwName, CancellationToken token); Task RefreshMaterializedViewAsync(CancellationToken token) where TEntity : class; diff --git a/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanFunctionsDrillTest.cs b/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanFunctionsDrillTest.cs new file mode 100644 index 00000000..be575b50 --- /dev/null +++ b/AsbCloudDb/Model/ProcessMapPlan/ProcessMapPlanFunctionsDrillTest.cs @@ -0,0 +1,45 @@ +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_functions_drilltest"), Comment("Дрилтест")] +public class ProcessMapPlanFunctionsDrillTest : ProcessMapPlanBase +{ + [Column("weight_on_bit_min"), Comment("Нагрузка минимальная, т")] + [Range(1.0, 30.0)] + [Required] + public double WeightOnBitMin { get; set; } + + [Column("number_of_steps_bit"), Comment("Количество шагов по нагрузке")] + [Range(1, 5)] + [Required] + public int NumberOfStepsBit { get; set; } + + [Column("revolution_per_minute_min"), Comment("Минимальные обороты на ВСП, об/мин.")] + [Range(5, 200)] + [Required] + public int RevolutionPerMinuteMin { get; set; } + + [Column("number_of_steps_rpm"), Comment("Количество шагов оборотов на ВСП, шт.")] + [Range(1, 5)] + [Required] + public int NumberOfStepsRPM { get; set; } + + [Column("length_step"), Comment("Величина проходки шага, м.")] + [Range(0.1, 2.0)] + [Required] + public double LengthStep { get; set; } + + [Column("id_autostart_or_warning"), Comment("Автозапуск или Предупреждение")] + [Required] + public int IdAutostartOrWarning { get; set; } + + [Column("note"), Comment("Примечание"), StringLength(1024)] + public string Note { get; set; } = string.Empty; + + [ForeignKey(nameof(IdPrevious))] + public virtual ProcessMapPlanFunctionsDrillTest? Previous { get; set; } +} \ No newline at end of file diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs index 30caa355..41c25885 100644 --- a/AsbCloudInfrastructure/DependencyInjection.cs +++ b/AsbCloudInfrastructure/DependencyInjection.cs @@ -208,6 +208,13 @@ namespace AsbCloudInfrastructure { Item = src.Adapt() }); + + TypeAdapterConfig>.NewConfig() + .Include>() + .Map(dest => dest, src => new ChangeLogDto() + { + Item = src.Adapt() + }); } public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration) @@ -313,6 +320,10 @@ namespace AsbCloudInfrastructure IChangeLogRepository, ProcessMapPlanBaseRepository>(); + services.AddTransient< + IChangeLogRepository, + ProcessMapPlanBaseRepository>(); + services.AddTransient(); services.AddTransient(); @@ -369,6 +380,7 @@ namespace AsbCloudInfrastructure services.AddTransient>(); services.AddTransient>(); services.AddTransient>(); + services.AddTransient>(); services.AddTransient(); services.AddTransient(); services.AddTransient(); @@ -434,6 +446,7 @@ namespace AsbCloudInfrastructure services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); @@ -451,6 +464,7 @@ namespace AsbCloudInfrastructure services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanFunctionsDrillTestTemplate.cs b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanFunctionsDrillTestTemplate.cs new file mode 100644 index 00000000..0a73fd9a --- /dev/null +++ b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanFunctionsDrillTestTemplate.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemplates; + +public class ProcessMapPlanFunctionsDrillTestTemplate : ITemplateParameters +{ + public string SheetName => "Дрилтест"; + + public int HeaderRowsCount => 2; + + public string FileName => "ProcessMapPlanFunctionsDrillTestTemplate.xlsx"; + + public IDictionary Cells => new Dictionary + { + + }; +} \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanFunctionsDrillTestExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanFunctionsDrillTestExportService.cs new file mode 100644 index 00000000..40956dad --- /dev/null +++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanFunctionsDrillTestExportService.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 ProcessMapPlanFunctionsDrillTestExportService : ProcessMapPlanExportService +{ + public ProcessMapPlanFunctionsDrillTestExportService( + IChangeLogRepository processMapPlanRepository, + IWellService wellService) + : base(processMapPlanRepository, wellService) + { + } + + protected override ITemplateParameters TemplateParameters { get; } = new ProcessMapPlanFunctionsDrillTestTemplate(); + + 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/ProcessMapPlanFunctionsDrillTestParser.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanFunctionsDrillTestParser.cs new file mode 100644 index 00000000..adbe8dac --- /dev/null +++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanFunctionsDrillTestParser.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using AsbCloudApp.Data.ProcessMaps; +using AsbCloudApp.Repositories; +using AsbCloudInfrastructure.Services.ExcelServices.Templates; +using AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemplates; + +namespace AsbCloudInfrastructure.Services.ProcessMapPlan.Parser; + +public class ProcessMapPlanFunctionsDrillTestParser : ProcessMapPlanParser +{ + public ProcessMapPlanFunctionsDrillTestParser(IWellOperationRepository wellOperationRepository) + : base(wellOperationRepository) + { + } + + protected override ITemplateParameters TemplateParameters => new ProcessMapPlanFunctionsDrillTestTemplate(); + + protected override ProcessMapPlanFunctionsDrillTestDto 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/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanFunctionsDrillTestController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanFunctionsDrillTestController.cs new file mode 100644 index 00000000..5249495e --- /dev/null +++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanFunctionsDrillTestController.cs @@ -0,0 +1,28 @@ +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 ProcessMapPlanFunctionsDrillTestController : + ProcessMapPlanBaseController +{ + public ProcessMapPlanFunctionsDrillTestController( + IChangeLogRepository repository, + IWellService wellService, + ProcessMapPlanFunctionsDrillTestParser parserService, + ITelemetryService telemetryService, + ProcessMapPlanFunctionsDrillTestExportService processMapPlanExportService) + : base(repository, wellService, parserService, processMapPlanExportService, telemetryService) + { + } + + protected override string TemplateFileName => "ЕЦП_шаблон_файла_РТК_план_дрилтест.xlsx"; +} \ No newline at end of file