From eb1802198839a9e98fc198e624acf21ee81ccc98 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 27 Nov 2025 13:39:33 +0800 Subject: [PATCH 01/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-16?= 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 e353005a0..907aefab0 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -517,7 +517,7 @@ namespace IRaCIS.Core.Application.Services .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" || t.ModalityForEdit == "OCT") - .WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType != CriterionType.OCT || taskInfo.CriterionType != CriterionType.IVUS), t => false) + .WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType != CriterionType.OCT && taskInfo.CriterionType != CriterionType.IVUS), t => false) .Select(k => new VisitStudyDTO() { InstanceCount = k.InstanceCount, From 888ad8897e88caf0d58d70a29f2d7317384615d5 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 27 Nov 2025 14:04:23 +0800 Subject: [PATCH 02/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-17?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DownloadAndUploadService.cs | 73 +++++++++++++------ 1 file changed, 51 insertions(+), 22 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 9453074da..918171eb3 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -824,39 +824,68 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc [HttpDelete] - public async Task DeleteTaskStudy(Guid visitTaskId, bool isDicom, Guid? dicomStudyId, Guid? noneDicomStudyId) + public async Task DeleteTaskStudy(Guid visitTaskId, Guid? subjectVisitId, bool isDicom, Guid? dicomStudyId, Guid? noneDicomStudyId) { if (isDicom) { - if (dicomStudyId == null) + //靶段标注删除访视影像 + if (visitTaskId == Guid.Empty && subjectVisitId != null && subjectVisitId != Guid.Empty) { - var deleteStudyPathList = await _taskInstanceRepository.Where(t => t.VisitTaskId == visitTaskId).GroupBy(t => t.StudyId).Select(g => g.First().Path).ToListAsync(); - - foreach (var fisrtPath in deleteStudyPathList) - { - var prefix = fisrtPath.Substring(1, fisrtPath.LastIndexOf('/') - 1); - await _oSSService.DeleteFromPrefix(prefix, true); - } - - - await _taskStudyRepository.DeleteFromQueryAsync(t => t.VisitTaskId == visitTaskId); - await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); - await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); - } - else - { - var fisrtPath = await _taskInstanceRepository.Where(t => t.VisitTaskId == visitTaskId && t.StudyId == dicomStudyId).Select(t => t.Path).FirstOrDefaultAsync(); + var fisrtPath = await _taskInstanceRepository.Where(t => t.SubjectVisitId == subjectVisitId && t.StudyId == dicomStudyId).Select(t => t.Path).FirstOrDefaultAsync(); var prefix = fisrtPath.Substring(1, fisrtPath.LastIndexOf('/') - 1); await _oSSService.DeleteFromPrefix(prefix, true); - await _taskStudyRepository.DeleteFromQueryAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); - await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); - await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); + await _taskStudyRepository.DeleteFromQueryAsync(t => t.SubjectVisitId == subjectVisitId && t.Id == dicomStudyId); + await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId && t.Id == dicomStudyId); + await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId && t.Id == dicomStudyId); } + + if (visitTaskId != Guid.Empty) + { + if (dicomStudyId == null) + { + var deleteStudyPathList = await _taskInstanceRepository.Where(t => t.VisitTaskId == visitTaskId).GroupBy(t => t.StudyId).Select(g => g.First().Path).ToListAsync(); + + foreach (var fisrtPath in deleteStudyPathList) + { + var prefix = fisrtPath.Substring(1, fisrtPath.LastIndexOf('/') - 1); + await _oSSService.DeleteFromPrefix(prefix, true); + } + + + await _taskStudyRepository.DeleteFromQueryAsync(t => t.VisitTaskId == visitTaskId); + await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); + await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); + } + else + { + var fisrtPath = await _taskInstanceRepository.Where(t => t.VisitTaskId == visitTaskId && t.StudyId == dicomStudyId).Select(t => t.Path).FirstOrDefaultAsync(); + var prefix = fisrtPath.Substring(1, fisrtPath.LastIndexOf('/') - 1); + await _oSSService.DeleteFromPrefix(prefix, true); + + await _taskStudyRepository.DeleteFromQueryAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); + await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); + await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); + } + } + } else { - await _noneDicomStudyFileReposiotry.DeleteFromQueryAsync(t => t.VisitTaskId == visitTaskId && t.OriginNoneDicomStudyId == noneDicomStudyId); + if (visitTaskId == Guid.Empty) + { + + //删除靶段标注非dicom + await _noneDicomStudyFileReposiotry.DeleteFromQueryAsync(t => t.ImageLabelNoneDicomStudyId == noneDicomStudyId); + + } + else + { + //删除后处理非dicom + await _noneDicomStudyFileReposiotry.DeleteFromQueryAsync(t => t.VisitTaskId == visitTaskId && t.OriginNoneDicomStudyId == noneDicomStudyId); + + } + } await _noneDicomStudyFileReposiotry.SaveChangesAsync(); From bd61a0f2e9df49bdad66435a43c68d2eaeaa8063 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 27 Nov 2025 14:23:19 +0800 Subject: [PATCH 03/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-18?= 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 | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index f1e0f3060..c7db922fc 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -1027,7 +1027,8 @@ namespace IRaCIS.Core.Application.Contracts public Guid? SourceSubjectVisitId => SubjectVisitId; - + //防止前端null 故意返回 + public Guid VisitTaskId { get; set; } public List OrginalStudyList { get; set; } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 918171eb3..e5f39f38c 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -831,13 +831,13 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //靶段标注删除访视影像 if (visitTaskId == Guid.Empty && subjectVisitId != null && subjectVisitId != Guid.Empty) { - var fisrtPath = await _taskInstanceRepository.Where(t => t.SubjectVisitId == subjectVisitId && t.StudyId == dicomStudyId).Select(t => t.Path).FirstOrDefaultAsync(); + var fisrtPath = await _taskInstanceRepository.Where(t => t.SubjectVisitId == subjectVisitId ).Select(t => t.Path).FirstOrDefaultAsync(); var prefix = fisrtPath.Substring(1, fisrtPath.LastIndexOf('/') - 1); await _oSSService.DeleteFromPrefix(prefix, true); - await _taskStudyRepository.DeleteFromQueryAsync(t => t.SubjectVisitId == subjectVisitId && t.Id == dicomStudyId); - await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId && t.Id == dicomStudyId); - await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId && t.Id == dicomStudyId); + await _taskStudyRepository.DeleteFromQueryAsync(t => t.SubjectVisitId == subjectVisitId ); + await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId); + await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId); } if (visitTaskId != Guid.Empty) From ea90b2b38bd063c41467a29fdffc998bb76e941c Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 27 Nov 2025 16:52:00 +0800 Subject: [PATCH 04/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-19?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index e5f39f38c..e86f7d289 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -125,7 +125,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //要根据标准阅片顺序,确定是否查询单个任务的,还是查询所有的 var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId) - .Select(t => new { t.IsReadingTaskViewInOrder, t.Trial.Modalitys }).FirstNotNullAsync(); + .Select(t => new { t.IsReadingTaskViewInOrder, t.Trial.Modalitys,t.IsImageFilter,t.CriterionModalitys }).FirstNotNullAsync(); var subjectCode = string.Empty; var subjectId = inQuery.SubjectId; @@ -329,7 +329,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { foreach (var item in list) { - item.OrginalStudyList.AddRange(item.OriginalTaskStudyList); + item.OrginalStudyList.AddRange(item.OriginalTaskStudyList.WhereIf(criterionInfo.IsImageFilter, t=>("|" + criterionInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))); } } From 78669051de50315daf0ede1b3528f8713404f271 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 27 Nov 2025 17:07:27 +0800 Subject: [PATCH 05/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-20?= 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 907aefab0..204f06c51 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -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" || t.ModalityForEdit == "OCT") + .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() { From f92bf347e3dcb008e77ff46b213a6fa938ce49a4 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 28 Nov 2025 10:03:14 +0800 Subject: [PATCH 06/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-21?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Allocation/VisitTaskService.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 17dd8b18f..388e40271 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -1027,8 +1027,8 @@ public class VisitTaskService(IRepository _visitTaskRepository, //满足前序访视不存在 需要签署但是未签署 sql 相当复杂 同时想查询所有未读的统计数字 就无法统计 byzhouhang //但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候,要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活 //.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)) - .WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => (t.Subject.Code.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate)); - + .WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => (t.Subject.Code.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate)) + ; var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }); @@ -1171,7 +1171,9 @@ public class VisitTaskService(IRepository _visitTaskRepository, var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.UserRoleId && x.TaskState == TaskState.Effect) .WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId) - .WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate)); + .WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate)) + .WhereIf(critrion.CriterionType == CriterionType.OCT, t => t.ReadingCategory == ReadingCategory.Visit ? t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(t => t.TaskNoneDicomFileList).Any() : true) + .WhereIf(critrion.CriterionType == CriterionType.IVUS, t => t.ReadingCategory == ReadingCategory.Visit ? t.SourceSubjectVisit.TaskStudyList.Any() : true); var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }); From 8b69a07b9386e177d0456952f2dce10fdb8aadad Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 28 Nov 2025 10:08:26 +0800 Subject: [PATCH 07/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-22?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 388e40271..fc880f9fb 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -1172,7 +1172,7 @@ public class VisitTaskService(IRepository _visitTaskRepository, var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.UserRoleId && x.TaskState == TaskState.Effect) .WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId) .WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate)) - .WhereIf(critrion.CriterionType == CriterionType.OCT, t => t.ReadingCategory == ReadingCategory.Visit ? t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(t => t.TaskNoneDicomFileList).Any() : true) + .WhereIf(critrion.CriterionType == CriterionType.OCT, t => t.ReadingCategory == ReadingCategory.Visit ? t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(t => t.ImageLabelNoneDicomFileList).Any() : true) .WhereIf(critrion.CriterionType == CriterionType.IVUS, t => t.ReadingCategory == ReadingCategory.Visit ? t.SourceSubjectVisit.TaskStudyList.Any() : true); var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }); From 21ac6850d28a67b3dc3f8a9650e54f18fa1d4332 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 28 Nov 2025 10:53:14 +0800 Subject: [PATCH 08/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-23?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Visit/SubjectVisitService.cs | 43 +++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 204f06c51..2dd33d9be 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -502,7 +502,18 @@ namespace IRaCIS.Core.Application.Services var studyList = new List(); - var taskInfo = await _visitTaskRepository.Where(x => x.Id == indto.VisitTaskId).Select(t => new { t.TrialReadingCriterionId, t.TrialReadingCriterion.CriterionType, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys, t.ReadingTaskState, TaskStudyCount = t.TaskStudyList.Count }).FirstNotNullAsync(); + var taskInfo = await _visitTaskRepository.Where(x => x.Id == indto.VisitTaskId).Select(t => new + { + t.TrialReadingCriterionId, + t.TrialReadingCriterion.CriterionType, + t.TrialReadingCriterion.IsImageFilter, + t.TrialReadingCriterion.CriterionModalitys, + t.ReadingTaskState, + IsHaveTaskStudy = t.TaskStudyList.Any(), + IsHaveTaskNoneDicomStudyFile = t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(c => c.TaskNoneDicomFileList.Where(t => t.VisitTaskId == indto.VisitTaskId)).Any(), + IsMarkDicomStudy = t.SourceSubjectVisit.TaskStudyList.Any(), + IsMarkNoneDicomStudy = t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(c => c.ImageLabelNoneDicomFileList).Any() + }).FirstNotNullAsync(); @@ -516,8 +527,9 @@ 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" /*|| t.ModalityForEdit == "OCT"*/) - .WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType != CriterionType.OCT && taskInfo.CriterionType != CriterionType.IVUS), t => false) + .WhereIf((taskInfo.IsHaveTaskStudy || taskInfo.IsMarkDicomStudy) && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" /*|| t.ModalityForEdit == "OCT"*/) + //其他 不应该看原始影像 + .WhereIf(taskInfo.IsHaveTaskStudy && (taskInfo.CriterionType != CriterionType.OCT && taskInfo.CriterionType != CriterionType.IVUS), t => false) .Select(k => new VisitStudyDTO() { InstanceCount = k.InstanceCount, @@ -580,10 +592,12 @@ namespace IRaCIS.Core.Application.Services } //影像后处理 上传了新的影像 - if (taskInfo.TaskStudyCount > 0) + if (taskInfo.IsHaveTaskStudy || taskInfo.IsMarkDicomStudy) { - var taskStudyList = await _taskStudyRepository.Where(t => t.TrialId == indto.TrialId && t.VisitTaskId == indto.VisitTaskId) + var taskStudyList = await _taskStudyRepository.Where(t => t.TrialId == indto.TrialId) + .WhereIf(taskInfo.IsHaveTaskStudy, t => t.VisitTaskId == indto.VisitTaskId) + .WhereIf(taskInfo.IsMarkDicomStudy, t => t.SubjectVisitId == indto.SujectVisitId) .WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); @@ -742,8 +756,9 @@ namespace IRaCIS.Core.Application.Services #region 非Dicom 检查查询 var noDicomList = await _noneDicomStudyRepository.Where(x => x.TrialId == indto.TrialId && x.SubjectVisitId == indto.SujectVisitId && x.NoneDicomFileList.Any(t => !t.FileType.Contains(StaticData.FileType.Zip))) - .Where(t => t.IsReading) - .WhereIf(taskInfo.IsImageFilter == true, t => taskInfo.CriterionModalitys.Contains(t.Modality)).ToListAsync(); + .Where(t => t.IsReading) + .WhereIf(taskInfo.IsImageFilter, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) + .ToListAsync(); List noDicomStudyList = noDicomList.Select(x => new VisitStudyDTO() @@ -761,15 +776,17 @@ namespace IRaCIS.Core.Application.Services }).ToList(); - var isExistTaskNoneDicomFile = _noneDicomStudyFileRepository.Any(t => t.VisitTaskId == indto.VisitTaskId); + //var isExistTaskNoneDicomFile = _noneDicomStudyFileRepository.Any(t => t.VisitTaskId == indto.VisitTaskId); foreach (var item in noDicomStudyList) { var nodicom = noDicomList.Where(x => x.Id == item.StudyId).First(); var instanceCount = await _noneDicomStudyFileRepository.Where(t => t.IsReading) - .WhereIf(isExistTaskNoneDicomFile, x => x.OriginNoneDicomStudyId == item.StudyId) - .WhereIf(isExistTaskNoneDicomFile == false, x => x.NoneDicomStudyId == item.StudyId).CountAsync(); + .WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile == false && taskInfo.IsMarkNoneDicomStudy == true, x => x.ImageLabelNoneDicomStudyId == item.StudyId) + .WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile && taskInfo.IsMarkNoneDicomStudy, x => x.OriginNoneDicomStudyId == item.StudyId) + .WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile == false && taskInfo.IsMarkNoneDicomStudy == false, x => x.NoneDicomStudyId == item.StudyId) + .CountAsync(); if (instanceCount == 0) { @@ -790,8 +807,10 @@ namespace IRaCIS.Core.Application.Services SubjectVisitId=nodicom.SubjectVisitId, SubjectId=nodicom.SubjectId, SeriesNumber=1, - NoneDicomFileFirstFile=await _noneDicomStudyFileRepository.WhereIf(isExistTaskNoneDicomFile,x=>x.OriginNoneDicomStudyId== item.StudyId) - .WhereIf(isExistTaskNoneDicomFile==false, x=>x.NoneDicomStudyId == item.StudyId) + NoneDicomFileFirstFile=await _noneDicomStudyFileRepository + .WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile == false && taskInfo.IsMarkNoneDicomStudy == true, x => x.ImageLabelNoneDicomStudyId == item.StudyId) + .WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile && taskInfo.IsMarkNoneDicomStudy, x => x.OriginNoneDicomStudyId == item.StudyId) + .WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile == false && taskInfo.IsMarkNoneDicomStudy == false, x => x.NoneDicomStudyId == item.StudyId) .Where(x=> !x.FileType.Contains(StaticData.FileType.Zip)).Select(x=>x.Path).FirstOrDefaultAsync(), } From 24b7d2e1b949fec14051152dff51e1a29fe74260 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 28 Nov 2025 11:14:03 +0800 Subject: [PATCH 09/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-24?= 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 2dd33d9be..ec8774d51 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -527,7 +527,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.IsHaveTaskStudy || taskInfo.IsMarkDicomStudy) && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" /*|| t.ModalityForEdit == "OCT"*/) + .WhereIf((taskInfo.IsHaveTaskStudy || taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy) && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" /*|| t.ModalityForEdit == "OCT"*/) //其他 不应该看原始影像 .WhereIf(taskInfo.IsHaveTaskStudy && (taskInfo.CriterionType != CriterionType.OCT && taskInfo.CriterionType != CriterionType.IVUS), t => false) .Select(k => new VisitStudyDTO() From dae44745ca028b5915238644f53f979e932f7672 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 28 Nov 2025 11:18:58 +0800 Subject: [PATCH 10/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-25?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index ec8774d51..22c173f76 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -592,12 +592,12 @@ namespace IRaCIS.Core.Application.Services } //影像后处理 上传了新的影像 - if (taskInfo.IsHaveTaskStudy || taskInfo.IsMarkDicomStudy) + if (taskInfo.IsHaveTaskStudy || taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy) { var taskStudyList = await _taskStudyRepository.Where(t => t.TrialId == indto.TrialId) .WhereIf(taskInfo.IsHaveTaskStudy, t => t.VisitTaskId == indto.VisitTaskId) - .WhereIf(taskInfo.IsMarkDicomStudy, t => t.SubjectVisitId == indto.SujectVisitId) + .WhereIf((taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy), t => t.SubjectVisitId == indto.SujectVisitId) .WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); From 6883d47508eba41cf1ff1ea69a8eb0be2adec21b Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 28 Nov 2025 11:34:07 +0800 Subject: [PATCH 11/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-26?= 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 22c173f76..2aebbba83 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -527,7 +527,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.IsHaveTaskStudy || taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy) && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" /*|| t.ModalityForEdit == "OCT"*/) + .WhereIf((taskInfo.IsHaveTaskStudy || taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy) && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" || t.ModalityForEdit == "IVUS") //其他 不应该看原始影像 .WhereIf(taskInfo.IsHaveTaskStudy && (taskInfo.CriterionType != CriterionType.OCT && taskInfo.CriterionType != CriterionType.IVUS), t => false) .Select(k => new VisitStudyDTO() From 9fb95c3030fef0ce5890e6093162e5e863f22e1f Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 28 Nov 2025 13:43:19 +0800 Subject: [PATCH 12/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-27?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Visit/SubjectVisitService.cs | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 2aebbba83..f2663d7ec 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -509,10 +509,16 @@ namespace IRaCIS.Core.Application.Services t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys, t.ReadingTaskState, + + //是否有了后处理的dicom检查 IsHaveTaskStudy = t.TaskStudyList.Any(), + //是否有了后处理的NoneDicom检查 IsHaveTaskNoneDicomStudyFile = t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(c => c.TaskNoneDicomFileList.Where(t => t.VisitTaskId == indto.VisitTaskId)).Any(), + //是否有了标注的dicom检查 IsMarkDicomStudy = t.SourceSubjectVisit.TaskStudyList.Any(), + //是否有了标注的NoneDicom检查 IsMarkNoneDicomStudy = t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(c => c.ImageLabelNoneDicomFileList).Any() + }).FirstNotNullAsync(); @@ -527,7 +533,20 @@ 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.IsHaveTaskStudy || taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy) && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" || t.ModalityForEdit == "IVUS") + .WhereIf(taskInfo.IsHaveTaskStudy + && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), + t => t.ModalityForEdit == "XA") + + .WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.IsMarkDicomStudy && taskInfo.CriterionType == CriterionType.IVUS, + t => t.ModalityForEdit == "XA" ) + + .WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.IsMarkDicomStudy && taskInfo.CriterionType == CriterionType.OCT, + t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT") + + .WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.IsMarkDicomStudy == false + && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), + t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" || t.ModalityForEdit == "IVUS") + //其他 不应该看原始影像 .WhereIf(taskInfo.IsHaveTaskStudy && (taskInfo.CriterionType != CriterionType.OCT && taskInfo.CriterionType != CriterionType.IVUS), t => false) .Select(k => new VisitStudyDTO() @@ -597,7 +616,7 @@ namespace IRaCIS.Core.Application.Services var taskStudyList = await _taskStudyRepository.Where(t => t.TrialId == indto.TrialId) .WhereIf(taskInfo.IsHaveTaskStudy, t => t.VisitTaskId == indto.VisitTaskId) - .WhereIf((taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy), t => t.SubjectVisitId == indto.SujectVisitId) + .WhereIf(taskInfo.IsHaveTaskStudy == false && (taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy), t => t.SubjectVisitId == indto.SujectVisitId) .WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); From b429b2cf8c973364f95631c5bb5d789ab1822982 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 28 Nov 2025 14:09:56 +0800 Subject: [PATCH 13/13] =?UTF-8?q?uat-=E6=A0=87=E6=B3=A8-28?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DownloadAndUploadService.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index e86f7d289..1b07f0daa 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -125,7 +125,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //要根据标准阅片顺序,确定是否查询单个任务的,还是查询所有的 var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId) - .Select(t => new { t.IsReadingTaskViewInOrder, t.Trial.Modalitys,t.IsImageFilter,t.CriterionModalitys }).FirstNotNullAsync(); + .Select(t => new { t.IsReadingTaskViewInOrder, t.Trial.Modalitys, t.IsImageFilter, t.CriterionModalitys }).FirstNotNullAsync(); var subjectCode = string.Empty; var subjectId = inQuery.SubjectId; @@ -329,7 +329,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { foreach (var item in list) { - item.OrginalStudyList.AddRange(item.OriginalTaskStudyList.WhereIf(criterionInfo.IsImageFilter, t=>("|" + criterionInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))); + item.OrginalStudyList.AddRange(item.OriginalTaskStudyList.WhereIf(criterionInfo.IsImageFilter, t => ("|" + criterionInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))); } } @@ -831,11 +831,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //靶段标注删除访视影像 if (visitTaskId == Guid.Empty && subjectVisitId != null && subjectVisitId != Guid.Empty) { - var fisrtPath = await _taskInstanceRepository.Where(t => t.SubjectVisitId == subjectVisitId ).Select(t => t.Path).FirstOrDefaultAsync(); + var fisrtPath = await _taskInstanceRepository.Where(t => t.SubjectVisitId == subjectVisitId).Select(t => t.Path).FirstOrDefaultAsync(); var prefix = fisrtPath.Substring(1, fisrtPath.LastIndexOf('/') - 1); await _oSSService.DeleteFromPrefix(prefix, true); - await _taskStudyRepository.DeleteFromQueryAsync(t => t.SubjectVisitId == subjectVisitId ); + await _taskStudyRepository.DeleteFromQueryAsync(t => t.SubjectVisitId == subjectVisitId); await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId); await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId); } @@ -961,7 +961,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc Path = t.Path }).ToList(), - ReadingFileCount = u.FileCount, + ReadingFileCount = u.NoneDicomFileList.Where(t => t.IsReading).Count(), }).ToList(); @@ -1013,7 +1013,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc ImageDate = ns.ImageDate, BodyPart = ns.BodyPart, BodyPartForEditOther = ns.BodyPartForEditOther, - FileCount = ns.FileCount, + Modality = ns.Modality, StudyCode = ns.StudyCode, @@ -1027,7 +1027,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc Path = t.Path }).ToList(), - ReadingFileCount = ns.FileCount, + FileCount = (inQuery.IsImageSegmentLabel == false ? ns.ImageLabelNoneDicomFileList : ns.NoneDicomFileList).Count(), + ReadingFileCount = (inQuery.IsImageSegmentLabel == false ? ns.ImageLabelNoneDicomFileList : ns.NoneDicomFileList).Where(t => t.IsReading).Count(), };