diff --git a/AsbCloudApp/Requests/ParserOptions/WellRelatedParserRequest.cs b/AsbCloudApp/Requests/ParserOptions/WellRelatedParserRequest.cs
new file mode 100644
index 00000000..3ffbf4d5
--- /dev/null
+++ b/AsbCloudApp/Requests/ParserOptions/WellRelatedParserRequest.cs
@@ -0,0 +1,21 @@
+namespace AsbCloudApp.Requests.ParserOptions;
+
+///
+/// Параметры парсинга
+///
+public class WellRelatedParserRequest : IParserOptionsRequest
+{
+ ///
+ /// Конструктор
+ ///
+ /// Id скважины
+ public WellRelatedParserRequest(int idWell)
+ {
+ IdWell = idWell;
+ }
+
+ ///
+ /// Id скважины
+ ///
+ public int IdWell { get; }
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Services/IParserService.cs b/AsbCloudApp/Services/IParserService.cs
index 8c01af5a..6fa095cd 100644
--- a/AsbCloudApp/Services/IParserService.cs
+++ b/AsbCloudApp/Services/IParserService.cs
@@ -8,8 +8,10 @@ namespace AsbCloudApp.Services;
/// Сервис парсинга
///
///
-public interface IParserService : IParserService
+///
+public interface IParserService : IParserService
where TDto : class, IId
+ where TOptions : IParserOptionsRequest
{
///
/// Распарсить файл
@@ -17,8 +19,7 @@ public interface IParserService : IParserService
///
///
///
- ParserResultDto Parse(Stream file, TOptions options)
- where TOptions : IParserOptionsRequest;
+ ParserResultDto Parse(Stream file, TOptions options);
///
/// Получение шаблона для заполнения
diff --git a/AsbCloudInfrastructure/Services/Parser/ParserExcelService.cs b/AsbCloudInfrastructure/Services/Parser/ParserExcelService.cs
index 661c729f..13c621af 100644
--- a/AsbCloudInfrastructure/Services/Parser/ParserExcelService.cs
+++ b/AsbCloudInfrastructure/Services/Parser/ParserExcelService.cs
@@ -12,8 +12,9 @@ using Mapster;
namespace AsbCloudInfrastructure.Services.Parser;
-public abstract class ParserExcelService : IParserService
+public abstract class ParserExcelService : IParserService
where TDto : class, IValidatableObject, IId
+ where TOptions : IParserOptionsRequest
{
protected abstract string SheetName { get; }
@@ -22,9 +23,8 @@ public abstract class ParserExcelService : IParserService
protected abstract string TemplateFileName { get; }
protected abstract IDictionary Cells { get; }
-
- public virtual ParserResultDto Parse(Stream file, TOptions options)
- where TOptions : IParserOptionsRequest
+
+ public virtual ParserResultDto Parse(Stream file, TOptions options)
{
using var workbook = new XLWorkbook(file);
var sheet = workbook.GetWorksheet(SheetName);
diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanDrillingParser.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanDrillingParser.cs
index c1717db1..f4e829fc 100644
--- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanDrillingParser.cs
+++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanDrillingParser.cs
@@ -6,7 +6,6 @@ using AsbCloudApp.Data;
using AsbCloudApp.Data.ProcessMaps;
using AsbCloudApp.Repositories;
using AsbCloudInfrastructure.Services.Parser;
-using Microsoft.Extensions.DependencyInjection;
namespace AsbCloudInfrastructure.Services.ProcessMapPlan.Parser;
diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanParser.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanParser.cs
index 1686779b..effe7ef6 100644
--- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanParser.cs
+++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanParser.cs
@@ -1,14 +1,26 @@
-using System;
+using System.IO;
+using AsbCloudApp.Data;
using AsbCloudApp.Data.ProcessMaps;
+using AsbCloudApp.Requests.ParserOptions;
using AsbCloudInfrastructure.Services.Parser;
namespace AsbCloudInfrastructure.Services.ProcessMapPlan.Parser;
-public abstract class ProcessMapPlanParser : ParserExcelService
+public abstract class ProcessMapPlanParser : ParserExcelService
where TDto : ProcessMapPlanBaseDto
{
protected override int HeaderRowsCount => 2;
+ public override ParserResultDto Parse(Stream file, WellRelatedParserRequest options)
+ {
+ var result = base.Parse(file, options);
+
+ foreach (var item in result.Item)
+ item.Item.IdWell = options.IdWell;
+
+ return result;
+ }
+
protected static int? GetIdMode(string? modeName) =>
modeName?.Trim().ToLower() switch
{
diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanReamParser.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanReamParser.cs
index 20aca5ed..6ca31714 100644
--- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanReamParser.cs
+++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Parser/ProcessMapPlanReamParser.cs
@@ -22,14 +22,12 @@ public class ProcessMapPlanReamParser : ProcessMapPlanParser "ProcessMapPlanReamTemplate.xlsx";
private const int ColumnSection = 1;
- private const int ColumnMode = 2;
-
+
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)) },
diff --git a/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryFactManualParser.cs b/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryFactManualParser.cs
index 5de4e2c5..cf4b7118 100644
--- a/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryFactManualParser.cs
+++ b/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryFactManualParser.cs
@@ -4,12 +4,10 @@ using AsbCloudInfrastructure.Services.Parser;
namespace AsbCloudInfrastructure.Services.Trajectory.Parser;
-public class TrajectoryFactManualParser : ParserExcelService
+public class TrajectoryFactManualParser : TrajectoryParser
{
protected override string SheetName => "Фактическая траектория";
-
- protected override int HeaderRowsCount => 2;
-
+
protected override string TemplateFileName => "TrajectoryFactManualTemplate.xlsx";
protected override IDictionary Cells => new Dictionary
diff --git a/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryParser.cs b/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryParser.cs
new file mode 100644
index 00000000..ce579fa6
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryParser.cs
@@ -0,0 +1,23 @@
+using System.IO;
+using AsbCloudApp.Data;
+using AsbCloudApp.Data.Trajectory;
+using AsbCloudApp.Requests.ParserOptions;
+using AsbCloudInfrastructure.Services.Parser;
+
+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);
+
+ foreach (var item in result.Item)
+ item.Item.IdWell = options.IdWell;
+
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryPlanParser.cs b/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryPlanParser.cs
index 4c100766..568bfa35 100644
--- a/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryPlanParser.cs
+++ b/AsbCloudInfrastructure/Services/Trajectory/Parser/TrajectoryPlanParser.cs
@@ -4,12 +4,10 @@ using AsbCloudInfrastructure.Services.Parser;
namespace AsbCloudInfrastructure.Services.Trajectory.Parser;
-public class TrajectoryPlanParser : ParserExcelService
+public class TrajectoryPlanParser : TrajectoryParser
{
protected override string SheetName => "Плановая траектория";
-
- protected override int HeaderRowsCount => 2;
-
+
protected override string TemplateFileName => "TrajectoryPlanTemplate.xlsx";
protected override IDictionary Cells => new Dictionary
diff --git a/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanDrillingClient.cs b/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanDrillingClient.cs
index 2a151573..93ce768b 100644
--- a/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanDrillingClient.cs
+++ b/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanDrillingClient.cs
@@ -35,5 +35,5 @@ public interface IProcessMapPlanDrillingClient
[Multipart]
[Post(BaseRoute + "/parse")]
- Task>> Parse(int idWell, [AliasAs("files")] IEnumerable streams);
+ Task>> Parse(int idWell, [AliasAs("file")] StreamPart stream);
}
diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs
index 0ff8bb97..3a5815e9 100644
--- a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs
+++ b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs
@@ -571,10 +571,10 @@ public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest
//arrange
const string fileName = "ProcessMapPlanDrillingValid.xlsx";
var stream = Assembly.GetExecutingAssembly().GetFileCopyStream(fileName);
-
- //act
var streamPart = new StreamPart(stream, fileName, "application/octet-stream");
- var response = await client.Parse(Defaults.Wells[0].Id, new[] { streamPart });
+
+ //act
+ var response = await client.Parse(Defaults.Wells[0].Id, streamPart);
//assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
@@ -589,9 +589,8 @@ public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest
var dtoActual = row.Item;
Assert.True(row.IsValid);
-
- var excludeProps = new[] { nameof(ProcessMapPlanDrillingDto.IdWell) };
- MatchHelper.Match(dto, dtoActual, excludeProps);
+
+ MatchHelper.Match(dto, dtoActual);
}
[Fact]
@@ -600,11 +599,12 @@ public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest
//arrange
const string fileName = "ProcessMapPlanDrillingInvalid.xlsx";
var stream = Assembly.GetExecutingAssembly().GetFileCopyStream(fileName);
+ var streamPart = new StreamPart(stream, fileName, "application/octet-stream");
//act
- var streamPart = new StreamPart(stream, fileName, "application/octet-stream");
- var response = await client.Parse(Defaults.Wells[0].Id, new[] { streamPart });
+ var response = await client.Parse(Defaults.Wells[0].Id, streamPart);
+ //assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var parserResult = response.Content;
diff --git a/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryParserTest.cs b/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryParserTest.cs
index 8921d982..8b9bd3e9 100644
--- a/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryParserTest.cs
+++ b/AsbCloudWebApi.Tests/Services/Trajectory/TrajectoryParserTest.cs
@@ -11,9 +11,11 @@ public class TrajectoryParserTest
{
private const string UsingTemplateFile = "AsbCloudWebApi.Tests.Services.Trajectory.Templates";
+ private readonly WellRelatedParserRequest options = new(1);
+
private readonly TrajectoryPlanParser trajectoryPlanParser = new();
private readonly TrajectoryFactManualParser trajectoryFactManualParser = new();
-
+
[Fact]
public void Parse_trajectory_plan()
{
@@ -22,8 +24,8 @@ public class TrajectoryParserTest
if (stream is null)
Assert.Fail("Файла для импорта не существует");
-
- var trajectoryRows = trajectoryPlanParser.Parse(stream, IParserOptionsRequest.Empty());
+
+ var trajectoryRows = trajectoryPlanParser.Parse(stream, options);
Assert.Equal(3, trajectoryRows.Item.Count());
}
@@ -37,7 +39,7 @@ public class TrajectoryParserTest
if (stream is null)
Assert.Fail("Файла для импорта не существует");
- var trajectoryRows = trajectoryFactManualParser.Parse(stream, IParserOptionsRequest.Empty());
+ var trajectoryRows = trajectoryFactManualParser.Parse(stream, options);
Assert.Equal(4, trajectoryRows.Item.Count());
}
diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs
index 45da7f11..49513f2c 100644
--- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs
+++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs
@@ -30,11 +30,11 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
{
private readonly IChangeLogRepository repository;
private readonly IWellService wellService;
- private readonly ParserExcelService parserService;
+ private readonly ParserExcelService parserService;
protected ProcessMapPlanBaseController(IChangeLogRepository repository,
IWellService wellService,
- ParserExcelService parserService)
+ ParserExcelService parserService)
{
this.repository = repository;
this.wellService = wellService;
@@ -213,7 +213,7 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
public async Task>> Parse(int idWell,
- [Required] IFormFile file,
+ [Required] IFormFile file,
CancellationToken token)
{
await AssertUserHasAccessToWell(idWell, token);
@@ -222,9 +222,8 @@ public abstract class ProcessMapPlanBaseController : ControllerBase
try
{
- var dto = parserService.Parse(stream, IParserOptionsRequest.Empty());
- foreach (var item in dto.Item)
- item.Item.IdWell = idWell;
+ var options = new WellRelatedParserRequest(idWell);
+ var dto = parserService.Parse(stream, options);
return Ok(dto);
}
diff --git a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs
index 344ed707..814bcdcf 100644
--- a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs
+++ b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs
@@ -13,6 +13,7 @@ using System.Threading.Tasks;
using AsbCloudApp.Data;
using AsbCloudApp.Requests.ParserOptions;
using AsbCloudInfrastructure.Services.Parser;
+using AsbCloudInfrastructure.Services.Trajectory.Parser;
namespace AsbCloudWebApi.Controllers.Trajectory
{
@@ -25,11 +26,11 @@ namespace AsbCloudWebApi.Controllers.Trajectory
public abstract class TrajectoryEditableController : TrajectoryController
where TDto : TrajectoryGeoDto
{
- private readonly ParserExcelService parserService;
+ private readonly TrajectoryParser parserService;
private readonly ITrajectoryEditableRepository trajectoryRepository;
protected TrajectoryEditableController(IWellService wellService,
- ParserExcelService parserService,
+ TrajectoryParser parserService,
TrajectoryExportService trajectoryExportService,
ITrajectoryEditableRepository trajectoryRepository)
: base(wellService, trajectoryExportService, trajectoryRepository)
@@ -78,7 +79,9 @@ namespace AsbCloudWebApi.Controllers.Trajectory
try
{
- var dto = parserService.Parse(stream, IParserOptionsRequest.Empty());
+ var options = new WellRelatedParserRequest(idWell);
+ var dto = parserService.Parse(stream, options);
+
return Ok(dto);
}
catch (FileFormatException ex)