From 6705cf0fc0353a62e849cbd6a8b47fce05ae3e78 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 26 Nov 2025 16:45:08 +0800 Subject: [PATCH] =?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()); + + }