重构检查列表
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
parent
0655318d2d
commit
62102b8b03
|
@ -59,10 +59,10 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public class SetSubjectVisitUrgentCommand
|
||||
{
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
|
||||
|
||||
public bool isUrgent { get; set; }
|
||||
public bool isUrgent { get; set; }
|
||||
}
|
||||
public class SubjectVisitDTO : SubjectVisitCommand
|
||||
{
|
||||
|
@ -113,7 +113,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public class UploadVisitCheckExcelDto
|
||||
{
|
||||
|
||||
|
||||
public Guid trialId { get; set; }
|
||||
|
||||
public string AuditInfo { get; set; }
|
||||
|
@ -135,7 +135,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public class SubjectVisitSelectItem
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid Id { get; set; }
|
||||
public decimal VisitNum { get; set; }
|
||||
public string VisitName { get; set; } = String.Empty;
|
||||
|
||||
|
@ -186,9 +186,9 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public class GetReadingVisitStudyListIndto
|
||||
{
|
||||
public Guid TrialId { get; set; }
|
||||
public Guid SujectVisitId { get; set; }
|
||||
public Guid? VisitTaskId { get; set; }
|
||||
public Guid TrialId { get; set; }
|
||||
public Guid SujectVisitId { get; set; }
|
||||
public Guid VisitTaskId { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
@ -207,54 +207,54 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public class GetPTAndCtSeriesOutDto
|
||||
{
|
||||
public Guid VisitTaskId { get; set; }
|
||||
public Guid CTSeriesId { get; set; }
|
||||
public Guid PTSeriesId { get; set; }
|
||||
public Guid VisitTaskId { get; set; }
|
||||
public Guid CTSeriesId { get; set; }
|
||||
public Guid PTSeriesId { get; set; }
|
||||
|
||||
|
||||
public Guid StudyId { get; set; }
|
||||
public Guid StudyId { get; set; }
|
||||
|
||||
public Guid? SubjectVisitId { get; set; }
|
||||
public Guid? SubjectVisitId { get; set; }
|
||||
|
||||
|
||||
public bool IsBaseLineTask { get; set; }
|
||||
public bool IsBaseLineTask { get; set; }
|
||||
|
||||
public string TaskBlindName { get; set; } = string.Empty;
|
||||
public string TaskBlindName { get; set; } = string.Empty;
|
||||
|
||||
public List<StudyInfo> StudyInfoList { 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 StudyId { get; set; }
|
||||
public string StudyCode { get; set; } = String.Empty;
|
||||
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
public string Modalities { get; set; } = String.Empty;
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
public string Modalities { get; set; } = String.Empty;
|
||||
|
||||
public bool IsCriticalSequence { get; set; } = false;
|
||||
public bool IsCriticalSequence { get; set; } = false;
|
||||
|
||||
public int SeriesCount { get; set; }
|
||||
public int InstanceCount { get; set; }
|
||||
public int SeriesCount { get; set; }
|
||||
public int InstanceCount { get; set; }
|
||||
|
||||
public bool IsDicom { get; set; } = true;
|
||||
public bool IsDicom { get; set; } = true;
|
||||
|
||||
public List<DicomSeriesDTO> CTSeriesList { get; set; }
|
||||
public List<DicomSeriesDTO> CTSeriesList { get; set; }
|
||||
|
||||
public List<DicomSeriesDTO> PTSeriesList { get; set; }
|
||||
}
|
||||
public List<DicomSeriesDTO> PTSeriesList { get; set; }
|
||||
}
|
||||
|
||||
public class GetDicomSeriesInfoInDto
|
||||
{
|
||||
|
||||
public Guid SeriesId { get; set; }
|
||||
}
|
||||
public Guid SeriesId { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class GetPTAndCtSeriesInDto
|
||||
{
|
||||
public Guid VisitTaskId { get; set; }
|
||||
}
|
||||
public class GetPTAndCtSeriesInDto
|
||||
{
|
||||
public Guid VisitTaskId { get; set; }
|
||||
}
|
||||
|
||||
public class VisitStudyDTO
|
||||
{
|
||||
|
@ -287,11 +287,11 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
//public Guid StudyMonitorId { get; set; }
|
||||
public Guid? AbandonStudyId { get; set; }
|
||||
|
||||
|
||||
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
|
||||
public string StudyInstanceUid { get; set; } = String.Empty;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -382,7 +382,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public string ErrorMesseage { get; set; } = String.Empty;
|
||||
|
||||
public List<UploadedSeries> UploadedSeriesList { get; set;} = new List<UploadedSeries>();
|
||||
public List<UploadedSeries> UploadedSeriesList { get; set; } = new List<UploadedSeries>();
|
||||
|
||||
}
|
||||
|
||||
|
@ -418,7 +418,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
{
|
||||
public string StudyInstanceUid { get; set; } = String.Empty;
|
||||
|
||||
public DateTime? StudyDate { get; set; }
|
||||
public DateTime? StudyDate { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
@ -535,10 +535,10 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public Guid TrialId { get; set; }
|
||||
public string SubjectInfo { get; set; } = String.Empty;
|
||||
|
||||
public string VisitPlanInfo { get; set; }=String.Empty;
|
||||
public string VisitPlanInfo { get; set; } = String.Empty;
|
||||
|
||||
public Guid? SubjectVisitId { get; set; }
|
||||
|
||||
|
||||
|
||||
public DateTime? StudyTimeBegin { get; set; }
|
||||
|
||||
|
|
|
@ -480,22 +480,82 @@ namespace IRaCIS.Core.Application.Services
|
|||
[HttpPost]
|
||||
public async Task<List<VisitStudyDTO>> GetReadingVisitStudyList(GetReadingVisitStudyListIndto indto)
|
||||
{
|
||||
var result = new List<VisitStudyDTO>();
|
||||
|
||||
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.RowIndex,
|
||||
x.SeriesId,
|
||||
x.StudyId,
|
||||
x.InstanceId,
|
||||
}).ToListAsync();
|
||||
|
||||
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
|
||||
{
|
||||
x.ReadingQuestionTrial.ShowOrder,
|
||||
x.RowIndex,
|
||||
x.SeriesId,
|
||||
x.StudyId,
|
||||
x.InstanceId,
|
||||
}).ToListAsync();
|
||||
|
||||
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();
|
||||
|
@ -559,9 +619,6 @@ namespace IRaCIS.Core.Application.Services
|
|||
item.Modality = string.Join(",", modalityList);
|
||||
thisVisitTaskStudy.SeriesList.Add(item);
|
||||
thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -570,66 +627,24 @@ namespace IRaCIS.Core.Application.Services
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//如果是手动生成的标准,需要过滤检查和序列数据
|
||||
|
||||
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()
|
||||
studyList.ForEach(x =>
|
||||
{
|
||||
InstanceCount = k.InstanceCount,
|
||||
Modalities = k.Modalities,
|
||||
SeriesCount = k.SeriesCount,
|
||||
StudyCode = k.StudyCode,
|
||||
StudyId = k.Id,
|
||||
x.SeriesList.ForEach(y =>
|
||||
{
|
||||
y.IsBeMark = rowInfoList.Any(z => z.SeriesId == y.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();
|
||||
|
||||
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();
|
||||
|
||||
|
||||
|
@ -677,24 +692,13 @@ namespace IRaCIS.Core.Application.Services
|
|||
|
||||
}
|
||||
|
||||
|
||||
if (studyList == null || studyList.Count == 0)
|
||||
{
|
||||
studyList = new List<VisitStudyDTO>();
|
||||
}
|
||||
|
||||
studyList.AddRange(noDicomStudyList);
|
||||
#endregion
|
||||
|
||||
studyList.ForEach(x =>
|
||||
{
|
||||
x.SeriesList.ForEach(y =>
|
||||
{
|
||||
y.IsBeMark = rowInfoList.Any(z => z.SeriesId == y.Id);
|
||||
});
|
||||
|
||||
});
|
||||
result.AddRange(studyList);
|
||||
result = result.Where(x => x.SeriesCount > 0).ToList();
|
||||
|
||||
var result = studyList.Where(x => x.SeriesCount > 0).ToList();
|
||||
|
||||
return result;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue