From c801f24726c0e4407d68daff936662f76a951958 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 28 Jun 2022 13:45:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 36 +++++++++++++ IRaCIS.Core.API/IRaCIS.Core.API.xml | 8 +++ .../Helper/FileStoreHelper.cs | 54 +++++++++++++++++++ .../IRaCIS.Core.Application.xml | 20 +++++++ .../Reading/Dto/ReadingClinicalDataDto.cs | 11 ++++ .../Reading/ReadingClinicalDataService.cs | 2 + .../Common/ReadingCommon.cs | 10 +++- 7 files changed, 140 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index c15766519..9cb07801c 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -904,6 +904,42 @@ namespace IRaCIS.Core.API.Controllers } + /// + /// 下载项目临床数据文件 + /// + /// + /// + /// + [AllowAnonymous] + [HttpGet("CommonDocument/DownloadTrialClinicalFile")] + public async Task DownloadTrialClinicalFile(Guid clinicalDataTrialSetId, [FromServices] IRepository _clinicalDataTrialSetRepository) + { + var (filePath, fileName) = await FileStoreHelper.GetTrialClinicalPathAsync(_hostEnvironment, _clinicalDataTrialSetRepository, clinicalDataTrialSetId); + + new FileExtensionContentTypeProvider().Mappings.TryGetValue(Path.GetExtension(filePath), out var contentType); + + return File(System.IO.File.OpenRead(filePath), contentType ?? "application/octet-stream", fileName); + + } + + + /// + /// 下载系统临床数据文件 + /// + /// + /// + /// + [AllowAnonymous] + [HttpGet("CommonDocument/DownloadSystemClinicalFile")] + public async Task DownloadSystemClinicalFile(Guid clinicalDataSystemSetId, [FromServices] IRepository _clinicalDataSystemSetRepository) + { + var (filePath, fileName) = await FileStoreHelper.GetSystemClinicalPathAsync(_hostEnvironment, _clinicalDataSystemSetRepository, clinicalDataSystemSetId); + + new FileExtensionContentTypeProvider().Mappings.TryGetValue(Path.GetExtension(filePath), out var contentType); + + return File(System.IO.File.OpenRead(filePath), contentType ?? "application/octet-stream", fileName); + + } /// ///上传项目签名文档 diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index c3467624c..c22fa9ddf 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -272,6 +272,14 @@ 通用文件下载 + + + 下载项目临床数据文件 + + + + + 上传项目签名文档 diff --git a/IRaCIS.Core.Application/Helper/FileStoreHelper.cs b/IRaCIS.Core.Application/Helper/FileStoreHelper.cs index 055907a1b..22ca09d11 100644 --- a/IRaCIS.Core.Application/Helper/FileStoreHelper.cs +++ b/IRaCIS.Core.Application/Helper/FileStoreHelper.cs @@ -59,6 +59,60 @@ public static class FileStoreHelper return physicalFilePath; } + /// + /// + /// + /// + /// + /// + /// + /// + public static async Task<(string PhysicalPath, string FileName)> GetSystemClinicalPathAsync(IWebHostEnvironment _hostEnvironment, IRepository _clinicalDataTrialSetRepository, Guid id) + { + var systemClinicalData = await _clinicalDataTrialSetRepository.FirstOrDefaultAsync(t => t.Id == id); + + if (systemClinicalData == null || systemClinicalData.Path == string.Empty) + { + throw new BusinessValidationFailedException("数据库没有找到对应的数据模板文件,请联系系统运维人员。"); + } + + var filePath = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, systemClinicalData.Path); + + if (!System.IO.File.Exists(filePath)) + { + throw new BusinessValidationFailedException("数据模板文件存储路径上未找对应文件,请联系系统运维人员。"); + } + + return (filePath, systemClinicalData.FileName); + } + + + /// + /// + /// + /// + /// + /// + /// + /// + public static async Task<(string PhysicalPath, string FileName)> GetTrialClinicalPathAsync(IWebHostEnvironment _hostEnvironment, IRepository _clinicalDataTrialSetRepository, Guid id) + { + var trialClinicalData = await _clinicalDataTrialSetRepository.FirstOrDefaultAsync(t => t.Id == id); + + if (trialClinicalData == null|| trialClinicalData.Path==string.Empty) + { + throw new BusinessValidationFailedException("数据库没有找到对应的数据模板文件,请联系系统运维人员。"); + } + + var filePath = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, trialClinicalData.Path); + + if (!System.IO.File.Exists(filePath)) + { + throw new BusinessValidationFailedException("数据模板文件存储路径上未找对应文件,请联系系统运维人员。"); + } + + return (filePath, trialClinicalData.FileName); + } //通过编码获取通用文档具体物理路径 diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 6341ac511..6f454c02d 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1285,6 +1285,16 @@ 上传方式名称 + + + 模板文件名称 + + + + + 文件路径 + + 返回对象 @@ -2078,6 +2088,16 @@ + + + + + + + + + + 写文件导到磁盘 diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index 0ed375cfb..b1391b727 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -432,6 +432,17 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string ClinicalUploadTypeName { get; set; } + /// + /// 模板文件名称 + /// + public string FileName { get; set; } + + /// + /// 文件路径 + /// + public string Path { get; set; } + + } } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs index 20c315267..99cc734cd 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs @@ -253,6 +253,8 @@ namespace IRaCIS.Application.Services ClinicalDataLevel = x.ClinicalDataLevel, ClinicalDataSetName = x.ClinicalDataSetName, ClinicalUploadType = x.ClinicalUploadType, + FileName=x.FileName, + Path=x.Path, Id = x.Id }).ToListAsync() ; return clinicalList; diff --git a/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs b/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs index ac697437a..9bf93553d 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs @@ -1,6 +1,7 @@ using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share; +using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -8,12 +9,19 @@ using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; +using Microsoft.AspNetCore.Hosting; namespace IRaCIS.Core.Infra.EFCore.Common { public static class ReadingCommon { - + + + //public static FileStreamResult GetFileStreamResult(IWebHostEnvironment webHostEnvironment, string path,string FileName) + //{ + + //} + public static bool IsNullOrEmpty(this string value) { if (value == null || value == string.Empty)