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 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<StudyInfo> 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<DicomSeriesDTO> CTSeriesList { get; set; }
public DicomSeriesDTO? PTSeries { get; set; }
public List<DicomSeriesDTO> PTSeriesList { get; set; }
}
public class GetPTAndCtSeriesInDto

View File

@ -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<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)
{
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<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))
.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<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)
.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<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
{
return new List<string> { u.Path };
else
{
return new List<string> { 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();
}
}