forked from ddrilling/AsbCloudServer
Рефакторинг импорта РТК бурение
This commit is contained in:
parent
558f70cf61
commit
2f2599f9ab
Binary file not shown.
@ -20,7 +20,7 @@ namespace AsbCloudInfrastructure.Services.ProcessMaps.WellDrillingProcessMap;
|
|||||||
*/
|
*/
|
||||||
public class WellDrillingProcessMapImportService : IProcessMapImportService
|
public class WellDrillingProcessMapImportService : IProcessMapImportService
|
||||||
{
|
{
|
||||||
private readonly IWellDrillingProcessMapRepository wellDrillingProcessMapRepository;
|
private readonly IProcessMapPlanRepository<ProcessMapPlanWellDrillingDto> processMapPlanWellDrillingRepository;
|
||||||
private readonly ICrudRepository<WellSectionTypeDto> wellSectionTypeRepository;
|
private readonly ICrudRepository<WellSectionTypeDto> wellSectionTypeRepository;
|
||||||
private readonly IWellService wellService;
|
private readonly IWellService wellService;
|
||||||
|
|
||||||
@ -45,14 +45,15 @@ public class WellDrillingProcessMapImportService : IProcessMapImportService
|
|||||||
private const int columnRopPlan = 15;
|
private const int columnRopPlan = 15;
|
||||||
private const int columnUsageSaub = 16;
|
private const int columnUsageSaub = 16;
|
||||||
private const int columnUsageSpin = 17;
|
private const int columnUsageSpin = 17;
|
||||||
|
private const int columnComment = 18;
|
||||||
|
|
||||||
private WellSectionTypeDto[] sections = null!;
|
private WellSectionTypeDto[] sections = null!;
|
||||||
|
|
||||||
public WellDrillingProcessMapImportService(IWellDrillingProcessMapRepository wellDrillingProcessMapRepository,
|
public WellDrillingProcessMapImportService(IProcessMapPlanRepository<ProcessMapPlanWellDrillingDto> processMapPlanWellDrillingRepository,
|
||||||
ICrudRepository<WellSectionTypeDto> wellSectionTypeRepository,
|
ICrudRepository<WellSectionTypeDto> wellSectionTypeRepository,
|
||||||
IWellService wellService)
|
IWellService wellService)
|
||||||
{
|
{
|
||||||
this.wellDrillingProcessMapRepository = wellDrillingProcessMapRepository;
|
this.processMapPlanWellDrillingRepository = processMapPlanWellDrillingRepository;
|
||||||
this.wellSectionTypeRepository = wellSectionTypeRepository;
|
this.wellSectionTypeRepository = wellSectionTypeRepository;
|
||||||
this.wellService = wellService;
|
this.wellService = wellService;
|
||||||
}
|
}
|
||||||
@ -67,7 +68,7 @@ public class WellDrillingProcessMapImportService : IProcessMapImportService
|
|||||||
var wellDrillingProcessMaps = ParseWorkBook(workBook);
|
var wellDrillingProcessMaps = ParseWorkBook(workBook);
|
||||||
|
|
||||||
if (deleteProcessMapPlansBeforeImport)
|
if (deleteProcessMapPlansBeforeImport)
|
||||||
await wellDrillingProcessMapRepository.RemoveByWellAsync(idWell, cancellationToken);
|
await processMapPlanWellDrillingRepository.RemoveByWellAsync(idWell, cancellationToken);
|
||||||
|
|
||||||
foreach (var wellDrillingProcessMap in wellDrillingProcessMaps)
|
foreach (var wellDrillingProcessMap in wellDrillingProcessMaps)
|
||||||
{
|
{
|
||||||
@ -75,7 +76,7 @@ public class WellDrillingProcessMapImportService : IProcessMapImportService
|
|||||||
wellDrillingProcessMap.IdUser = idUser;
|
wellDrillingProcessMap.IdUser = idUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
await wellDrillingProcessMapRepository.InsertRangeAsync(wellDrillingProcessMaps, cancellationToken);
|
await processMapPlanWellDrillingRepository.InsertRangeAsync(wellDrillingProcessMaps, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<(string Name, Stream File)> ExportAsync(int idWell, CancellationToken cancellationToken)
|
public async Task<(string Name, Stream File)> ExportAsync(int idWell, CancellationToken cancellationToken)
|
||||||
@ -85,7 +86,7 @@ public class WellDrillingProcessMapImportService : IProcessMapImportService
|
|||||||
|
|
||||||
sections = (await wellSectionTypeRepository.GetAllAsync(cancellationToken)).ToArray();
|
sections = (await wellSectionTypeRepository.GetAllAsync(cancellationToken)).ToArray();
|
||||||
|
|
||||||
var processMapPlans = (await wellDrillingProcessMapRepository.GetByIdWellAsync(idWell,
|
var processMapPlans = (await processMapPlanWellDrillingRepository.GetByIdWellAsync(idWell,
|
||||||
cancellationToken)).ToArray();
|
cancellationToken)).ToArray();
|
||||||
|
|
||||||
var file = await GenerateExcelFileStreamAsync(processMapPlans, cancellationToken);
|
var file = await GenerateExcelFileStreamAsync(processMapPlans, cancellationToken);
|
||||||
@ -113,48 +114,49 @@ public class WellDrillingProcessMapImportService : IProcessMapImportService
|
|||||||
return (name, memoryStream);
|
return (name, memoryStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddToWorkbook(XLWorkbook workbook, IEnumerable<WellDrillingProcessMapDto> wellDrillingProcessMaps)
|
private void AddToWorkbook(XLWorkbook workbook, IEnumerable<ProcessMapPlanWellDrillingDto> processMapPlanWellDrillings)
|
||||||
{
|
{
|
||||||
var sheet = workbook.Worksheets.FirstOrDefault(ws => ws.Name == sheetNamePlan)
|
var sheet = workbook.Worksheets.FirstOrDefault(ws => ws.Name == sheetNamePlan)
|
||||||
?? throw new FileFormatException($"Книга excel не содержит листа {sheetNamePlan}.");
|
?? throw new FileFormatException($"Книга excel не содержит листа {sheetNamePlan}.");
|
||||||
|
|
||||||
AddToSheet(sheet, wellDrillingProcessMaps.ToArray());
|
AddToSheet(sheet, processMapPlanWellDrillings.ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddToSheet(IXLWorksheet sheet, IList<WellDrillingProcessMapDto> wellDrillingProcessMaps)
|
private void AddToSheet(IXLWorksheet sheet, IList<ProcessMapPlanWellDrillingDto> processMapPlanWellDrillings)
|
||||||
{
|
{
|
||||||
if (!wellDrillingProcessMaps.Any())
|
if (!processMapPlanWellDrillings.Any())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (int i = 0; i < wellDrillingProcessMaps.Count; i++)
|
for (int i = 0; i < processMapPlanWellDrillings.Count; i++)
|
||||||
{
|
{
|
||||||
var row = sheet.Row(1 + i + headerRowsCount);
|
var row = sheet.Row(1 + i + headerRowsCount);
|
||||||
AddToRow(row, wellDrillingProcessMaps[i]);
|
AddToRow(row, processMapPlanWellDrillings[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddToRow(IXLRow row, WellDrillingProcessMapDto wellDrillingProcessMap)
|
private void AddToRow(IXLRow row, ProcessMapPlanWellDrillingDto processMapPlanWellDrillings)
|
||||||
{
|
{
|
||||||
row.Cell(columnWellSectionType).Value = sections.First(x => x.Id == wellDrillingProcessMap.IdWellSectionType).Caption;
|
row.Cell(columnWellSectionType).Value = sections.First(x => x.Id == processMapPlanWellDrillings.IdWellSectionType).Caption;
|
||||||
row.Cell(columnMode).Value = GetModeCaption(wellDrillingProcessMap.IdMode);
|
row.Cell(columnMode).Value = GetModeCaption(processMapPlanWellDrillings.IdMode);
|
||||||
row.Cell(columnDepthStart).Value = wellDrillingProcessMap.DepthStart;
|
row.Cell(columnDepthStart).Value = processMapPlanWellDrillings.DepthStart;
|
||||||
row.Cell(columnDepthEnd).Value = wellDrillingProcessMap.DepthEnd;
|
row.Cell(columnDepthEnd).Value = processMapPlanWellDrillings.DepthEnd;
|
||||||
row.Cell(columnPressurePlan).Value = wellDrillingProcessMap.Pressure.Plan;
|
row.Cell(columnPressurePlan).Value = processMapPlanWellDrillings.Pressure.Plan;
|
||||||
row.Cell(columnPressureLimitMax).Value = wellDrillingProcessMap.Pressure.LimitMax;
|
row.Cell(columnPressureLimitMax).Value = processMapPlanWellDrillings.Pressure.LimitMax;
|
||||||
row.Cell(columnAxialLoadPlan).Value = wellDrillingProcessMap.AxialLoad.Plan;
|
row.Cell(columnAxialLoadPlan).Value = processMapPlanWellDrillings.AxialLoad.Plan;
|
||||||
row.Cell(columnAxialLoadLimitMax).Value = wellDrillingProcessMap.AxialLoad.LimitMax;
|
row.Cell(columnAxialLoadLimitMax).Value = processMapPlanWellDrillings.AxialLoad.LimitMax;
|
||||||
row.Cell(columnTopDriveTorquePlan).Value = wellDrillingProcessMap.TopDriveTorque.Plan;
|
row.Cell(columnTopDriveTorquePlan).Value = processMapPlanWellDrillings.TopDriveTorque.Plan;
|
||||||
row.Cell(columnTopDriveTorqueLimitMax).Value = wellDrillingProcessMap.TopDriveTorque.LimitMax;
|
row.Cell(columnTopDriveTorqueLimitMax).Value = processMapPlanWellDrillings.TopDriveTorque.LimitMax;
|
||||||
row.Cell(columnTopDriveSpeedPlan).Value = wellDrillingProcessMap.TopDriveSpeed.Plan;
|
row.Cell(columnTopDriveSpeedPlan).Value = processMapPlanWellDrillings.TopDriveSpeed.Plan;
|
||||||
row.Cell(columnTopDriveSpeedLimitMax).Value = wellDrillingProcessMap.TopDriveSpeed.LimitMax;
|
row.Cell(columnTopDriveSpeedLimitMax).Value = processMapPlanWellDrillings.TopDriveSpeed.LimitMax;
|
||||||
row.Cell(columnFlowPlan).Value = wellDrillingProcessMap.Flow.Plan;
|
row.Cell(columnFlowPlan).Value = processMapPlanWellDrillings.Flow.Plan;
|
||||||
row.Cell(columnFlowLimitMax).Value = wellDrillingProcessMap.Flow.LimitMax;
|
row.Cell(columnFlowLimitMax).Value = processMapPlanWellDrillings.Flow.LimitMax;
|
||||||
row.Cell(columnRopPlan).Value = wellDrillingProcessMap.RopPlan;
|
row.Cell(columnRopPlan).Value = processMapPlanWellDrillings.RopPlan;
|
||||||
row.Cell(columnUsageSaub).Value = wellDrillingProcessMap.UsageSaub;
|
row.Cell(columnUsageSaub).Value = processMapPlanWellDrillings.UsageSaub;
|
||||||
row.Cell(columnUsageSpin).Value = wellDrillingProcessMap.UsageSpin;
|
row.Cell(columnUsageSpin).Value = processMapPlanWellDrillings.UsageSpin;
|
||||||
|
row.Cell(columnComment).Value = processMapPlanWellDrillings.Comment;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<WellDrillingProcessMapDto> ParseWorkBook(IXLWorkbook workbook)
|
private IEnumerable<ProcessMapPlanWellDrillingDto> ParseWorkBook(IXLWorkbook workbook)
|
||||||
{
|
{
|
||||||
var sheet = workbook.Worksheets.FirstOrDefault(ws => ws.Name == sheetNamePlan)
|
var sheet = workbook.Worksheets.FirstOrDefault(ws => ws.Name == sheetNamePlan)
|
||||||
?? throw new FileFormatException($"Книга excel не содержит листа {sheetNamePlan}.");
|
?? throw new FileFormatException($"Книга excel не содержит листа {sheetNamePlan}.");
|
||||||
@ -162,7 +164,7 @@ public class WellDrillingProcessMapImportService : IProcessMapImportService
|
|||||||
return ParseSheet(sheet);
|
return ParseSheet(sheet);
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<WellDrillingProcessMapDto> ParseSheet(IXLWorksheet sheet)
|
private IEnumerable<ProcessMapPlanWellDrillingDto> ParseSheet(IXLWorksheet sheet)
|
||||||
{
|
{
|
||||||
const int columnsCount = 17;
|
const int columnsCount = 17;
|
||||||
|
|
||||||
@ -172,9 +174,9 @@ public class WellDrillingProcessMapImportService : IProcessMapImportService
|
|||||||
var rowsCount = sheet.RowsUsed().Count() - headerRowsCount;
|
var rowsCount = sheet.RowsUsed().Count() - headerRowsCount;
|
||||||
|
|
||||||
if (rowsCount <= 0)
|
if (rowsCount <= 0)
|
||||||
return Array.Empty<WellDrillingProcessMapDto>();
|
return Array.Empty<ProcessMapPlanWellDrillingDto>();
|
||||||
|
|
||||||
var processMapPlans = new WellDrillingProcessMapDto[rowsCount];
|
var processMapPlans = new ProcessMapPlanWellDrillingDto[rowsCount];
|
||||||
|
|
||||||
var parseErrors = new List<string>();
|
var parseErrors = new List<string>();
|
||||||
|
|
||||||
@ -198,7 +200,7 @@ public class WellDrillingProcessMapImportService : IProcessMapImportService
|
|||||||
return processMapPlans;
|
return processMapPlans;
|
||||||
}
|
}
|
||||||
|
|
||||||
private WellDrillingProcessMapDto ParseRow(IXLRow row)
|
private ProcessMapPlanWellDrillingDto ParseRow(IXLRow row)
|
||||||
{
|
{
|
||||||
var wellSectionTypeCaption = row.Cell(columnWellSectionType).GetCellValue<string>()?.Trim().ToLower();
|
var wellSectionTypeCaption = row.Cell(columnWellSectionType).GetCellValue<string>()?.Trim().ToLower();
|
||||||
var modeName = row.Cell(columnMode).GetCellValue<string>()?.Trim().ToLower();
|
var modeName = row.Cell(columnMode).GetCellValue<string>()?.Trim().ToLower();
|
||||||
@ -217,6 +219,7 @@ public class WellDrillingProcessMapImportService : IProcessMapImportService
|
|||||||
var ropPlan = row.Cell(columnRopPlan).GetCellValue<double>();
|
var ropPlan = row.Cell(columnRopPlan).GetCellValue<double>();
|
||||||
var usageSaub = row.Cell(columnUsageSaub).GetCellValue<double>();
|
var usageSaub = row.Cell(columnUsageSaub).GetCellValue<double>();
|
||||||
var usageSpin = row.Cell(columnUsageSpin).GetCellValue<double>();
|
var usageSpin = row.Cell(columnUsageSpin).GetCellValue<double>();
|
||||||
|
var comment = row.Cell(columnComment).GetCellValue<string?>();
|
||||||
|
|
||||||
var wellSection = sections.FirstOrDefault(s => s.Caption.Trim().ToLower() == wellSectionTypeCaption)
|
var wellSection = sections.FirstOrDefault(s => s.Caption.Trim().ToLower() == wellSectionTypeCaption)
|
||||||
?? throw new FileFormatException(
|
?? throw new FileFormatException(
|
||||||
@ -320,18 +323,19 @@ public class WellDrillingProcessMapImportService : IProcessMapImportService
|
|||||||
},
|
},
|
||||||
RopPlan = ropPlan,
|
RopPlan = ropPlan,
|
||||||
UsageSaub = usageSaub,
|
UsageSaub = usageSaub,
|
||||||
UsageSpin = usageSpin
|
UsageSpin = usageSpin,
|
||||||
|
Comment = comment
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<Stream> GenerateExcelFileStreamAsync(WellDrillingProcessMapDto[] wellDrillingProcessMaps,
|
private async Task<Stream> GenerateExcelFileStreamAsync(ProcessMapPlanWellDrillingDto[] processMapPlanWellDrillings,
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
using var excelTemplateStream = (await GetExcelTemplateStreamAsync(cancellationToken)).File;
|
using var excelTemplateStream = (await GetExcelTemplateStreamAsync(cancellationToken)).File;
|
||||||
|
|
||||||
using var workbook = new XLWorkbook(excelTemplateStream, XLEventTracking.Disabled);
|
using var workbook = new XLWorkbook(excelTemplateStream, XLEventTracking.Disabled);
|
||||||
|
|
||||||
AddToWorkbook(workbook, wellDrillingProcessMaps);
|
AddToWorkbook(workbook, processMapPlanWellDrillings);
|
||||||
|
|
||||||
MemoryStream memoryStream = new();
|
MemoryStream memoryStream = new();
|
||||||
workbook.SaveAs(memoryStream, new SaveOptions { });
|
workbook.SaveAs(memoryStream, new SaveOptions { });
|
||||||
|
Loading…
Reference in New Issue
Block a user