diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 1e6a9af25..b7117b77d 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -362,9 +362,6 @@ namespace IRaCIS.Core.API.Controllers } - - - /// /// 上传临床数据 多文件 /// @@ -397,48 +394,29 @@ namespace IRaCIS.Core.API.Controllers } - + /// - /// 上传临床数据(废弃) + /// 上传阅片临床数据 /// - /// - /// + /// /// - [HttpPost("ClinicalData/UploadClinicalData/{trialId:guid}/{id:guid}/{isVisit:bool}")] + [HttpPost("ClinicalData/UploadClinicalData/{trialId:guid}/{readingClinicalDataId:guid}")] [DisableRequestSizeLimit] - public async Task UploadClinicalData(Guid id, bool isVisit) + public async Task UploadReadClinicalData(Guid readingClinicalDataId) { var filerelativePath = string.Empty; - if (isVisit) + + // 写法一致 使用 _repository + var clinicalData = (await _repository.Where(x => x.Id == readingClinicalDataId).FirstOrDefaultAsync()).IfNullThrowException(); + var siteid =await _repository.Where(x => x.Id == clinicalData.SubjectId).Select(x => x.SiteId).FirstOrDefaultAsync(); + await FileUploadAsync(async (fileName) => { - var sv = _repository.Where(t => t.Id == id).Select(t => new { t.TrialId, t.SiteId, t.SubjectId }).FirstOrDefault().IfNullThrowException(); - await FileUploadAsync(async (fileName) => - { - var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetClinicalDataPath(_hostEnvironment, fileName, sv.TrialId, sv.SiteId, sv.SubjectId, id); - //插入临床pdf 路径 - filerelativePath = relativePath; - return serverFilePath; - }); - } - else - { - var subjectId = await _repository.Where(x => x.Id == id).Select(x => - x.SubjectId - ).FirstOrDefaultAsync(); - var subject = await _repository.Where(x => x.Id == subjectId).Select(x => new - { - x.TrialId, - x.SiteId, - }).FirstOrDefaultAsync(); - await FileUploadAsync(async (fileName) => - { - var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetClinicalDataPath(_hostEnvironment, fileName, subject.TrialId, subject.SiteId, subjectId, id); - //插入临床pdf 路径 - filerelativePath = relativePath; - return serverFilePath; - }); - } + var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetReadClinicalDataPath(_hostEnvironment, fileName, clinicalData.TrialId, siteid, clinicalData.SubjectId, clinicalData.ObjectId, clinicalData.Id); + //插入临床pdf 路径 + filerelativePath = relativePath; + return serverFilePath; + }); return ResponseOutput.Ok(filerelativePath); } diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 5e29e14bc..957fbd70f 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -171,12 +171,11 @@ - + - 上传临床数据(废弃) + 上传阅片临床数据 - - + diff --git a/IRaCIS.Core.Application/Helper/FileStoreHelper.cs b/IRaCIS.Core.Application/Helper/FileStoreHelper.cs index 95b145d77..0c9a5ecc2 100644 --- a/IRaCIS.Core.Application/Helper/FileStoreHelper.cs +++ b/IRaCIS.Core.Application/Helper/FileStoreHelper.cs @@ -210,6 +210,26 @@ public static class FileStoreHelper return (serverFilePath, relativePath); } + + public static (string PhysicalPath, string RelativePath, string FileRealName) GetReadClinicalDataPath(IWebHostEnvironment _hostEnvironment, string fileName, Guid trialId, Guid siteId, Guid subjectId, Guid objectId,Guid readingClinicalDataId) + { + var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment); + + string uploadFolderPath = Path.Combine(rootPath, StaticData.Folder.TrialDataFolder, trialId.ToString(), siteId.ToString(), subjectId.ToString(), "Reading", objectId.ToString(), readingClinicalDataId.ToString(), StaticData.Folder.TreatmenthistoryFolder); + + if (!Directory.Exists(uploadFolderPath)) Directory.CreateDirectory(uploadFolderPath); + + var (trustedFileNameForFileStorage, fileRealName) = FileStoreHelper.GetStoreFileName(fileName); + + + var relativePath = $"/{StaticData.Folder.IRaCISDataFolder}/{StaticData.Folder.TrialDataFolder}/{trialId}/{siteId}/{subjectId}/Reading/{objectId}/{readingClinicalDataId}/{StaticData.Folder.TreatmenthistoryFolder}/{trustedFileNameForFileStorage}"; + + var serverFilePath = Path.Combine(uploadFolderPath, trustedFileNameForFileStorage); + + return (serverFilePath, relativePath, fileRealName); + + } + //获取临床数据存放路径 public static (string PhysicalPath, string RelativePath,string FileRealName) GetClinicalDataPath(IWebHostEnvironment _hostEnvironment, string fileName,Guid trialId,Guid siteId,Guid subjectId,Guid subjectVisitId) { diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index ff93c8901..e360da6e5 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -975,6 +975,81 @@ 获取访视列表 + + + 项目ID + + + + + 对象ID + + + + + 受试者ID + + + + + 阅片临床数据ID + + + + + Path + + + + + FileName + + + + + 是否为访视 + + + + + 项目ID + + + + + 对象ID + + + + + 受试者ID + + + + + 阅片临床数据ID + + + + + Path + + + + + FileName + + + + + 是否为访视 + + + + + 临床级别 + + 名称 @@ -3507,7 +3582,7 @@ - + 删除 @@ -3525,9 +3600,30 @@ 获取阅片临床数据列表 + + + + + + 获取单个阅片临床数据的所有文件 + + + + + + + 新增或者修改PDF + + + + 删除PDF + + + + 阅片期配置 diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index 35e3e43a5..61baeb344 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -48,7 +48,101 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid ObjectId { get; set; } } - + public class GetReadingClinicalDataPDFListIndto:PageInput + { + public Guid ReadingClinicalDataId { get; set; } + } + + public class GetReadingClinicalDataPDFListOutDto + { + public Guid? Id { get; set; } + + /// + /// 项目ID + /// + public Guid TrialId { get; set; } + + /// + /// 对象ID + /// + public Guid ObjectId { get; set; } + + /// + /// 受试者ID + /// + public Guid SubjectId { get; set; } + + /// + /// 阅片临床数据ID + /// + public Guid ReadingClinicalDataId { get; set; } + + /// + /// Path + /// + public string Path { get; set; } + + /// + /// FileName + /// + public string FileName { get; set; } + + /// + /// 是否为访视 + /// + public bool IsVisit { get; set; } + + + } + + public class AddOrUpdateReadingClinicalDataPDFDto + { + + public Guid? Id { get; set; } + + /// + /// 项目ID + /// + public Guid TrialId { get; set; } + + /// + /// 对象ID + /// + public Guid ObjectId { get; set; } + + /// + /// 受试者ID + /// + public Guid SubjectId { get; set; } + + /// + /// 阅片临床数据ID + /// + public Guid ReadingClinicalDataId { get; set; } + + /// + /// Path + /// + public string Path { get; set; } + + /// + /// FileName + /// + public string FileName { get; set; } + + /// + /// 是否为访视 + /// + public bool IsVisit { get; set; } + + /// + /// 临床级别 + /// + public ClinicalLevel ClinicalDataLevel { get; set; } + } + + + public class GetReadingClinicalDataListOutDto { diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs index d9bc0aa7c..abb74a67c 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs @@ -23,13 +23,16 @@ namespace IRaCIS.Application.Services { private readonly IRepository _readingClinicalDataRepository; private readonly IRepository _clinicalDataTrialSetRepository; + private readonly IRepository _readingClinicalDataPDFRepository; public ReadingClinicalDataService(IRepository readingClinicalDataRepository, - IRepository clinicalDataTrialSetRepository + IRepository clinicalDataTrialSetRepository, + IRepository readingClinicalDataPDFRepository ) { this._readingClinicalDataRepository = readingClinicalDataRepository; this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; + this._readingClinicalDataPDFRepository = readingClinicalDataPDFRepository; } @@ -54,13 +57,14 @@ namespace IRaCIS.Application.Services /// /// [HttpDelete("{id:guid}")] - public async Task ReadingClinicalData(Guid id) + public async Task DeleteReadingClinicalData(Guid id) { await _readingClinicalDataRepository.DeleteFromQueryAsync(x => x.Id == id, true); return ResponseOutput.Result(true); } + /// /// 获取下拉菜单 /// @@ -82,10 +86,12 @@ namespace IRaCIS.Application.Services return clinicalList; } + + /// /// 获取阅片临床数据列表 /// - /// + /// /// [HttpPost] public async Task> GetReadingClinicalDataList(GetReadingClinicalDataListIndto inDto) @@ -102,6 +108,44 @@ namespace IRaCIS.Application.Services } + /// + /// 获取单个阅片临床数据的所有文件 + /// + /// + /// + public async Task> GetReadingClinicalDataPDFList(GetReadingClinicalDataPDFListIndto inDto) { + + var result = await _readingClinicalDataPDFRepository.Where(x => x.ReadingClinicalDataId == inDto.ReadingClinicalDataId).ProjectTo(_mapper.ConfigurationProvider) + .ToPagedListAsync(inDto.PageIndex, inDto.PageSize, inDto.SortField == null ? nameof(GetReadingClinicalDataPDFListOutDto.FileName) : inDto.SortField, + inDto.Asc); + + return result; + } + + /// + /// 新增或者修改PDF + /// + /// + /// + [HttpPost] + public async Task AddOrUpdateReadingClinicalDataPDF(AddOrUpdateReadingClinicalDataPDFDto indto) + { + var entity = await _readingClinicalDataPDFRepository.InsertOrUpdateAsync(indto, true); + return ResponseOutput.Ok(entity.Id.ToString()); + } + + + /// + /// 删除PDF + /// + /// + /// + [HttpDelete("{id:guid}")] + public async Task DeleteReadingClinicalDataPDF(Guid id) + { + await _readingClinicalDataPDFRepository.DeleteFromQueryAsync(x => x.Id == id, true); + return ResponseOutput.Result(true); + } } diff --git a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs index a59f0ea3b..cc3a94fb4 100644 --- a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs @@ -24,8 +24,13 @@ namespace IRaCIS.Core.Application.Service CreateMap() .ForMember(d => d.ClinicalDataLevel, u => u.MapFrom(s => s.ClinicalDataTrialSet.ClinicalDataLevel)) .ForMember(d => d.ClinicalDataLevelName, u => u.MapFrom(s => s.ClinicalDataTrialSet.ClinicalDataSetName)) - .ForMember(d => d.ClinicalUploadType, u => u.MapFrom(s => s.ClinicalDataTrialSet.ClinicalUploadType)); - + .ForMember(d => d.ClinicalUploadType, u => u.MapFrom(s => s.ClinicalDataTrialSet.ClinicalUploadType)) + .ForMember(d => d.FileCount, u => u.MapFrom(s => s.ReadingClinicalDataPDFList.Count())); + + + + CreateMap(); + //.ForMember(d => d.SiteNames, u => u.MapFrom(s => s.ReadingPeriodSites.SelectMany(x => x.Site.SiteName).ToList())); @@ -33,11 +38,14 @@ namespace IRaCIS.Core.Application.Service CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); CreateMap().ReverseMap(); - CreateMap(); + CreateMap() + .ForMember(d => d.IsUsed, u => u.MapFrom(s => s.ReadingClinicalDataList.Count()>0)); CreateMap(); CreateMap().ReverseMap(); diff --git a/IRaCIS.Core.Domain/Reading/ClinicalDataTrialSet.cs b/IRaCIS.Core.Domain/Reading/ClinicalDataTrialSet.cs index 616124bda..90a958b8e 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalDataTrialSet.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalDataTrialSet.cs @@ -5,6 +5,7 @@ using IRaCIS.Core.Domain.Share; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using IRaCIS.Core.Domain.Share.Reading; +using System.Collections.Generic; namespace IRaCIS.Core.Domain.Models { @@ -63,6 +64,11 @@ namespace IRaCIS.Core.Domain.Models /// public bool IsConfirm { get; set; } + /// + /// + /// + public List ReadingClinicalDataList { get; set; } + [ForeignKey("TrialId")] public Trial Trial { get; set; } diff --git a/IRaCIS.Core.Domain/Reading/ReadingClinicalDataPDF.cs b/IRaCIS.Core.Domain/Reading/ReadingClinicalDataPDF.cs index 6ced553ae..9f561b182 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingClinicalDataPDF.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingClinicalDataPDF.cs @@ -34,6 +34,18 @@ namespace IRaCIS.Core.Domain.Models /// public Guid ReadingClinicalDataId { get; set; } + /// + /// Path + /// + [Required] + public string Path { get; set; } + + /// + /// FileName + /// + [Required] + public string FileName { get; set; } + /// /// 是否为访视 /// @@ -54,6 +66,11 @@ namespace IRaCIS.Core.Domain.Models /// public Guid CreateUserId { get; set; } + + + + + [ForeignKey("ReadingClinicalDataId")] public ReadingClinicalData ReadingClinicalData { get; set; }