From 9ac6d3df70c0d4c925716532700040f570f54a12 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 7 Jul 2026 09:47:50 +0800 Subject: [PATCH] =?UTF-8?q?IR=E7=94=B3=E8=AF=B7=E9=87=8D=E9=98=85=EF=BC=8C?= =?UTF-8?q?=E6=8B=B7=E8=B4=9Ddicom=20=20=E9=9D=9Edicom=20=E5=BD=B1?= =?UTF-8?q?=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRaCIS.Core.Application.xml | 2 +- .../Service/Allocation/VisitTaskService.cs | 92 +++++++++++++++++-- 2 files changed, 86 insertions(+), 8 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index ab262afb5..4083d5c21 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -349,7 +349,7 @@ 访视读片任务 - + 访视读片任务 diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index ca5e3c1e1..2a56a8f21 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -53,7 +53,11 @@ public class VisitTaskService(IRepository _visitTaskRepository, IRepository _readingNoneDicomMarkRepository, IRepository _readingNoneDicomMarkBindingRepository, IRepository _readingTableAnswerRowInfoRepository, - //IRepository _readingCustomTagRepository, + //IRepository _readingCustomTagRepository, + IRepository _taskStudyRepository, + IRepository _taskSeriesRepository, + IRepository _taskInstanceRepository, + IRepository _noneDicomStudyFileRepository, IRepository _taskInfluenceRepository, IRepository _trialQCQuestionAnswerRepository, ILogger _logger, @@ -2223,7 +2227,7 @@ public class VisitTaskService(IRepository _visitTaskRepository, } } - private async Task CopyForms(VisitTask newTask, VisitTask origenalTask) + private void CopyForms(VisitTask newTask, VisitTask origenalTask) { newTask.IsCopyLesionAnswer = true; //自定义 @@ -2239,7 +2243,81 @@ public class VisitTaskService(IRepository _visitTaskRepository, //_ = _readingCustomTagRepository.AddRangeAsync(readingCustomTagList).Result; - + //拷贝后处理绑定的的Dicom影像 + + var newTaskId = newTask.Id; + + var taskStudyList = _taskStudyRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + + var taskSeriesList = _taskSeriesRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + var taskInstanceList = _taskInstanceRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + + + foreach (var taskStudy in taskStudyList) + { + var newStudyId = IdentifierHelper.CreateGuid(taskStudy.StudyInstanceUid, taskStudy.TrialId.ToString(), newTaskId.ToString()); + + var newStudy = taskStudy.Clone(); + newStudy.Id = newStudyId; + newStudy.SeqId = NewId.NextSequentialGuid(); + newStudy.VisitTaskId = newTaskId; + + _ = _taskStudyRepository.AddAsync(newStudy).Result; + + var studySeriesList = taskSeriesList.Where(t => t.StudyId == taskStudy.Id).ToList(); + + foreach (var series in studySeriesList) + { + var newSeriesId = IdentifierHelper.CreateGuid(series.StudyInstanceUid, series.SeriesInstanceUid, series.TrialId.ToString(), newTaskId.ToString()); + + var newSeries = series.Clone(); + newSeries.Id = newSeriesId; + newSeries.SeqId = NewId.NextSequentialGuid(); + newSeries.StudyId = newStudyId; + newSeries.VisitTaskId = newTaskId; + + + _ = _taskSeriesRepository.AddAsync(newSeries).Result; + + + var studyInstanceList = taskInstanceList.Where(t => t.StudyId == taskStudy.Id).ToList(); + + foreach (var instance in studyInstanceList) + { + var newInstanceId = IdentifierHelper.CreateGuid(newStudy.StudyInstanceUid, newSeries.SeriesInstanceUid, instance.SopInstanceUid, newStudy.TrialId.ToString(), newStudy.ToString()); + + var newInstance = instance.Clone(); + + + newInstance.Id = newInstanceId; + newInstance.SeqId = NewId.NextSequentialGuid(); + newInstance.StudyId = newStudyId; + newInstance.SeriesId = newSeriesId; + newInstance.VisitTaskId = newTaskId; + + + _ = _taskInstanceRepository.AddAsync(newInstance).Result; + } + + } + + } + + //拷贝后处理的NoneDicom + + var fileList = _noneDicomStudyFileRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + + foreach (var file in fileList) + { + var newFile = file.Clone(); + + newFile.Id = NewId.NextSequentialGuid(); + newFile.VisitTaskId = newTaskId; + + _= _noneDicomStudyFileRepository.AddAsync(newFile).Result; + } + + var readingTaskQuestionAnswerList = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); @@ -2301,7 +2379,7 @@ public class VisitTaskService(IRepository _visitTaskRepository, #region 分割 Dictionary segmentationRelationship = new Dictionary() { }; - var segmentationList = _segmentationRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + var segmentationList = _segmentationRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); foreach (var item in segmentationList) { @@ -2314,7 +2392,7 @@ public class VisitTaskService(IRepository _visitTaskRepository, Dictionary segmentRelationship = new Dictionary() { }; - var segmentList = _segmentRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + var segmentList = _segmentRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); foreach (var item in segmentList) { var newSegmentationId = NewId.NextSequentialGuid(); @@ -2327,7 +2405,7 @@ public class VisitTaskService(IRepository _visitTaskRepository, item.VisitTaskId = newTask.Id; } - var segmentBindingList = _segmentBindingRepository.Where(x => x.VisitTaskId == origenalTask.Id).ToList(); + var segmentBindingList = _segmentBindingRepository.Where(x => x.VisitTaskId == origenalTask.Id).ToList(); foreach (var item in segmentBindingList) { @@ -2718,7 +2796,7 @@ public class VisitTaskService(IRepository _visitTaskRepository, // 处理阅片期的临床数据 - var readModuleIdList =await _readModuleRepository.Where(x => x.SubjectVisitId == sv.Id).Select(x => x.Id).ToListAsync(); + var readModuleIdList = await _readModuleRepository.Where(x => x.SubjectVisitId == sv.Id).Select(x => x.Id).ToListAsync(); await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => readModuleIdList.Contains(t.ReadingId), c => new ReadingClinicalData()