From 427cb38f39448e0412a17cc6ee089d235ab520a6 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 31 Jul 2023 13:20:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=9D=9Edicom=20=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 76 +++++++++++-------- IRaCIS.Core.API/IRaCIS.Core.API.xml | 6 +- .../IRaCIS.Core.Application.xml | 8 ++ .../Allocation/DTO/VisitTaskViewModel.cs | 3 +- .../ImageAndDoc/DTO/DicomInstanceModel.cs | 2 + .../Service/ImageAndDoc/InstanceService.cs | 8 +- .../ImageAndDoc/Interface/IInstanceService.cs | 2 +- .../ReadingImageTaskService.cs | 11 ++- IRaCIS.Core.Application/TestService.cs | 5 +- IRaCIS.Core.Domain/Image/DicomSeries.cs | 2 +- 10 files changed, 74 insertions(+), 49 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 66580badf..9d2cb6003 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -267,7 +267,7 @@ namespace IRaCIS.Core.API.Controllers [DisableFormValueModelBinding] [DisableRequestSizeLimit] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] - public async Task ArchiveStudyNew(/*[FromForm] ArchiveStudyCommand archiveStudyCommand,*/ Guid trialId, Guid subjectVisitId, string studyInstanceUid, Guid? abandonStudyId,Guid studyMonitorId, + public async Task ArchiveStudyNew(/*[FromForm] ArchiveStudyCommand archiveStudyCommand,*/ Guid trialId, Guid subjectVisitId, string studyInstanceUid, Guid? abandonStudyId, Guid studyMonitorId, [FromServices] ILogger _logger, [FromServices] IEasyCachingProvider _provider, [FromServices] IStudyService _studyService, @@ -301,9 +301,9 @@ namespace IRaCIS.Core.API.Controllers { _provider.Set($"StudyUid_{trialId}_{archiveStudyCommand.StudyInstanceUid}", _userInfo.Id, TimeSpan.FromMinutes(30)); } - - - + + + //if (_provider.Exists($"StudyUid_{trialId}_{archiveStudyCommand.StudyInstanceUid}")) //{ // //---当前已有人正在上传和归档该检查! @@ -406,7 +406,7 @@ namespace IRaCIS.Core.API.Controllers studyMonitor.IsSuccess = true; } - + } catch (Exception e) { @@ -423,7 +423,7 @@ namespace IRaCIS.Core.API.Controllers studyMonitor.StudyCode = archiveResult.ArchivedDicomStudies.FirstOrDefault()?.StudyCode; studyMonitor.ArchiveFinishedTime = DateTime.Now; - await _studyMonitorRepository.SaveChangesAsync(); + await _studyMonitorRepository.SaveChangesAsync(); } @@ -671,24 +671,43 @@ namespace IRaCIS.Core.API.Controllers + public class UploadNoneDicomFileCommand + { + public Guid TrialId { get; set; } + public Guid SubjectVisitId { get; set; } + public Guid NoneDicomStudyId { get; set; } + public Guid StudyMonitorId { get; set; } + + + public List UploadedFileList { get; set; } = new List(); + + + public class OSSFileDTO + { + public string FilePath { get; set; } + public string FileName { get; set; } + public int FileFize { get; set; } + } + } + /// /// 上传非Dicom 文件 支持压缩包 多文件上传 /// - /// - /// - /// - /// /// /// //[DisableRequestSizeLimit] - [RequestSizeLimit(1_073_741_824)] - [HttpPost("NoneDicomStudy/UploadNoneDicomFile/{trialId:guid}/{subjectVisitId:guid}/{noneDicomStudyId:guid}/{studyMonitorId:guid}")] + [HttpPost("NoneDicomStudy/UploadNoneDicomFile")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] //[Authorize(Policy = IRaCISPolicy.CRC)] - public async Task UploadNoneDicomFile(IFormCollection formCollection, Guid subjectVisitId, Guid noneDicomStudyId, Guid studyMonitorId, + public async Task UploadNoneDicomFile(UploadNoneDicomFileCommand incommand, [FromServices] IRepository _noneDicomStudyRepository, [FromServices] IRepository _studyMonitorRepository) { + var subjectVisitId = incommand.SubjectVisitId; + var studyMonitorId=incommand.StudyMonitorId; + var noneDicomStudyId=incommand.NoneDicomStudyId; + + await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId); var sv = (await _repository.Where(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.SiteId, t.SubjectId }).FirstOrDefaultAsync()).IfNullThrowConvertException(); @@ -697,33 +716,24 @@ namespace IRaCIS.Core.API.Controllers studyMonitor.UploadFinishedTime = DateTime.Now; - await FileUploadAsync(async (fileName) => + foreach (var item in incommand.UploadedFileList) { + await _repository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, NoneDicomStudyId = noneDicomStudyId }); - var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetNoneDicomFilePath(_hostEnvironment, fileName, sv.TrialId, sv.SiteId, sv.SubjectId, subjectVisitId); - - await _repository.AddAsync(new NoneDicomStudyFile() { FileName = fileRealName, Path = relativePath, NoneDicomStudyId = noneDicomStudyId }); - - return serverFilePath; - }); - + } var uploadFinishedTime = DateTime.Now; - - //// 上传非Dicom 后 将状态改为待提交 分为普通上传 和QC后重传 普通上传时才改为待提交 - //await _repository.UpdatePartialFromQueryAsync(t => t.Id == subjectVisitId && t.SubmitState == SubmitStateEnum.None, u => new SubjectVisit() { SubmitState = SubmitStateEnum.ToSubmit }); - var noneDicomStudy = await _noneDicomStudyRepository.FirstOrDefaultAsync((t => t.Id == noneDicomStudyId)); - noneDicomStudy.FileCount = noneDicomStudy.FileCount + formCollection.Files.Count; + noneDicomStudy.FileCount = noneDicomStudy.FileCount + incommand.UploadedFileList.Count; - studyMonitor.FileCount = formCollection.Files.Count; - studyMonitor.FileSize = formCollection.Files.Sum(t => t.Length); + studyMonitor.FileCount = incommand.UploadedFileList.Count; + studyMonitor.FileSize = incommand.UploadedFileList.Sum(t => t.FileFize); studyMonitor.IsDicom = false; studyMonitor.IsDicomReUpload = false; studyMonitor.StudyId = noneDicomStudyId; studyMonitor.StudyCode = noneDicomStudy.StudyCode; - studyMonitor.ArchiveFinishedTime = DateTime.Now; + studyMonitor.ArchiveFinishedTime = DateTime.Now; studyMonitor.IP = _userInfo.IP; await _repository.SaveChangesAsync(); @@ -752,7 +762,7 @@ namespace IRaCIS.Core.API.Controllers if (!fileName.EndsWith(".xlsx") && !fileName.EndsWith(".csv") && !fileName.EndsWith(".xls")) { - //---支持.xlsx、.xls、.csv格式的文件上传。 + //---支持.xlsx、.xls、.csv格式的文件上传。 throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_SupportedFormats")); } @@ -910,11 +920,11 @@ namespace IRaCIS.Core.API.Controllers var dt = DateTime.Now; - etcCheckList = etcCheckList.Where(t => !(t.Modality == string.Empty || t.SiteCode == string.Empty || t.SubjectCode == string.Empty || t.VisitName == string.Empty || t.StudyDate == string.Empty ||! DateTime.TryParse(t.StudyDate, out dt))).ToList(); + etcCheckList = etcCheckList.Where(t => !(t.Modality == string.Empty || t.SiteCode == string.Empty || t.SubjectCode == string.Empty || t.VisitName == string.Empty || t.StudyDate == string.Empty || !DateTime.TryParse(t.StudyDate, out dt))).ToList(); if (etcCheckList.Count == 0) { - //---请保证上传数据符合模板文件中的样式,且存在有效数据。 + //---请保证上传数据符合模板文件中的样式,且存在有效数据。 return ResponseOutput.NotOk(StaticData.International("UploadDownLoad_InvalidData")); } @@ -994,7 +1004,7 @@ namespace IRaCIS.Core.API.Controllers - + } #endregion diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index fc2558ece..659916ddf 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -266,14 +266,10 @@ - + 上传非Dicom 文件 支持压缩包 多文件上传 - - - - diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index ea09fd8d1..097325b62 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -11841,6 +11841,14 @@ + + + 前端 仅仅释放的时候使用,领取是后端调用该方法 + + + + + 签名提交任务修改状态 diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs index 0dab67fd3..6835c7495 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs @@ -894,9 +894,8 @@ namespace IRaCIS.Core.Application.ViewModel public Guid? VisitTaskId { get; set; } - [NotDefault] public Guid TrialReadingCriterionId { get; set; } - [NotDefault] + public Guid SubejctId { get; set; } public bool IsClaim { get; set; } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomInstanceModel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomInstanceModel.cs index b5fe095f1..d40afb500 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomInstanceModel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomInstanceModel.cs @@ -30,6 +30,8 @@ namespace IRaCIS.Core.Application.Contracts public bool IsDeleted { get; set; } public bool IsReading { get; set; } = true; + public string IamgeResizePath { get; set; } + } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/InstanceService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/InstanceService.cs index 7a1912366..0ac5eab09 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/InstanceService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/InstanceService.cs @@ -23,11 +23,15 @@ namespace IRaCIS.Core.Application.Services /// 指定资源Id,获取Dicom序列所属的实例信息列表 /// Dicom序列的Id [HttpGet("{seriesId:guid}")] - public async Task> List(Guid seriesId) + public async Task> > List(Guid seriesId) { - return await _instanceRepository.Where(s => s.SeriesId == seriesId).OrderBy(s => s.InstanceNumber). + var list= await _instanceRepository.Where(s => s.SeriesId == seriesId).OrderBy(s => s.InstanceNumber). ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + var imageResizePath = await _instanceRepository.Where(s => s.SeriesId == seriesId).Select(t=>t.DicomSerie.ImageResizePath).FirstOrDefaultAsync(); + + return ResponseOutput.Ok(list, new { ImageResizePath = imageResizePath }); } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/Interface/IInstanceService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/Interface/IInstanceService.cs index 24a3f6307..792923e3a 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/Interface/IInstanceService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/Interface/IInstanceService.cs @@ -6,7 +6,7 @@ namespace IRaCIS.Core.Application.Services public interface IInstanceService { Task Content(Guid instanceId); - Task> List(Guid seriesId); + Task>> List(Guid seriesId); IEnumerable List(Guid seriesId, string tpCode, bool? key); Task Preview(Guid instanceId); } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 4c78ab043..8cf513db5 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -2315,8 +2315,8 @@ namespace IRaCIS.Application.Services if (task != null) { - // 无序 自动领取该Subject - await ClaimOrCancelSubjectAsync(new ClaimSubjectDto() { IsClaim = true, TrialReadingCriterionId=task.TrialReadingCriterionId, VisitTaskId = task.VisitTaskId, IsInOrder = false }); + // 无序 + await ClaimOrCancelSubjectAsync(new ClaimSubjectDto() { IsClaim = true, VisitTaskId = task.VisitTaskId, IsInOrder = false }); } } @@ -2448,7 +2448,12 @@ namespace IRaCIS.Application.Services } - + /// + /// 前端 仅仅释放的时候使用,领取是后端调用该方法 + /// + /// + /// + /// [HttpPost] public async Task ClaimOrCancelSubjectAsync(ClaimSubjectDto claimSubjectDto) { diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs index 458705231..3d2af4da6 100644 --- a/IRaCIS.Core.Application/TestService.cs +++ b/IRaCIS.Core.Application/TestService.cs @@ -180,11 +180,12 @@ namespace IRaCIS.Application.Services [AllowAnonymous] public async Task GetEnvironmentName([FromServices] IWebHostEnvironment env) { - var a = IdentifierHelper.CreateGuid("123456"); + var a = IdentifierHelper.CreateGuid("654321"); var k = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes("123456")); - var c = MD5Helper.Md5("123456"); + var c = MD5Helper.Md5("654321"); + //update DicomInstance set Path = '/IRaCISData/TrialData/' + cast(DicomInstance.TrialId as varchar) + '/' + DicomInstance.SiteId + '/' + DicomInstance.SubjectId + '/' + DicomInstance.SubjectVisitId + '/Dicom/' + DicomInstance.StudyId + '/' + DicomInstance.Id + '.dcm' diff --git a/IRaCIS.Core.Domain/Image/DicomSeries.cs b/IRaCIS.Core.Domain/Image/DicomSeries.cs index dda7cab73..cf4544e3e 100644 --- a/IRaCIS.Core.Domain/Image/DicomSeries.cs +++ b/IRaCIS.Core.Domain/Image/DicomSeries.cs @@ -57,7 +57,7 @@ namespace IRaCIS.Core.Domain.Models public bool IsDeleted {get;set;} public bool IsReading { get; set; } = true; - public string IamgeResizePath { get; set; }=string.Empty; + public string ImageResizePath { get; set; }=string.Empty; } }