From f1601e70170e57ce4f04f32b6bde9cb3b4c1550f Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 6 Sep 2024 10:29:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=AA=8C=E8=AF=81=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DTO/UnionStudyViewDodel.cs | 24 +++++ .../ImageAndDoc/DownloadAndUploadService.cs | 98 +++++++++++++++---- 2 files changed, 105 insertions(+), 17 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index 78c83b748..458f6b7e4 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -229,6 +229,30 @@ namespace IRaCIS.Core.Application.Contracts } + public class TaskStudyAchivePreConfirmCommand + { + public List StudyInstanceUidList { get; set; } + + [NotDefault] + public Guid SubjectId { get; set; } + [NotDefault] + public string SubjectCode { get; set; } + + [NotDefault] + public Guid TrialId { get; set; } + + } + + public class TaskStudyArchiveConfirmResult + { + public string StudyInstanceUid { get; set; } + + public bool IsAllowUpload { get; set; } + + public bool IsAllowReUpload { get; set; } + + } + public class TaskArchiveStudyCommand { [NotDefault] diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index d112ef13f..5110d4782 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -241,11 +241,49 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } + /// + /// 在调用预归档前验证 这些检查是否可以全新上传还是已存在补充 目前前端允许 IsAllowUpload==true 全新、IsAllowReUpload==true 补充的study ,全部丢到后端,后端判断存在,就删除之前的检查,全新插入 + /// + /// + /// + public async Task> VerifyIRStudyAllowUpload(TaskStudyAchivePreConfirmCommand inCommand) + { - //public async Task> VerifyIRStudyAllowUpload(VerifyUploadOrReupload inCommand) - //{ - //} + var notAllowedUidList = _taskStudyRepository.Where(t => t.TrialId == inCommand.TrialId && inCommand.StudyInstanceUidList.Contains(t.StudyInstanceUid)).Select(t => new + { + t.StudyInstanceUid, + t.SubjectId, + SubejectCode = t.VisitTask.IsAnalysisCreate ? t.VisitTask.BlindSubjectCode : t.Subject.Code + }).ToList(); + + var result = new List(); + + foreach (var studyUid in inCommand.StudyInstanceUidList) + { + var findStudy = notAllowedUidList.Where(t => t.StudyInstanceUid == studyUid).FirstOrDefault(); + if (findStudy != null) + { + //同一个subject 同一份影响 + if (findStudy.SubejectCode == inCommand.SubjectCode && findStudy.SubjectId == inCommand.SubjectId) + { + result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = true }); + } + else + { + result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = false, IsAllowUpload = false }); + } + } + else + { + //说明没上传 不用管 + result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowUpload = true }); + } + } + + return result; + + } [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] @@ -276,6 +314,28 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc #endregion + //总数为0的检查不允许提交 + if (incommand.Study.SeriesList.SelectMany(t => t.InstanceList).Count() == 0) + { + return ResponseOutput.NotOk("Study_InstanceCountZero"); + } + + var @uploadLock = _distributedLockProvider.CreateLock($"UploadTaskDicom"); + + using (await @uploadLock.AcquireAsync()) + { + if (_fusionCache.GetOrDefault(CacheKeys.TrialStudyUidDBLock(incommand.TrialId, incommand.Study.StudyInstanceUid)) != Guid.Empty) + { + //---当前已有人正在上传和归档该检查! + return ResponseOutput.NotOk(StaticData.International("UploadDownLoad_ArchiveInProgress")); + } + else + { + //在事务未完成前 防止前端重复提交 + await _fusionCache.SetAsync(CacheKeys.TrialStudyUidDBLock(incommand.TrialId, incommand.Study.StudyInstanceUid), _userInfo.Id, TimeSpan.FromMinutes(3)); + } + } + var visiTaskId = incommand.VisitTaskId; var modalitys = string.Empty; @@ -295,6 +355,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //上传 if (studyMonitor.IsDicomReUpload == false) { + //目前不考虑重传的问题,后面的直接覆盖前面的,全部删除 + + + var study = _mapper.Map(incommand.Study); var @lock = _distributedLockProvider.CreateLock($"StudyCode"); @@ -756,12 +820,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { var query = _taskStudyRepository.Where(t => t.VisitTaskId == inQuery.VisitTaskId).Select(t => new { - StudyId=t.Id, + StudyId = t.Id, t.Modalities, t.InstanceCount, t.SeriesCount, t.StudyCode, - SeriesList= t.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(u=>new + SeriesList = t.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(u => new { u.SeriesTime, u.InstanceCount, @@ -772,25 +836,25 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc u.SeriesNumber, u.SliceThickness, u.StudyInstanceUid, - - IsExistMutiFrames= u.InstanceList.Any(t=>t.NumberOfFrames>1), - InstanceInfoList =u.InstanceList.OrderBy(t => t.InstanceNumber).Select(k => - new InstanceBasicInfo() - { - Id = k.Id, - NumberOfFrames = k.NumberOfFrames, - HtmlPath = k.HtmlPath, - Path = k.Path, - InstanceNumber = k.InstanceNumber, + IsExistMutiFrames = u.InstanceList.Any(t => t.NumberOfFrames > 1), - }).ToList() + InstanceInfoList = u.InstanceList.OrderBy(t => t.InstanceNumber).Select(k => + new InstanceBasicInfo() + { + Id = k.Id, + NumberOfFrames = k.NumberOfFrames, + HtmlPath = k.HtmlPath, + Path = k.Path, + InstanceNumber = k.InstanceNumber, + + }).ToList() }) }); var list = await query.ToListAsync(); return ResponseOutput.Ok(list); - + }