diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs index db776d131..bfe3e47db 100644 --- a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs +++ b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs @@ -209,16 +209,22 @@ namespace IRaCIS.Core.Application.Contracts public Guid CTSeriesId { get; set; } public Guid PTSeriesId { get; set; } + public Guid? SubjectVisitId { get; set; } + + + public bool IsBaseLine { get; set; } public string TaskBlindName { get; set; } = string.Empty; - public StudyInfo? StudyInfo { get; set; } + public List StudyInfoList { get; set; } } public class StudyInfo { public Guid StudyId { get; set; } public string StudyCode { get; set; } = String.Empty; + + public Guid SubjectVisitId { get; set; } public string Modalities { get; set; } = String.Empty; public bool IsCriticalSequence { get; set; } = false; @@ -228,9 +234,9 @@ namespace IRaCIS.Core.Application.Contracts public bool IsDicom { get; set; } = true; - public DicomSeriesDTO? CTSeries { get; set; } + public List CTSeriesList { get; set; } - public DicomSeriesDTO? PTSeries { get; set; } + public List PTSeriesList { get; set; } } public class GetPTAndCtSeriesInDto diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 424a36957..3cf925bbe 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -13,6 +13,7 @@ using MassTransit; using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Application.Services; using Microsoft.Extensions.DependencyInjection; +using DocumentFormat.OpenXml.Drawing.Charts; namespace IRaCIS.Core.Application.Services { @@ -351,6 +352,8 @@ namespace IRaCIS.Core.Application.Services x.CTSeriesId, x.VisitTaskId, x.OtherStudyId, + x.VisitTask.SourceSubjectVisitId, + x.VisitTask.SourceSubjectVisit.IsBaseLine, x.VisitTask.VisitTaskNum, x.VisitTask.TaskBlindName, x.UpdateTime, @@ -358,9 +361,9 @@ namespace IRaCIS.Core.Application.Services List result = new List(); - List seriesIds = new List(); - + List ctseriesIds = visitSeriesList.Select(x => x.CTSeriesId.Value).ToList(); + List ptseriesIds = visitSeriesList.Select(x => x.PTSeriesId.Value).ToList(); foreach (var item in visitTaskIds) { var visitSeries = visitSeriesList.Where(x => x.VisitTaskId == item).OrderByDescending(x => x.UpdateTime).FirstOrDefault(); @@ -371,16 +374,22 @@ namespace IRaCIS.Core.Application.Services PTSeriesId = visitSeries.PTSeriesId!.Value, CTSeriesId = visitSeries.CTSeriesId!.Value, TaskBlindName=visitSeries.TaskBlindName, + VisitTaskId= item, + SubjectVisitId= visitSeries.SourceSubjectVisitId!.Value, + IsBaseLine=visitSeries.IsBaseLine, }); - seriesIds.Add(visitSeries.PTSeriesId!.Value); - seriesIds.Add(visitSeries.CTSeriesId!.Value); + } } - List seriesLists = await _repository.Where(s => seriesIds.Contains(s.Id)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + List ctseriesLists = await _repository.Where(s => ctseriesIds.Contains(s.Id)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + List ptseriesLists = await _repository.Where(s => ptseriesIds.Contains(s.Id)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + var seriesIds = ctseriesIds.Union(ptseriesIds).ToList(); //并集 + var instanceList = await _repository.Where(t => seriesIds.Contains(t.SeriesId)) .Select(t => new { t.SeriesId,t.StudyId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync(); @@ -394,61 +403,61 @@ namespace IRaCIS.Core.Application.Services SeriesCount = k.SeriesCount, StudyCode = k.StudyCode, StudyId = k.Id, + SubjectVisitId=k.SubjectVisitId, }).ToListAsync(); - seriesLists.ForEach(series => - { - series.InstanceList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k => k.Id).ToList(); + AddinstanceList(ctseriesLists); + AddinstanceList(ptseriesLists); + + void AddinstanceList(List list) + { + list.ForEach(series => + { + series.InstanceList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k => k.Id).ToList(); - series.InstanceHtmlPathList = instanceList.Where(t => t.SeriesId == series.Id && t.HtmlPath != string.Empty).OrderBy(t => t.InstanceNumber).Select(k => k.HtmlPath).ToList(); + series.InstanceHtmlPathList = instanceList.Where(t => t.SeriesId == series.Id && t.HtmlPath != string.Empty).OrderBy(t => t.InstanceNumber).Select(k => k.HtmlPath).ToList(); - //处理多帧 - series.InstancePathList = instanceList.Where(s => s.SeriesId == series.Id).OrderBy(t => t.InstanceNumber) - .SelectMany(u => - { - - if (u.NumberOfFrames > 1) + //处理多帧 + series.InstancePathList = instanceList.Where(s => s.SeriesId == series.Id).OrderBy(t => t.InstanceNumber) + .SelectMany(u => { - var pathList = new List(); - for (int i = 1; i <= u.NumberOfFrames; i++) + if (u.NumberOfFrames > 1) { - pathList.Add(u.Path + "?frame=" + (i - 1)); + var pathList = new List(); + + for (int i = 1; i <= u.NumberOfFrames; i++) + { + pathList.Add(u.Path + "?frame=" + (i - 1)); + } + return pathList; } - return pathList; - } - else - { - return new List { u.Path }; + else + { + return new List { u.Path }; - } - }) - .ToList(); + } + }) + .ToList(); - series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth; - series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter; - }); + series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth; + series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter; + }); + } + - foreach (var item in result) + + foreach (var item in result) { - var series = seriesLists.Where(x => x.Id == item.PTSeriesId).FirstOrDefault(); + item.StudyInfoList = studyList.Where(x => x.SubjectVisitId == item.SubjectVisitId).ToList(); - if (series != null) + foreach (var study in item.StudyInfoList) { - item.StudyInfo = studyList.Where(x => x.StudyId == series.StudyId).FirstOrDefault(); - if (item.StudyInfo != null) - { - item.StudyInfo.PTSeries = seriesLists.Where(x => x.Id == item.PTSeriesId).FirstOrDefault(); - item.StudyInfo.CTSeries = seriesLists.Where(x => x.Id == item.CTSeriesId).FirstOrDefault(); - } - + study.PTSeriesList = ptseriesLists.Where(x => x.SubjectVisitId == item.SubjectVisitId).ToList(); + study.CTSeriesList = ctseriesLists.Where(x => x.SubjectVisitId == item.SubjectVisitId).ToList(); } - - - - }