diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 027b543aa..0653015b5 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -43,6 +43,9 @@ public class VisitTaskService(IRepository _visitTaskRepository, IRepository _trialReadingCriterionRepository, IRepository _readingQuestionCriterionTrialRepository, IRepository _readingTaskQuestionAnswerRepository, + IRepository _segmentRepository, + IRepository _segmentationRepository, + IRepository _segmentBindingRepository, IRepository _dicomInstanceRepository, IRepository _dicomSeriesRepository, IRepository _subjectCanceDoctorRepository, @@ -2220,7 +2223,7 @@ public class VisitTaskService(IRepository _visitTaskRepository, } } - private void CopyForms(VisitTask newTask, VisitTask origenalTask) + private async Task CopyForms(VisitTask newTask, VisitTask origenalTask) { newTask.IsCopyLesionAnswer = true; //自定义 @@ -2236,6 +2239,7 @@ public class VisitTaskService(IRepository _visitTaskRepository, //_ = _readingCustomTagRepository.AddRangeAsync(readingCustomTagList).Result; + var readingTaskQuestionAnswerList = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); @@ -2294,6 +2298,60 @@ public class VisitTaskService(IRepository _visitTaskRepository, } } + + #region 分割 + Dictionary segmentationRelationship = new Dictionary() { }; + var segmentationList = await _segmentationRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToListAsync(); + + foreach (var item in segmentationList) + { + + var newSegmentationId = NewId.NextSequentialGuid(); + segmentationRelationship.Add(item.Id, newSegmentationId); + item.Id = newSegmentationId; + item.VisitTaskId = newTask.Id; + } + + + Dictionary segmentRelationship = new Dictionary() { }; + var segmentList = await _segmentRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToListAsync(); + foreach (var item in segmentList) + { + var newSegmentationId = NewId.NextSequentialGuid(); + segmentRelationship.Add(item.Id, newSegmentationId); + item.Id = newSegmentationId; + item.VisitTaskId = newTask.Id; + } + + var segmentBindingList = await _segmentBindingRepository.Where(x => x.VisitTaskId == origenalTask.Id).ToListAsync(); + + foreach (var item in segmentBindingList) + { + if (segmentationRelationship.ContainsKey(item.SegmentationId)) + { + item.SegmentationId = segmentationRelationship[item.SegmentationId]; + } + if (segmentRelationship.ContainsKey(item.SegmentId)) + { + item.SegmentId = segmentRelationship[item.SegmentId]; + } + + if (item.RowId != null && lesionRelationship.ContainsKey(item.RowId.Value)) + { + item.RowId = lesionRelationship[item.RowId.Value]; + } + item.Id = NewId.NextSequentialGuid(); + item.VisitTaskId = newTask.Id; + } + + + _ = _segmentationRepository.AddRangeAsync(segmentationList).Result; + _ = _segmentRepository.AddRangeAsync(segmentList).Result; + _ = _segmentBindingRepository.AddRangeAsync(segmentBindingList).Result; + #endregion + + + foreach (var item in readingTableAnswerRowInfoList) { if (item.SplitRowId != null && lesionRelationship.ContainsKey(item.SplitRowId.Value)) diff --git a/IRaCIS.Core.Domain/Reading/Segment/Segment.cs b/IRaCIS.Core.Domain/Reading/Segment/Segment.cs index e287987c0..c72b5a57d 100644 --- a/IRaCIS.Core.Domain/Reading/Segment/Segment.cs +++ b/IRaCIS.Core.Domain/Reading/Segment/Segment.cs @@ -14,7 +14,11 @@ namespace IRaCIS.Core.Domain.Models public class Segment : BaseFullDeleteAuditEntity { #region 导航属性 + [JsonIgnore] + [Comment("分割分组")] + [ForeignKey("SegmentationId")] + public Segmentation Segmentation { get; set; } #endregion /// diff --git a/IRaCIS.Core.Domain/Reading/Segment/Segmentation.cs b/IRaCIS.Core.Domain/Reading/Segment/Segmentation.cs index 2759094e3..e3e24b6e1 100644 --- a/IRaCIS.Core.Domain/Reading/Segment/Segmentation.cs +++ b/IRaCIS.Core.Domain/Reading/Segment/Segmentation.cs @@ -5,7 +5,8 @@ namespace IRaCIS.Core.Domain.Models; public class Segmentation : BaseFullDeleteAuditEntity { #region 导航属性 - + [JsonIgnore] + public List SegmentList { get; set; } = new List(); #endregion ///