diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 74187692..702e4c8c 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -99,7 +99,7 @@ namespace IRaCIS.Core.Application.Services throw new BusinessValidationFailedException("设置末次评估后,不允许添加计划外访视。"); } - if (await _repository.AnyAsync(t=>t.SubjectId==svCommand.SubjectId && t.TaskState==TaskState.Effect && t.VisitTaskNum > svCommand.VisitNum && t.SignTime != null && t.TrialReadingCriterion.IsReadingTaskViewInOrder)) + if (await _repository.AnyAsync(t => t.SubjectId == svCommand.SubjectId && t.TaskState == TaskState.Effect && t.VisitTaskNum > svCommand.VisitNum && t.SignTime != null && t.TrialReadingCriterion.IsReadingTaskViewInOrder)) { throw new BusinessValidationFailedException("该受试者后续访视已有任务完成阅片(有序阅片标准),不允许在此添加,如果确实需要,请回退"); } @@ -216,7 +216,7 @@ namespace IRaCIS.Core.Application.Services var studyIds = studyList.Select(t => t.StudyId).ToList(); var instanceList = await _repository.Where(t => studyIds.Contains(t.StudyId)) - .Select(t => new { t.SeriesId, t.Id, t.InstanceNumber,t.Path,t.NumberOfFrames }).ToListAsync(); + .Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames }).ToListAsync(); foreach (var t in studyList) { @@ -315,15 +315,36 @@ namespace IRaCIS.Core.Application.Services if (item != null) { item.SeriesInstanceUid = string.Empty; + item.InstanceList = thisRowinfo.Where(y => y.InstanceId != null).Select(y => y.InstanceId.Value).Distinct().ToList(); - item.InstancePathList = await _dicomInstanceRepository.Where(x => item.InstanceList.Contains(x.Id)).Select(x => x.Path).ToListAsync(); + + var tempInstanceList = await _dicomInstanceRepository.Where(x => item.InstanceList.Contains(x.Id)).OrderBy(t => t.InstanceNumber).Select(x => new { x.Path, x.NumberOfFrames }).ToListAsync(); + + item.InstancePathList = tempInstanceList.SelectMany(u => + { + + if (u.NumberOfFrames == 1) + { + return new List { u.Path }; + } + else + { + var pathList = new List(); + + for (int i = 1; i <= u.NumberOfFrames; i++) + { + pathList.Add(u.Path + "?frame=" + (i - 1)); + } + return pathList; + } + }) + .ToList(); + item.InstanceCount = item.InstanceList.Count(); thisVisitTaskStudy.SeriesList.Add(item); thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count(); - - } @@ -347,7 +368,7 @@ namespace IRaCIS.Core.Application.Services var studyIds = studyList.Select(t => t.StudyId).ToList(); var instanceList = await _repository.Where(t => studyIds.Contains(t.StudyId)) - .Select(t => new { t.SeriesId, t.Id, t.InstanceNumber,t.Path,t.NumberOfFrames }).ToListAsync(); + .Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames }).ToListAsync(); @@ -359,7 +380,8 @@ namespace IRaCIS.Core.Application.Services t.SeriesList = seriesLists.Where(s => s.StudyId == t.StudyId).OrderBy(s => s.SeriesNumber). ThenBy(s => s.SeriesTime).ToList(); - t.SeriesList.ForEach(series => { + t.SeriesList.ForEach(series => + { series.InstanceList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k => k.Id).ToList();