From e8bfe3b44318e9bff9f51c013d1a93fd4565a5e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D1=80=D0=BE=D0=BB=D0=BE=D0=B2?= Date: Tue, 31 Aug 2021 09:52:32 +0500 Subject: [PATCH] add new file categories --- AsbCloudDb/Model/AsbCloudDbContext.cs | 3 ++- .../Services/DrillingProgramService.cs | 24 ++++++++++++++----- .../Services/FileService.cs | 2 +- AsbCloudWebApi/Controllers/FileController.cs | 24 +++++++++++++++++++ 4 files changed, 45 insertions(+), 8 deletions(-) diff --git a/AsbCloudDb/Model/AsbCloudDbContext.cs b/AsbCloudDb/Model/AsbCloudDbContext.cs index 90af933b..e441d66c 100644 --- a/AsbCloudDb/Model/AsbCloudDbContext.cs +++ b/AsbCloudDb/Model/AsbCloudDbContext.cs @@ -286,7 +286,8 @@ namespace AsbCloudDb.Model new FileCategory {Id = 10, Name = "Последние данные Шламограммы", ShortName = "mudLastData"}, new FileCategory {Id = 11, Name = "Последние данные ННБ", ShortName = "nnbLastData"}, new FileCategory {Id = 12, Name = "Рапорт", ShortName = "report"}, - new FileCategory {Id = 13, Name = "Программа бурения", ShortName = "ПБ"}, + new FileCategory {Id = 13, Name = "Программа бурения, части", ShortName = "ПБч"}, + new FileCategory {Id = 14, Name = "Программа бурения", ShortName = "ПБ"}, }); }); diff --git a/AsbCloudInfrastructure/Services/DrillingProgramService.cs b/AsbCloudInfrastructure/Services/DrillingProgramService.cs index 2594fbcd..82ad8f46 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgramService.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgramService.cs @@ -17,7 +17,8 @@ namespace AsbCloudInfrastructure.Services { private readonly IFileService fileService; private readonly IWellService wellService; - private const int idFileCategoryPlan = 13; + private const int idFileCategoryDrillingProgramItems = 13; + private const int idFileCategoryDrillingProgram = 14; public DrillingProgramService(IFileService fileService, IWellService wellService) { @@ -27,7 +28,7 @@ namespace AsbCloudInfrastructure.Services public async Task GetAsync(int idWell, CancellationToken token = default) { - var filesInfos = await fileService.GetInfosByCategoryAsync(idWell, idFileCategoryPlan, token) + var filesInfos = await fileService.GetInfosByCategoryAsync(idWell, idFileCategoryDrillingProgramItems, token) .ConfigureAwait(false); var well = await wellService.GetAsync(idWell, token) @@ -35,12 +36,23 @@ namespace AsbCloudInfrastructure.Services var resultFileName = $"Программа бурения {well.Cluster} {well.Caption}.xlsx"; - var matchFile = filesInfos.FirstOrDefault(f=>f.Name == resultFileName); - if (matchFile is not null) { + var matchFiles = await fileService.GetInfosByCategoryAsync(idWell, idFileCategoryDrillingProgram, token) + .ConfigureAwait(false); + + if (matchFiles is not null) { + matchFiles = matchFiles.OrderByDescending(f => f.UploadDate); + var matchFilesIterator = matchFiles.GetEnumerator(); + matchFilesIterator.MoveNext(); + var matchFile = matchFilesIterator.Current; + while (matchFilesIterator.MoveNext()) + await fileService.DeletedAsync(matchFilesIterator.Current.Id, token) + .ConfigureAwait(false); + if (filesInfos.All(f => f.UploadDate <= matchFile.UploadDate)) return matchFile; else - await fileService.DeletedAsync(matchFile.Id, token); + await fileService.DeletedAsync(matchFile.Id, token) + .ConfigureAwait(false); } var fileNames = filesInfos @@ -50,7 +62,7 @@ namespace AsbCloudInfrastructure.Services var stream = new MemoryStream(1024 * 1024); UniteExcelFiles(fileNames, stream); stream.Seek(0, SeekOrigin.Begin); - return await fileService.SaveAsync(idWell, 0, idFileCategoryPlan, resultFileName, stream, token) + return await fileService.SaveAsync(idWell, 0, idFileCategoryDrillingProgramItems, resultFileName, stream, token) .ConfigureAwait(false); } diff --git a/AsbCloudInfrastructure/Services/FileService.cs b/AsbCloudInfrastructure/Services/FileService.cs index 14fd5d8e..c020493c 100644 --- a/AsbCloudInfrastructure/Services/FileService.cs +++ b/AsbCloudInfrastructure/Services/FileService.cs @@ -175,7 +175,7 @@ namespace AsbCloudInfrastructure.Services public string GetFileName(FileInfoDto fileInfo) { - var fileName = Path.Combine(fileInfo.Id.ToString(), Path.GetExtension(fileInfo.Name)); + var fileName = $"{fileInfo.Id}{Path.GetExtension(fileInfo.Name)}"; fileName = Path.Combine(RootPath, fileInfo.IdWell.ToString(), fileInfo.IdCategory.ToString(), fileName); fileName = Path.GetFullPath(fileName); return fileName; diff --git a/AsbCloudWebApi/Controllers/FileController.cs b/AsbCloudWebApi/Controllers/FileController.cs index 05dfcaeb..aa68544b 100644 --- a/AsbCloudWebApi/Controllers/FileController.cs +++ b/AsbCloudWebApi/Controllers/FileController.cs @@ -66,6 +66,30 @@ namespace AsbCloudWebApi.Controllers return Ok(); } + /// + /// Возвращает информацию о файлах для скважины в выбраной категории + /// + /// id скважины + /// id категории файла + /// Токен отмены задачи + /// Список информации о файлах в этой категории + [HttpGet] + [Route("category/{idCategory}")] + [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] + public async Task GetInfosByCategoryAsync([FromRoute] int idWell, int idCategory, CancellationToken token = default) + { + int? idCompany = User.GetCompanyId(); + + if (idCompany is null || !await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, + idWell, token).ConfigureAwait(false)) + return Forbid(); + + var filesInfo = await fileService.GetInfosByCategoryAsync(idWell, idCategory, token) + .ConfigureAwait(false); + + return Ok(filesInfo); + } + /// /// Возвращает информацию о файлах для скважины в выбраной категории ///