diff --git a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs
index 67d6c74b..ea2555a8 100644
--- a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs
+++ b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs
@@ -17,7 +17,7 @@ public class ProcessMapPlanDrillingDto : ProcessMapPlanBaseDto
/// Название режима бурения
///
public string? Mode { get; set; }
-
+
///
/// Осевая нагрузка, т план
///
diff --git a/AsbCloudApp/Requests/ExportOptions/IExportOptionsRequest.cs b/AsbCloudApp/Requests/ExportOptions/IExportOptionsRequest.cs
new file mode 100644
index 00000000..8d65572b
--- /dev/null
+++ b/AsbCloudApp/Requests/ExportOptions/IExportOptionsRequest.cs
@@ -0,0 +1,8 @@
+namespace AsbCloudApp.Requests.ExportOptions;
+
+///
+/// Параметры экспорта
+///
+public interface IExportOptionsRequest
+{
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Requests/ExportOptions/WellRelatedExportRequest.cs b/AsbCloudApp/Requests/ExportOptions/WellRelatedExportRequest.cs
new file mode 100644
index 00000000..63b185cd
--- /dev/null
+++ b/AsbCloudApp/Requests/ExportOptions/WellRelatedExportRequest.cs
@@ -0,0 +1,21 @@
+namespace AsbCloudApp.Requests.ExportOptions;
+
+///
+/// Параметры экспорта
+///
+public class WellRelatedExportRequest : IExportOptionsRequest
+{
+ ///
+ /// Конструктор
+ ///
+ /// Id скважины
+ public WellRelatedExportRequest(int idWell)
+ {
+ IdWell = idWell;
+ }
+
+ ///
+ /// Id скважины
+ ///
+ public int IdWell { get; }
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Services/IExportService.cs b/AsbCloudApp/Services/IExportService.cs
new file mode 100644
index 00000000..b921fec5
--- /dev/null
+++ b/AsbCloudApp/Services/IExportService.cs
@@ -0,0 +1,21 @@
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+using AsbCloudApp.Requests.ExportOptions;
+
+namespace AsbCloudApp.Services;
+
+///
+/// Экспорт данных
+///
+public interface IExportService
+ where TOptions : IExportOptionsRequest
+{
+ ///
+ /// Экспортировать данные
+ ///
+ ///
+ ///
+ ///
+ Task<(string FileName, Stream File)> ExportAsync(TOptions options, CancellationToken token);
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Services/IParserService.cs b/AsbCloudApp/Services/IParserService.cs
index 6fa095cd..89212ba7 100644
--- a/AsbCloudApp/Services/IParserService.cs
+++ b/AsbCloudApp/Services/IParserService.cs
@@ -9,7 +9,7 @@ namespace AsbCloudApp.Services;
///
///
///
-public interface IParserService : IParserService
+public interface IParserService
where TDto : class, IId
where TOptions : IParserOptionsRequest
{
@@ -26,11 +26,4 @@ public interface IParserService : IParserService
///
///
Stream GetTemplateFile();
-}
-
-///
-/// Сервис парсинга(интерфейс маркер)
-///
-public interface IParserService
-{
}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs
index 6250112f..5ee77197 100644
--- a/AsbCloudInfrastructure/DependencyInjection.cs
+++ b/AsbCloudInfrastructure/DependencyInjection.cs
@@ -45,6 +45,7 @@ using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
+using AsbCloudInfrastructure.Services.ProcessMapPlan.Export;
namespace AsbCloudInfrastructure
{
@@ -161,9 +162,6 @@ namespace AsbCloudInfrastructure
services.AddScoped();
services.AddTransient();
services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
services.AddTransient();
services.AddTransient();
services.AddTransient();
@@ -295,7 +293,14 @@ namespace AsbCloudInfrastructure
services.AddTransient();
services.AddTransient();
services.AddTransient();
+
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+
return services;
}
}
diff --git a/AsbCloudInfrastructure/Repository/ProcessMapPlanBaseRepository.cs b/AsbCloudInfrastructure/Repository/ProcessMapPlanBaseRepository.cs
index bfea0fe6..789da211 100644
--- a/AsbCloudInfrastructure/Repository/ProcessMapPlanBaseRepository.cs
+++ b/AsbCloudInfrastructure/Repository/ProcessMapPlanBaseRepository.cs
@@ -28,6 +28,7 @@ public class ProcessMapPlanBaseRepository : ChangeLogRepositoryAb
.Include(e => e.Author)
.Include(e => e.Editor)
.Include(e => e.Well)
+ .Include(e => e.WellSectionType)
.Where(e => e.IdWell == request.IdWell);
if (request.IdWellSectionType.HasValue)
@@ -56,4 +57,11 @@ public class ProcessMapPlanBaseRepository : ChangeLogRepositoryAb
var offset = TimeSpan.FromHours(timezone.Hours);
return offset;
}
+
+ protected override TDto Convert(TEntity entity, TimeSpan offset)
+ {
+ var dto = base.Convert(entity, offset);
+ dto.Section = entity.WellSectionType.Caption;
+ return dto;
+ }
}
diff --git a/AsbCloudInfrastructure/Services/Parser/Cell.cs b/AsbCloudInfrastructure/Services/ExcelServices/Cell.cs
similarity index 97%
rename from AsbCloudInfrastructure/Services/Parser/Cell.cs
rename to AsbCloudInfrastructure/Services/ExcelServices/Cell.cs
index 381ca57b..a18fb167 100644
--- a/AsbCloudInfrastructure/Services/Parser/Cell.cs
+++ b/AsbCloudInfrastructure/Services/ExcelServices/Cell.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.IO;
using ClosedXML.Excel;
-namespace AsbCloudInfrastructure.Services.Parser;
+namespace AsbCloudInfrastructure.Services.ExcelServices;
public class Cell
{
diff --git a/AsbCloudInfrastructure/Services/ExcelServices/ExportExcelService.cs b/AsbCloudInfrastructure/Services/ExcelServices/ExportExcelService.cs
new file mode 100644
index 00000000..086eba97
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ExcelServices/ExportExcelService.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Threading;
+using System.Threading.Tasks;
+using AsbCloudApp.Requests.ExportOptions;
+using AsbCloudApp.Services;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates;
+using ClosedXML.Excel;
+using Mapster;
+
+namespace AsbCloudInfrastructure.Services.ExcelServices;
+
+public abstract class ExportExcelService : IExportService
+ where TOptions : IExportOptionsRequest
+{
+ protected abstract ITemplateParameters TemplateParameters { get; }
+
+ protected abstract Task BuildFileNameAsync(TOptions options, CancellationToken token);
+
+ protected abstract Task> GetDtosAsync(TOptions options, CancellationToken token);
+
+ public async Task<(string FileName, Stream File)> ExportAsync(TOptions options, CancellationToken token)
+ {
+ var dtos = await GetDtosAsync(options, token);
+
+ var fileName = await BuildFileNameAsync(options, token);
+ var file = BuildFile(dtos);
+ return (fileName, file);
+ }
+
+ private Stream BuildFile(IEnumerable dtos)
+ {
+ using var template = GetTemplateFile();
+ using var workbook = new XLWorkbook(template);
+ AddDtosToWorkbook(workbook, dtos);
+
+ var memoryStream = new MemoryStream();
+ workbook.SaveAs(memoryStream, new SaveOptions { });
+ memoryStream.Seek(0, SeekOrigin.Begin);
+ return memoryStream;
+ }
+
+ private void AddDtosToWorkbook(XLWorkbook workbook, IEnumerable dtos)
+ {
+ var dtosToArray = dtos.ToArray();
+
+ if (!dtosToArray.Any())
+ return;
+
+ var sheet = workbook.GetWorksheet(TemplateParameters.SheetName);
+ for (var i = 0; i < dtosToArray.Length; i++)
+ {
+ var row = sheet.Row(1 + i + TemplateParameters.HeaderRowsCount);
+ AddRow(row, dtosToArray[i]);
+ }
+ }
+
+ private void AddRow(IXLRow xlRow, TDto dto)
+ {
+ var properties = dto.Adapt>();
+
+ foreach (var (name, cellValue) in properties)
+ {
+ if (TemplateParameters.Cells.TryGetValue(name, out var cell))
+ xlRow.Cell(cell.ColumnNumber).SetCellValue(cellValue);
+ }
+ }
+
+ private Stream GetTemplateFile() =>
+ Assembly.GetExecutingAssembly().GetTemplateCopyStream(TemplateParameters.FileName)
+ ?? throw new ArgumentNullException($"Файл '{TemplateParameters.FileName}' не найден");
+}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/Services/Parser/ParserExcelService.cs b/AsbCloudInfrastructure/Services/ExcelServices/ParserExcelService.cs
similarity index 77%
rename from AsbCloudInfrastructure/Services/Parser/ParserExcelService.cs
rename to AsbCloudInfrastructure/Services/ExcelServices/ParserExcelService.cs
index 13c621af..64e0259c 100644
--- a/AsbCloudInfrastructure/Services/Parser/ParserExcelService.cs
+++ b/AsbCloudInfrastructure/Services/ExcelServices/ParserExcelService.cs
@@ -7,39 +7,34 @@ using System.Reflection;
using AsbCloudApp.Data;
using AsbCloudApp.Requests.ParserOptions;
using AsbCloudApp.Services;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates;
using ClosedXML.Excel;
using Mapster;
-namespace AsbCloudInfrastructure.Services.Parser;
+namespace AsbCloudInfrastructure.Services.ExcelServices;
public abstract class ParserExcelService : IParserService
where TDto : class, IValidatableObject, IId
where TOptions : IParserOptionsRequest
{
- protected abstract string SheetName { get; }
+ protected abstract ITemplateParameters TemplateParameters { get; }
- protected virtual int HeaderRowsCount => 0;
-
- protected abstract string TemplateFileName { get; }
-
- protected abstract IDictionary Cells { get; }
-
public virtual ParserResultDto Parse(Stream file, TOptions options)
{
using var workbook = new XLWorkbook(file);
- var sheet = workbook.GetWorksheet(SheetName);
+ var sheet = workbook.GetWorksheet(TemplateParameters.SheetName);
var dtos = ParseExcelSheet(sheet);
return dtos;
}
public virtual Stream GetTemplateFile() =>
- Assembly.GetExecutingAssembly().GetTemplateCopyStream(TemplateFileName)
- ?? throw new ArgumentNullException($"Файл '{TemplateFileName}' не найден");
+ Assembly.GetExecutingAssembly().GetTemplateCopyStream(TemplateParameters.FileName)
+ ?? throw new ArgumentNullException($"Файл '{TemplateParameters.FileName}' не найден");
protected virtual IDictionary ParseRow(IXLRow xlRow)
{
- var cells = Cells.ToDictionary(x => x.Key, x =>
+ var cells = TemplateParameters.Cells.ToDictionary(x => x.Key, x =>
{
var columnNumber = x.Value.ColumnNumber;
var xlCell = xlRow.Cell(columnNumber);
@@ -72,7 +67,7 @@ public abstract class ParserExcelService : IParserService x.Key, x => x.Value.ColumnNumber);
+ var columnsDict = TemplateParameters.Cells.ToDictionary(x => x.Key, x => x.Value.ColumnNumber);
var invalidDto = new ValidationResultDto
{
@@ -84,7 +79,10 @@ public abstract class ParserExcelService : IParserService : IParserService ParseExcelSheet(IXLWorksheet sheet)
{
- var count = sheet.RowsUsed().Count() - HeaderRowsCount;
+ var count = sheet.RowsUsed().Count() - TemplateParameters.HeaderRowsCount;
if (count <= 0)
return new ParserResultDto();
@@ -105,7 +103,7 @@ public abstract class ParserExcelService : IParserService Cells { get; }
+}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanDrillingTemplate.cs b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanDrillingTemplate.cs
new file mode 100644
index 00000000..dff24dcf
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanDrillingTemplate.cs
@@ -0,0 +1,35 @@
+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/ProcessMapPlanReamTemplate.cs b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanReamTemplate.cs
new file mode 100644
index 00000000..5c454d7b
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanReamTemplate.cs
@@ -0,0 +1,29 @@
+using System.Collections.Generic;
+using AsbCloudApp.Data.ProcessMaps;
+
+namespace AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemplates;
+
+public class ProcessMapPlanReamTemplate : ITemplateParameters
+{
+ public string SheetName => "План";
+
+ public int HeaderRowsCount => 1;
+
+ public string FileName => "ProcessMapPlanReamTemplate.xlsx";
+
+ public IDictionary Cells => new Dictionary
+ {
+ { nameof(ProcessMapPlanReamDto.Section), new Cell(1, typeof(string)) },
+ { nameof(ProcessMapPlanReamDto.DepthStart), new Cell(2, typeof(double)) },
+ { nameof(ProcessMapPlanReamDto.DepthEnd), new Cell(3, typeof(double)) },
+ { nameof(ProcessMapPlanReamDto.Repeats), new Cell(4, typeof(double)) },
+ { nameof(ProcessMapPlanReamDto.SpinUpward), new Cell(5, typeof(double)) },
+ { nameof(ProcessMapPlanReamDto.SpinDownward), new Cell(6, typeof(double)) },
+ { nameof(ProcessMapPlanReamDto.SpeedUpward), new Cell(7, typeof(double)) },
+ { nameof(ProcessMapPlanReamDto.SpeedDownward), new Cell(8, typeof(double)) },
+ { nameof(ProcessMapPlanReamDto.SetpointDrag), new Cell(9, typeof(double)) },
+ { nameof(ProcessMapPlanReamDto.SetpointTight), new Cell(10, typeof(double)) },
+ { nameof(ProcessMapPlanReamDto.Pressure), new Cell(11, typeof(double)) },
+ { nameof(ProcessMapPlanReamDto.Torque), new Cell(12, typeof(double)) },
+ };
+}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/Services/ExcelServices/Templates/TrajectoryTemplates/TrajectoryFactManualTemplate.cs b/AsbCloudInfrastructure/Services/ExcelServices/Templates/TrajectoryTemplates/TrajectoryFactManualTemplate.cs
new file mode 100644
index 00000000..8e604e1e
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ExcelServices/Templates/TrajectoryTemplates/TrajectoryFactManualTemplate.cs
@@ -0,0 +1,23 @@
+using System.Collections.Generic;
+using AsbCloudApp.Data.Trajectory;
+
+namespace AsbCloudInfrastructure.Services.ExcelServices.Templates.TrajectoryTemplates;
+
+public class TrajectoryFactManualTemplate : ITemplateParameters
+{
+ public string SheetName => "Фактическая траектория";
+
+ public int HeaderRowsCount => 2;
+
+ public string FileName => "TrajectoryFactManualTemplate.xlsx";
+
+ public IDictionary Cells => new Dictionary
+ {
+ { nameof(TrajectoryGeoFactDto.WellboreDepth), new Cell(1, typeof(double)) },
+ { nameof(TrajectoryGeoFactDto.ZenithAngle), new Cell(2, typeof(double)) },
+ { nameof(TrajectoryGeoFactDto.AzimuthGeo), new Cell(3, typeof(double)) },
+ { nameof(TrajectoryGeoFactDto.AzimuthMagnetic), new Cell(4, typeof(double)) },
+ { nameof(TrajectoryGeoFactDto.VerticalDepth), new Cell(5, typeof(double)) },
+ { nameof(TrajectoryGeoFactDto.Comment), new Cell(6, typeof(string)) }
+ };
+}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/Services/ExcelServices/Templates/TrajectoryTemplates/TrajectoryFactNnbTemplate.cs b/AsbCloudInfrastructure/Services/ExcelServices/Templates/TrajectoryTemplates/TrajectoryFactNnbTemplate.cs
new file mode 100644
index 00000000..87489d7c
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ExcelServices/Templates/TrajectoryTemplates/TrajectoryFactNnbTemplate.cs
@@ -0,0 +1,23 @@
+using System.Collections.Generic;
+using AsbCloudApp.Data.Trajectory;
+
+namespace AsbCloudInfrastructure.Services.ExcelServices.Templates.TrajectoryTemplates;
+
+public class TrajectoryFactNnbTemplate : ITemplateParameters
+{
+ public string SheetName => "Фактическая ннб-траектория";
+
+ public int HeaderRowsCount => 2;
+
+ public string FileName => "TrajectoryFactNnbTemplate.xlsx";
+
+ public IDictionary Cells => new Dictionary
+ {
+ { nameof(TrajectoryGeoFactDto.WellboreDepth), new Cell(1, typeof(double)) },
+ { nameof(TrajectoryGeoFactDto.ZenithAngle), new Cell(2, typeof(double)) },
+ { nameof(TrajectoryGeoFactDto.AzimuthGeo), new Cell(3, typeof(double)) },
+ { nameof(TrajectoryGeoFactDto.AzimuthMagnetic), new Cell(4, typeof(double)) },
+ { nameof(TrajectoryGeoFactDto.VerticalDepth), new Cell(5, typeof(double)) },
+ { nameof(TrajectoryGeoFactDto.Comment), new Cell(6, typeof(string)) }
+ };
+}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/Services/ExcelServices/Templates/TrajectoryTemplates/TrajectoryPlanTemplate.cs b/AsbCloudInfrastructure/Services/ExcelServices/Templates/TrajectoryTemplates/TrajectoryPlanTemplate.cs
new file mode 100644
index 00000000..d98c1d89
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ExcelServices/Templates/TrajectoryTemplates/TrajectoryPlanTemplate.cs
@@ -0,0 +1,21 @@
+using System.Collections.Generic;
+using AsbCloudApp.Data.Trajectory;
+
+namespace AsbCloudInfrastructure.Services.ExcelServices.Templates.TrajectoryTemplates;
+
+public class TrajectoryPlanTemplate : ITemplateParameters
+{
+ public string SheetName => "Плановая траектория";
+ public int HeaderRowsCount => 2;
+ public string FileName => "TrajectoryPlanTemplate.xlsx";
+ public IDictionary Cells => new Dictionary
+ {
+ { nameof(TrajectoryGeoPlanDto.WellboreDepth), new Cell(1, typeof(double)) },
+ { nameof(TrajectoryGeoPlanDto.ZenithAngle), new Cell(2, typeof(double)) },
+ { nameof(TrajectoryGeoPlanDto.AzimuthGeo), new Cell(3, typeof(double)) },
+ { nameof(TrajectoryGeoPlanDto.AzimuthMagnetic), new Cell(4, typeof(double)) },
+ { nameof(TrajectoryGeoPlanDto.VerticalDepth), new Cell(5, typeof(double)) },
+ { nameof(TrajectoryGeoPlanDto.Radius), new Cell(6, typeof(double)) },
+ { nameof(TrajectoryGeoPlanDto.Comment), new Cell(7, typeof(string)) }
+ };
+}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs
new file mode 100644
index 00000000..5b0935d2
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs
@@ -0,0 +1,52 @@
+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/ProcessMapPlanExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs
new file mode 100644
index 00000000..458877d1
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs
@@ -0,0 +1,33 @@
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using AsbCloudApp.Data;
+using AsbCloudApp.Repositories;
+using AsbCloudApp.Requests;
+using AsbCloudApp.Requests.ExportOptions;
+using AsbCloudApp.Services;
+using AsbCloudInfrastructure.Services.ExcelServices;
+
+namespace AsbCloudInfrastructure.Services.ProcessMapPlan.Export;
+
+public abstract class ProcessMapPlanExportService : ExportExcelService
+ where TDto : ChangeLogAbstract
+{
+ protected readonly IWellService wellService;
+
+ private readonly IChangeLogRepository processMapPlanRepository;
+
+ protected ProcessMapPlanExportService(IChangeLogRepository processMapPlanRepository,
+ IWellService wellService)
+ {
+ this.processMapPlanRepository = processMapPlanRepository;
+ this.wellService = wellService;
+ }
+
+ protected override async Task> GetDtosAsync(WellRelatedExportRequest options, CancellationToken token)
+ {
+ var request = new ProcessMapPlanBaseRequestWithWell(options.IdWell);
+ var dtos = await processMapPlanRepository.Get(request, token);
+ return dtos;
+ }
+}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanReamExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanReamExportService.cs
new file mode 100644
index 00000000..c3dc5d69
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanReamExportService.cs
@@ -0,0 +1,30 @@
+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 ProcessMapPlanReamExportService : ProcessMapPlanExportService
+{
+ protected override ITemplateParameters TemplateParameters => new ProcessMapPlanReamTemplate();
+
+ public ProcessMapPlanReamExportService(
+ IChangeLogRepository processMapPlanRepository,
+ IWellService wellService)
+ : base(processMapPlanRepository, wellService)
+ {
+ }
+
+ 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/ProcessMapPlanDrillingParser.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanDrillingParser.cs
index f4e829fc..fccffe3e 100644
--- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanDrillingParser.cs
+++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanDrillingParser.cs
@@ -2,49 +2,21 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using AsbCloudApp.Data;
using AsbCloudApp.Data.ProcessMaps;
using AsbCloudApp.Repositories;
-using AsbCloudInfrastructure.Services.Parser;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemplates;
namespace AsbCloudInfrastructure.Services.ProcessMapPlan.Parser;
public class ProcessMapPlanDrillingParser : ProcessMapPlanParser
{
- private readonly IEnumerable sections;
-
public ProcessMapPlanDrillingParser(IWellOperationRepository wellOperationRepository)
+ : base(wellOperationRepository)
{
- sections = wellOperationRepository.GetSectionTypes();
}
-
- protected override string SheetName => "План";
- protected override string TemplateFileName => "ProcessMapPlanDrillingTemplate.xlsx";
- private const int ColumnSection = 1;
- private const int ColumnMode = 2;
-
- protected override IDictionary Cells => new Dictionary
- {
- { nameof(ProcessMapPlanDrillingDto.Section), new Cell(ColumnSection, typeof(string)) },
- { nameof(ProcessMapPlanDrillingDto.Mode), new Cell(ColumnMode, 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)) }
- };
+ protected override ITemplateParameters TemplateParameters => new ProcessMapPlanDrillingTemplate();
protected override ProcessMapPlanDrillingDto BuildDto(IDictionary row, int rowNumber)
{
@@ -55,7 +27,10 @@ public class ProcessMapPlanDrillingParser : ProcessMapPlanParser : ParserExcelService
where TDto : ProcessMapPlanBaseDto
{
- protected override int HeaderRowsCount => 2;
-
+ protected readonly IEnumerable sections;
+
+ protected ProcessMapPlanParser(IWellOperationRepository wellOperationRepository)
+ {
+ sections = wellOperationRepository.GetSectionTypes();
+ }
+
public override ParserResultDto Parse(Stream file, WellRelatedParserRequest options)
{
var result = base.Parse(file, options);
diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanReamParser.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanReamParser.cs
index 6ca31714..7bfaa880 100644
--- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanReamParser.cs
+++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanReamParser.cs
@@ -2,42 +2,21 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using AsbCloudApp.Data;
using AsbCloudApp.Data.ProcessMaps;
using AsbCloudApp.Repositories;
-using AsbCloudInfrastructure.Services.Parser;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemplates;
namespace AsbCloudInfrastructure.Services.ProcessMapPlan.Parser;
public class ProcessMapPlanReamParser : ProcessMapPlanParser
{
- private readonly IEnumerable sections;
-
public ProcessMapPlanReamParser(IWellOperationRepository wellOperationRepository)
+ : base(wellOperationRepository)
{
- sections = wellOperationRepository.GetSectionTypes();
}
-
- protected override string SheetName => "План";
- protected override string TemplateFileName => "ProcessMapPlanReamTemplate.xlsx";
- private const int ColumnSection = 1;
-
- protected override IDictionary Cells => new Dictionary
- {
- { nameof(ProcessMapPlanReamDto.Section), new Cell(ColumnSection, typeof(string)) },
- { nameof(ProcessMapPlanReamDto.DepthStart), new Cell(2, typeof(double)) },
- { nameof(ProcessMapPlanReamDto.DepthEnd), new Cell(3, typeof(double)) },
- { nameof(ProcessMapPlanReamDto.Repeats), new Cell(4, typeof(double)) },
- { nameof(ProcessMapPlanReamDto.SpinUpward), new Cell(5, typeof(double)) },
- { nameof(ProcessMapPlanReamDto.SpinUpward), new Cell(6, typeof(double)) },
- { nameof(ProcessMapPlanReamDto.SpeedDownward), new Cell(7, typeof(double)) },
- { nameof(ProcessMapPlanReamDto.SpeedUpward), new Cell(8, typeof(double)) },
- { nameof(ProcessMapPlanReamDto.SetpointDrag), new Cell(9, typeof(double)) },
- { nameof(ProcessMapPlanReamDto.SetpointTight), new Cell(10, typeof(double)) },
- { nameof(ProcessMapPlanReamDto.Pressure), new Cell(11, typeof(double)) },
- { nameof(ProcessMapPlanReamDto.Torque), new Cell(12, typeof(double)) },
- };
+ protected override ITemplateParameters TemplateParameters => new ProcessMapPlanReamTemplate();
protected override ProcessMapPlanReamDto BuildDto(IDictionary row, int rowNumber)
{
@@ -48,7 +27,9 @@ public class ProcessMapPlanReamParser : ProcessMapPlanParser : ExportExcelService
+ where TDto : TrajectoryGeoDto
{
- public abstract class TrajectoryExportService where T : TrajectoryGeoDto
- {
- private readonly IWellService wellService;
+ protected readonly IWellService wellService;
- private readonly ITrajectoryRepository trajectoryRepository;
- public abstract string templateFileName { get; }
- public abstract string usingTemplateFile { get; }
- public abstract string sheetName { get; }
- public abstract int headerRowsCount { get; }
+ private readonly ITrajectoryRepository trajectoryRepository;
- public TrajectoryExportService(IWellService wellService, ITrajectoryRepository trajectoryRepository)
- {
- this.wellService = wellService;
- this.trajectoryRepository = trajectoryRepository;
- }
+ protected TrajectoryExportService(IWellService wellService, ITrajectoryRepository trajectoryRepository)
+ {
+ this.wellService = wellService;
+ this.trajectoryRepository = trajectoryRepository;
+ }
- protected abstract void AddCoordinatesToRow(IXLRow row, T trajectory);
-
- public async Task ExportAsync(int idWell, CancellationToken token)
- {
- var trajectorys = await trajectoryRepository.GetAsync(idWell, token);
- return MakeExelFileStream(trajectorys);
- }
-
- public async Task GetFileNameAsync(int idWell, CancellationToken token)
- {
- var caption = await wellService.GetWellCaptionByIdAsync(idWell, token);
- return string.Format("{0}_{1}", caption, templateFileName);
- }
-
- public Stream GetTemplateFile()
- {
- var stream = System.Reflection.Assembly.GetExecutingAssembly()
- .GetManifestResourceStream($"{usingTemplateFile}.{templateFileName}");
- if (stream is null)
- throw new Exception($"Область {usingTemplateFile} не содержит файла с названием {templateFileName}");
- return stream;
- }
-
- private Stream MakeExelFileStream(IEnumerable trajectories)
- {
- using Stream ecxelTemplateStream = GetTemplateFile();
- using var workbook = new XLWorkbook(ecxelTemplateStream);
- AddTrajecoryToWorkbook(workbook, trajectories);
- MemoryStream memoryStream = new MemoryStream();
- workbook.SaveAs(memoryStream, new SaveOptions { });
- memoryStream.Seek(0, SeekOrigin.Begin);
- return memoryStream;
- }
-
- private void AddTrajecoryToWorkbook(XLWorkbook workbook, IEnumerable trajectories)
- {
- if (trajectories.Any())
- {
- var sheet = workbook.GetWorksheet(sheetName);
- AddTrajecoryToSheet(sheet, trajectories);
- }
- }
-
- private void AddTrajecoryToSheet(IXLWorksheet sheet, IEnumerable trajectories)
- {
- var rowList = trajectories.ToList();
- for (int i = 0; i < rowList.Count; i++)
- {
- var row = sheet.Row(1 + i + headerRowsCount);
- AddCoordinatesToRow(row, rowList[i]);
- }
- }
- }
-}
+ protected override Task> GetDtosAsync(WellRelatedExportRequest options, CancellationToken token) =>
+ trajectoryRepository.GetAsync(options.IdWell, token);
+}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactManualExportService.cs b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactManualExportService.cs
index 2662d62a..40b7d1c8 100644
--- a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactManualExportService.cs
+++ b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactManualExportService.cs
@@ -1,35 +1,28 @@
-using AsbCloudApp.Data.Trajectory;
+using System.Threading;
+using System.Threading.Tasks;
+using AsbCloudApp.Data.Trajectory;
using AsbCloudApp.Repositories;
+using AsbCloudApp.Requests.ExportOptions;
using AsbCloudApp.Services;
-using ClosedXML.Excel;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates.TrajectoryTemplates;
-namespace AsbCloudInfrastructure.Services.Trajectory.Export
+namespace AsbCloudInfrastructure.Services.Trajectory.Export;
+
+public class TrajectoryFactManualExportService : TrajectoryExportService
{
+ public TrajectoryFactManualExportService(IWellService wellService,
+ ITrajectoryEditableRepository trajectoryRepository)
+ : base(wellService, trajectoryRepository)
+ {
+ }
- public class TrajectoryFactManualExportService : TrajectoryExportService
- {
- public override string templateFileName { get; } = "TrajectoryFactManualTemplate.xlsx";
- public override string usingTemplateFile { get; } = "AsbCloudInfrastructure.Services.Trajectory.Templates";
- public override string sheetName { get; } = "Фактическая траектория";
- public override int headerRowsCount { get; } = 2;
-
- public TrajectoryFactManualExportService(
- IWellService wellService,
- ITrajectoryEditableRepository factTrajectoryService)
- : base(wellService, factTrajectoryService)
- {
-
- }
-
- protected override void AddCoordinatesToRow(IXLRow row, TrajectoryGeoFactDto trajectory)
- {
- row.Cell(1).SetCellValue(trajectory.WellboreDepth);
- row.Cell(2).SetCellValue(trajectory.ZenithAngle);
- row.Cell(3).SetCellValue(trajectory.AzimuthGeo);
- row.Cell(4).SetCellValue(trajectory.AzimuthMagnetic);
- row.Cell(5).SetCellValue(trajectory.VerticalDepth);
- row.Cell(6).SetCellValue(trajectory.Comment);
- }
- }
-}
+ protected override ITemplateParameters TemplateParameters => new TrajectoryFactManualTemplate();
+
+ 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/Trajectory/Export/TrajectoryFactNnbExportService.cs b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactNnbExportService.cs
index c32e6cff..3b3206f5 100644
--- a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactNnbExportService.cs
+++ b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactNnbExportService.cs
@@ -1,35 +1,28 @@
-using AsbCloudApp.Data.Trajectory;
+using System.Threading;
+using System.Threading.Tasks;
+using AsbCloudApp.Data.Trajectory;
using AsbCloudApp.Repositories;
+using AsbCloudApp.Requests.ExportOptions;
using AsbCloudApp.Services;
-using ClosedXML.Excel;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates.TrajectoryTemplates;
-namespace AsbCloudInfrastructure.Services.Trajectory.Export
+namespace AsbCloudInfrastructure.Services.Trajectory.Export;
+
+public class TrajectoryFactNnbExportService : TrajectoryExportService
{
+ public TrajectoryFactNnbExportService(IWellService wellService,
+ ITrajectoryNnbRepository trajectoryRepository)
+ : base(wellService, trajectoryRepository)
+ {
+ }
- public class TrajectoryFactNnbExportService : TrajectoryExportService
- {
- public override string templateFileName { get; } = "TrajectoryFactNnbTemplate.xlsx";
- public override string usingTemplateFile { get; } = "AsbCloudInfrastructure.Services.Trajectory.Templates";
- public override string sheetName { get; } = "Фактическая ннб-траектория";
- public override int headerRowsCount { get; } = 2;
+ protected override ITemplateParameters TemplateParameters => new TrajectoryFactNnbTemplate();
- public TrajectoryFactNnbExportService(
- IWellService wellService,
- ITrajectoryNnbRepository nnbTrajectoryService)
- : base(wellService, nnbTrajectoryService)
- {
-
- }
-
- protected override void AddCoordinatesToRow(IXLRow row, TrajectoryGeoFactDto trajectory)
- {
- row.Cell(1).SetCellValue(trajectory.WellboreDepth);
- row.Cell(2).SetCellValue(trajectory.ZenithAngle);
- row.Cell(3).SetCellValue(trajectory.AzimuthGeo);
- row.Cell(4).SetCellValue(trajectory.AzimuthMagnetic);
- row.Cell(5).SetCellValue(trajectory.VerticalDepth);
- row.Cell(6).SetCellValue(trajectory.Comment);
- }
- }
-}
+ 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/Trajectory/Export/TrajectoryPlanExportService.cs b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryPlanExportService.cs
index 403ceccc..37bce068 100644
--- a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryPlanExportService.cs
+++ b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryPlanExportService.cs
@@ -1,38 +1,28 @@
-using AsbCloudApp.Data.Trajectory;
+using System.Threading;
+using System.Threading.Tasks;
+using AsbCloudApp.Data.Trajectory;
using AsbCloudApp.Repositories;
+using AsbCloudApp.Requests.ExportOptions;
using AsbCloudApp.Services;
-using ClosedXML.Excel;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates.TrajectoryTemplates;
-namespace AsbCloudInfrastructure.Services.Trajectory.Export
+namespace AsbCloudInfrastructure.Services.Trajectory.Export;
+
+public class TrajectoryPlanExportService : TrajectoryExportService
{
- public class TrajectoryPlanExportService : TrajectoryExportService
- {
- /*
- * password for PlannedTrajectoryTemplate.xlsx is Drill2022
- */
- public override string templateFileName { get; } = "TrajectoryPlanTemplate.xlsx";
- public override string usingTemplateFile { get; } = "AsbCloudInfrastructure.Services.Trajectory.Templates";
- public override string sheetName { get; } = "Плановая траектория";
- public override int headerRowsCount { get; } = 2;
+ public TrajectoryPlanExportService(IWellService wellService,
+ ITrajectoryEditableRepository trajectoryRepository)
+ : base(wellService, trajectoryRepository)
+ {
+ }
- public TrajectoryPlanExportService(
- IWellService wellService,
- ITrajectoryEditableRepository trajectoryPlanService)
- : base(wellService, trajectoryPlanService)
- {
- }
+ protected override ITemplateParameters TemplateParameters => new TrajectoryPlanTemplate();
- protected override void AddCoordinatesToRow(IXLRow row, TrajectoryGeoPlanDto trajectory)
- {
- row.Cell(1).SetCellValue(trajectory.WellboreDepth);
- row.Cell(2).SetCellValue(trajectory.ZenithAngle);
- row.Cell(3).SetCellValue(trajectory.AzimuthGeo);
- row.Cell(4).SetCellValue(trajectory.AzimuthMagnetic);
- row.Cell(5).SetCellValue(trajectory.VerticalDepth);
- row.Cell(6).SetCellValue(trajectory.Radius);
- row.Cell(7).SetCellValue(trajectory.Comment);
- }
- }
-
-}
+ 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/Trajectory/Parser/TrajectoryFactManualParser.cs b/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryFactManualParser.cs
index cf4b7118..19b2ebed 100644
--- a/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryFactManualParser.cs
+++ b/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryFactManualParser.cs
@@ -1,22 +1,10 @@
-using System.Collections.Generic;
-using AsbCloudApp.Data.Trajectory;
-using AsbCloudInfrastructure.Services.Parser;
+using AsbCloudApp.Data.Trajectory;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates.TrajectoryTemplates;
namespace AsbCloudInfrastructure.Services.Trajectory.Parser;
public class TrajectoryFactManualParser : TrajectoryParser
{
- protected override string SheetName => "Фактическая траектория";
-
- protected override string TemplateFileName => "TrajectoryFactManualTemplate.xlsx";
-
- protected override IDictionary Cells => new Dictionary
- {
- { nameof(TrajectoryGeoFactDto.WellboreDepth), new Cell(1, typeof(double)) },
- { nameof(TrajectoryGeoFactDto.ZenithAngle), new Cell(2, typeof(double)) },
- { nameof(TrajectoryGeoFactDto.AzimuthGeo), new Cell(3, typeof(double)) },
- { nameof(TrajectoryGeoFactDto.AzimuthMagnetic), new Cell(4, typeof(double)) },
- { nameof(TrajectoryGeoFactDto.VerticalDepth), new Cell(5, typeof(double)) },
- { nameof(TrajectoryGeoFactDto.Comment), new Cell(6, typeof(string)) }
- };
+ protected override ITemplateParameters TemplateParameters => new TrajectoryFactManualTemplate();
}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryParser.cs b/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryParser.cs
index ce579fa6..f2aca93d 100644
--- a/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryParser.cs
+++ b/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryParser.cs
@@ -2,15 +2,13 @@ using System.IO;
using AsbCloudApp.Data;
using AsbCloudApp.Data.Trajectory;
using AsbCloudApp.Requests.ParserOptions;
-using AsbCloudInfrastructure.Services.Parser;
+using AsbCloudInfrastructure.Services.ExcelServices;
namespace AsbCloudInfrastructure.Services.Trajectory.Parser;
public abstract class TrajectoryParser : ParserExcelService
where TDto : TrajectoryGeoDto
{
- protected override int HeaderRowsCount => 2;
-
public override ParserResultDto Parse(Stream file, WellRelatedParserRequest options)
{
var result = base.Parse(file, options);
diff --git a/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryPlanParser.cs b/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryPlanParser.cs
index 568bfa35..d99f0b9f 100644
--- a/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryPlanParser.cs
+++ b/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryPlanParser.cs
@@ -1,23 +1,10 @@
-using System.Collections.Generic;
-using AsbCloudApp.Data.Trajectory;
-using AsbCloudInfrastructure.Services.Parser;
+using AsbCloudApp.Data.Trajectory;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates.TrajectoryTemplates;
namespace AsbCloudInfrastructure.Services.Trajectory.Parser;
public class TrajectoryPlanParser : TrajectoryParser
{
- protected override string SheetName => "Плановая траектория";
-
- protected override string TemplateFileName => "TrajectoryPlanTemplate.xlsx";
-
- protected override IDictionary Cells => new Dictionary
- {
- { nameof(TrajectoryGeoPlanDto.WellboreDepth), new Cell(1, typeof(double)) },
- { nameof(TrajectoryGeoPlanDto.ZenithAngle), new Cell(2, typeof(double)) },
- { nameof(TrajectoryGeoPlanDto.AzimuthGeo), new Cell(3, typeof(double)) },
- { nameof(TrajectoryGeoPlanDto.AzimuthMagnetic), new Cell(4, typeof(double)) },
- { nameof(TrajectoryGeoPlanDto.VerticalDepth), new Cell(5, typeof(double)) },
- { nameof(TrajectoryGeoPlanDto.Radius), new Cell(6, typeof(double)) },
- { nameof(TrajectoryGeoPlanDto.Comment), new Cell(7, typeof(string)) }
- };
+ protected override ITemplateParameters TemplateParameters => new TrajectoryPlanTemplate();
}
\ No newline at end of file
diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs
index 6f21bd0b..8efca7be 100644
--- a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs
+++ b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs
@@ -31,7 +31,6 @@ public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest
DepthEnd = 1.5,
IdMode = 1,
- Mode = "Ротор",
AxialLoadPlan = 2.718281,
AxialLoadLimitMax = 3.1415926,
DeltaPressurePlan = 4,
@@ -117,7 +116,6 @@ public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest
nameof(ProcessMapPlanDrillingDto.IdState),
nameof(ProcessMapPlanDrillingDto.Author),
nameof(ProcessMapPlanDrillingDto.Creation),
- nameof(ProcessMapPlanDrillingDto.Mode),
nameof(ProcessMapPlanDrillingDto.Section)
};
MatchHelper.Match(expected, actual, excludeProps);
diff --git a/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryExportTest.cs b/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryExportTest.cs
index 79b63ac6..34d2077c 100644
--- a/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryExportTest.cs
+++ b/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryExportTest.cs
@@ -6,12 +6,15 @@ using NSubstitute;
using System;
using System.Threading;
using System.Threading.Tasks;
+using AsbCloudApp.Requests.ExportOptions;
using Xunit;
namespace AsbCloudWebApi.Tests.Services.Trajectory
{
public class TrajectoryExportTest
{
+ private const int idWell = 4;
+
private IWellService wellService;
private readonly ITrajectoryEditableRepository trajectoryPlanRepository;
private readonly TrajectoryPlanExportService trajectoryPlanExportService;
@@ -22,8 +25,6 @@ namespace AsbCloudWebApi.Tests.Services.Trajectory
private readonly ITrajectoryNnbRepository trajectoryFactNnbRepository;
private readonly TrajectoryFactNnbExportService trajectoryFactNnbExportService;
- private readonly int idWell = 4;
-
private readonly TrajectoryGeoPlanDto[] trajectoryPlanRows = new TrajectoryGeoPlanDto[2] {
new TrajectoryGeoPlanDto() {
Id = 1,
@@ -80,6 +81,8 @@ namespace AsbCloudWebApi.Tests.Services.Trajectory
},
};
+ private readonly WellRelatedExportRequest exportOptions = new(idWell);
+
public TrajectoryExportTest()
{
wellService = Substitute.For();
@@ -98,10 +101,9 @@ namespace AsbCloudWebApi.Tests.Services.Trajectory
{
trajectoryPlanRepository.GetAsync(idWell, CancellationToken.None)
.Returns(trajectoryPlanRows);
-
- var stream = await trajectoryPlanExportService.ExportAsync(idWell, CancellationToken.None);
- Assert.True(stream.Length > 0);
-
+
+ var stream = await trajectoryPlanExportService.ExportAsync(exportOptions, CancellationToken.None);
+ Assert.True(stream.File.Length > 0);
}
[Fact]
@@ -109,9 +111,9 @@ namespace AsbCloudWebApi.Tests.Services.Trajectory
{
trajectoryFactManualReposirory.GetAsync(idWell, CancellationToken.None)
.Returns(trajectoryFactRows);
-
- var stream = await trajectoryFactManualExportService.ExportAsync(idWell, CancellationToken.None);
- Assert.True(stream.Length > 0);
+
+ var stream = await trajectoryFactManualExportService.ExportAsync(exportOptions, CancellationToken.None);
+ Assert.True(stream.File.Length > 0);
}
[Fact]
@@ -119,9 +121,9 @@ namespace AsbCloudWebApi.Tests.Services.Trajectory
{
trajectoryFactNnbRepository.GetAsync(idWell, CancellationToken.None)
.Returns(trajectoryFactRows);
-
- var stream = await trajectoryFactNnbExportService.ExportAsync(idWell, CancellationToken.None);
- Assert.True(stream.Length > 0);
+
+ var stream = await trajectoryFactNnbExportService.ExportAsync(exportOptions, CancellationToken.None);
+ Assert.True(stream.File.Length > 0);
}
}
}
diff --git a/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryParserTest.cs b/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryParserTest.cs
index 8b9bd3e9..1acd0ad7 100644
--- a/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryParserTest.cs
+++ b/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryParserTest.cs
@@ -1,7 +1,6 @@
using System.Linq;
using AsbCloudApp.Data.Trajectory;
using AsbCloudApp.Requests.ParserOptions;
-using AsbCloudInfrastructure.Services.Parser;
using AsbCloudInfrastructure.Services.Trajectory.Parser;
using Xunit;
diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs
index 49513f2c..a7d1763e 100644
--- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs
+++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs
@@ -13,9 +13,9 @@ using AsbCloudApp.Services;
using System.Linq;
using AsbCloudApp.Data;
using AsbCloudApp.Requests.ParserOptions;
-using AsbCloudInfrastructure.Services.Parser;
using AsbCloudApp.Data.ProcessMaps;
using System.ComponentModel.DataAnnotations;
+using AsbCloudApp.Requests.ExportOptions;
namespace AsbCloudWebApi.Controllers.ProcessMaps;
@@ -30,15 +30,18 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
{
private readonly IChangeLogRepository repository;
private readonly IWellService wellService;
- private readonly ParserExcelService parserService;
+ private readonly IParserService parserService;
+ private readonly IExportService processMapPlanExportService;
protected ProcessMapPlanBaseController(IChangeLogRepository repository,
IWellService wellService,
- ParserExcelService parserService)
+ IParserService parserService,
+ IExportService processMapPlanExportService)
{
this.repository = repository;
this.wellService = wellService;
this.parserService = parserService;
+ this.processMapPlanExportService = processMapPlanExportService;
}
protected abstract string TemplateFileName { get; }
@@ -266,6 +269,22 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
throw new ForbidException("Нет доступа к скважине");
return idUser;
}
+
+ ///
+ /// Формируем excel файл с текущими строками РТК
+ ///
+ /// id скважины
+ ///
+ /// Запрашиваемый файл
+ [HttpGet("export")]
+ [ProducesResponseType(typeof(PhysicalFileResult), (int)System.Net.HttpStatusCode.OK, "application/octet-stream")]
+ [ProducesResponseType(StatusCodes.Status204NoContent)]
+ public async Task ExportAsync([FromRoute] int idWell, CancellationToken token)
+ {
+ var exportOptions = new WellRelatedExportRequest(idWell);
+ var (fileName, file) = await processMapPlanExportService.ExportAsync(exportOptions, token);
+ return File(file, "application/octet-stream", fileName);
+ }
///
/// returns user id or throw
diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanDrillingController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanDrillingController.cs
index 5c038496..241be301 100644
--- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanDrillingController.cs
+++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanDrillingController.cs
@@ -2,6 +2,7 @@
using AsbCloudApp.Repositories;
using AsbCloudApp.Requests;
using AsbCloudApp.Services;
+using AsbCloudInfrastructure.Services.ProcessMapPlan.Export;
using AsbCloudInfrastructure.Services.ProcessMapPlan.Parser;
namespace AsbCloudWebApi.Controllers.ProcessMaps;
@@ -13,8 +14,9 @@ public class ProcessMapPlanDrillingController : ProcessMapPlanBaseController repository,
IWellService wellService,
- ProcessMapPlanDrillingParser parserService)
- : base(repository, wellService, parserService)
+ ProcessMapPlanDrillingParser parserService,
+ ProcessMapPlanDrillingExportService processMapPlanExportService)
+ : base(repository, wellService, parserService, processMapPlanExportService)
{
}
diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanReamController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanReamController.cs
index b785d480..9c103f06 100644
--- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanReamController.cs
+++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanReamController.cs
@@ -2,6 +2,7 @@
using AsbCloudApp.Repositories;
using AsbCloudApp.Requests;
using AsbCloudApp.Services;
+using AsbCloudInfrastructure.Services.ProcessMapPlan.Export;
using AsbCloudInfrastructure.Services.ProcessMapPlan.Parser;
namespace AsbCloudWebApi.Controllers.ProcessMaps;
@@ -13,8 +14,9 @@ public class ProcessMapPlanReamController : ProcessMapPlanBaseController repository,
IWellService wellService,
- ProcessMapPlanReamParser parserService)
- : base(repository, wellService, parserService)
+ ProcessMapPlanReamParser parserService,
+ ProcessMapPlanReamExportService processMapPlanExportService)
+ : base(repository, wellService, parserService, processMapPlanExportService)
{
}
diff --git a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryController.cs b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryController.cs
index 789b9252..a4521ef8 100644
--- a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryController.cs
+++ b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryController.cs
@@ -1,14 +1,14 @@
using AsbCloudApp.Data.Trajectory;
using AsbCloudApp.Repositories;
-using AsbCloudApp.Requests;
using AsbCloudApp.Services;
-using AsbCloudInfrastructure.Services.Trajectory.Export;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
+using AsbCloudApp.Requests.ExportOptions;
+using AsbCloudInfrastructure.Services.Trajectory.Export;
namespace AsbCloudWebApi.Controllers.Trajectory
{
@@ -21,13 +21,13 @@ namespace AsbCloudWebApi.Controllers.Trajectory
public abstract class TrajectoryController : ControllerBase
where TDto : TrajectoryGeoDto
{
- protected abstract string fileName { get; }
+ protected abstract string TemplateFileName { get; }
private readonly IWellService wellService;
private readonly TrajectoryExportService trajectoryExportService;
private readonly ITrajectoryRepository trajectoryRepository;
- public TrajectoryController(IWellService wellService,
+ protected TrajectoryController(IWellService wellService,
TrajectoryExportService trajectoryExportService,
ITrajectoryRepository trajectoryRepository)
{
@@ -50,9 +50,10 @@ namespace AsbCloudWebApi.Controllers.Trajectory
if (!await CanUserAccessToWellAsync(idWell,
token).ConfigureAwait(false))
return Forbid();
- var stream = await trajectoryExportService.ExportAsync(idWell, token);
- var fileName = await trajectoryExportService.GetFileNameAsync(idWell, token);
- return File(stream, "application/octet-stream", fileName);
+
+ var exportOptions = new WellRelatedExportRequest(idWell);
+ var (fileName, file) = await trajectoryExportService.ExportAsync(exportOptions, token);
+ return File(file, "application/octet-stream", fileName);
}
///
diff --git a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs
index 814bcdcf..56a08c1e 100644
--- a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs
+++ b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs
@@ -1,8 +1,6 @@
-using System;
-using AsbCloudApp.Data.Trajectory;
+using AsbCloudApp.Data.Trajectory;
using AsbCloudApp.Repositories;
using AsbCloudApp.Services;
-using AsbCloudInfrastructure.Services.Trajectory.Export;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
@@ -12,8 +10,7 @@ using System.Threading;
using System.Threading.Tasks;
using AsbCloudApp.Data;
using AsbCloudApp.Requests.ParserOptions;
-using AsbCloudInfrastructure.Services.Parser;
-using AsbCloudInfrastructure.Services.Trajectory.Parser;
+using AsbCloudInfrastructure.Services.Trajectory.Export;
namespace AsbCloudWebApi.Controllers.Trajectory
{
@@ -26,11 +23,11 @@ namespace AsbCloudWebApi.Controllers.Trajectory
public abstract class TrajectoryEditableController : TrajectoryController
where TDto : TrajectoryGeoDto
{
- private readonly TrajectoryParser parserService;
+ private readonly IParserService parserService;
private readonly ITrajectoryEditableRepository trajectoryRepository;
protected TrajectoryEditableController(IWellService wellService,
- TrajectoryParser parserService,
+ IParserService parserService,
TrajectoryExportService trajectoryExportService,
ITrajectoryEditableRepository trajectoryRepository)
: base(wellService, trajectoryExportService, trajectoryRepository)
@@ -50,7 +47,7 @@ namespace AsbCloudWebApi.Controllers.Trajectory
public IActionResult GetTemplate()
{
var stream = parserService.GetTemplateFile();
- return File(stream, "application/octet-stream", fileName);
+ return File(stream, "application/octet-stream", TemplateFileName);
}
///
diff --git a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryFactManualController.cs b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryFactManualController.cs
index aa1a60dc..d0bd33b5 100644
--- a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryFactManualController.cs
+++ b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryFactManualController.cs
@@ -14,7 +14,7 @@ namespace AsbCloudWebApi.Controllers.Trajectory;
[Route("api/well/{idWell}/[controller]")]
public class TrajectoryFactManualController : TrajectoryEditableController
{
- protected override string fileName => "ЕЦП_шаблон_файла_фактическая_траектория.xlsx";
+ protected override string TemplateFileName => "ЕЦП_шаблон_файла_фактическая_траектория.xlsx";
public TrajectoryFactManualController(IWellService wellService,
TrajectoryFactManualExportService trajectoryExportService,
diff --git a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryFactNnbController.cs b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryFactNnbController.cs
index 4e2b4661..6dd84898 100644
--- a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryFactNnbController.cs
+++ b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryFactNnbController.cs
@@ -15,7 +15,7 @@ namespace AsbCloudWebApi.Controllers.Trajectory;
[Route("api/well/{idWell}/[controller]")]
public class TrajectoryFactNnbController : TrajectoryController
{
- protected override string fileName => "ЕЦП_шаблон_файла_фактическая_ннб_траектория.xlsx";
+ protected override string TemplateFileName => "ЕЦП_шаблон_файла_фактическая_ннб_траектория.xlsx";
public TrajectoryFactNnbController(
ITrajectoryNnbRepository trajectoryNnbRepository,
TrajectoryFactNnbExportService trajectoryExportService,
diff --git a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryPlanController.cs b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryPlanController.cs
index bffd7d15..67a54007 100644
--- a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryPlanController.cs
+++ b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryPlanController.cs
@@ -20,7 +20,7 @@ namespace AsbCloudWebApi.Controllers.Trajectory
{
private readonly TrajectoryService trajectoryVisualizationService;
- protected override string fileName => "ЕЦП_шаблон_файла_плановая_траектория.xlsx";
+ protected override string TemplateFileName => "ЕЦП_шаблон_файла_плановая_траектория.xlsx";
public TrajectoryPlanController(IWellService wellService,
TrajectoryPlanParser parserService,
diff --git a/AsbCloudWebApi/Extensions.cs b/AsbCloudWebApi/Extensions.cs
index 26cea7ba..a19dcc6e 100644
--- a/AsbCloudWebApi/Extensions.cs
+++ b/AsbCloudWebApi/Extensions.cs
@@ -7,10 +7,7 @@ using System.IO;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Security.Claims;
-using AsbCloudApp.Data;
using AsbCloudApp.Exceptions;
-using AsbCloudApp.Requests.ParserOptions;
-using AsbCloudInfrastructure.Services.Parser;
using Microsoft.AspNetCore.Http;
namespace Microsoft.AspNetCore.Mvc;