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