From 77add17984190ca59e085b7e79bf3fc90832b026 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 27 Aug 2025 09:18:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96=E5=85=B3?= =?UTF-8?q?=E9=94=AE=E5=BA=8F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Visit/SubjectVisitService.cs | 212 ++++++++++-------- 1 file changed, 120 insertions(+), 92 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 8af068503..da334cde8 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -431,6 +431,119 @@ namespace IRaCIS.Core.Application.Services return result; } + /// + /// 获取关键序列 + /// + /// + /// + [HttpPost] + public async Task GetKeySeries(GetReadingVisitStudyListIndto indto) + { + var rowInfoList = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).OrderBy(x => x.ReadingQuestionTrial.ShowOrder).ThenBy(x => x.RowIndex).Select(x => new StudyInstanceInfo() + { + ShowOrder = x.ReadingQuestionTrial.ShowOrder, + RowIndex = x.RowIndex, + SeriesId = x.SeriesId, + StudyId = x.StudyId, + InstanceId = x.InstanceId, + NumberOfFrames = x.NumberOfFrames, + }).ToListAsync(); + + + + var customoList = await _readingCustomTagRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).Select(x => new StudyInstanceInfo() + { + ShowOrder = 0, + RowIndex = 0m, + SeriesId = x.SeriesId, + StudyId = x.StudyId, + InstanceId = x.InstanceId, + NumberOfFrames = x.NumberOfFrames, + }).ToListAsync(); + + rowInfoList.AddRange(customoList); + + var thisStudyIds = rowInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.StudyId).Distinct().ToList(); + var thisSeriesIdIds = rowInfoList.Where(x => x.SeriesId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.SeriesId).Distinct().ToList(); + if (rowInfoList.Count > 0) + { + var thisVisitTaskStudy = await _dicomStudyRepository.Where(t => thisStudyIds.Contains(t.Id)).Select(k => new VisitStudyDTO() + { + InstanceCount = k.InstanceCount, + + //SeriesCount = k.SeriesCount, + + StudyId = k.Id, + IsCriticalSequence = true, + + }).FirstOrDefaultAsync(); + + if (thisVisitTaskStudy != null) + { + thisVisitTaskStudy.StudyId = default(Guid); + var item = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber). + ThenBy(s => s.SeriesTime) + .ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); + + if (item != null) + { + item.SeriesInstanceUid = string.Empty; + + var markInstanceIdList = rowInfoList.Where(y => y.InstanceId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(y => y.InstanceId!.Value).Distinct().ToList(); + + item.InstanceInfoList = await _dicomInstanceRepository.Where(t => markInstanceIdList.Contains(t.Id)).Select(k => + new InstanceBasicInfo() + { + Id = k.Id, + NumberOfFrames = k.NumberOfFrames, + HtmlPath = k.HtmlPath, + Path = k.Path, + InstanceNumber = k.InstanceNumber, + StudyId = k.StudyId, + SeriesId = k.SeriesId, + }).ToListAsync(); + + item.InstanceInfoList.ForEach(x => + { + + var keyFramesList = rowInfoList.Where(y => y.InstanceId == x.Id && y.NumberOfFrames != 0).Select(y => y.NumberOfFrames).Distinct().ToList(); + + if (keyFramesList.Count() > 0) + { + x.KeyFramesList = keyFramesList; + } + + var item = rowInfoList.FirstOrDefault(y => y.InstanceId == x.Id); + if (item != null) + { + x.ShowOrder = item.ShowOrder; + x.RowIndex = item.RowIndex; + } + + }); + + item.InstanceInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).ToList(); + + + item.InstanceCount = item.InstanceInfoList.Count; + + item.Description = "Key Series"; + + var modalityList = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(x => x.Modality).Distinct().ToListAsync(); ; + item.Modality = string.Join(",", modalityList); + thisVisitTaskStudy.SeriesList.Add(item); + //thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count; + } + + + return thisVisitTaskStudy; + + + } + } + + return null; + } /// /// 获取访视下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的 @@ -546,101 +659,16 @@ namespace IRaCIS.Core.Application.Services }).ToListAsync(); - - var customoList = await _readingCustomTagRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).Select(x => new StudyInstanceInfo() + var keySeries = await this.GetKeySeries(indto); + if (keySeries != null) { - ShowOrder = 0, - RowIndex = 0m, - SeriesId = x.SeriesId, - StudyId = x.StudyId, - InstanceId = x.InstanceId, - NumberOfFrames = x.NumberOfFrames, - }).ToListAsync(); - - rowInfoList.AddRange(customoList); - - var thisStudyIds = rowInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.StudyId).Distinct().ToList(); - var thisSeriesIdIds = rowInfoList.Where(x => x.SeriesId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.SeriesId).Distinct().ToList(); - if (rowInfoList.Count > 0) - { - var thisVisitTaskStudy = await _dicomStudyRepository.Where(t => thisStudyIds.Contains(t.Id)).Select(k => new VisitStudyDTO() - { - InstanceCount = k.InstanceCount, - - //SeriesCount = k.SeriesCount, - - StudyId = k.Id, - IsCriticalSequence = true, - - }).FirstOrDefaultAsync(); - - if (thisVisitTaskStudy != null) - { - thisVisitTaskStudy.StudyId = default(Guid); - var item = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber). - ThenBy(s => s.SeriesTime) - .ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); - - if (item != null) - { - item.SeriesInstanceUid = string.Empty; - - var markInstanceIdList = rowInfoList.Where(y => y.InstanceId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(y => y.InstanceId!.Value).Distinct().ToList(); - - item.InstanceInfoList = await _dicomInstanceRepository.Where(t => markInstanceIdList.Contains(t.Id)).Select(k => - new InstanceBasicInfo() - { - Id = k.Id, - NumberOfFrames = k.NumberOfFrames, - HtmlPath = k.HtmlPath, - Path = k.Path, - InstanceNumber = k.InstanceNumber, - StudyId = k.StudyId, - SeriesId = k.SeriesId, - }).ToListAsync(); - - item.InstanceInfoList.ForEach(x => - { - - var keyFramesList = rowInfoList.Where(y => y.InstanceId == x.Id && y.NumberOfFrames != 0).Select(y => y.NumberOfFrames).Distinct().ToList(); - - if (keyFramesList.Count() > 0) - { - x.KeyFramesList = keyFramesList; - } - - var item = rowInfoList.FirstOrDefault(y => y.InstanceId == x.Id); - if (item != null) - { - x.ShowOrder = item.ShowOrder; - x.RowIndex = item.RowIndex; - } - - }); - - item.InstanceInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).ToList(); - - - item.InstanceCount = item.InstanceInfoList.Count; - - item.Description = "Key Series"; - - var modalityList = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(x => x.Modality).Distinct().ToListAsync(); ; - item.Modality = string.Join(",", modalityList); - thisVisitTaskStudy.SeriesList.Add(item); - //thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count; - } - - - - studyList.Insert(0, thisVisitTaskStudy); - - } - - - + studyList.Insert(0, keySeries); } + + + + studyList.ForEach(x => { x.SeriesList.ForEach(y =>