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;