From af2d180d992d1823c40625f86fc0f458e8e7361d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=94?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Thu, 14 Mar 2024 08:00:14 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D1=8B=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Templates/ITemplateParameters.cs | 14 ++++++++ .../ProcessMapPlanDrillingTemplate.cs | 35 +++++++++++++++++++ .../ProcessMapPlanReamTemplate.cs | 29 +++++++++++++++ .../TrajectoryFactManualTemplate.cs | 23 ++++++++++++ .../TrajectoryFactNnbTemplate.cs | 23 ++++++++++++ .../TrajectoryPlanTemplate.cs | 21 +++++++++++ 6 files changed, 145 insertions(+) create mode 100644 AsbCloudInfrastructure/Services/ExcelServices/Templates/ITemplateParameters.cs create mode 100644 AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanDrillingTemplate.cs create mode 100644 AsbCloudInfrastructure/Services/ExcelServices/Templates/ProcessMapPlanTemplates/ProcessMapPlanReamTemplate.cs create mode 100644 AsbCloudInfrastructure/Services/ExcelServices/Templates/TrajectoryTemplates/TrajectoryFactManualTemplate.cs create mode 100644 AsbCloudInfrastructure/Services/ExcelServices/Templates/TrajectoryTemplates/TrajectoryFactNnbTemplate.cs create mode 100644 AsbCloudInfrastructure/Services/ExcelServices/Templates/TrajectoryTemplates/TrajectoryPlanTemplate.cs diff --git a/AsbCloudInfrastructure/Services/ExcelServices/Templates/ITemplateParameters.cs b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ITemplateParameters.cs new file mode 100644 index 00000000..eeb1076c --- /dev/null +++ b/AsbCloudInfrastructure/Services/ExcelServices/Templates/ITemplateParameters.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace AsbCloudInfrastructure.Services.ExcelServices.Templates; + +public interface ITemplateParameters +{ + string SheetName { get; } + + int HeaderRowsCount { get; } + + string FileName { get; } + + IDictionary 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..4df80a7e --- /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 => 2; + + 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 From a08c9c0d8b10b01ee901109c5190fd0f2c1b5629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=94?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Thu, 14 Mar 2024 08:03:57 +0300 Subject: [PATCH 2/8] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudApp/Services/IParserService.cs | 9 +--- .../{Parser => ExcelServices}/Cell.cs | 2 +- .../ParserExcelService.cs | 30 ++++++------ .../Parser/ProcessMapPlanDrillingParser.cs | 46 +++++-------------- .../Parser/ProcessMapPlanParser.cs | 13 ++++-- .../Parser/ProcessMapPlanReamParser.cs | 33 +++---------- .../Parser/TrajectoryFactManualParser.cs | 20 ++------ .../Trajectory/Parser/TrajectoryParser.cs | 4 +- .../Trajectory/Parser/TrajectoryPlanParser.cs | 21 ++------- .../Trajectory/TrajectoryParserTest.cs | 1 - 10 files changed, 54 insertions(+), 125 deletions(-) rename AsbCloudInfrastructure/Services/{Parser => ExcelServices}/Cell.cs (97%) rename AsbCloudInfrastructure/Services/{Parser => ExcelServices}/ParserExcelService.cs (77%) 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/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/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 { - 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 { - 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.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; From 95ddd97ace0d551756e6f0d056f8f595cb3cfead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=94?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Thu, 14 Mar 2024 08:30:25 +0300 Subject: [PATCH 3/8] =?UTF-8?q?=D0=AD=D0=BA=D1=81=D0=BF=D0=BE=D1=80=D1=82?= =?UTF-8?q?=20=D0=A0=D0=A2=D0=9A=20=D0=B8=20=D1=82=D1=80=D0=B0=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProcessMaps/ProcessMapPlanDrillingDto.cs | 10 +- .../Services/IProcessMapPlanExportService.cs | 19 ++++ .../Services/ITrajectoryExportService.cs | 19 ++++ AsbCloudInfrastructure/DependencyInjection.cs | 11 ++- .../ProcessMapPlanBaseRepository.cs | 8 ++ .../ExcelServices/ExportExcelService.cs | 57 ++++++++++++ .../ProcessMapPlanReamTemplate.cs | 2 +- .../ProcessMapPlanDrillingExportService.cs | 29 ++++++ .../Export/ProcessMapPlanExportService.cs | 38 ++++++++ .../Export/ProcessMapPlanReamExportService.cs | 29 ++++++ .../Export/TrajectoryExportService.cs | 92 +++++-------------- .../TrajectoryFactManualExportService.cs | 48 ++++------ .../Export/TrajectoryFactNnbExportService.cs | 48 ++++------ .../Export/TrajectoryPlanExportService.cs | 53 +++++------ .../ProcessMapPlanDrillingControllerTest.cs | 2 - .../Trajectory/TrajectoryExportTest.cs | 6 +- .../ProcessMapPlanBaseController.cs | 23 ++++- .../ProcessMapPlanDrillingController.cs | 6 +- .../ProcessMapPlanReamController.cs | 6 +- .../Trajectory/TrajectoryController.cs | 16 ++-- .../TrajectoryEditableController.cs | 14 +-- .../TrajectoryFactManualController.cs | 2 +- .../Trajectory/TrajectoryFactNnbController.cs | 2 +- .../Trajectory/TrajectoryPlanController.cs | 2 +- AsbCloudWebApi/Extensions.cs | 3 - 25 files changed, 345 insertions(+), 200 deletions(-) create mode 100644 AsbCloudApp/Services/IProcessMapPlanExportService.cs create mode 100644 AsbCloudApp/Services/ITrajectoryExportService.cs create mode 100644 AsbCloudInfrastructure/Services/ExcelServices/ExportExcelService.cs create mode 100644 AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs create mode 100644 AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs create mode 100644 AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanReamExportService.cs 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; From b662f138197699cea8ffec79b7c3000c7b978b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=94?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Thu, 14 Mar 2024 09:05:58 +0300 Subject: [PATCH 4/8] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20=D1=8D?= =?UTF-8?q?=D0=BA=D1=81=D0=BF=D0=BE=D1=80=D1=82=D0=B0=20=D0=B8=20=D0=B8?= =?UTF-8?q?=D0=BC=D0=BF=D0=BE=D1=80=D1=82=D0=B0=20=D0=A0=D0=A2=D0=9A-?= =?UTF-8?q?=D0=9F=D0=BB=D0=B0=D0=BD=20=D0=B1=D1=83=D1=80=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProcessMaps/ProcessMapPlanDrillingDto.cs | 12 +++-------- .../ProcessMapPlanDrillingExportService.cs | 21 +++++++++++++++++++ .../Export/ProcessMapPlanExportService.cs | 11 ++++++++-- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs index 78567c2d..ea2555a8 100644 --- a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs +++ b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanDrillingDto.cs @@ -1,5 +1,4 @@ -using System; -using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations; namespace AsbCloudApp.Data.ProcessMaps; @@ -17,13 +16,8 @@ public class ProcessMapPlanDrillingDto : ProcessMapPlanBaseDto /// /// Название режима бурения /// - public string Mode => IdMode switch - { - 1 => "Ротор", - 2 => "Слайд", - _ => throw new ArgumentOutOfRangeException() - }; - + public string? Mode { get; set; } + /// /// Осевая нагрузка, т план /// diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs index 671a34ee..18778ca1 100644 --- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs +++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs @@ -1,3 +1,6 @@ +using System; +using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; using AsbCloudApp.Data.ProcessMaps; @@ -26,4 +29,22 @@ public class ProcessMapPlanDrillingExportService : ProcessMapPlanExportService

> GetProcessMapPlanAsync(int idWell, CancellationToken token) + { + var dtos = await base.GetProcessMapPlanAsync(idWell, 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 index 60491ca8..6d684946 100644 --- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs +++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -26,8 +27,7 @@ public abstract class ProcessMapPlanExportService : ExportExcelService ExportAsync(int idWell, CancellationToken token) { - var request = new ProcessMapPlanBaseRequestWithWell(idWell); - var dtos = await processMapPlanRepository.Get(request, token); + var dtos = await GetProcessMapPlanAsync(idWell, token); var fileName = await BuildFileNameAsync(idWell, token); var file = Export(dtos); @@ -35,4 +35,11 @@ public abstract class ProcessMapPlanExportService : ExportExcelService BuildFileNameAsync(int idWell, CancellationToken token); + + protected virtual async Task> GetProcessMapPlanAsync(int idWell, CancellationToken token) + { + var request = new ProcessMapPlanBaseRequestWithWell(idWell); + var dtos = await processMapPlanRepository.Get(request, token); + return dtos; + } } \ No newline at end of file From 8b761779fd847c71fa9dcba39b6921fe8125f62d Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Thu, 14 Mar 2024 14:57:00 +0500 Subject: [PATCH 5/8] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8=D1=82=D0=BC=D0=B0=20=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B5=D0=B9=20=D0=B2=20?= =?UTF-8?q?=D0=BA=D0=B5=D1=88-=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=83?= =?UTF-8?q?=20Data=5FSaub=5FStat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PeriodicWorks/WorkDataSaubStat.cs | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/AsbCloudInfrastructure/Background/PeriodicWorks/WorkDataSaubStat.cs b/AsbCloudInfrastructure/Background/PeriodicWorks/WorkDataSaubStat.cs index d7daf9ad..ccb8472e 100644 --- a/AsbCloudInfrastructure/Background/PeriodicWorks/WorkDataSaubStat.cs +++ b/AsbCloudInfrastructure/Background/PeriodicWorks/WorkDataSaubStat.cs @@ -34,7 +34,7 @@ namespace AsbCloudInfrastructure.Background.PeriodicWorks var cacheRequest = new TelemetryDataRequest() { - GeDate = DateTime.UtcNow.AddDays(-Gap) + GeDate = DateTime.UtcNow.AddDays(-100) }; var idTelemetries = telemetryDataCache.GetIds(cacheRequest).ToArray(); @@ -49,6 +49,10 @@ namespace AsbCloudInfrastructure.Background.PeriodicWorks for( var i =0; i < idTelemetries.Length; i++) { var idTelemetry = idTelemetries[i]; + if(idTelemetry == 783) + { + ; + } var lastDate = stats.FirstOrDefault(s => s.IdTelemetry == idTelemetry)?.DateEnd.ToUniversalTime() ?? DateTimeOffset.UnixEpoch; var statsCount = await CreateStatForTelemetryFromDate(idTelemetry, lastDate, dataSaubService, dataSaubStatRepo, detectedOperationRepository, token); onProgressCallback($"Calculate stat for telemetry: {idTelemetry}; from {lastDate}; results count: {statsCount};", 100*i / idTelemetries.Length); @@ -154,13 +158,19 @@ namespace AsbCloudInfrastructure.Background.PeriodicWorks var hasOscillation = EnabledSubsystemsFlags.AutoOscillation.HasEnabledSubsystems(operation.EnabledSubsystems); var aggregatedValues = CalcAggregate(span); + var dateStart = span[0].DateTime; + var dateEnd = span[^1].DateTime; + var depthStart = span[0].WellDepth; + var depthEnd = span[^1].WellDepth; + var speed = ((depthEnd - depthStart) / (dateEnd - dateStart).TotalHours); + var processMapDrillingCacheItem = new DataSaubStatDto { - DateStart = operation.DateStart, - DateEnd = operation.DateEnd, - DepthStart = operation.DepthStart, - DepthEnd = operation.DepthEnd, - Speed = (operation.DepthEnd - operation.DepthStart) / ((operation.DateEnd - operation.DateStart).TotalHours), + DateStart = dateStart, + DateEnd = dateEnd, + DepthStart = depthStart, + DepthEnd = depthEnd, + Speed = speed, BlockSpeedSp = span[0].BlockSpeedSp, Pressure = aggregatedValues.Pressure, PressureIdle = span[0].PressureIdle, From 6cd42a546c840c14fa1e0f675e6d0a066941866f Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Thu, 14 Mar 2024 14:58:09 +0500 Subject: [PATCH 6/8] =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=B0=D1=82=20=D0=BB?= =?UTF-8?q?=D0=B8=D1=88=D0=BD=D0=B5=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Background/PeriodicWorks/WorkDataSaubStat.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/AsbCloudInfrastructure/Background/PeriodicWorks/WorkDataSaubStat.cs b/AsbCloudInfrastructure/Background/PeriodicWorks/WorkDataSaubStat.cs index ccb8472e..074c26ca 100644 --- a/AsbCloudInfrastructure/Background/PeriodicWorks/WorkDataSaubStat.cs +++ b/AsbCloudInfrastructure/Background/PeriodicWorks/WorkDataSaubStat.cs @@ -34,7 +34,7 @@ namespace AsbCloudInfrastructure.Background.PeriodicWorks var cacheRequest = new TelemetryDataRequest() { - GeDate = DateTime.UtcNow.AddDays(-100) + GeDate = DateTime.UtcNow.AddDays(-Gap) }; var idTelemetries = telemetryDataCache.GetIds(cacheRequest).ToArray(); @@ -49,10 +49,6 @@ namespace AsbCloudInfrastructure.Background.PeriodicWorks for( var i =0; i < idTelemetries.Length; i++) { var idTelemetry = idTelemetries[i]; - if(idTelemetry == 783) - { - ; - } var lastDate = stats.FirstOrDefault(s => s.IdTelemetry == idTelemetry)?.DateEnd.ToUniversalTime() ?? DateTimeOffset.UnixEpoch; var statsCount = await CreateStatForTelemetryFromDate(idTelemetry, lastDate, dataSaubService, dataSaubStatRepo, detectedOperationRepository, token); onProgressCallback($"Calculate stat for telemetry: {idTelemetry}; from {lastDate}; results count: {statsCount};", 100*i / idTelemetries.Length); From e3a7767a41917f4676b8bda45391ff8b2557177a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=94?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Thu, 14 Mar 2024 13:16:56 +0300 Subject: [PATCH 7/8] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84?= =?UTF-8?q?=D0=B5=D0=B9=D1=81=D0=BE=D0=B2=20=D1=8D=D0=BA=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D1=80=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExportOptions/IExportOptionsRequest.cs | 8 +++++++ .../ExportOptions/WellRelatedExportRequest.cs | 21 +++++++++++++++++++ AsbCloudApp/Services/IExportService.cs | 21 +++++++++++++++++++ .../Services/IProcessMapPlanExportService.cs | 19 ----------------- .../Services/ITrajectoryExportService.cs | 19 ----------------- 5 files changed, 50 insertions(+), 38 deletions(-) create mode 100644 AsbCloudApp/Requests/ExportOptions/IExportOptionsRequest.cs create mode 100644 AsbCloudApp/Requests/ExportOptions/WellRelatedExportRequest.cs create mode 100644 AsbCloudApp/Services/IExportService.cs delete mode 100644 AsbCloudApp/Services/IProcessMapPlanExportService.cs delete mode 100644 AsbCloudApp/Services/ITrajectoryExportService.cs 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/IProcessMapPlanExportService.cs b/AsbCloudApp/Services/IProcessMapPlanExportService.cs deleted file mode 100644 index 6c226a55..00000000 --- a/AsbCloudApp/Services/IProcessMapPlanExportService.cs +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index 610ccf9f..00000000 --- a/AsbCloudApp/Services/ITrajectoryExportService.cs +++ /dev/null @@ -1,19 +0,0 @@ -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 From bc4d52200d065e0575ea166dc91190a81d18eaf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=94?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Thu, 14 Mar 2024 13:18:02 +0300 Subject: [PATCH 8/8] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExcelServices/ExportExcelService.cs | 24 ++++++++++++++++--- .../ProcessMapPlanDrillingExportService.cs | 12 ++++++---- .../Export/ProcessMapPlanExportService.cs | 22 ++++------------- .../Export/ProcessMapPlanReamExportService.cs | 7 +++--- .../Export/TrajectoryExportService.cs | 20 +++++----------- .../TrajectoryFactManualExportService.cs | 7 +++--- .../Export/TrajectoryFactNnbExportService.cs | 5 ++-- .../Export/TrajectoryPlanExportService.cs | 9 +++---- .../Trajectory/TrajectoryExportTest.cs | 20 +++++++++------- .../ProcessMapPlanBaseController.cs | 8 ++++--- .../Trajectory/TrajectoryController.cs | 11 +++++---- .../TrajectoryEditableController.cs | 3 ++- 12 files changed, 80 insertions(+), 68 deletions(-) diff --git a/AsbCloudInfrastructure/Services/ExcelServices/ExportExcelService.cs b/AsbCloudInfrastructure/Services/ExcelServices/ExportExcelService.cs index 9e189411..086eba97 100644 --- a/AsbCloudInfrastructure/Services/ExcelServices/ExportExcelService.cs +++ b/AsbCloudInfrastructure/Services/ExcelServices/ExportExcelService.cs @@ -3,17 +3,35 @@ 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 +public abstract class ExportExcelService : IExportService + where TOptions : IExportOptionsRequest { protected abstract ITemplateParameters TemplateParameters { get; } - - protected Stream Export(IEnumerable dtos) + + 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); diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs index 18778ca1..5b0935d2 100644 --- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs +++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanDrillingExportService.cs @@ -6,6 +6,7 @@ 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; @@ -23,16 +24,17 @@ public class ProcessMapPlanDrillingExportService : ProcessMapPlanExportService

new ProcessMapPlanDrillingTemplate(); - protected override async Task BuildFileNameAsync(int idWell, CancellationToken token) + protected override async Task BuildFileNameAsync(WellRelatedExportRequest options, CancellationToken token) { - var caption = await wellService.GetWellCaptionByIdAsync(idWell, token); + var caption = await wellService.GetWellCaptionByIdAsync(options.IdWell, token); return $"{caption}_РТК_План_бурение.xlsx"; } - protected override async Task> GetProcessMapPlanAsync(int idWell, CancellationToken token) + protected override async Task> GetDtosAsync(WellRelatedExportRequest options, + CancellationToken token) { - var dtos = await base.GetProcessMapPlanAsync(idWell, token); + var dtos = await base.GetDtosAsync(options, token); var dtosWithMode = dtos.Select(dto => { dto.Mode = dto.IdMode switch @@ -41,7 +43,7 @@ public class ProcessMapPlanDrillingExportService : ProcessMapPlanExportService

"Слайд", _ => throw new ArgumentOutOfRangeException() }; - + return dto; }); diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs index 6d684946..458877d1 100644 --- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs +++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs @@ -1,17 +1,16 @@ using System.Collections.Generic; -using System.IO; 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, - IProcessMapPlanExportService +public abstract class ProcessMapPlanExportService : ExportExcelService where TDto : ChangeLogAbstract { protected readonly IWellService wellService; @@ -24,21 +23,10 @@ public abstract class ProcessMapPlanExportService : ExportExcelService ExportAsync(int idWell, CancellationToken token) + + protected override async Task> GetDtosAsync(WellRelatedExportRequest options, CancellationToken token) { - var dtos = await GetProcessMapPlanAsync(idWell, token); - - var fileName = await BuildFileNameAsync(idWell, token); - var file = Export(dtos); - return (fileName, file); - } - - protected abstract Task BuildFileNameAsync(int idWell, CancellationToken token); - - protected virtual async Task> GetProcessMapPlanAsync(int idWell, CancellationToken token) - { - var request = new ProcessMapPlanBaseRequestWithWell(idWell); + var request = new ProcessMapPlanBaseRequestWithWell(options.IdWell); var dtos = await processMapPlanRepository.Get(request, token); return dtos; } diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanReamExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanReamExportService.cs index b2452172..c3dc5d69 100644 --- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanReamExportService.cs +++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanReamExportService.cs @@ -3,6 +3,7 @@ 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; @@ -19,10 +20,10 @@ public class ProcessMapPlanReamExportService : ProcessMapPlanExportService BuildFileNameAsync(int idWell, CancellationToken token) + + protected override async Task BuildFileNameAsync(WellRelatedExportRequest options, CancellationToken token) { - var caption = await wellService.GetWellCaptionByIdAsync(idWell, token); + var caption = await wellService.GetWellCaptionByIdAsync(options.IdWell, token); return $"{caption}_РТК_План_проработка.xlsx"; } diff --git a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryExportService.cs b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryExportService.cs index 489b15f4..fe78b6b5 100644 --- a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryExportService.cs +++ b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryExportService.cs @@ -1,15 +1,15 @@ -using AsbCloudApp.Data.Trajectory; +using System.Collections.Generic; +using AsbCloudApp.Data.Trajectory; using AsbCloudApp.Repositories; using AsbCloudApp.Services; -using System.IO; using System.Threading; using System.Threading.Tasks; +using AsbCloudApp.Requests.ExportOptions; using AsbCloudInfrastructure.Services.ExcelServices; namespace AsbCloudInfrastructure.Services.Trajectory.Export; -public abstract class TrajectoryExportService : ExportExcelService, - ITrajectoryExportService +public abstract class TrajectoryExportService : ExportExcelService where TDto : TrajectoryGeoDto { protected readonly IWellService wellService; @@ -22,14 +22,6 @@ public abstract class TrajectoryExportService : ExportExcelService, this.trajectoryRepository = trajectoryRepository; } - public async Task<(string FileName, Stream File)> ExportAsync(int idWell, CancellationToken token) - { - var dtos = await trajectoryRepository.GetAsync(idWell, token); - - var fileName = await BuildFileNameAsync(idWell, token); - var file = Export(dtos); - return (fileName, file); - } - - protected abstract Task BuildFileNameAsync(int idWell, CancellationToken token); + 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 f1ccbc89..40b7d1c8 100644 --- a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactManualExportService.cs +++ b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactManualExportService.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using AsbCloudApp.Data.Trajectory; using AsbCloudApp.Repositories; +using AsbCloudApp.Requests.ExportOptions; using AsbCloudApp.Services; using AsbCloudInfrastructure.Services.ExcelServices.Templates; using AsbCloudInfrastructure.Services.ExcelServices.Templates.TrajectoryTemplates; @@ -17,10 +18,10 @@ public class TrajectoryFactManualExportService : TrajectoryExportService new TrajectoryFactManualTemplate(); - - protected override async Task BuildFileNameAsync(int idWell, CancellationToken token) + + protected override async Task BuildFileNameAsync(WellRelatedExportRequest options, CancellationToken token) { - var caption = await wellService.GetWellCaptionByIdAsync(idWell, token); + var caption = await wellService.GetWellCaptionByIdAsync(options.IdWell, token); return $"{caption}_Фактическая_траектория.xlsx"; } diff --git a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactNnbExportService.cs b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactNnbExportService.cs index 2bab0783..3b3206f5 100644 --- a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactNnbExportService.cs +++ b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryFactNnbExportService.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using AsbCloudApp.Data.Trajectory; using AsbCloudApp.Repositories; +using AsbCloudApp.Requests.ExportOptions; using AsbCloudApp.Services; using AsbCloudInfrastructure.Services.ExcelServices.Templates; using AsbCloudInfrastructure.Services.ExcelServices.Templates.TrajectoryTemplates; @@ -18,9 +19,9 @@ public class TrajectoryFactNnbExportService : TrajectoryExportService new TrajectoryFactNnbTemplate(); - protected override async Task BuildFileNameAsync(int idWell, CancellationToken token) + protected override async Task BuildFileNameAsync(WellRelatedExportRequest options, CancellationToken token) { - var caption = await wellService.GetWellCaptionByIdAsync(idWell, token); + var caption = await wellService.GetWellCaptionByIdAsync(options.IdWell, token); return $"{caption}_Траектория_ННБ.xlsx"; } diff --git a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryPlanExportService.cs b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryPlanExportService.cs index 5a931939..37bce068 100644 --- a/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryPlanExportService.cs +++ b/AsbCloudInfrastructure/Services/Trajectory/Export/TrajectoryPlanExportService.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using AsbCloudApp.Data.Trajectory; using AsbCloudApp.Repositories; +using AsbCloudApp.Requests.ExportOptions; using AsbCloudApp.Services; using AsbCloudInfrastructure.Services.ExcelServices.Templates; using AsbCloudInfrastructure.Services.ExcelServices.Templates.TrajectoryTemplates; @@ -10,17 +11,17 @@ namespace AsbCloudInfrastructure.Services.Trajectory.Export; public class TrajectoryPlanExportService : TrajectoryExportService { - public TrajectoryPlanExportService(IWellService wellService, + public TrajectoryPlanExportService(IWellService wellService, ITrajectoryEditableRepository trajectoryRepository) : base(wellService, trajectoryRepository) { } protected override ITemplateParameters TemplateParameters => new TrajectoryPlanTemplate(); - - protected override async Task BuildFileNameAsync(int idWell, CancellationToken token) + + protected override async Task BuildFileNameAsync(WellRelatedExportRequest options, CancellationToken token) { - var caption = await wellService.GetWellCaptionByIdAsync(idWell, token); + var caption = await wellService.GetWellCaptionByIdAsync(options.IdWell, token); return $"{caption}_Плановая_Траектория.xlsx"; } diff --git a/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryExportTest.cs b/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryExportTest.cs index 1c026185..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); + + var stream = await trajectoryPlanExportService.ExportAsync(exportOptions, CancellationToken.None); Assert.True(stream.File.Length > 0); - } [Fact] @@ -109,8 +111,8 @@ namespace AsbCloudWebApi.Tests.Services.Trajectory { trajectoryFactManualReposirory.GetAsync(idWell, CancellationToken.None) .Returns(trajectoryFactRows); - - var stream = await trajectoryFactManualExportService.ExportAsync(idWell, CancellationToken.None); + + var stream = await trajectoryFactManualExportService.ExportAsync(exportOptions, CancellationToken.None); Assert.True(stream.File.Length > 0); } @@ -119,8 +121,8 @@ namespace AsbCloudWebApi.Tests.Services.Trajectory { trajectoryFactNnbRepository.GetAsync(idWell, CancellationToken.None) .Returns(trajectoryFactRows); - - var stream = await trajectoryFactNnbExportService.ExportAsync(idWell, CancellationToken.None); + + var stream = await trajectoryFactNnbExportService.ExportAsync(exportOptions, CancellationToken.None); Assert.True(stream.File.Length > 0); } } diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs index c3afebb3..a7d1763e 100644 --- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs @@ -15,6 +15,7 @@ using AsbCloudApp.Data; using AsbCloudApp.Requests.ParserOptions; using AsbCloudApp.Data.ProcessMaps; using System.ComponentModel.DataAnnotations; +using AsbCloudApp.Requests.ExportOptions; namespace AsbCloudWebApi.Controllers.ProcessMaps; @@ -30,12 +31,12 @@ public abstract class ProcessMapPlanBaseController : ControllerBase private readonly IChangeLogRepository repository; private readonly IWellService wellService; private readonly IParserService parserService; - private readonly IProcessMapPlanExportService processMapPlanExportService; + private readonly IExportService processMapPlanExportService; protected ProcessMapPlanBaseController(IChangeLogRepository repository, IWellService wellService, IParserService parserService, - IProcessMapPlanExportService processMapPlanExportService) + IExportService processMapPlanExportService) { this.repository = repository; this.wellService = wellService; @@ -280,7 +281,8 @@ public abstract class ProcessMapPlanBaseController : ControllerBase [ProducesResponseType(StatusCodes.Status204NoContent)] public async Task ExportAsync([FromRoute] int idWell, CancellationToken token) { - var (fileName, file) = await processMapPlanExportService.ExportAsync(idWell, token); + var exportOptions = new WellRelatedExportRequest(idWell); + var (fileName, file) = await processMapPlanExportService.ExportAsync(exportOptions, token); return File(file, "application/octet-stream", fileName); } diff --git a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryController.cs b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryController.cs index 6311d34a..a4521ef8 100644 --- a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryController.cs +++ b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryController.cs @@ -7,6 +7,8 @@ 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 { @@ -22,11 +24,11 @@ namespace AsbCloudWebApi.Controllers.Trajectory protected abstract string TemplateFileName { get; } private readonly IWellService wellService; - private readonly ITrajectoryExportService trajectoryExportService; + private readonly TrajectoryExportService trajectoryExportService; private readonly ITrajectoryRepository trajectoryRepository; protected TrajectoryController(IWellService wellService, - ITrajectoryExportService trajectoryExportService, + TrajectoryExportService trajectoryExportService, ITrajectoryRepository trajectoryRepository) { this.trajectoryExportService = trajectoryExportService; @@ -48,8 +50,9 @@ namespace AsbCloudWebApi.Controllers.Trajectory if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false)) return Forbid(); - - var (fileName, file) = await trajectoryExportService.ExportAsync(idWell, token); + + 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 a014e1bc..56a08c1e 100644 --- a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs +++ b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs @@ -10,6 +10,7 @@ using System.Threading; using System.Threading.Tasks; using AsbCloudApp.Data; using AsbCloudApp.Requests.ParserOptions; +using AsbCloudInfrastructure.Services.Trajectory.Export; namespace AsbCloudWebApi.Controllers.Trajectory { @@ -27,7 +28,7 @@ namespace AsbCloudWebApi.Controllers.Trajectory protected TrajectoryEditableController(IWellService wellService, IParserService parserService, - ITrajectoryExportService trajectoryExportService, + TrajectoryExportService trajectoryExportService, ITrajectoryEditableRepository trajectoryRepository) : base(wellService, trajectoryExportService, trajectoryRepository) {