重构检查列表
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
parent
0655318d2d
commit
62102b8b03
|
@ -188,7 +188,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
{
|
{
|
||||||
public Guid TrialId { get; set; }
|
public Guid TrialId { get; set; }
|
||||||
public Guid SujectVisitId { get; set; }
|
public Guid SujectVisitId { get; set; }
|
||||||
public Guid? VisitTaskId { get; set; }
|
public Guid VisitTaskId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -480,8 +480,74 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<List<VisitStudyDTO>> GetReadingVisitStudyList(GetReadingVisitStudyListIndto indto)
|
public async Task<List<VisitStudyDTO>> GetReadingVisitStudyList(GetReadingVisitStudyListIndto indto)
|
||||||
{
|
{
|
||||||
var result = new List<VisitStudyDTO>();
|
|
||||||
|
|
||||||
|
var studyList = new List<VisitStudyDTO>();
|
||||||
|
|
||||||
|
var taskInfo = await _visitTaskRepository.Where(x => x.Id == indto.VisitTaskId).FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
||||||
|
#region dicom 检查查询
|
||||||
|
|
||||||
|
//如果是手动生成的标准,需要过滤检查和序列数据
|
||||||
|
|
||||||
|
var isManualGenerate = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == taskInfo.TrialReadingCriterionId && t.IsAutoCreate == false);
|
||||||
|
|
||||||
|
var dicomStudyList = await _repository.Where<DicomStudy>(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId)
|
||||||
|
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
||||||
|
.Select(k => new VisitStudyDTO()
|
||||||
|
{
|
||||||
|
InstanceCount = k.InstanceCount,
|
||||||
|
Modalities = k.Modalities,
|
||||||
|
SeriesCount = k.SeriesCount,
|
||||||
|
StudyCode = k.StudyCode,
|
||||||
|
StudyId = k.Id,
|
||||||
|
|
||||||
|
}).ToListAsync();
|
||||||
|
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
|
var instanceList = await _repository.Where<DicomInstance>(t => studyIds.Contains(t.StudyId))
|
||||||
|
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
||||||
|
|
||||||
|
List<DicomSeriesDTO> seriesLists = await _repository.Where<DicomSeries>(s => studyIds.Contains(s.StudyId))
|
||||||
|
.WhereIf(isManualGenerate == false, t => t.IsReading)
|
||||||
|
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
||||||
|
.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
|
foreach (var t in dicomStudyList)
|
||||||
|
{
|
||||||
|
t.SeriesList = seriesLists.Where(s => s.StudyId == t.StudyId).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList();
|
||||||
|
|
||||||
|
t.SeriesList.ForEach(series =>
|
||||||
|
{
|
||||||
|
series.InstanceInfoList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k =>
|
||||||
|
new InstanceBasicInfo()
|
||||||
|
{
|
||||||
|
Id = k.Id,
|
||||||
|
NumberOfFrames = k.NumberOfFrames,
|
||||||
|
HtmlPath = k.HtmlPath,
|
||||||
|
Path = k.Path,
|
||||||
|
InstanceNumber = k.InstanceNumber,
|
||||||
|
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth;
|
||||||
|
series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter;
|
||||||
|
});
|
||||||
|
|
||||||
|
//设置为阅片与否 不更改数据库检查 的instance数量 和 SeriesCount 所以这里要实时统计
|
||||||
|
t.SeriesCount = t.SeriesList.Count;
|
||||||
|
t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
|
||||||
|
}
|
||||||
|
|
||||||
|
studyList.AddRange(dicomStudyList);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region dicom 关键序列处理
|
||||||
|
|
||||||
|
//已经签名的任务,加关键序列
|
||||||
|
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||||
|
{
|
||||||
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
|
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
|
||||||
{
|
{
|
||||||
x.ReadingQuestionTrial.ShowOrder,
|
x.ReadingQuestionTrial.ShowOrder,
|
||||||
|
@ -491,12 +557,6 @@ namespace IRaCIS.Core.Application.Services
|
||||||
x.InstanceId,
|
x.InstanceId,
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
var taskInfo = await _visitTaskRepository.Where(x => x.Id == indto.VisitTaskId).FirstNotNullAsync();
|
|
||||||
|
|
||||||
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
|
|
||||||
{
|
|
||||||
|
|
||||||
var thisStudyIds = rowInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.StudyId).Distinct().ToList();
|
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();
|
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)
|
if (rowInfoList.Count > 0)
|
||||||
|
@ -559,9 +619,6 @@ namespace IRaCIS.Core.Application.Services
|
||||||
item.Modality = string.Join(",", modalityList);
|
item.Modality = string.Join(",", modalityList);
|
||||||
thisVisitTaskStudy.SeriesList.Add(item);
|
thisVisitTaskStudy.SeriesList.Add(item);
|
||||||
thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count;
|
thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -570,66 +627,24 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
studyList.ForEach(x =>
|
||||||
//如果是手动生成的标准,需要过滤检查和序列数据
|
|
||||||
|
|
||||||
var isManualGenerate = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == taskInfo.TrialReadingCriterionId && t.IsAutoCreate == false);
|
|
||||||
|
|
||||||
var studyList = await _repository.Where<DicomStudy>(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId)
|
|
||||||
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
|
||||||
.Select(k => new VisitStudyDTO()
|
|
||||||
{
|
{
|
||||||
InstanceCount = k.InstanceCount,
|
x.SeriesList.ForEach(y =>
|
||||||
Modalities = k.Modalities,
|
|
||||||
SeriesCount = k.SeriesCount,
|
|
||||||
StudyCode = k.StudyCode,
|
|
||||||
StudyId = k.Id,
|
|
||||||
|
|
||||||
}).ToListAsync();
|
|
||||||
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
|
||||||
|
|
||||||
var instanceList = await _repository.Where<DicomInstance>(t => studyIds.Contains(t.StudyId))
|
|
||||||
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
List<DicomSeriesDTO> seriesLists = await _repository.Where<DicomSeries>(s => studyIds.Contains(s.StudyId) /*&& s.IsReading*/)
|
|
||||||
.WhereIf(isManualGenerate == false, t => t.IsReading)
|
|
||||||
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
|
||||||
.OrderBy(s => s.SeriesNumber). ThenBy(s => s.SeriesTime).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
|
||||||
|
|
||||||
foreach (var t in studyList)
|
|
||||||
{
|
{
|
||||||
t.SeriesList = seriesLists.Where(s => s.StudyId == t.StudyId).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList();
|
y.IsBeMark = rowInfoList.Any(z => z.SeriesId == y.Id);
|
||||||
|
|
||||||
t.SeriesList.ForEach(series =>
|
|
||||||
{
|
|
||||||
series.InstanceInfoList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k =>
|
|
||||||
new InstanceBasicInfo()
|
|
||||||
{
|
|
||||||
Id = k.Id,
|
|
||||||
NumberOfFrames = k.NumberOfFrames,
|
|
||||||
HtmlPath = k.HtmlPath,
|
|
||||||
Path = k.Path,
|
|
||||||
InstanceNumber = k.InstanceNumber,
|
|
||||||
|
|
||||||
}).ToList();
|
|
||||||
|
|
||||||
series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth;
|
|
||||||
series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//设置为阅片与否 不更改数据库检查 的instance数量 和 SeriesCount 所以这里要实时统计
|
});
|
||||||
t.SeriesCount = t.SeriesList.Count;
|
|
||||||
t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 非Dicom
|
#endregion
|
||||||
|
|
||||||
|
#region 非Dicom 检查查询
|
||||||
var noDicomList = await _noneDicomStudyRepository.Where(x => x.TrialId == indto.TrialId && x.SubjectVisitId == indto.SujectVisitId).ToListAsync();
|
var noDicomList = await _noneDicomStudyRepository.Where(x => x.TrialId == indto.TrialId && x.SubjectVisitId == indto.SujectVisitId).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
@ -677,24 +692,13 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (studyList == null || studyList.Count == 0)
|
|
||||||
{
|
|
||||||
studyList = new List<VisitStudyDTO>();
|
|
||||||
}
|
|
||||||
|
|
||||||
studyList.AddRange(noDicomStudyList);
|
studyList.AddRange(noDicomStudyList);
|
||||||
|
#endregion
|
||||||
|
|
||||||
studyList.ForEach(x =>
|
|
||||||
{
|
|
||||||
x.SeriesList.ForEach(y =>
|
|
||||||
{
|
|
||||||
y.IsBeMark = rowInfoList.Any(z => z.SeriesId == y.Id);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
result.AddRange(studyList);
|
var result = studyList.Where(x => x.SeriesCount > 0).ToList();
|
||||||
result = result.Where(x => x.SeriesCount > 0).ToList();
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue