IRC_NewDev
he 2024-03-19 15:39:55 +08:00
parent 6677f2a01e
commit ebdec8dd62
2 changed files with 61 additions and 46 deletions

View File

@ -209,16 +209,22 @@ namespace IRaCIS.Core.Application.Contracts
public Guid CTSeriesId { get; set; } public Guid CTSeriesId { get; set; }
public Guid PTSeriesId { 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 string TaskBlindName { get; set; } = string.Empty;
public StudyInfo? StudyInfo { get; set; } public List<StudyInfo> StudyInfoList { get; set; }
} }
public class StudyInfo public class StudyInfo
{ {
public Guid StudyId { get; set; } public Guid StudyId { get; set; }
public string StudyCode { get; set; } = String.Empty; public string StudyCode { get; set; } = String.Empty;
public Guid SubjectVisitId { get; set; }
public string Modalities { get; set; } = String.Empty; public string Modalities { get; set; } = String.Empty;
public bool IsCriticalSequence { get; set; } = false; public bool IsCriticalSequence { get; set; } = false;
@ -228,9 +234,9 @@ namespace IRaCIS.Core.Application.Contracts
public bool IsDicom { get; set; } = true; public bool IsDicom { get; set; } = true;
public DicomSeriesDTO? CTSeries { get; set; } public List<DicomSeriesDTO> CTSeriesList { get; set; }
public DicomSeriesDTO? PTSeries { get; set; } public List<DicomSeriesDTO> PTSeriesList { get; set; }
} }
public class GetPTAndCtSeriesInDto public class GetPTAndCtSeriesInDto

View File

@ -13,6 +13,7 @@ using MassTransit;
using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Application.Services; using IRaCIS.Application.Services;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using DocumentFormat.OpenXml.Drawing.Charts;
namespace IRaCIS.Core.Application.Services namespace IRaCIS.Core.Application.Services
{ {
@ -351,6 +352,8 @@ namespace IRaCIS.Core.Application.Services
x.CTSeriesId, x.CTSeriesId,
x.VisitTaskId, x.VisitTaskId,
x.OtherStudyId, x.OtherStudyId,
x.VisitTask.SourceSubjectVisitId,
x.VisitTask.SourceSubjectVisit.IsBaseLine,
x.VisitTask.VisitTaskNum, x.VisitTask.VisitTaskNum,
x.VisitTask.TaskBlindName, x.VisitTask.TaskBlindName,
x.UpdateTime, x.UpdateTime,
@ -358,9 +361,9 @@ namespace IRaCIS.Core.Application.Services
List<GetPTAndCtSeriesOutDto> result = new List<GetPTAndCtSeriesOutDto>(); List<GetPTAndCtSeriesOutDto> result = new List<GetPTAndCtSeriesOutDto>();
List<Guid> seriesIds = new List<Guid>(); List<Guid> ctseriesIds = visitSeriesList.Select(x => x.CTSeriesId.Value).ToList();
List<Guid> ptseriesIds = visitSeriesList.Select(x => x.PTSeriesId.Value).ToList();
foreach (var item in visitTaskIds) foreach (var item in visitTaskIds)
{ {
var visitSeries = visitSeriesList.Where(x => x.VisitTaskId == item).OrderByDescending(x => x.UpdateTime).FirstOrDefault(); 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, PTSeriesId = visitSeries.PTSeriesId!.Value,
CTSeriesId = visitSeries.CTSeriesId!.Value, CTSeriesId = visitSeries.CTSeriesId!.Value,
TaskBlindName=visitSeries.TaskBlindName, TaskBlindName=visitSeries.TaskBlindName,
VisitTaskId= item,
SubjectVisitId= visitSeries.SourceSubjectVisitId!.Value,
IsBaseLine=visitSeries.IsBaseLine,
}); });
seriesIds.Add(visitSeries.PTSeriesId!.Value);
seriesIds.Add(visitSeries.CTSeriesId!.Value);
} }
} }
List<DicomSeriesDTO> seriesLists = await _repository.Where<DicomSeries>(s => seriesIds.Contains(s.Id)).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync(); List<DicomSeriesDTO> ctseriesLists = await _repository.Where<DicomSeries>(s => ctseriesIds.Contains(s.Id)).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
List<DicomSeriesDTO> ptseriesLists = await _repository.Where<DicomSeries>(s => ptseriesIds.Contains(s.Id)).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
var seriesIds = ctseriesIds.Union(ptseriesIds).ToList(); //并集
var instanceList = await _repository.Where<DicomInstance>(t => seriesIds.Contains(t.SeriesId)) var instanceList = await _repository.Where<DicomInstance>(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(); .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, SeriesCount = k.SeriesCount,
StudyCode = k.StudyCode, StudyCode = k.StudyCode,
StudyId = k.Id, StudyId = k.Id,
SubjectVisitId=k.SubjectVisitId,
}).ToListAsync(); }).ToListAsync();
seriesLists.ForEach(series => AddinstanceList(ctseriesLists);
{ AddinstanceList(ptseriesLists);
series.InstanceList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k => k.Id).ToList();
void AddinstanceList(List<DicomSeriesDTO> 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) series.InstancePathList = instanceList.Where(s => s.SeriesId == series.Id).OrderBy(t => t.InstanceNumber)
.SelectMany(u => .SelectMany(u =>
{
if (u.NumberOfFrames > 1)
{ {
var pathList = new List<string>();
for (int i = 1; i <= u.NumberOfFrames; i++) if (u.NumberOfFrames > 1)
{ {
pathList.Add(u.Path + "?frame=" + (i - 1)); var pathList = new List<string>();
for (int i = 1; i <= u.NumberOfFrames; i++)
{
pathList.Add(u.Path + "?frame=" + (i - 1));
}
return pathList;
} }
return pathList; else
} {
else return new List<string> { u.Path };
{
return new List<string> { u.Path };
} }
}) })
.ToList(); .ToList();
series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth; series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth;
series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter; 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(); study.PTSeriesList = ptseriesLists.Where(x => x.SubjectVisitId == item.SubjectVisitId).ToList();
if (item.StudyInfo != null) study.CTSeriesList = ctseriesLists.Where(x => x.SubjectVisitId == item.SubjectVisitId).ToList();
{
item.StudyInfo.PTSeries = seriesLists.Where(x => x.Id == item.PTSeriesId).FirstOrDefault();
item.StudyInfo.CTSeries = seriesLists.Where(x => x.Id == item.CTSeriesId).FirstOrDefault();
}
} }
} }