diff --git a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs
index 67d6c74b..78567c2d 100644
--- a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs
+++ b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs
@@ -1,4 +1,5 @@
-using System.ComponentModel.DataAnnotations;
+using System;
+using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.ProcessMaps;
@@ -16,7 +17,12 @@ public class ProcessMapPlanDrillingDto : ProcessMapPlanBaseDto
///
/// Название режима бурения
///
- public string? Mode { get; set; }
+ public string Mode => IdMode switch
+ {
+ 1 => "Ротор",
+ 2 => "Слайд",
+ _ => throw new ArgumentOutOfRangeException()
+ };
///
/// Осевая нагрузка, т план
diff --git a/AsbCloudApp/Services/IProcessMapPlanExportService.cs b/AsbCloudApp/Services/IProcessMapPlanExportService.cs
new file mode 100644
index 00000000..6c226a55
--- /dev/null
+++ b/AsbCloudApp/Services/IProcessMapPlanExportService.cs
@@ -0,0 +1,19 @@
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace AsbCloudApp.Services;
+
+///
+/// Экспорт РТК
+///
+public interface IProcessMapPlanExportService
+{
+ ///
+ /// Экспортировать РТК по скважине
+ ///
+ ///
+ ///
+ ///
+ Task<(string FileName, Stream File)> ExportAsync(int idWell, CancellationToken token);
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Services/ITrajectoryExportService.cs b/AsbCloudApp/Services/ITrajectoryExportService.cs
new file mode 100644
index 00000000..610ccf9f
--- /dev/null
+++ b/AsbCloudApp/Services/ITrajectoryExportService.cs
@@ -0,0 +1,19 @@
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace AsbCloudApp.Services;
+
+///
+/// Экспорт траекторий
+///
+public interface ITrajectoryExportService
+{
+ ///
+ /// Экспортировать траектории по скважине
+ ///
+ ///
+ ///
+ ///
+ Task<(string FileName, Stream File)> ExportAsync(int idWell, CancellationToken token);
+}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs
index 2111356b..b1e9f17e 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();
@@ -294,7 +292,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/ExcelServices/ExportExcelService.cs b/AsbCloudInfrastructure/Services/ExcelServices/ExportExcelService.cs
new file mode 100644
index 00000000..9e189411
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ExcelServices/ExportExcelService.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using AsbCloudInfrastructure.Services.ExcelServices.Templates;
+using ClosedXML.Excel;
+using Mapster;
+
+namespace AsbCloudInfrastructure.Services.ExcelServices;
+
+public abstract class ExportExcelService
+{
+ protected abstract ITemplateParameters TemplateParameters { get; }
+
+ protected Stream Export(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/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanReamTemplate.cs b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanReamTemplate.cs
index 4df80a7e..5c454d7b 100644
--- a/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanReamTemplate.cs
+++ b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanReamTemplate.cs
@@ -7,7 +7,7 @@ public class ProcessMapPlanReamTemplate : ITemplateParameters
{
public string SheetName => "План";
- public int HeaderRowsCount => 2;
+ public int HeaderRowsCount => 1;
public string FileName => "ProcessMapPlanReamTemplate.xlsx";
diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs
new file mode 100644
index 00000000..671a34ee
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs
@@ -0,0 +1,29 @@
+using System.Threading;
+using System.Threading.Tasks;
+using AsbCloudApp.Data.ProcessMaps;
+using AsbCloudApp.Repositories;
+using AsbCloudApp.Requests;
+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(int idWell, CancellationToken token)
+ {
+ var caption = await wellService.GetWellCaptionByIdAsync(idWell, token);
+
+ return $"{caption}_РТК_План_бурение.xlsx";
+ }
+}
\ 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..60491ca8
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs
@@ -0,0 +1,38 @@
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+using AsbCloudApp.Data;
+using AsbCloudApp.Repositories;
+using AsbCloudApp.Requests;
+using AsbCloudApp.Services;
+using AsbCloudInfrastructure.Services.ExcelServices;
+
+namespace AsbCloudInfrastructure.Services.ProcessMapPlan.Export;
+
+public abstract class ProcessMapPlanExportService : ExportExcelService,
+ IProcessMapPlanExportService
+ where TDto : ChangeLogAbstract
+{
+ protected readonly IWellService wellService;
+
+ private readonly IChangeLogRepository processMapPlanRepository;
+
+ protected ProcessMapPlanExportService(IChangeLogRepository processMapPlanRepository,
+ IWellService wellService)
+ {
+ this.processMapPlanRepository = processMapPlanRepository;
+ this.wellService = wellService;
+ }
+
+ public async Task<(string FileName, Stream File)> ExportAsync(int idWell, CancellationToken token)
+ {
+ var request = new ProcessMapPlanBaseRequestWithWell(idWell);
+ var dtos = await processMapPlanRepository.Get(request, token);
+
+ var fileName = await BuildFileNameAsync(idWell, token);
+ var file = Export(dtos);
+ return (fileName, file);
+ }
+
+ protected abstract Task BuildFileNameAsync(int idWell, CancellationToken token);
+}
\ 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..b2452172
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanReamExportService.cs
@@ -0,0 +1,29 @@
+using System.Threading;
+using System.Threading.Tasks;
+using AsbCloudApp.Data.ProcessMaps;
+using AsbCloudApp.Repositories;
+using AsbCloudApp.Requests;
+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(int idWell, CancellationToken token)
+ {
+ var caption = await wellService.GetWellCaptionByIdAsync(idWell, token);
+
+ return $"{caption}_РТК_План_проработка.xlsx";
+ }
+}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryExportService.cs b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryExportService.cs
index 6ac2bf15..489b15f4 100644
--- a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryExportService.cs
+++ b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryExportService.cs
@@ -1,83 +1,35 @@
using AsbCloudApp.Data.Trajectory;
using AsbCloudApp.Repositories;
using AsbCloudApp.Services;
-using ClosedXML.Excel;
-using System;
-using System.Collections.Generic;
using System.IO;
-using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using AsbCloudInfrastructure.Services.ExcelServices;
-namespace AsbCloudInfrastructure.Services.Trajectory.Export
+namespace AsbCloudInfrastructure.Services.Trajectory.Export;
+
+public abstract class TrajectoryExportService : ExportExcelService,
+ ITrajectoryExportService
+ 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<(string FileName, Stream File)> ExportAsync(int idWell, CancellationToken token)
+ {
+ var dtos = await trajectoryRepository.GetAsync(idWell, token);
- public async Task ExportAsync(int idWell, CancellationToken token)
- {
- var trajectorys = await trajectoryRepository.GetAsync(idWell, token);
- return MakeExelFileStream(trajectorys);
- }
+ var fileName = await BuildFileNameAsync(idWell, token);
+ var file = Export(dtos);
+ return (fileName, file);
+ }
- 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 abstract Task BuildFileNameAsync(int idWell, CancellationToken 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..f1ccbc89 100644
--- a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactManualExportService.cs
+++ b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactManualExportService.cs
@@ -1,35 +1,27 @@
-using AsbCloudApp.Data.Trajectory;
+using System.Threading;
+using System.Threading.Tasks;
+using AsbCloudApp.Data.Trajectory;
using AsbCloudApp.Repositories;
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;
+ protected override ITemplateParameters TemplateParameters => new TrajectoryFactManualTemplate();
- 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 async Task BuildFileNameAsync(int idWell, CancellationToken token)
+ {
+ var caption = await wellService.GetWellCaptionByIdAsync(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..2bab0783 100644
--- a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactNnbExportService.cs
+++ b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactNnbExportService.cs
@@ -1,35 +1,27 @@
-using AsbCloudApp.Data.Trajectory;
+using System.Threading;
+using System.Threading.Tasks;
+using AsbCloudApp.Data.Trajectory;
using AsbCloudApp.Repositories;
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(int idWell, CancellationToken token)
+ {
+ var caption = await wellService.GetWellCaptionByIdAsync(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..5a931939 100644
--- a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryPlanExportService.cs
+++ b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryPlanExportService.cs
@@ -1,38 +1,27 @@
-using AsbCloudApp.Data.Trajectory;
+using System.Threading;
+using System.Threading.Tasks;
+using AsbCloudApp.Data.Trajectory;
using AsbCloudApp.Repositories;
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 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 ITemplateParameters TemplateParameters => new TrajectoryPlanTemplate();
+
+ protected override async Task BuildFileNameAsync(int idWell, CancellationToken token)
+ {
+ var caption = await wellService.GetWellCaptionByIdAsync(idWell, token);
+ return $"{caption}_Плановая_Траектория.xlsx";
+ }
+}
\ No newline at end of file
diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs
index 3a5815e9..40a0c3c1 100644
--- a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs
+++ b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs
@@ -29,7 +29,6 @@ public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest
DepthEnd = 1.5,
IdMode = 1,
- Mode = "Ротор",
AxialLoadPlan = 2.718281,
AxialLoadLimitMax = 3.1415926,
DeltaPressurePlan = 4,
@@ -115,7 +114,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..1c026185 100644
--- a/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryExportTest.cs
+++ b/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryExportTest.cs
@@ -100,7 +100,7 @@ namespace AsbCloudWebApi.Tests.Services.Trajectory
.Returns(trajectoryPlanRows);
var stream = await trajectoryPlanExportService.ExportAsync(idWell, CancellationToken.None);
- Assert.True(stream.Length > 0);
+ Assert.True(stream.File.Length > 0);
}
@@ -111,7 +111,7 @@ namespace AsbCloudWebApi.Tests.Services.Trajectory
.Returns(trajectoryFactRows);
var stream = await trajectoryFactManualExportService.ExportAsync(idWell, CancellationToken.None);
- Assert.True(stream.Length > 0);
+ Assert.True(stream.File.Length > 0);
}
[Fact]
@@ -121,7 +121,7 @@ namespace AsbCloudWebApi.Tests.Services.Trajectory
.Returns(trajectoryFactRows);
var stream = await trajectoryFactNnbExportService.ExportAsync(idWell, CancellationToken.None);
- Assert.True(stream.Length > 0);
+ Assert.True(stream.File.Length > 0);
}
}
}
diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs
index 49513f2c..c3afebb3 100644
--- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs
+++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs
@@ -13,7 +13,6 @@ 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;
@@ -30,15 +29,18 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
{
private readonly IChangeLogRepository repository;
private readonly IWellService wellService;
- private readonly ParserExcelService parserService;
+ private readonly IParserService parserService;
+ private readonly IProcessMapPlanExportService processMapPlanExportService;
protected ProcessMapPlanBaseController(IChangeLogRepository repository,
IWellService wellService,
- ParserExcelService parserService)
+ IParserService parserService,
+ IProcessMapPlanExportService processMapPlanExportService)
{
this.repository = repository;
this.wellService = wellService;
this.parserService = parserService;
+ this.processMapPlanExportService = processMapPlanExportService;
}
protected abstract string TemplateFileName { get; }
@@ -266,6 +268,21 @@ 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 (fileName, file) = await processMapPlanExportService.ExportAsync(idWell, 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..6311d34a 100644
--- a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryController.cs
+++ b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryController.cs
@@ -1,8 +1,6 @@
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;
@@ -21,14 +19,14 @@ 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 ITrajectoryExportService trajectoryExportService;
private readonly ITrajectoryRepository trajectoryRepository;
- public TrajectoryController(IWellService wellService,
- TrajectoryExportService trajectoryExportService,
+ protected TrajectoryController(IWellService wellService,
+ ITrajectoryExportService trajectoryExportService,
ITrajectoryRepository trajectoryRepository)
{
this.trajectoryExportService = trajectoryExportService;
@@ -50,9 +48,9 @@ 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 (fileName, file) = await trajectoryExportService.ExportAsync(idWell, token);
+ return File(file, "application/octet-stream", fileName);
}
///
diff --git a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs
index 814bcdcf..a014e1bc 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,6 @@ using System.Threading;
using System.Threading.Tasks;
using AsbCloudApp.Data;
using AsbCloudApp.Requests.ParserOptions;
-using AsbCloudInfrastructure.Services.Parser;
-using AsbCloudInfrastructure.Services.Trajectory.Parser;
namespace AsbCloudWebApi.Controllers.Trajectory
{
@@ -26,12 +22,12 @@ 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,
- TrajectoryExportService trajectoryExportService,
+ IParserService parserService,
+ ITrajectoryExportService trajectoryExportService,
ITrajectoryEditableRepository trajectoryRepository)
: base(wellService, trajectoryExportService, trajectoryRepository)
{
@@ -50,7 +46,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;