重构检查列表
continuous-integration/drone/push Build is failing Details

IRC_NewDev
hang 2024-06-12 16:10:49 +08:00
parent 0655318d2d
commit 62102b8b03
2 changed files with 122 additions and 118 deletions

View File

@ -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; }

View File

@ -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;