From cd3508da212c78b7c4b5dcac2907e4bc88657a86 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 25 Nov 2025 10:47:14 +0800 Subject: [PATCH 01/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=AE=BF=E8=A7=86Id-1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs | 2 ++ IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs | 1 + 2 files changed, 3 insertions(+) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index 8c5da6795..c5b97b507 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -953,6 +953,8 @@ namespace IRaCIS.Core.Application.Contracts public string VisitName { get; set; } + public Guid SourceSubjectVisitId { get; set; } + public List DicomStudyList { get; set; } = new List(); diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs index 08b0f4c16..4b271380f 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs @@ -166,6 +166,7 @@ namespace IRaCIS.Core.Application.Service CreateMap() + .ForMember(d => d.SourceSubjectVisitId, u => u.MapFrom(u => u.Id)) .ForMember(d => d.SubjectCode, u => u.MapFrom(u => u.Subject.Code)) .ForMember(d => d.DicomStudyList, u => u.MapFrom(s => s.StudyList)) .ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.NoneDicomStudyList.Where(t => t.IsReading))); From ad004785116ee7b42582acffa94a5bfe2162fb83 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 25 Nov 2025 11:02:24 +0800 Subject: [PATCH 02/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=AE=BF=E8=A7=86Id-2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index e96136e4d..f91b34941 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -1248,6 +1248,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var dicomStudyList = list.Where(item => item.DicomStudyList.Count > 0) .Select(item => new SubjectVisitMarkStudyDto { + SourceSubjectVisitId=item.SourceSubjectVisitId, VisitTaskId = item.VisitTaskId, SubjectId = item.SubjectId, SubjectCode = item.SubjectCode, @@ -1260,6 +1261,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var noneStudyList = list.Where(item => item.NoneDicomStudyList.Count > 0) .Select(item => new SubjectVisitMarkStudyDto { + SourceSubjectVisitId = item.SourceSubjectVisitId, VisitTaskId = item.VisitTaskId, SubjectId = item.SubjectId, SubjectCode = item.SubjectCode, From 5df54fd75dcbf0b6a08e9ac3341a72a6f95c3e35 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 25 Nov 2025 13:38:38 +0800 Subject: [PATCH 03/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=AE=BF=E8=A7=86Id-3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index f91b34941..e920c8ae4 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -1435,7 +1435,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var dirInfolist = _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))).SelectMany(t => t.StudyList) .Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) - .Where(t => inQuery.IsImageSegmentLabel == true ? t.ModalityForEdit == "XA" : true) + .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true) .SelectMany(t => t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading)) .Select(t => new StudyDIRInfo() { @@ -1542,6 +1542,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc from leftVisitTask in cc.DefaultIfEmpty() select new ImageDownloadDto() { + TrialId=sv.TrialId, + SubjectId=sv.SubjectId, + TrialSiteCode=sv.TrialSite.TrialSiteCode, + VisitId=sv.Id, + SubjectCode = inQuery.SubjectCode, VisitName = sv.VisitName, TaskBlindName = leftVisitTask.TaskBlindName, From aaf8fd62e05570f9eb77c7889dce0ae13738e73c Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 25 Nov 2025 15:59:20 +0800 Subject: [PATCH 04/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=AE=BF=E8=A7=86Id-4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index fb53fe6ab..819c5878e 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -224,7 +224,7 @@ namespace IRaCIS.Core.Application.Services var isImageFilter = false; var criterionModalitys = ""; - if (visitTaskId != null) + if (visitTaskId != null && visitTaskId != Guid.Empty) { var info = await _visitTaskRepository.Where(t => t.Id == visitTaskId) .Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); From 9910fb3c8e33308ce450ebc51cbfd6d9285dc56d Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 25 Nov 2025 16:19:45 +0800 Subject: [PATCH 05/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=AE=BF=E8=A7=86Id-5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index e920c8ae4..bf4b89716 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -1603,7 +1603,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }).ToList() , - NoneDicomStudyList = inQuery.IsImageSegmentLabel == null ? sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) + NoneDicomStudyList = inQuery.IsImageSegmentLabel != false ? sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) .Where(t => t.IsReading) .Select(nd => new DownloadNoneDicomStudyDto() From 7f5e9f1bfceaeede10b3a54254d8dcafadd47cee Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 25 Nov 2025 17:56:17 +0800 Subject: [PATCH 06/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=AE=BF=E8=A7=86Id-6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index bf4b89716..2ae8d7279 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -159,7 +159,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc if (inQuery.IsImageSegmentLabel == true) { - var querySV = _subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId) + var querySV = _subjectVisitRepository.WhereIf(inQuery.SubjectVisitId != null, t => t.Id == inQuery.SubjectVisitId) .WhereIf(inQuery.SubjectId != null, t => t.SubjectId == inQuery.SubjectId) .Select(u => new SubjectVisitMarkUploadDto() { From 2fa0e9e88e344dd133996957502316ebcc5d8814 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 24 Nov 2025 15:24:25 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E9=9D=9Edicom=20=20bodyPart=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/QC/DTO/NoneDicomStudyViewModel.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs index bce0b65c3..7162e8c3e 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs @@ -55,6 +55,8 @@ namespace IRaCIS.Core.Application.Contracts public string Modality { get; set; } = string.Empty; public DateTime ImageDate { get; set; } public string ModifyReason { get; set; } + + public string BodyPartForEditOther { get; set; } } /// NoneDicomStudyAddOrEdit 列表查询参数模型 From 1edc52bd76e5f4eb0475cdf81edb6b4fb9cd30d7 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 26 Nov 2025 09:05:34 +0800 Subject: [PATCH 08/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DownloadAndUploadService.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 2ae8d7279..8f1f2eee5 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -898,7 +898,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //靶段标注上传,查看访视级别,上传绑定访视级别 if (inQuery.IsImageSegmentLabel == true) { - var list = _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId && t.SubjectVisitId == inQuery.SubjectVisitId) + var list = _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId) + .WhereIf(inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId) //.WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) .Select(u => new TaskNoneDicomStudyDTO() { @@ -1248,7 +1249,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var dicomStudyList = list.Where(item => item.DicomStudyList.Count > 0) .Select(item => new SubjectVisitMarkStudyDto { - SourceSubjectVisitId=item.SourceSubjectVisitId, + SourceSubjectVisitId = item.SourceSubjectVisitId, VisitTaskId = item.VisitTaskId, SubjectId = item.SubjectId, SubjectCode = item.SubjectCode, @@ -1542,10 +1543,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc from leftVisitTask in cc.DefaultIfEmpty() select new ImageDownloadDto() { - TrialId=sv.TrialId, - SubjectId=sv.SubjectId, - TrialSiteCode=sv.TrialSite.TrialSiteCode, - VisitId=sv.Id, + TrialId = sv.TrialId, + SubjectId = sv.SubjectId, + TrialSiteCode = sv.TrialSite.TrialSiteCode, + VisitId = sv.Id, SubjectCode = inQuery.SubjectCode, VisitName = sv.VisitName, @@ -2209,7 +2210,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { TrialId = t.TrialId, SubjectId = t.Id, - SubjectCode=t.Code, + SubjectCode = t.Code, IsUrgent = t.IsUrgent, VisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(), MarkVisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(t => t.TaskStudyList.Any()), @@ -2218,7 +2219,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc MarkDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.TaskStudyList).Count(), NoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Count(), - MarkNoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Where(t=>t.ImageLabelNoneDicomFileList.Any()).Count(), + MarkNoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Where(t => t.ImageLabelNoneDicomFileList.Any()).Count(), }).ToPagedListAsync(inQuery); return ResponseOutput.Ok(list); From 33618e8dfbf3d740b082e6007290cfcf83f63d03 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 26 Nov 2025 10:10:33 +0800 Subject: [PATCH 09/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs | 3 +-- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 7 ++++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index c5b97b507..5fcdb44e1 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -269,8 +269,7 @@ namespace IRaCIS.Core.Application.Contracts public AddOrUpdateStudyDto Study { get; set; } - [NotDefault] - public Guid VisitTaskId { get; set; } + public Guid? VisitTaskId { get; set; } public bool? IsImageSegmentLabel { get; set; } } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 8f1f2eee5..cb08f677d 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -548,9 +548,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var @uploadLock = _distributedLockProvider.CreateLock($"UploadTaskDicom"); + var visiTaskId = incommand.VisitTaskId.Value; + using (await @uploadLock.AcquireAsync()) { - if (_fusionCache.GetOrDefault(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)) != Guid.Empty) + if (_fusionCache.GetOrDefault(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid)) != Guid.Empty) { //---当前已有人正在上传和归档该检查! return ResponseOutput.NotOk(I18n.T("UploadDownLoad_ArchiveInProgress")); @@ -558,7 +560,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc else { //在事务未完成前 防止前端重复提交 - await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid), _userInfo.UserRoleId, TimeSpan.FromMinutes(1)); + await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid), _userInfo.UserRoleId, TimeSpan.FromMinutes(1)); } } @@ -570,7 +572,6 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc svId = _dicomStudyRepository.Where(t => t.TrialId == incommand.TrialId && t.StudyInstanceUid == incommand.Study.StudyInstanceUid).Select(t => t.SubjectVisitId).FirstOrDefault(); } - var visiTaskId = incommand.VisitTaskId; var modalitys = string.Empty; From a0d1a39125c1fcac4774cb5c0fb2a16363e0ed6b Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 26 Nov 2025 10:39:25 +0800 Subject: [PATCH 10/16] =?UTF-8?q?=E9=9D=9Edicom=E6=A3=80=E6=9F=A5=E9=A2=84?= =?UTF-8?q?=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/NoneDicomStudyService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs index 8f7d4b85e..7015c731e 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs @@ -45,7 +45,7 @@ namespace IRaCIS.Core.Application.Contracts var isViewDelete = !isQCFinished; IQueryable noneDicomStudyQueryable = default; - if (visitTaskId == null) + if (visitTaskId == null || visitTaskId == Guid.Empty) { //质控过程中,需要忽略过滤质控设置删除的检查,以及设置删除的文件,质控通过后才 noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete) From 4c2c72fe127a263750926bdb3cecfc6d972e2db4 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 26 Nov 2025 10:47:44 +0800 Subject: [PATCH 11/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DownloadAndUploadService.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index cb08f677d..97fcac6a4 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -548,7 +548,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var @uploadLock = _distributedLockProvider.CreateLock($"UploadTaskDicom"); - var visiTaskId = incommand.VisitTaskId.Value; + var visiTaskId = incommand.VisitTaskId ?? Guid.Empty; using (await @uploadLock.AcquireAsync()) { @@ -806,8 +806,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } finally { - await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)); - await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidUploading(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)); + await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid)); + await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidUploading(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid)); } @@ -869,7 +869,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc /// /// [HttpPost] - public async Task> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery) + public async Task>> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery) { var subjectCode = inQuery.SubjectCode; var subjectId = inQuery.SubjectId; @@ -896,6 +896,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId) .Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync(); + var config = await _subjectRepository.Where(t => t.Id == subjectId).Select(t => new { t.Trial.ImageFormatList, t.Trial.StudyNameList, t.Trial.IsShowStudyName }).FirstOrDefaultAsync(); + + //靶段标注上传,查看访视级别,上传绑定访视级别 if (inQuery.IsImageSegmentLabel == true) { @@ -952,7 +955,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc item.UploadedFileList = noneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).ToList(); } - return list; + return ResponseOutput.Ok(list, config); } else { @@ -1020,11 +1023,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc item.UploadedFileList = taskNoneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).ToList(); } - return list; + return ResponseOutput.Ok(list, config); } - + } From d1b45fa56d190b8f1341ec03ee167d587920d07d Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 26 Nov 2025 13:45:47 +0800 Subject: [PATCH 12/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs | 5 +++-- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 13 ++++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index 5fcdb44e1..dc8986c18 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -453,8 +453,9 @@ namespace IRaCIS.Core.Application.Contracts public class IRTaskUploadedDicomStudyQuery { - [NotDefault] - public Guid VisitTaskId { get; set; } + public Guid? VisitTaskId { get; set; } + + public Guid? SubjectVisitId { get; set; } } public class IRUploadTaskDicomStudyDto : DicomStudyBasicInfo diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 97fcac6a4..5c9ab031e 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -548,7 +548,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var @uploadLock = _distributedLockProvider.CreateLock($"UploadTaskDicom"); - var visiTaskId = incommand.VisitTaskId ?? Guid.Empty; + var visiTaskId = incommand.VisitTaskId ?? Guid.Empty; using (await @uploadLock.AcquireAsync()) { @@ -1027,7 +1027,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } - + } @@ -1701,11 +1701,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc [HttpPost] public async Task GetTaskUploadedDicomStudyList(IRTaskUploadedDicomStudyQuery inQuery) { - var info = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId) + var info = await _visitTaskRepository + .WhereIf(inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId)//正常后处理 .Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); - var query = _taskStudyRepository.Where(t => t.VisitTaskId == inQuery.VisitTaskId) - .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) + var query = _taskStudyRepository + .WhereIf(inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId)//正常后处理 + .WhereIf(inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId)//靶段标注处理的影像 + .WhereIf( info.IsImageFilter && inQuery.VisitTaskId != null, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") ) .Select(t => new { StudyId = t.Id, From 4047220d53a5a17d9856864c51188b7d07dab36e Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 26 Nov 2025 15:49:09 +0800 Subject: [PATCH 13/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRaCIS.Core.Application.xml | 24 ++++++++++++------- .../ImageAndDoc/DownloadAndUploadService.cs | 10 ++++++-- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 872d7361e..72a97326d 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1116,14 +1116,6 @@ - - - - 下载已经删除的影像 - - - - 读取该项目的数据,进行维护 @@ -1525,6 +1517,14 @@ + + + GPT 移动子树代码--适合一次提交事务 + + + + + 插入闭包表关系 @@ -2219,6 +2219,12 @@ + + + 获取受试者级别 访视标注列表 + + + 受试者级别所有的影像 @@ -13047,7 +13053,7 @@ - 新增修改想想项目表格问题 + 新增修改项目表格问题 diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 5c9ab031e..191510bfe 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -174,6 +174,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc .Select(t => new StudyBasicInfo() { Id = t.Id, + SubjectVisitId=t.SubjectVisitId, + StudyInstanceUid = t.StudyInstanceUid, ModalityForEdit = t.ModalityForEdit, BodyPartExamined = t.BodyPartExamined, @@ -194,6 +196,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc UploadStudyList = u.TaskStudyList.Select(t => new StudyBasicInfo() { Id = t.Id, + SubjectVisitId=t.SubjectVisitId, StudyInstanceUid = t.StudyInstanceUid, ModalityForEdit = t.ModalityForEdit, BodyPartExamined = t.BodyPartExamined, @@ -1343,8 +1346,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc foreach (var item in list) { - item.DicomStudyList.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true).ToList() - .AddRange(preDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList()); + var dicomList = item.DicomStudyList.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true).ToList(); + + dicomList.AddRange(preDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList()); + + item.DicomStudyList = dicomList; item.NoneDicomStudyList = _mapper.Map>(preNoneDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList()); } From d1fb6314db69a02b8d3d8902dfa42c7e3b23a837 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 26 Nov 2025 16:45:08 +0800 Subject: [PATCH 14/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-13?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Helper/DicomDIRHelper.cs | 2 + .../ImageAndDoc/DownloadAndUploadService.cs | 14 ++++- .../ImageAndDoc/NoneDicomStudyService.cs | 20 +++++-- .../Service/Visit/SubjectVisitService.cs | 56 +++++++++++++++---- 4 files changed, 72 insertions(+), 20 deletions(-) diff --git a/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs b/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs index a9a32d2eb..580154c9c 100644 --- a/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs +++ b/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs @@ -13,6 +13,8 @@ namespace IRaCIS.Core.Application.Helper public class StudyDIRInfo { + public bool IsTaskStudy { get; set; } + public Guid SubjectVisitId { get; set; } // Study public Guid DicomStudyId { get; set; } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 191510bfe..7088fe68c 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -989,7 +989,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc StudyCode = ns.StudyCode, //靶段标注 阅片IR 上传时IsImageSegmentLabel == false ,正常后处理上传IsImageSegmentLabel 该字段为空 - FileList = (inQuery.IsImageSegmentLabel == false ? ns.NoneDicomFileList : ns.ImageLabelNoneDicomFileList) + FileList = (inQuery.IsImageSegmentLabel == false ? ns.ImageLabelNoneDicomFileList : ns.NoneDicomFileList) .Select(t => new NoneDicomFileInfo() { FileType = t.FileType, @@ -1489,6 +1489,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var taskDirInfolist = _taskInstanceRepository.Where(t => t.SubjectVisitId != null) .Where(t => subjectVisitIdList.Contains((Guid)t.SubjectVisitId)).Select(t => new StudyDIRInfo() { + IsTaskStudy=true, SubjectVisitId = (Guid)t.SubjectVisitId, DicomStudyId = t.TaskStudy.Id, @@ -1532,6 +1533,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { var visitId = item.First().SubjectVisitId; + var isTaskStudy = item.First().IsTaskStudy; + var ossFolder = $"{pathInfo.TrialId}/Image/{pathInfo.SubjectId}/{visitId}/{item.Key.StudyInstanceUid}"; var isSucess = await SafeBussinessHelper.RunAsync(async () => await DicomDIRHelper.GenerateStudyDIRAndUploadAsync(item.ToList(), dirDic, ossFolder, _oSSService)); @@ -1539,7 +1542,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc if (isSucess) { - await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" }); + if (isTaskStudy) + { + await _taskStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new TaskStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" }); + } + else + { + await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" }); + } } } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs index 7015c731e..361d8fba9 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs @@ -57,14 +57,22 @@ namespace IRaCIS.Core.Application.Contracts } else { - var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(t => new { t.BlindSubjectCode, t.TrialReadingCriterionId, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); + var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(t => new { t.BlindSubjectCode, t.TrialReadingCriterionId, t.TrialReadingCriterion.CriterionType, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); + + if (taskinfo.CriterionType == CriterionType.IVUS || taskinfo.CriterionType == CriterionType.OCT) + { + + } + else + { + noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.TaskNoneDicomFileList.Any(t => t.VisitTaskId == visitTaskId), ignoreQueryFilters: isViewDelete) + .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) + .Where(t => taskinfo.IsImageFilter ? ("|" + taskinfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) + .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) + .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, visiTaskId = visitTaskId, isReading = isReading }); + } - noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.TaskNoneDicomFileList.Any(t => t.VisitTaskId == visitTaskId), ignoreQueryFilters: isViewDelete) - .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) - .Where(t => taskinfo.IsImageFilter ? ("|" + taskinfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) - .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) - .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, visiTaskId = visitTaskId, isReading = isReading }); } diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 819c5878e..15c906698 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -224,27 +224,42 @@ namespace IRaCIS.Core.Application.Services var isImageFilter = false; var criterionModalitys = ""; + var criterionType = CriterionType.NoCriterion; + + var isVisitTask = false; + + bool? isImageSegmentLabel = null; if (visitTaskId != null && visitTaskId != Guid.Empty) { + isVisitTask = true; var info = await _visitTaskRepository.Where(t => t.Id == visitTaskId) - .Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); + .Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys, t.TrialReadingCriterion.CriterionType }).FirstNotNullAsync(); isImageFilter = info.IsImageFilter; criterionModalitys = info.CriterionModalitys; + + criterionType = info.CriterionType; + + if (criterionType == CriterionType.OCT || criterionType == CriterionType.IVUS) + { + isImageSegmentLabel = true; + } } var studyList = await _dicomStudyRepository.Where(t => t.TrialId == trialId && t.SubjectVisitId == sujectVisitId).IgnoreQueryFilters() - .Where(t => isImageFilter ? ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) - .WhereIf(isReading == 1 || isQCFinished, s => s.IsDeleted == false) - .Select(k => new VisitStudyDTO() - { - InstanceCount = k.InstanceCount, - Modalities = k.Modalities, - //SeriesCount = k.SeriesCount, - StudyCode = k.StudyCode, - StudyId = k.Id - }).ToListAsync(); + .Where(t => isImageFilter ? ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) + .WhereIf(isReading == 1 || isQCFinished, s => s.IsDeleted == false) + //预览靶段标注上传的影像 影像后处理 上传了新的影像 还要原始dsa + .WhereIf(isImageSegmentLabel == true && isVisitTask && (criterionType == CriterionType.OCT || criterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA") + .Select(k => new VisitStudyDTO() + { + InstanceCount = k.InstanceCount, + Modalities = k.Modalities, + //SeriesCount = k.SeriesCount, + StudyCode = k.StudyCode, + StudyId = k.Id + }).ToListAsync(); var studyIds = studyList.Select(t => t.StudyId).ToList(); @@ -287,12 +302,29 @@ namespace IRaCIS.Core.Application.Services t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count(); } + //预览靶段标注上传的影像 + if (isImageSegmentLabel == true && isVisitTask) + { + var taskStudyList = await _taskStudyRepository.Where(t => t.SubjectVisitId == sujectVisitId) + .WhereIf(isImageFilter, t => ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + foreach (var study in taskStudyList) + { + study.SeriesList = study.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList(); + + study.InstanceCount = study.SeriesList.SelectMany(t => t.InstanceInfoList).Count(); + } + + studyList.AddRange(taskStudyList); + } return studyList.Where(x => x.SeriesList.Count() > 0).ToList(); - //return ResponseOutput.Ok(studyList.Where(t => t.SeriesList.Count > 0).ToList()); + + } From 7c9959b9ee2fd2c300698e30d3c7cee3f7aa944e Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 26 Nov 2025 17:44:52 +0800 Subject: [PATCH 15/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/NoneDicomStudyService.cs | 36 ++++++++++++++----- .../Service/QC/DTO/NoneDicomStudyViewModel.cs | 5 +++ .../Service/QC/_MapConfig.cs | 7 ++++ 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs index 361d8fba9..67e38daa5 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs @@ -4,6 +4,7 @@ // 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 //-------------------------------------------------------------------- using IRaCIS.Core.Application.Filter; +using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using Medallion.Threading; @@ -34,7 +35,8 @@ namespace IRaCIS.Core.Application.Contracts [FromQuery] Guid? nonedicomStudyId, [FromQuery] bool isFilterZip, [FromQuery] Guid? visitTaskId, - [FromQuery] bool isReading) + [FromQuery] bool isReading, + [FromQuery] bool? isImageSegmentLabel) { var qcAuditState = await _subjectVisitRepository.Where(s => s.Id == subjectVisitId).Select(t => t.AuditState).FirstOrDefaultAsync(); @@ -47,21 +49,39 @@ namespace IRaCIS.Core.Application.Contracts IQueryable noneDicomStudyQueryable = default; if (visitTaskId == null || visitTaskId == Guid.Empty) { - //质控过程中,需要忽略过滤质控设置删除的检查,以及设置删除的文件,质控通过后才 - noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete) - .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) - .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) + if (visitTaskId == null) + { + + //质控过程中,需要忽略过滤质控设置删除的检查,以及设置删除的文件,质控通过后才 + noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete) + .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) + .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) + .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading }); + } + else + { + //靶段标注上传后查看影像 + + noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => true, ignoreQueryFilters: isViewDelete) + .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) + .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) + .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading }); + + } - .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading }); } else { var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(t => new { t.BlindSubjectCode, t.TrialReadingCriterionId, t.TrialReadingCriterion.CriterionType, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); - if (taskinfo.CriterionType == CriterionType.IVUS || taskinfo.CriterionType == CriterionType.OCT) + if (taskinfo.CriterionType == CriterionType.IVUS || taskinfo.CriterionType == CriterionType.OCT && isImageSegmentLabel == true) { - + //后处理原始影像预览 + noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => true, ignoreQueryFilters: isViewDelete) + .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) + .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) + .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, visiTaskId = visitTaskId, isReading = isReading }); } else { diff --git a/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs index 7162e8c3e..1a673eb78 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs @@ -31,6 +31,11 @@ namespace IRaCIS.Core.Application.Contracts { } + public class ImageLabelNoneDicomStudyView : NoneDicomStudyView + { + + } + ///NoneDicomStudyQuery 列表查询参数模型 public class NoneDicomStudyQuery { diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs index a756d131b..4a44ee0e1 100644 --- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs @@ -755,6 +755,13 @@ namespace IRaCIS.Core.Application.Service .OrderBy(t => t.CreateTime).ThenBy(t => t.FileName))) .ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode)); + CreateMap() + .ForMember(d => d.NoneDicomStudyFileList, u => u.MapFrom(s => + s.ImageLabelNoneDicomFileList.Where(t => isFilterZip ? !t.FileType.Contains(StaticData.FileType.Zip) : true) + .Where(t => isReading ? t.IsReading && t.IsDeleted == false : true) + .OrderBy(t => t.CreateTime).ThenBy(t => t.FileName))) + .ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode)); + CreateMap() .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code)) From bbb361d0cdced0b1f7378c4885be2d0f88e9934b Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 27 Nov 2025 10:38:48 +0800 Subject: [PATCH 16/16] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-15?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DownloadAndUploadService.cs | 24 +++++++++---------- .../ImageAndDoc/NoneDicomStudyService.cs | 7 +++--- .../Service/Visit/SubjectVisitService.cs | 4 ++-- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 7088fe68c..9453074da 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -174,8 +174,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc .Select(t => new StudyBasicInfo() { Id = t.Id, - SubjectVisitId=t.SubjectVisitId, - + SubjectVisitId = t.SubjectVisitId, + StudyInstanceUid = t.StudyInstanceUid, ModalityForEdit = t.ModalityForEdit, BodyPartExamined = t.BodyPartExamined, @@ -196,7 +196,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc UploadStudyList = u.TaskStudyList.Select(t => new StudyBasicInfo() { Id = t.Id, - SubjectVisitId=t.SubjectVisitId, + SubjectVisitId = t.SubjectVisitId, StudyInstanceUid = t.StudyInstanceUid, ModalityForEdit = t.ModalityForEdit, BodyPartExamined = t.BodyPartExamined, @@ -255,7 +255,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc OrginalStudyList = u.SourceSubjectVisit.StudyList .Where(t => u.TrialReadingCriterion.IsImageFilter ? ("|" + u.TrialReadingCriterion.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) - .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true) + .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true) .Select(t => new StudyBasicInfo() { Id = t.Id, @@ -1346,7 +1346,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc foreach (var item in list) { - var dicomList = item.DicomStudyList.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true).ToList(); + var dicomList = item.DicomStudyList.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true).ToList(); dicomList.AddRange(preDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList()); @@ -1446,7 +1446,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var dirInfolist = _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))).SelectMany(t => t.StudyList) .Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) - .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true) + .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true) .SelectMany(t => t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading)) .Select(t => new StudyDIRInfo() { @@ -1489,7 +1489,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var taskDirInfolist = _taskInstanceRepository.Where(t => t.SubjectVisitId != null) .Where(t => subjectVisitIdList.Contains((Guid)t.SubjectVisitId)).Select(t => new StudyDIRInfo() { - IsTaskStudy=true, + IsTaskStudy = true, SubjectVisitId = (Guid)t.SubjectVisitId, DicomStudyId = t.TaskStudy.Id, @@ -1573,7 +1573,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc TaskBlindName = leftVisitTask.TaskBlindName, StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) - .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true) + .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true) .Select(u => new DownloadDicomStudyDto() { PatientId = u.PatientId, @@ -1722,9 +1722,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc .Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); var query = _taskStudyRepository - .WhereIf(inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId)//正常后处理 - .WhereIf(inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId)//靶段标注处理的影像 - .WhereIf( info.IsImageFilter && inQuery.VisitTaskId != null, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") ) + .WhereIf(inQuery.VisitTaskId != null, t => t.VisitTaskId == inQuery.VisitTaskId)//正常后处理 + .WhereIf(inQuery.VisitTaskId == null && inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId)//靶段标注处理的影像 + .WhereIf(info.IsImageFilter && inQuery.VisitTaskId != null, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) .Select(t => new { StudyId = t.Id, @@ -2226,7 +2226,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc [HttpPost] public async Task>> GetTrialSubjectVisitMarkList(SubjectVisitMarkQuery inQuery) { - var list = await _subjectRepository.Where(t => t.TrialId == inQuery.TrialId) + var list = await _subjectRepository.Where(t => t.TrialId == inQuery.TrialId && t.SubjectDoctorList.Any()) .WhereIf(inQuery.SubjectCode.IsNotNullOrEmpty(), t => t.Code.Contains(inQuery.SubjectCode)) .WhereIf(inQuery.IsUrgent != null, t => t.IsUrgent == inQuery.IsUrgent) .Select(t => new SubjectVisitMarkDTO() diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs index 67e38daa5..bf23ed095 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs @@ -62,7 +62,7 @@ namespace IRaCIS.Core.Application.Contracts { //靶段标注上传后查看影像 - noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => true, ignoreQueryFilters: isViewDelete) + noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete) .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading }); @@ -75,12 +75,13 @@ namespace IRaCIS.Core.Application.Contracts { var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(t => new { t.BlindSubjectCode, t.TrialReadingCriterionId, t.TrialReadingCriterion.CriterionType, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); - if (taskinfo.CriterionType == CriterionType.IVUS || taskinfo.CriterionType == CriterionType.OCT && isImageSegmentLabel == true) + if ((taskinfo.CriterionType == CriterionType.IVUS || taskinfo.CriterionType == CriterionType.OCT) && isImageSegmentLabel == false) { //后处理原始影像预览 - noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => true, ignoreQueryFilters: isViewDelete) + noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete) .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) + .Where(t => taskinfo.IsImageFilter ? ("|" + taskinfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, visiTaskId = visitTaskId, isReading = isReading }); } else diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 15c906698..e353005a0 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -251,7 +251,7 @@ namespace IRaCIS.Core.Application.Services .Where(t => isImageFilter ? ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) .WhereIf(isReading == 1 || isQCFinished, s => s.IsDeleted == false) //预览靶段标注上传的影像 影像后处理 上传了新的影像 还要原始dsa - .WhereIf(isImageSegmentLabel == true && isVisitTask && (criterionType == CriterionType.OCT || criterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA") + .WhereIf(isImageSegmentLabel == true && isVisitTask && (criterionType == CriterionType.OCT || criterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT") .Select(k => new VisitStudyDTO() { InstanceCount = k.InstanceCount, @@ -516,7 +516,7 @@ namespace IRaCIS.Core.Application.Services .WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) .WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading)) //影像后处理 上传了新的影像 还要原始dsa - .WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA") + .WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT") .WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType != CriterionType.OCT || taskInfo.CriterionType != CriterionType.IVUS), t => false) .Select(k => new VisitStudyDTO() {