diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 07f4bd52e..214b11b92 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -11,6 +11,7 @@ using IRaCIS.Core.Application.Filter; using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.MediatR.CommandAndQueries; using IRaCIS.Core.Application.Service; +using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share.Reading; @@ -95,13 +96,9 @@ namespace IRaCIS.Core.API.Controllers while (section != null) { var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out var contentDisposition); - if (hasContentDispositionHeader) { - var fileName = contentDisposition.FileName.Value; - - //处理压缩文件 if (fileName.Contains(".Zip", StringComparison.OrdinalIgnoreCase) || fileName.Contains(".rar", StringComparison.OrdinalIgnoreCase)) { @@ -111,9 +108,7 @@ namespace IRaCIS.Core.API.Controllers { if (!entry.IsDirectory) { - var serverFilePath = await filePathFunc(entry.Key); - entry.WriteToFile(serverFilePath); } @@ -125,11 +120,8 @@ namespace IRaCIS.Core.API.Controllers var serverFilePath = await filePathFunc(fileName); await FileStoreHelper.WriteFileAsync(section.Body, serverFilePath); - } - - } section = await reader.ReadNextSectionAsync(); } @@ -236,6 +228,7 @@ namespace IRaCIS.Core.API.Controllers [FromServices] ILogger _logger, [FromServices] IEasyCachingProvider _provider, [FromServices] IStudyService _studyService, + [FromServices] IDicomArchiveService _dicomArchiveService, [FromServices] IRepository _repository ) @@ -362,6 +355,10 @@ namespace IRaCIS.Core.API.Controllers } + + + + /// /// 上传临床数据 多文件 /// @@ -403,22 +400,34 @@ namespace IRaCIS.Core.API.Controllers /// [HttpPost("ClinicalData/UploadClinicalData/{trialId:guid}/{subjectId:guid}/{readingId:guid}")] [DisableRequestSizeLimit] - public async Task UploadReadClinicalData(Guid trialId, Guid subjectId, Guid readingId) + public async Task> UploadReadClinicalData(Guid trialId,Guid subjectId,Guid readingId) { var filerelativePath = string.Empty; + List fileDtos = new List(); + + var siteid = await _repository.Where(x => x.Id == subjectId).Select(x => x.SiteId).FirstOrDefaultAsync(); - // 写法一致 使用 _repository - - var siteid =await _repository.Where(x => x.Id == subjectId).Select(x => x.SiteId).FirstOrDefaultAsync(); await FileUploadAsync(async (fileName) => - { - var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetReadClinicalDataPath(_hostEnvironment, fileName, trialId, siteid, subjectId, readingId); - //插入临床pdf 路径 - filerelativePath = relativePath; - return serverFilePath; - }); + { + var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetReadClinicalDataPath(_hostEnvironment, fileName, trialId, siteid, subjectId, readingId); + //插入临床pdf 路径 + filerelativePath = relativePath; + + fileDtos.Add(new FileDto() + { + FileName = fileName, + Path = serverFilePath + + }); ; + return fileName; + }); - return ResponseOutput.Ok(filerelativePath); + return fileDtos; + // indto.AddFileList = fileDtos; + + //await _iReadingClinicalDataService.AddOrUpdateReadingClinicalData(indto); + + //return ResponseOutput.Ok(filerelativePath); } /// /// 上传非Dicom 文件 支持压缩包 多文件上传 diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 6fca6573d..f5bda2762 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -970,9 +970,9 @@ 临床数据类型Id - + - 文件列表 + 要删除的对象 diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index 5a968de13..50b59c0cb 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -39,9 +39,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public bool IsVisit { get; set; } /// - /// 文件列表 + /// 要删除的对象 /// - public List FileList { get; set; } + + public List DeleteFileIds { get; set; } + + + public List AddFileList { get; set; } } public class FileDto diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs new file mode 100644 index 000000000..74405fe84 --- /dev/null +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs @@ -0,0 +1,17 @@ +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 byzhouhang 20210918 +// 生成时间 2021-12-23 13:20:59 +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- + + +using IRaCIS.Core.Application.Service.Reading.Dto; +using IRaCIS.Core.Domain.Share.Reading; + +namespace IRaCIS.Core.Application.Contracts +{ + public interface IReadingClinicalDataService + { + Task AddOrUpdateReadingClinicalData(AddOrUpdateReadingClinicalDataDto indto); + } +} \ No newline at end of file diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs index ff30528a8..ae5b8af13 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs @@ -12,6 +12,7 @@ using MassTransit; using System.ComponentModel.DataAnnotations; using System.Reflection; using IRaCIS.Core.Infra.EFCore.Common; +using IRaCIS.Core.Application.Contracts; namespace IRaCIS.Application.Services { @@ -19,7 +20,7 @@ namespace IRaCIS.Application.Services /// 阅片临床数据配置 /// [ApiExplorerSettings(GroupName = "Reading")] - public class ReadingClinicalDataService : BaseService + public class ReadingClinicalDataService : BaseService, IReadingClinicalDataService { private readonly IRepository _readingClinicalDataRepository; private readonly IRepository _clinicalDataTrialSetRepository; @@ -45,12 +46,10 @@ namespace IRaCIS.Application.Services public async Task AddOrUpdateReadingClinicalData(AddOrUpdateReadingClinicalDataDto indto) { - - if (indto.Id == null) { var entity = _mapper.Map(indto); - entity.ReadingClinicalDataPDFList = indto.FileList.Select(x => new ReadingClinicalDataPDF() + entity.ReadingClinicalDataPDFList = indto.AddFileList.Select(x => new ReadingClinicalDataPDF() { TrialId = entity.TrialId, @@ -67,10 +66,12 @@ namespace IRaCIS.Application.Services } else { - var entity = (await _readingClinicalDataRepository.Where(t => t.Id == indto.Id, true).Include(t => t.ReadingClinicalDataPDFList).FirstOrDefaultAsync()).IfNullThrowException(); + var entity = (await _readingClinicalDataRepository.Where(t => t.Id == indto.Id, true).FirstOrDefaultAsync()).IfNullThrowException(); _mapper.Map(indto, entity); - entity.ReadingClinicalDataPDFList = indto.FileList.Select(x => new ReadingClinicalDataPDF() + await _readingClinicalDataPDFRepository.DeleteFromQueryAsync(x => indto.DeleteFileIds.Contains(x.Id)); + + var addFileList = indto.AddFileList.Select(x => new ReadingClinicalDataPDF() { TrialId = entity.TrialId, @@ -80,6 +81,7 @@ namespace IRaCIS.Application.Services IsVisit = indto.IsVisit, ReadingId = indto.ReadingId }).ToList(); + await _readingClinicalDataPDFRepository.AddRangeAsync(addFileList); var success = await _readingClinicalDataRepository.SaveChangesAsync(); return ResponseOutput.Ok(entity.Id);