From c2afbf4d5534e3760cbb3ab1bcfcf774b1ba9206 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Fri, 13 Jan 2023 17:28:04 +0500 Subject: [PATCH 01/17] add ConvertToPdf class add ReadMe add test to ConsoleApp1 --- .../AsbCloudInfrastructure.csproj | 2 + .../DrillingProgram/Convert/ConvertToPdf.cs | 66 +++++++++ .../DrillingProgram/Convert/ReadMe.md | 19 +++ .../DrillingProgram/DrillingProgramService.cs | 7 +- ConsoleApp1/Program.cs | 128 +++++++++++++++--- ConsoleApp1/ReadMe.md | 25 ++++ 6 files changed, 222 insertions(+), 25 deletions(-) create mode 100644 AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs create mode 100644 AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md create mode 100644 ConsoleApp1/ReadMe.md diff --git a/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj b/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj index f932c782..c9f3963d 100644 --- a/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj +++ b/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj @@ -35,9 +35,11 @@ + + diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs new file mode 100644 index 00000000..8233bd2b --- /dev/null +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs @@ -0,0 +1,66 @@ +using iTextSharp.text; +using iTextSharp.text.pdf; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using CliWrap; +using System.Threading.Tasks; + +namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert +{ + internal class ConvertToPdf + { + private readonly string[] fileExtension = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; + + public static void DoMergedAsync(IEnumerable inputFiles, string outFile) + { + using (FileStream stream = new FileStream(outFile, FileMode.Create)) + using (Document doc = new Document()) + using (PdfCopy pdf = new PdfCopy(doc, stream)) + { + doc.Open(); + PdfReader reader = null; + PdfImportedPage page = null; + inputFiles.ToList().ForEach(file => + { + reader = new PdfReader(file); + for (int i = 0; i < reader.NumberOfPages; i++) + { + page = pdf.GetImportedPage(reader, i + 1); + pdf.AddPage(page); + } + pdf.FreeReader(reader); + reader.Close(); + File.Delete(file); + }); + } + } + + private async Task StartConvertProcessAsync(string inputFileName, string outFileName) + { + var result = Cli.Wrap("/usr/bin/soffice") + .WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {outFileName}"); + await result.ExecuteAsync(); + } + + public async Task GetConverteAndMergedFileAsync(IEnumerable filesNames, string resultPath) + { + var filteredFilesNames = filesNames + .Distinct() + .Where(f => fileExtension.Any(fe => f.ToLower().EndsWith(fe))) + .ToList(); + var listFileNames = filteredFilesNames + .ToList() + .Select(o => new { + inputFile = o, + convertedFile = Path.ChangeExtension(o, ".pdf") + }); + foreach (var fileName in listFileNames) + { + if (!fileName.inputFile.ToLower().EndsWith(".pdf")) + await StartConvertProcessAsync(fileName.inputFile, fileName.convertedFile); + } + DoMergedAsync(listFileNames.Select(c => c.convertedFile), resultPath); + } + } +} diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md new file mode 100644 index 00000000..e230682d --- /dev/null +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md @@ -0,0 +1,19 @@ +КЛАСС ПРЕОБРАЗУЮЩИЙ ЧАСТИ ПРОГРАММЫ БУРЕНИЯ В ЕДИНЫЙ ФАЙЛ ПЕЧАТНОГО ФОРМАТА (pdf) + +1. На Linux сервер необходимо установить пакеты LibreOffice: + + sudo apt-get install libreoffice-writer libreoffice-calc + +2. путь до бинарника LibreOffice: +Linux - /usr/bin/soffice +Windows - C:\Program Files\LibreOffice\program\soffice.exe + +3. В массиве fileExtensions содержатся в виде стринг переменных необходимые расширения файлов +изначально обозначенные в задаче. +При необходимости список можно расширить. +На текущий момент, по логике метода класса, прикрепленные файлы +с "ненужным" или "неправильным" форматом просто не будут попадать в список на преобразование. + + + + diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs index 9ef92fd8..16ee2191 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs @@ -4,6 +4,7 @@ using AsbCloudApp.Repositories; using AsbCloudApp.Services; using AsbCloudDb.Model; using AsbCloudInfrastructure.Background; +using AsbCloudInfrastructure.Services.DrillingProgram.Convert; using Mapster; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; @@ -474,13 +475,13 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram var well = (await wellService.GetOrDefaultAsync(idWell, token))!; var resultFileName = $"Программа бурения {well.Cluster} {well.Caption}.xlsx"; var tempResultFilePath = Path.Combine(Path.GetTempPath(), "drillingProgram", resultFileName); - + var converter = new ConvertToPdf(); var workAction = async (string workId, IServiceProvider serviceProvider, CancellationToken token) => { var context = serviceProvider.GetRequiredService(); var fileService = serviceProvider.GetRequiredService(); - var files = state.Parts.Select(p => fileService.GetUrl(p.File)); - DrillingProgramMaker.UniteExcelFiles(files, tempResultFilePath, state.Parts, well); + var files = state.Parts.Select(p => fileService.GetUrl(p.File)); + await converter.GetConverteAndMergedFileAsync(files, tempResultFilePath); await fileService.MoveAsync(idWell, null, idFileCategoryDrillingProgram, resultFileName, tempResultFilePath, token); }; diff --git a/ConsoleApp1/Program.cs b/ConsoleApp1/Program.cs index 754e0194..75360a36 100644 --- a/ConsoleApp1/Program.cs +++ b/ConsoleApp1/Program.cs @@ -1,39 +1,123 @@ -using AsbCloudApp.Data; -using AsbCloudApp.Data.DailyReport; -using AsbCloudDb; -using AsbCloudDb.Model; -using AsbCloudInfrastructure; -using AsbCloudInfrastructure.Services.DailyReport; -using AsbCloudInfrastructure.Services.SAUB; -using ClosedXML.Excel; -using DocumentFormat.OpenXml.Wordprocessing; -using Microsoft.EntityFrameworkCore; -using Org.BouncyCastle.Utilities.Collections; +using iTextSharp.text.pdf; using System; -using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; -using System.Threading; using System.Threading.Tasks; +using Document = iTextSharp.text.Document; +using CliWrap; namespace ConsoleApp1 { class Program { - private static AsbCloudDbContext db = ServiceFactory.Context; - - // use ServiceFactory to make services static void Main(/*string[] args*/) { - DependencyInjection.MapsterSetup(); - var sw = System.Diagnostics.Stopwatch.StartNew(); + string[] fileExtension = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; + Console.WriteLine($"start convert"); + var inputFiles = new List(); + var resultFile = "C:\\Test\\result.pdf"; + inputFiles.Add("11112222.docx"); + inputFiles.Add("11117777.pdf"); + inputFiles.Add("22223333.xls"); + inputFiles.Add("33334444.xlsx"); - - - sw.Stop(); - Console.WriteLine($"total time: {sw.ElapsedMilliseconds} ms"); + var listOutNames = new List(); + var filteredFilesNames = inputFiles + .Distinct() + .Where(f => fileExtension.Any(fe => f.ToLower().EndsWith(fe))) + .ToList(); + foreach (var FileName in inputFiles) + { + var outputFile = Path.ChangeExtension(FileName, ".pdf"); + var outFile = StartConvertProcessAsync(FileName, outputFile); + Console.WriteLine($"convert file - {FileName}"); + Console.ReadLine(); + listOutNames.Add(outFile.Result.ToString()); + } + Console.WriteLine("merged files"); Console.ReadLine(); + DoMerged(listOutNames, resultFile); + } + + public static void DoMerged(IEnumerable inputFiles, string outFile) + { + using (FileStream stream = new FileStream(outFile, FileMode.Create)) + using (Document doc = new Document()) + using (PdfCopy pdf = new PdfCopy(doc, stream)) + { + doc.Open(); + PdfReader? reader = null; + PdfImportedPage? page = null; + inputFiles.ToList().ForEach(file => + { + reader = new PdfReader(file); + for (int i = 0; i < reader.NumberOfPages; i++) + { + page = pdf.GetImportedPage(reader, i + 1); + pdf.AddPage(page); + } + pdf.FreeReader(reader); + reader.Close(); + File.Delete(file); + }); + } + } + + //public static void StartConvertProcess(string inputFileName, string outFileName) + //{ + // using (Process pdfprocess = new Process()) + // { + // pdfprocess.StartInfo.UseShellExecute = true; + // //pdfprocess.StartInfo.LoadUserProfile = true; + // pdfprocess.StartInfo.FileName = "soffice"; + // pdfprocess.StartInfo.Arguments = $"--headless --convert-to pdf {inputFileName} --outdir {outFileName}"; + // pdfprocess.StartInfo.WorkingDirectory = "/usr/bin"; + // pdfprocess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; + // pdfprocess.Start(); + // if (!pdfprocess.WaitForExit(1000 * 60 * 1)) + // { + // pdfprocess.Kill(); + // } + // pdfprocess.Close(); + // } + //} + private static async Task StartConvertProcessAsync(string inputFileName, string outFileName) + { + //string outPath = "/home/eddie/Test/OutFiles"; + string outPath = "C:\\Test\\OutFiles"; + var result = Cli.Wrap("C:\\Program Files\\LibreOffice\\program\\soffice.exe") + .WithArguments($"-headless -convert-to pdf C:\\Test\\InFiles\\{inputFileName} -outdir {outPath}"); + await result.ExecuteAsync(); + var outFile = $"{outPath}\\{outFileName}"; + return outFile; + } + + public static async Task GetConverteAndMergedFileAsync(IEnumerable filesNames, string resultPath) + { + string[] fileExtension = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; + //var filteredFilesNames = filesNames.Distinct(); + var filteredFilesNames = filesNames + .Distinct() + .Where(f => fileExtension.Any(fe => f.ToLower().EndsWith(fe))) + .ToList(); + var listFileNames = filteredFilesNames + .ToList() + .Select(o => new { + inputFile = o, + convertedFile = Path.ChangeExtension(o, ".pdf") + }); + foreach (var excelFileName in listFileNames) + { + await StartConvertProcessAsync(excelFileName.inputFile, excelFileName.convertedFile); + Console.WriteLine($"convert file - {excelFileName.inputFile}"); + Console.ReadLine(); + } + + Console.WriteLine("merged files"); + Console.ReadLine(); + DoMerged(listFileNames.Select(c => c.convertedFile), resultPath); + } } } diff --git a/ConsoleApp1/ReadMe.md b/ConsoleApp1/ReadMe.md new file mode 100644 index 00000000..1ddf6367 --- /dev/null +++ b/ConsoleApp1/ReadMe.md @@ -0,0 +1,25 @@ +ТЕСТ РАБОТЫ КЛАССА КОНВЕРТИРУЮЩЕГО ЧАСТИ ПРОГРАММЫ БУРЕНИЯ В ЕДИНЫЙ ФАЙЛ ПЕЧАТНОГО ФОРМАТА (pdf) + +Тест настроен под проверку на винде +для проверки необходимо создать иерархию папок (в корне С:\) +C:\Test\InFiles и C:\Test\OutFiles + +Для простоты тестирования имена файлов подлежащих конвертации + "зашиты" в код + + + +Для теста/работы на линукс машинах + +на Linux сервер необходимо установить пакеты LibreOffice + +sudo apt-get install libreoffice-writer libreoffice-calc + + перед компиляцией необходимо изменить пути к файлам и папкам + +например : +C:\Test\InFiles => /home/{папка юзера}/Test/InFiles + +путь до бинарника LibreOffice: +Linux - /usr/bin/soffice +Windows - C:\Program Files\LibreOffice\program\soffice.exe \ No newline at end of file From 1b834e7752e44b37b2fd1462b557ab6e8955ab60 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Tue, 17 Jan 2023 05:14:04 +0500 Subject: [PATCH 02/17] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=84=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D0=B0=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DrillingProgram/Convert/ConvertToPdf.cs | 21 ++++++++++++------- ConsoleApp1/Program.cs | 16 ++++++++++++++ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs index 8233bd2b..807b2afe 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs @@ -45,22 +45,29 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert public async Task GetConverteAndMergedFileAsync(IEnumerable filesNames, string resultPath) { - var filteredFilesNames = filesNames + foreach (var file in filesNames) + { + var fileExt = Path.GetExtension(file); + if (fileExtension.All(fe => fileExt != fe)) + { + throw new FileFormatException($"Файл с именем: {file} - неподдерживаемого формата. Он не может быть добавлен в список файлов для конвертации и слияния в общий файл программы бурения."); + } + + } + + var listFileNames = filesNames .Distinct() - .Where(f => fileExtension.Any(fe => f.ToLower().EndsWith(fe))) - .ToList(); - var listFileNames = filteredFilesNames - .ToList() .Select(o => new { inputFile = o, convertedFile = Path.ChangeExtension(o, ".pdf") - }); + }) + .ToList(); foreach (var fileName in listFileNames) { if (!fileName.inputFile.ToLower().EndsWith(".pdf")) await StartConvertProcessAsync(fileName.inputFile, fileName.convertedFile); } DoMergedAsync(listFileNames.Select(c => c.convertedFile), resultPath); - } + } } } diff --git a/ConsoleApp1/Program.cs b/ConsoleApp1/Program.cs index 75360a36..d9ad39b1 100644 --- a/ConsoleApp1/Program.cs +++ b/ConsoleApp1/Program.cs @@ -21,12 +21,14 @@ namespace ConsoleApp1 inputFiles.Add("11117777.pdf"); inputFiles.Add("22223333.xls"); inputFiles.Add("33334444.xlsx"); + inputFiles.Add("33334444.tts"); var listOutNames = new List(); var filteredFilesNames = inputFiles .Distinct() .Where(f => fileExtension.Any(fe => f.ToLower().EndsWith(fe))) .ToList(); + matchesExtensions(inputFiles); foreach (var FileName in inputFiles) { var outputFile = Path.ChangeExtension(FileName, ".pdf"); @@ -38,6 +40,20 @@ namespace ConsoleApp1 Console.WriteLine("merged files"); Console.ReadLine(); DoMerged(listOutNames, resultFile); + + static void matchesExtensions(List inputFiles) + { + string[] fileExtension = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; + foreach (var file in inputFiles) + { + var fileExt = Path.GetExtension(file); + if (fileExtension.All(fe => fileExt != fe)) + { + throw new FileFormatException($"Файл с именем: {file} не может быть добавлен в список файлов для конвертации и слияния в общий файл программы бурения. Не поддерживаемый формат файла"); + } + + } + } } public static void DoMerged(IEnumerable inputFiles, string outFile) From 3e128c5cba549ef1f2e5f94644135093b392cf99 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Tue, 17 Jan 2023 11:11:40 +0500 Subject: [PATCH 03/17] refact GetConverteAndMergedFileAsync --- .../DrillingProgram/Convert/ConvertToPdf.cs | 18 +++++++++++------- .../Services/DrillingProgram/Convert/ReadMe.md | 6 ++++++ .../DrillingProgram/DrillingProgramService.cs | 2 +- ConsoleApp1/Program.cs | 2 ++ 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs index 807b2afe..41bd29e4 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs @@ -5,6 +5,7 @@ using System.IO; using System.Linq; using CliWrap; using System.Threading.Tasks; +using System.Threading; namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert { @@ -36,14 +37,14 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert } } - private async Task StartConvertProcessAsync(string inputFileName, string outFileName) + private async Task StartConvertProcessAsync(string inputFileName, string outFileName, CancellationToken token) { var result = Cli.Wrap("/usr/bin/soffice") - .WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {outFileName}"); - await result.ExecuteAsync(); + .WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {outFileName}"); + await result.ExecuteAsync(token); } - public async Task GetConverteAndMergedFileAsync(IEnumerable filesNames, string resultPath) + public async Task GetConverteAndMergedFileAsync(IEnumerable filesNames, string resultPath, CancellationToken token) { foreach (var file in filesNames) { @@ -52,7 +53,6 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert { throw new FileFormatException($"Файл с именем: {file} - неподдерживаемого формата. Он не может быть добавлен в список файлов для конвертации и слияния в общий файл программы бурения."); } - } var listFileNames = filesNames @@ -64,8 +64,12 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert .ToList(); foreach (var fileName in listFileNames) { - if (!fileName.inputFile.ToLower().EndsWith(".pdf")) - await StartConvertProcessAsync(fileName.inputFile, fileName.convertedFile); + var fileExt = Path.GetExtension(fileName.inputFile); + if (fileExt != ".pdf") + { + //FileInfo fileInfo = new FileInfo(fileName.inputFile); + await StartConvertProcessAsync(fileName.inputFile, fileName.convertedFile, token); + } } DoMergedAsync(listFileNames.Select(c => c.convertedFile), resultPath); } diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md index e230682d..ce426589 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md @@ -15,5 +15,11 @@ Windows - C:\Program Files\LibreOffice\program\soffice.exe с "ненужным" или "неправильным" форматом просто не будут попадать в список на преобразование. +--список сигнатур файлов разных расширений +1.xlsx +(xlsDoc[0]==0x50) && (xlsDoc[1]==0x4B) +2.docx + + diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs index 16ee2191..ef1075d8 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs @@ -481,7 +481,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram var context = serviceProvider.GetRequiredService(); var fileService = serviceProvider.GetRequiredService(); var files = state.Parts.Select(p => fileService.GetUrl(p.File)); - await converter.GetConverteAndMergedFileAsync(files, tempResultFilePath); + await converter.GetConverteAndMergedFileAsync(files, tempResultFilePath, token); await fileService.MoveAsync(idWell, null, idFileCategoryDrillingProgram, resultFileName, tempResultFilePath, token); }; diff --git a/ConsoleApp1/Program.cs b/ConsoleApp1/Program.cs index d9ad39b1..1a5fe613 100644 --- a/ConsoleApp1/Program.cs +++ b/ConsoleApp1/Program.cs @@ -28,6 +28,8 @@ namespace ConsoleApp1 .Distinct() .Where(f => fileExtension.Any(fe => f.ToLower().EndsWith(fe))) .ToList(); + FileInfo fileInfo = new FileInfo(resultFile); + matchesExtensions(inputFiles); foreach (var FileName in inputFiles) { From 5367f3e85f219823390e501cac858faaaf7b785f Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Tue, 17 Jan 2023 12:09:58 +0500 Subject: [PATCH 04/17] rename DoMerged => MergeFiles refact file extension validate --- .../Services/DrillingProgram/Convert/ConvertToPdf.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs index 41bd29e4..f379160b 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs @@ -11,9 +11,9 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert { internal class ConvertToPdf { - private readonly string[] fileExtension = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; + private readonly string[] filesExtensions = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; - public static void DoMergedAsync(IEnumerable inputFiles, string outFile) + public static void MergeFiles(IEnumerable inputFiles, string outFile) { using (FileStream stream = new FileStream(outFile, FileMode.Create)) using (Document doc = new Document()) @@ -49,7 +49,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert foreach (var file in filesNames) { var fileExt = Path.GetExtension(file); - if (fileExtension.All(fe => fileExt != fe)) + if (!filesExtensions.Contains(fileExt)) { throw new FileFormatException($"Файл с именем: {file} - неподдерживаемого формата. Он не может быть добавлен в список файлов для конвертации и слияния в общий файл программы бурения."); } @@ -66,12 +66,11 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert { var fileExt = Path.GetExtension(fileName.inputFile); if (fileExt != ".pdf") - { - //FileInfo fileInfo = new FileInfo(fileName.inputFile); + { await StartConvertProcessAsync(fileName.inputFile, fileName.convertedFile, token); } } - DoMergedAsync(listFileNames.Select(c => c.convertedFile), resultPath); + MergeFiles(listFileNames.Select(c => c.convertedFile), resultPath); } } } From e86e1bb8547b7f206fc65688ba5d2aaefd678604 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Wed, 18 Jan 2023 11:31:58 +0500 Subject: [PATCH 05/17] refact --- .../DrillingProgram/Convert/ConvertToPdf.cs | 56 +++++++++---------- ConsoleApp1/Program.cs | 36 ++++++------ 2 files changed, 41 insertions(+), 51 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs index f379160b..6454b560 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs @@ -9,35 +9,31 @@ using System.Threading; namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert { +#nullable enable internal class ConvertToPdf { private readonly string[] filesExtensions = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; - public static void MergeFiles(IEnumerable inputFiles, string outFile) + private static void MergeFiles(IEnumerable inputFiles, string outFile) { - using (FileStream stream = new FileStream(outFile, FileMode.Create)) - using (Document doc = new Document()) - using (PdfCopy pdf = new PdfCopy(doc, stream)) - { - doc.Open(); - PdfReader reader = null; - PdfImportedPage page = null; - inputFiles.ToList().ForEach(file => + using var stream = new FileStream(outFile, FileMode.Create); + using var doc = new Document(); + using var pdf = new PdfCopy(doc, stream); + doc.Open(); + var inputFilesList = inputFiles.ToList(); + foreach (var file in inputFilesList) + { + var reader = new PdfReader(file); + for (int i = 0; i < reader.NumberOfPages; i++) { - reader = new PdfReader(file); - for (int i = 0; i < reader.NumberOfPages; i++) - { - page = pdf.GetImportedPage(reader, i + 1); - pdf.AddPage(page); - } - pdf.FreeReader(reader); - reader.Close(); - File.Delete(file); - }); - } + pdf.AddPage(pdf.GetImportedPage(reader, i + 1)); + } + pdf.FreeReader(reader); + reader.Close(); + }; } - private async Task StartConvertProcessAsync(string inputFileName, string outFileName, CancellationToken token) + private static async Task StartConvertProcessAsync(string inputFileName, string outFileName, CancellationToken token) { var result = Cli.Wrap("/usr/bin/soffice") .WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {outFileName}"); @@ -46,20 +42,17 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert public async Task GetConverteAndMergedFileAsync(IEnumerable filesNames, string resultPath, CancellationToken token) { - foreach (var file in filesNames) + var badFiles = filesNames.Where(f => !filesExtensions.Contains(Path.GetExtension(f))); + if (badFiles.Any()) { - var fileExt = Path.GetExtension(file); - if (!filesExtensions.Contains(fileExt)) - { - throw new FileFormatException($"Файл с именем: {file} - неподдерживаемого формата. Он не может быть добавлен в список файлов для конвертации и слияния в общий файл программы бурения."); - } + throw new FileFormatException($"Файлы: {string.Join(", ", badFiles)} - неподдерживаемого формата. " + + $"Они не могут быть добавлены в список файлов для конвертации и слияния в общий файл программы бурения."); } - var listFileNames = filesNames .Distinct() - .Select(o => new { - inputFile = o, - convertedFile = Path.ChangeExtension(o, ".pdf") + .Select(f => new { + inputFile = f, + convertedFile = Path.ChangeExtension(f, ".pdf") }) .ToList(); foreach (var fileName in listFileNames) @@ -73,4 +66,5 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert MergeFiles(listFileNames.Select(c => c.convertedFile), resultPath); } } +#nullable disable } diff --git a/ConsoleApp1/Program.cs b/ConsoleApp1/Program.cs index 1a5fe613..69e9ae49 100644 --- a/ConsoleApp1/Program.cs +++ b/ConsoleApp1/Program.cs @@ -21,7 +21,7 @@ namespace ConsoleApp1 inputFiles.Add("11117777.pdf"); inputFiles.Add("22223333.xls"); inputFiles.Add("33334444.xlsx"); - inputFiles.Add("33334444.tts"); + //inputFiles.Add("33334444.tts"); var listOutNames = new List(); var filteredFilesNames = inputFiles @@ -30,7 +30,7 @@ namespace ConsoleApp1 .ToList(); FileInfo fileInfo = new FileInfo(resultFile); - matchesExtensions(inputFiles); + //matchesExtensions(inputFiles); foreach (var FileName in inputFiles) { var outputFile = Path.ChangeExtension(FileName, ".pdf"); @@ -60,26 +60,22 @@ namespace ConsoleApp1 public static void DoMerged(IEnumerable inputFiles, string outFile) { - using (FileStream stream = new FileStream(outFile, FileMode.Create)) - using (Document doc = new Document()) - using (PdfCopy pdf = new PdfCopy(doc, stream)) + using var stream = new FileStream(outFile, FileMode.Create); + using var doc = new Document(); + using var pdf = new PdfCopy(doc, stream); + doc.Open(); + var inputFilesList = inputFiles.ToList(); + foreach (var file in inputFilesList) { - doc.Open(); - PdfReader? reader = null; - PdfImportedPage? page = null; - inputFiles.ToList().ForEach(file => + var reader = new PdfReader(file); + for (int i = 0; i < reader.NumberOfPages; i++) { - reader = new PdfReader(file); - for (int i = 0; i < reader.NumberOfPages; i++) - { - page = pdf.GetImportedPage(reader, i + 1); - pdf.AddPage(page); - } - pdf.FreeReader(reader); - reader.Close(); - File.Delete(file); - }); - } + PdfImportedPage page = pdf.GetImportedPage(reader, i + 1); + pdf.AddPage(page); + } + pdf.FreeReader(reader); + reader.Close(); + }; } //public static void StartConvertProcess(string inputFileName, string outFileName) From 11ccfc8be1b73c401b329237435f866c0176f4f2 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Wed, 18 Jan 2023 12:14:13 +0500 Subject: [PATCH 06/17] =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20readme=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/DrillingProgram/Convert/ReadMe.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md index ce426589..6f493be8 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md @@ -11,14 +11,6 @@ Windows - C:\Program Files\LibreOffice\program\soffice.exe 3. В массиве fileExtensions содержатся в виде стринг переменных необходимые расширения файлов изначально обозначенные в задаче. При необходимости список можно расширить. -На текущий момент, по логике метода класса, прикрепленные файлы -с "ненужным" или "неправильным" форматом просто не будут попадать в список на преобразование. - - ---список сигнатур файлов разных расширений -1.xlsx -(xlsDoc[0]==0x50) && (xlsDoc[1]==0x4B) -2.docx From 350759f1c6ddb5731bea55dce3d5fe538010ca30 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Fri, 20 Jan 2023 08:31:38 +0500 Subject: [PATCH 07/17] =?UTF-8?q?-=D1=82=D0=B8=D0=BF=D1=8B=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B4=D0=BE=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D0=B0=20=D0=BA=D0=BE=D0=BD=D0=B2=D0=B5=D1=80=D1=82=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D0=BA=D0=B8=D0=B5=20-=D1=83=D0=B4=D0=B0=D0=BB=D1=8F?= =?UTF-8?q?=D1=8E=D1=82=D1=81=D1=8F=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B5=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DrillingProgram/Convert/ConvertToPdf.cs | 20 +++++++++++++------ .../DrillingProgram/Convert/ReadMe.md | 6 ++++++ .../DrillingProgram/DrillingProgramService.cs | 11 ++++++---- .../Controllers/DrillingProgramController.cs | 7 +++++-- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs index 6454b560..89e63335 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs @@ -10,9 +10,9 @@ using System.Threading; namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert { #nullable enable - internal class ConvertToPdf + sealed internal class ConvertToPdf { - private readonly string[] filesExtensions = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; + private static readonly string[] filesExtensions = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; private static void MergeFiles(IEnumerable inputFiles, string outFile) { @@ -35,12 +35,14 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert private static async Task StartConvertProcessAsync(string inputFileName, string outFileName, CancellationToken token) { - var result = Cli.Wrap("/usr/bin/soffice") - .WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {outFileName}"); + //var result = Cli.Wrap("/usr/bin/soffice") + // .WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {outFileName}"); + var result = Cli.Wrap("C:\\Program Files\\LibreOffice\\program\\soffice.exe") + .WithArguments($"-headless -convert-to pdf {inputFileName} --outdir {outFileName}"); await result.ExecuteAsync(token); } - - public async Task GetConverteAndMergedFileAsync(IEnumerable filesNames, string resultPath, CancellationToken token) + + public static async Task GetConverteAndMergedFileAsync(IEnumerable filesNames, string resultPath, CancellationToken token) { var badFiles = filesNames.Where(f => !filesExtensions.Contains(Path.GetExtension(f))); if (badFiles.Any()) @@ -55,15 +57,21 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert convertedFile = Path.ChangeExtension(f, ".pdf") }) .ToList(); + var listFilesToDelete = new List(); foreach (var fileName in listFileNames) { var fileExt = Path.GetExtension(fileName.inputFile); if (fileExt != ".pdf") { await StartConvertProcessAsync(fileName.inputFile, fileName.convertedFile, token); + listFilesToDelete.Add(fileName.convertedFile); } } MergeFiles(listFileNames.Select(c => c.convertedFile), resultPath); + foreach (var file in listFilesToDelete) + { + File.Delete(file); + } } } #nullable disable diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md index 6f493be8..952fada8 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md @@ -12,6 +12,12 @@ Windows - C:\Program Files\LibreOffice\program\soffice.exe изначально обозначенные в задаче. При необходимости список можно расширить. +4. Если для тестирования исходники необходимо запустить на машине под управлением Windows +необходимо поменять содержание переменной result в методе StartConvertProcessAsync на : + + var result = Cli.Wrap("C:\\Program Files\\LibreOffice\\program\\soffice.exe") + .WithArguments($"-headless -convert-to pdf {inputFileName} --outdir {outFileName}"); + diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs index ef1075d8..c27dfb2d 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs @@ -30,6 +30,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram private readonly IConfiguration configuration; private readonly BackgroundWorker backgroundWorker; private readonly IEmailService emailService; + private readonly IServiceProvider serviceProvider; private const int idFileCategoryDrillingProgram = 1000; private const int idFileCategoryDrillingProgramPartsStart = 1001; @@ -58,7 +59,8 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram IWellService wellService, IConfiguration configuration, BackgroundWorker backgroundWorker, - IEmailService emailService) + IEmailService emailService, + IServiceProvider serviceProvider) { this.context = context; this.fileService = fileService; @@ -67,6 +69,8 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram this.configuration = configuration; this.backgroundWorker = backgroundWorker; this.emailService = emailService; + this.serviceProvider = serviceProvider; + } public async Task> GetAvailableUsers(int idWell, CancellationToken token = default) @@ -474,14 +478,13 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram { var well = (await wellService.GetOrDefaultAsync(idWell, token))!; var resultFileName = $"Программа бурения {well.Cluster} {well.Caption}.xlsx"; - var tempResultFilePath = Path.Combine(Path.GetTempPath(), "drillingProgram", resultFileName); - var converter = new ConvertToPdf(); + var tempResultFilePath = Path.Combine(Path.GetTempPath(), "drillingProgram", resultFileName); var workAction = async (string workId, IServiceProvider serviceProvider, CancellationToken token) => { var context = serviceProvider.GetRequiredService(); var fileService = serviceProvider.GetRequiredService(); var files = state.Parts.Select(p => fileService.GetUrl(p.File)); - await converter.GetConverteAndMergedFileAsync(files, tempResultFilePath, token); + await ConvertToPdf.GetConverteAndMergedFileAsync(files, tempResultFilePath, token); await fileService.MoveAsync(idWell, null, idFileCategoryDrillingProgram, resultFileName, tempResultFilePath, token); }; diff --git a/AsbCloudWebApi/Controllers/DrillingProgramController.cs b/AsbCloudWebApi/Controllers/DrillingProgramController.cs index 5b7f2c99..2be612bd 100644 --- a/AsbCloudWebApi/Controllers/DrillingProgramController.cs +++ b/AsbCloudWebApi/Controllers/DrillingProgramController.cs @@ -126,8 +126,11 @@ namespace AsbCloudWebApi.Controllers var fileName = files[0].FileName; - if (!fileName.EndsWith(".xlsx")) - return BadRequest(ArgumentInvalidException.MakeValidationError("file", "Файл должен быть xlsx")); + // TODO: в текущем контексте доработки по ковертации + // данная проверка будет некорректна, т.к. планируется загружать + // файлы разных форматов + //if (!fileName.EndsWith(".xlsx")) + // return BadRequest(ArgumentInvalidException.MakeValidationError("file", "Файл должен быть xlsx")); var fileStream = files[0].OpenReadStream(); var result = await drillingProgramService.AddFile(idWell, idFileCategory, (int)idUser, fileName, fileStream, token); From 907fcc88e8dc369b61e1b20bb7c27fcb7adb2f2c Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Wed, 25 Jan 2023 05:32:32 +0500 Subject: [PATCH 08/17] -refact path convert file --- .../DrillingProgram/Convert/ConvertToPdf.cs | 33 ++++++++----------- .../DrillingProgram/DrillingProgramService.cs | 7 ++-- .../Controllers/DrillingProgramController.cs | 8 +---- 3 files changed, 19 insertions(+), 29 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs index 89e63335..880df0f8 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs @@ -33,45 +33,40 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert }; } - private static async Task StartConvertProcessAsync(string inputFileName, string outFileName, CancellationToken token) + private static async Task StartConvertProcessAsync(string inputFileName, string resultFileDir,CancellationToken token) { //var result = Cli.Wrap("/usr/bin/soffice") // .WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {outFileName}"); - var result = Cli.Wrap("C:\\Program Files\\LibreOffice\\program\\soffice.exe") - .WithArguments($"-headless -convert-to pdf {inputFileName} --outdir {outFileName}"); - await result.ExecuteAsync(token); + var command = Cli.Wrap("C:\\Program Files\\LibreOffice\\program\\soffice.exe") + .WithArguments($"-headless -convert-to pdf {inputFileName} --outdir {resultFileDir}"); + await command.ExecuteAsync(token); } - public static async Task GetConverteAndMergedFileAsync(IEnumerable filesNames, string resultPath, CancellationToken token) + public static async Task GetConverteAndMergedFileAsync(IEnumerable files, string resultPath, string convertedFilesDir,CancellationToken token) { - var badFiles = filesNames.Where(f => !filesExtensions.Contains(Path.GetExtension(f))); + var badFiles = files.Where(f => !filesExtensions.Contains(Path.GetExtension(f))); if (badFiles.Any()) { throw new FileFormatException($"Файлы: {string.Join(", ", badFiles)} - неподдерживаемого формата. " + $"Они не могут быть добавлены в список файлов для конвертации и слияния в общий файл программы бурения."); } - var listFileNames = filesNames + var listFiles = files .Distinct() .Select(f => new { inputFile = f, - convertedFile = Path.ChangeExtension(f, ".pdf") + convertedFile = Path.Combine(convertedFilesDir,"pdf",Path.ChangeExtension(Path.GetFileName(f), ".pdf")) }) .ToList(); - var listFilesToDelete = new List(); - foreach (var fileName in listFileNames) - { - var fileExt = Path.GetExtension(fileName.inputFile); + foreach (var file in listFiles) + { + var fileExt = Path.GetExtension(file.inputFile); if (fileExt != ".pdf") { - await StartConvertProcessAsync(fileName.inputFile, fileName.convertedFile, token); - listFilesToDelete.Add(fileName.convertedFile); + await StartConvertProcessAsync(file.inputFile, Path.GetDirectoryName(file.convertedFile)!,token); } } - MergeFiles(listFileNames.Select(c => c.convertedFile), resultPath); - foreach (var file in listFilesToDelete) - { - File.Delete(file); - } + MergeFiles(listFiles.Select(c => c.convertedFile), resultPath); + Directory.Delete(Path.Combine(convertedFilesDir,"pdf"),true); } } #nullable disable diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs index c27dfb2d..531da7d3 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs @@ -477,14 +477,15 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram if (!backgroundWorker.Contains(workId)) { var well = (await wellService.GetOrDefaultAsync(idWell, token))!; - var resultFileName = $"Программа бурения {well.Cluster} {well.Caption}.xlsx"; - var tempResultFilePath = Path.Combine(Path.GetTempPath(), "drillingProgram", resultFileName); + var resultFileName = $"Программа бурения {well.Cluster} {well.Caption}.pdf"; + var convertedFilesDir = Path.Combine(Path.GetTempPath(), "drillingProgram", $"{well.Cluster}_{well.Caption}"); + var tempResultFilePath = Path.Combine(convertedFilesDir, resultFileName); var workAction = async (string workId, IServiceProvider serviceProvider, CancellationToken token) => { var context = serviceProvider.GetRequiredService(); var fileService = serviceProvider.GetRequiredService(); var files = state.Parts.Select(p => fileService.GetUrl(p.File)); - await ConvertToPdf.GetConverteAndMergedFileAsync(files, tempResultFilePath, token); + await ConvertToPdf.GetConverteAndMergedFileAsync(files, tempResultFilePath, convertedFilesDir, token); await fileService.MoveAsync(idWell, null, idFileCategoryDrillingProgram, resultFileName, tempResultFilePath, token); }; diff --git a/AsbCloudWebApi/Controllers/DrillingProgramController.cs b/AsbCloudWebApi/Controllers/DrillingProgramController.cs index 2be612bd..fc4eeb11 100644 --- a/AsbCloudWebApi/Controllers/DrillingProgramController.cs +++ b/AsbCloudWebApi/Controllers/DrillingProgramController.cs @@ -125,13 +125,7 @@ namespace AsbCloudWebApi.Controllers return BadRequest(ArgumentInvalidException.MakeValidationError(nameof(files), "at list 1 file should be uploaded")); var fileName = files[0].FileName; - - // TODO: в текущем контексте доработки по ковертации - // данная проверка будет некорректна, т.к. планируется загружать - // файлы разных форматов - //if (!fileName.EndsWith(".xlsx")) - // return BadRequest(ArgumentInvalidException.MakeValidationError("file", "Файл должен быть xlsx")); - + var fileStream = files[0].OpenReadStream(); var result = await drillingProgramService.AddFile(idWell, idFileCategory, (int)idUser, fileName, fileStream, token); From 325c5054fe5f1d09cf442d94659d2478861da33a Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Wed, 25 Jan 2023 05:41:29 +0500 Subject: [PATCH 09/17] cleaning up unnecessary dependencies --- .../Services/DrillingProgram/DrillingProgramService.cs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs index 531da7d3..5083237e 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs @@ -29,8 +29,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram private readonly IWellService wellService; private readonly IConfiguration configuration; private readonly BackgroundWorker backgroundWorker; - private readonly IEmailService emailService; - private readonly IServiceProvider serviceProvider; + private readonly IEmailService emailService; private const int idFileCategoryDrillingProgram = 1000; private const int idFileCategoryDrillingProgramPartsStart = 1001; @@ -59,8 +58,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram IWellService wellService, IConfiguration configuration, BackgroundWorker backgroundWorker, - IEmailService emailService, - IServiceProvider serviceProvider) + IEmailService emailService) { this.context = context; this.fileService = fileService; @@ -69,8 +67,6 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram this.configuration = configuration; this.backgroundWorker = backgroundWorker; this.emailService = emailService; - this.serviceProvider = serviceProvider; - } public async Task> GetAvailableUsers(int idWell, CancellationToken token = default) From b7f1962c6f300347cd62252cbbcec22d9e62bee7 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Thu, 26 Jan 2023 15:25:09 +0500 Subject: [PATCH 10/17] valid file extension --- .../DrillingProgram/DrillingProgramService.cs | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs index 5083237e..32773c5d 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs @@ -51,6 +51,8 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram private const int idStateReady = 3; private const int idStateError = 4; + private static readonly string[] filePermittedExt = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; + public DrillingProgramService( IAsbCloudDbContext context, FileService fileService, @@ -161,13 +163,23 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram await EnqueueMakeProgramWorkAsync(idWell, state, token); return state; } - + private bool ValidExtFile(string file) + { + var fileExt = Path.GetExtension(file); + var badExt = Array.Find(filePermittedExt, e => e == fileExt); + if (badExt is null) + return false; + return true; + } public async Task AddFile(int idWell, int idFileCategory, int idUser, string fileFullName, System.IO.Stream fileStream, CancellationToken token = default) { + if (!ValidExtFile(fileFullName)) + throw new FileFormatException($"Файл {fileFullName} - неподдерживаемого формата. Файл не может быть загружен. "); + var part = await context.DrillingProgramParts - .Include(p => p.RelatedUsers) - .ThenInclude(r => r.User) - .FirstOrDefaultAsync(p => p.IdWell == idWell && p.IdFileCategory == idFileCategory, token); + .Include(p => p.RelatedUsers) + .ThenInclude(r => r.User) + .FirstOrDefaultAsync(p => p.IdWell == idWell && p.IdFileCategory == idFileCategory, token); if (part == null) throw new ArgumentInvalidException($"DrillingProgramPart id == {idFileCategory} does not exist", nameof(idFileCategory)); @@ -465,6 +477,8 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram return part; } + + private async Task EnqueueMakeProgramWorkAsync(int idWell, DrillingProgramStateDto state, CancellationToken token) { if (state.IdState == idStateCreating) From f0d316cf4011033a156cbd5390ead38972ec2532 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Thu, 26 Jan 2023 15:28:19 +0500 Subject: [PATCH 11/17] refact convert process command --- .../Services/DrillingProgram/Convert/ConvertToPdf.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs index 880df0f8..4c659e41 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs @@ -34,11 +34,9 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert } private static async Task StartConvertProcessAsync(string inputFileName, string resultFileDir,CancellationToken token) - { - //var result = Cli.Wrap("/usr/bin/soffice") - // .WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {outFileName}"); - var command = Cli.Wrap("C:\\Program Files\\LibreOffice\\program\\soffice.exe") - .WithArguments($"-headless -convert-to pdf {inputFileName} --outdir {resultFileDir}"); + { + var command = Cli.Wrap("/usr/bin/soffice") + .WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {resultFileDir}"); await command.ExecuteAsync(token); } From 1d618302f83ee71127aa4d5295e2305548df2c65 Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Fri, 27 Jan 2023 10:11:04 +0500 Subject: [PATCH 12/17] Format code. --- .../DrillingProgram/Convert/ConvertToPdf.cs | 35 ++++++++++--------- .../DrillingProgram/DrillingProgramService.cs | 24 +++++-------- 2 files changed, 27 insertions(+), 32 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs index 4c659e41..b2043a10 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs @@ -12,7 +12,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert #nullable enable sealed internal class ConvertToPdf { - private static readonly string[] filesExtensions = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; + internal static readonly string[] filesExtensions = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; private static void MergeFiles(IEnumerable inputFiles, string outFile) { @@ -20,27 +20,27 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert using var doc = new Document(); using var pdf = new PdfCopy(doc, stream); doc.Open(); - var inputFilesList = inputFiles.ToList(); - foreach (var file in inputFilesList) - { + var inputFilesList = inputFiles.ToList(); + foreach (var file in inputFilesList) + { var reader = new PdfReader(file); for (int i = 0; i < reader.NumberOfPages; i++) { pdf.AddPage(pdf.GetImportedPage(reader, i + 1)); } pdf.FreeReader(reader); - reader.Close(); + reader.Close(); }; } - private static async Task StartConvertProcessAsync(string inputFileName, string resultFileDir,CancellationToken token) - { + private static async Task StartConvertProcessAsync(string inputFileName, string resultFileDir, CancellationToken token) + { var command = Cli.Wrap("/usr/bin/soffice") .WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {resultFileDir}"); await command.ExecuteAsync(token); } - - public static async Task GetConverteAndMergedFileAsync(IEnumerable files, string resultPath, string convertedFilesDir,CancellationToken token) + + public static async Task GetConverteAndMergedFileAsync(IEnumerable files, string resultPath, string convertedFilesDir, CancellationToken token) { var badFiles = files.Where(f => !filesExtensions.Contains(Path.GetExtension(f))); if (badFiles.Any()) @@ -50,22 +50,23 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert } var listFiles = files .Distinct() - .Select(f => new { + .Select(f => new + { inputFile = f, - convertedFile = Path.Combine(convertedFilesDir,"pdf",Path.ChangeExtension(Path.GetFileName(f), ".pdf")) + convertedFile = Path.Combine(convertedFilesDir, "pdf", Path.ChangeExtension(Path.GetFileName(f), ".pdf")) }) .ToList(); foreach (var file in listFiles) - { - var fileExt = Path.GetExtension(file.inputFile); + { + var fileExt = Path.GetExtension(file.inputFile).ToLower(); if (fileExt != ".pdf") - { - await StartConvertProcessAsync(file.inputFile, Path.GetDirectoryName(file.convertedFile)!,token); + { + await StartConvertProcessAsync(file.inputFile, Path.GetDirectoryName(file.convertedFile)!, token); } } MergeFiles(listFiles.Select(c => c.convertedFile), resultPath); - Directory.Delete(Path.Combine(convertedFilesDir,"pdf"),true); - } + Directory.Delete(Path.Combine(convertedFilesDir, "pdf"), true); + } } #nullable disable } diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs index 32773c5d..00d2c46e 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs @@ -51,7 +51,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram private const int idStateReady = 3; private const int idStateError = 4; - private static readonly string[] filePermittedExt = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; + private static readonly string[] validFileExtensions = ConvertToPdf.filesExtensions; public DrillingProgramService( IAsbCloudDbContext context, @@ -163,18 +163,17 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram await EnqueueMakeProgramWorkAsync(idWell, state, token); return state; } - private bool ValidExtFile(string file) + + private static bool IsFileExtensionValid(string file) { - var fileExt = Path.GetExtension(file); - var badExt = Array.Find(filePermittedExt, e => e == fileExt); - if (badExt is null) - return false; - return true; + var fileExt = Path.GetExtension(file).ToLower(); + return validFileExtensions.Contains(fileExt); } - public async Task AddFile(int idWell, int idFileCategory, int idUser, string fileFullName, System.IO.Stream fileStream, CancellationToken token = default) + + public async Task AddFile(int idWell, int idFileCategory, int idUser, string fileFullName, Stream fileStream, CancellationToken token = default) { - if (!ValidExtFile(fileFullName)) - throw new FileFormatException($"Файл {fileFullName} - неподдерживаемого формата. Файл не может быть загружен. "); + if (!IsFileExtensionValid(fileFullName)) + throw new FileFormatException($"Файл {fileFullName} - неподдерживаемого формата. Файл не может быть загружен."); var part = await context.DrillingProgramParts .Include(p => p.RelatedUsers) @@ -346,9 +345,6 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram await NotifyPublisherOnFullAccepAsync(fileMarkDto, token); } } - - - return result; } @@ -477,8 +473,6 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram return part; } - - private async Task EnqueueMakeProgramWorkAsync(int idWell, DrillingProgramStateDto state, CancellationToken token) { if (state.IdState == idStateCreating) From 46074b6bd1d9f3e8836b3e2e366976f58c0955f9 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Fri, 27 Jan 2023 17:31:43 +0500 Subject: [PATCH 13/17] OS identification and build start process option --- .../DrillingProgram/Convert/ConvertToPdf.cs | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs index b2043a10..baf40eab 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs @@ -6,6 +6,7 @@ using System.Linq; using CliWrap; using System.Threading.Tasks; using System.Threading; +using System; namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert { @@ -33,10 +34,30 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert }; } + private static (string programFile, string programArg) getOptionsStartupProcess (string inputFileName, string resultFileDir) + { + (string programFile, string programArg) startupOptions; + if (OperatingSystem.IsWindows()) + { + startupOptions.programFile = "C:\\Program Files\\LibreOffice\\program\\soffice.exe"; + startupOptions.programArg = $"-headless -convert-to pdf {inputFileName} --outdir {resultFileDir}"; + return startupOptions; + } + if(OperatingSystem.IsLinux()) + { + startupOptions.programFile = "/usr/bin/soffice"; + startupOptions.programArg = $"--headless --convert-to pdf {inputFileName} --outdir {resultFileDir}"; + return (startupOptions); + } + + throw new NotSupportedException ("Вызов процесса в текущей операционной системе не возможен"); + } + private static async Task StartConvertProcessAsync(string inputFileName, string resultFileDir, CancellationToken token) { - var command = Cli.Wrap("/usr/bin/soffice") - .WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {resultFileDir}"); + var startupOptions = getOptionsStartupProcess(inputFileName, resultFileDir); + var command = Cli.Wrap(startupOptions.programFile) + .WithArguments(startupOptions.programArg); await command.ExecuteAsync(token); } From dd0e49be0ad71323edf982eac515ed9757a89419 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Fri, 27 Jan 2023 18:16:25 +0500 Subject: [PATCH 14/17] added light console app for test "OS detection" --- ConsoleApp1/Program.cs | 107 ++++++++++++------ .../PublishProfiles/FolderProfile.pubxml | 17 +++ 2 files changed, 88 insertions(+), 36 deletions(-) create mode 100644 ConsoleApp1/Properties/PublishProfiles/FolderProfile.pubxml diff --git a/ConsoleApp1/Program.cs b/ConsoleApp1/Program.cs index 69e9ae49..0336fb7e 100644 --- a/ConsoleApp1/Program.cs +++ b/ConsoleApp1/Program.cs @@ -13,49 +13,62 @@ namespace ConsoleApp1 { static void Main(/*string[] args*/) { - string[] fileExtension = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; - Console.WriteLine($"start convert"); - var inputFiles = new List(); - var resultFile = "C:\\Test\\result.pdf"; - inputFiles.Add("11112222.docx"); - inputFiles.Add("11117777.pdf"); - inputFiles.Add("22223333.xls"); - inputFiles.Add("33334444.xlsx"); - //inputFiles.Add("33334444.tts"); + // string[] fileExtension = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; + // Console.WriteLine($"start convert"); + // var inputFiles = new List(); + // var resultFile = "C:\\Test\\result.pdf"; + // inputFiles.Add("11112222.docx"); + // inputFiles.Add("11117777.pdf"); + // inputFiles.Add("22223333.xls"); + // inputFiles.Add("33334444.xlsx"); + // //inputFiles.Add("33334444.tts"); - var listOutNames = new List(); - var filteredFilesNames = inputFiles - .Distinct() - .Where(f => fileExtension.Any(fe => f.ToLower().EndsWith(fe))) - .ToList(); - FileInfo fileInfo = new FileInfo(resultFile); + // var listOutNames = new List(); + // var filteredFilesNames = inputFiles + // .Distinct() + // .Where(f => fileExtension.Any(fe => f.ToLower().EndsWith(fe))) + // .ToList(); + // FileInfo fileInfo = new FileInfo(resultFile); - //matchesExtensions(inputFiles); - foreach (var FileName in inputFiles) + // //matchesExtensions(inputFiles); + // foreach (var FileName in inputFiles) + // { + // var outputFile = Path.ChangeExtension(FileName, ".pdf"); + // var outFile = StartConvertProcessAsync(FileName, outputFile); + // Console.WriteLine($"convert file - {FileName}"); + // Console.ReadLine(); + // listOutNames.Add(outFile.Result.ToString()); + // } + // Console.WriteLine("merged files"); + // Console.ReadLine(); + // DoMerged(listOutNames, resultFile); + + + + //static void matchesExtensions(List inputFiles) + // { + // string[] fileExtension = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; + // foreach (var file in inputFiles) + // { + // var fileExt = Path.GetExtension(file); + // if (fileExtension.All(fe => fileExt != fe)) + // { + // throw new FileFormatException($"Файл с именем: {file} не может быть добавлен в список файлов для конвертации и слияния в общий файл программы бурения. Не поддерживаемый формат файла"); + // } + + // } + // } + if (OperatingSystem.IsWindows()) { - var outputFile = Path.ChangeExtension(FileName, ".pdf"); - var outFile = StartConvertProcessAsync(FileName, outputFile); - Console.WriteLine($"convert file - {FileName}"); + Console.WriteLine("win"); Console.ReadLine(); - listOutNames.Add(outFile.Result.ToString()); } - Console.WriteLine("merged files"); - Console.ReadLine(); - DoMerged(listOutNames, resultFile); - - static void matchesExtensions(List inputFiles) + if (OperatingSystem.IsLinux()) { - string[] fileExtension = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; - foreach (var file in inputFiles) - { - var fileExt = Path.GetExtension(file); - if (fileExtension.All(fe => fileExt != fe)) - { - throw new FileFormatException($"Файл с именем: {file} не может быть добавлен в список файлов для конвертации и слияния в общий файл программы бурения. Не поддерживаемый формат файла"); - } - - } + Console.WriteLine("linux"); + Console.ReadLine(); } + } public static void DoMerged(IEnumerable inputFiles, string outFile) @@ -78,6 +91,25 @@ namespace ConsoleApp1 }; } + private static (string programFile, string programArg) getOptionsStartupProcess(string inputFileName, string resultFileDir) + { + (string programFile, string programArg) startupOptions; + if (OperatingSystem.IsWindows()) + { + startupOptions.programFile = "C:\\Program Files\\LibreOffice\\program\\soffice.exe"; + startupOptions.programArg = $"-headless -convert-to pdf {inputFileName} --outdir {resultFileDir}"; + return startupOptions; + } + if (OperatingSystem.IsLinux()) + { + startupOptions.programFile = "/usr/bin/soffice"; + startupOptions.programArg = $"--headless --convert-to pdf {inputFileName} --outdir {resultFileDir}"; + return (startupOptions); + } + + throw new NotSupportedException("Вызов процесса в текущей операционной системе не возможен"); + } + //public static void StartConvertProcess(string inputFileName, string outFileName) //{ // using (Process pdfprocess = new Process()) @@ -98,6 +130,9 @@ namespace ConsoleApp1 //} private static async Task StartConvertProcessAsync(string inputFileName, string outFileName) { + + var progrAndArg = getOptionsStartupProcess(inputFileName, outFileName); + //string outPath = "/home/eddie/Test/OutFiles"; string outPath = "C:\\Test\\OutFiles"; var result = Cli.Wrap("C:\\Program Files\\LibreOffice\\program\\soffice.exe") diff --git a/ConsoleApp1/Properties/PublishProfiles/FolderProfile.pubxml b/ConsoleApp1/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 00000000..1002f833 --- /dev/null +++ b/ConsoleApp1/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,17 @@ + + + + + Release + Any CPU + C:\home\linux_test_test + FileSystem + net6.0 + linux-x64 + true + false + false + + \ No newline at end of file From 86c52f52568d0a7dbe5fc284d6614a2d74750cdb Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Fri, 27 Jan 2023 18:17:42 +0500 Subject: [PATCH 15/17] refact readme --- .../Services/DrillingProgram/Convert/ReadMe.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md index 952fada8..54ab5556 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ReadMe.md @@ -10,13 +10,7 @@ Windows - C:\Program Files\LibreOffice\program\soffice.exe 3. В массиве fileExtensions содержатся в виде стринг переменных необходимые расширения файлов изначально обозначенные в задаче. -При необходимости список можно расширить. - -4. Если для тестирования исходники необходимо запустить на машине под управлением Windows -необходимо поменять содержание переменной result в методе StartConvertProcessAsync на : - - var result = Cli.Wrap("C:\\Program Files\\LibreOffice\\program\\soffice.exe") - .WithArguments($"-headless -convert-to pdf {inputFileName} --outdir {outFileName}"); +При необходимости список можно расширить. From 89e5cbcf9ad9be2e17406cb9242fe57714260510 Mon Sep 17 00:00:00 2001 From: "ai.astrakhantsev" Date: Mon, 30 Jan 2023 15:07:36 +0500 Subject: [PATCH 16/17] # TelemetryWirelineRunOutDto --- AsbCloudWebApi/ProtobufModel.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/AsbCloudWebApi/ProtobufModel.cs b/AsbCloudWebApi/ProtobufModel.cs index d389cd37..ea432162 100644 --- a/AsbCloudWebApi/ProtobufModel.cs +++ b/AsbCloudWebApi/ProtobufModel.cs @@ -10,10 +10,11 @@ namespace AsbCloudWebApi EnshureRegisteredDataSpin(); EnshureRegisteredDataSaub(); EnshureRegisteredWITS(); + EnshureRegisteredWirelineRunOutBaseDto(); EnshureRegisteredWirelineRunOutDto(); } - private static void EnshureRegisteredWirelineRunOutDto() + private static void EnshureRegisteredWirelineRunOutBaseDto() { var type = typeof(TelemetryWirelineRunOutBaseDto); if (RuntimeTypeModel.Default.IsDefined(type)) @@ -26,6 +27,19 @@ namespace AsbCloudWebApi .Add(5, nameof(TelemetryWirelineRunOutBaseDto.ReplaceWarnSp)); } + private static void EnshureRegisteredWirelineRunOutDto() + { + var type = typeof(TelemetryWirelineRunOutDto); + if (RuntimeTypeModel.Default.IsDefined(type)) + return; + RuntimeTypeModel.Default.Add(type, false) + .Add(1, nameof(TelemetryWirelineRunOutDto.DateTime)) + .Add(2, nameof(TelemetryWirelineRunOutDto.Hauling)) + .Add(3, nameof(TelemetryWirelineRunOutDto.HaulingWarnSp)) + .Add(4, nameof(TelemetryWirelineRunOutDto.Replace)) + .Add(5, nameof(TelemetryWirelineRunOutDto.ReplaceWarnSp)); + } + private static void EnshureRegisteredWITS() { EnshureRegisteredRecord1(); From 31aa5e6ca2363e0c762644dfa7a8671d8a4aa856 Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Mon, 30 Jan 2023 17:06:22 +0500 Subject: [PATCH 17/17] nit ConvertToPdf code formatiing --- .../Services/DrillingProgram/Convert/ConvertToPdf.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs index baf40eab..b7751ba4 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/Convert/ConvertToPdf.cs @@ -34,7 +34,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert }; } - private static (string programFile, string programArg) getOptionsStartupProcess (string inputFileName, string resultFileDir) + private static (string programFile, string programArg) GetOptionsStartupProcess (string inputFileName, string resultFileDir) { (string programFile, string programArg) startupOptions; if (OperatingSystem.IsWindows()) @@ -55,9 +55,9 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert private static async Task StartConvertProcessAsync(string inputFileName, string resultFileDir, CancellationToken token) { - var startupOptions = getOptionsStartupProcess(inputFileName, resultFileDir); - var command = Cli.Wrap(startupOptions.programFile) - .WithArguments(startupOptions.programArg); + var (programFile, programArg) = GetOptionsStartupProcess(inputFileName, resultFileDir); + var command = Cli.Wrap(programFile) + .WithArguments(programArg); await command.ExecuteAsync(token); }