From a4b9c44cfa923525c0a4e2c7358b3945d930480a Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 17 May 2024 09:16:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E5=B8=A7=E9=85=8D=E5=90=88=E7=8E=B2?= =?UTF-8?q?=E5=A7=90=E4=BF=AE=E6=94=B9=E6=A8=A1=E5=9D=971?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DTO/DicomSeriesModel.cs | 24 + .../Service/Visit/SubjectVisitService.cs | 468 +++++++++--------- 2 files changed, 248 insertions(+), 244 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomSeriesModel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomSeriesModel.cs index 5dcd1e3fa..15fe213b9 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomSeriesModel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomSeriesModel.cs @@ -33,19 +33,43 @@ public bool IsDeleted { get; set; } public bool IsReading { get; set; } = true; + + public List InstanceInfoList { get; set; } + + public bool IsExistMutiFrames => InstanceInfoList.Any(t => t.NumberOfFrames > 1); + + + #region 以后废弃 + public List InstanceList { get; set; } = new List(); public List InstancePathList { get; set; } = new List(); public List InstanceHtmlPathList { get; set; } + + //存放在instance 上面 public string WindowCenter { get; set; } = string.Empty; public string WindowWidth { get; set; } = string.Empty; + #endregion + + public string ImageResizePath { get; set; } } + public class InstanceBasicInfo + { + public Guid Id { get; set; } + + public string Path { get; set; } + + public string HtmlPath { get; set; } + + public int NumberOfFrames { get; set; } + } + public class DicomSeriesWithLabelDTO : DicomSeriesDTO { public bool HasLabel { get; set; } = false; diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index acc41293f..891082100 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -26,7 +26,7 @@ namespace IRaCIS.Core.Application.Services private readonly IRepository _readingClinicalDataRepository; private readonly IRepository _readModuleRepository; private readonly IRepository _trialRepository; - private readonly IRepository _readingPeriodSetRepository; + private readonly IRepository _readingPeriodSetRepository; private readonly IRepository _noneDicomStudyRepository; private readonly IRepository _dicomInstanceRepository; private readonly IRepository _visitTaskRepository; @@ -34,8 +34,8 @@ namespace IRaCIS.Core.Application.Services private readonly IRepository _noneDicomStudyFileRepository; private readonly IRepository _readingPeriodPlanRepository; private readonly IRepository _subjectRepository; - private readonly IServiceProvider iServiceProvider; - private readonly IRepository _trialReadingCriterionRepository; + private readonly IServiceProvider iServiceProvider; + private readonly IRepository _trialReadingCriterionRepository; private readonly IRepository _subjectCriteriaEvaluationVisitStudyFilterRepository; public SubjectVisitService(IRepository subjectVisitRepository, @@ -43,8 +43,8 @@ namespace IRaCIS.Core.Application.Services IRepository readingClinicalDataRepository, IRepository readModuleRepository, IRepository trialRepository, - IServiceProvider IServiceProvider, - IRepository readingPeriodSetRepository, + IServiceProvider IServiceProvider, + IRepository readingPeriodSetRepository, IRepository noneDicomStudyRepository, IRepository dicomInstanceRepository, IRepository visitTaskRepository, @@ -52,19 +52,19 @@ namespace IRaCIS.Core.Application.Services IRepository noneDicomStudyFileRepository, IRepository readingPeriodPlanRepository, IRepository subjectRepository, - - IRepository trialReadingCriterionRepository, + + IRepository trialReadingCriterionRepository, IRepository subjectCriteriaEvaluationVisitStudyFilterRepository - + ) { - this.iServiceProvider = IServiceProvider; - _subjectVisitRepository = subjectVisitRepository; + this.iServiceProvider = IServiceProvider; + _subjectVisitRepository = subjectVisitRepository; this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; this._readingClinicalDataRepository = readingClinicalDataRepository; this._readModuleRepository = readModuleRepository; this._trialRepository = trialRepository; - this._readingPeriodSetRepository = readingPeriodSetRepository; + this._readingPeriodSetRepository = readingPeriodSetRepository; this._noneDicomStudyRepository = noneDicomStudyRepository; this._dicomInstanceRepository = dicomInstanceRepository; this._visitTaskRepository = visitTaskRepository; @@ -112,7 +112,7 @@ namespace IRaCIS.Core.Application.Services svCommand.VisitExecuted = svCommand.IsLostVisit ? VisitExecutedEnum.Executed : svCommand.VisitExecuted; - + SubjectVisit? dbBeforeEntity = null; //Add @@ -124,13 +124,13 @@ namespace IRaCIS.Core.Application.Services { if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == svCommand.SubjectId && t.IsFinalVisit)) { - //---设置末次评估后,不允许添加计划外访视。 + //---设置末次评估后,不允许添加计划外访视。 throw new BusinessValidationFailedException(_localizer["Visit_NoExtraVisitAfterLast"]); } if (await _repository.AnyAsync(t => t.SubjectId == svCommand.SubjectId && t.TaskState == TaskState.Effect && t.VisitTaskNum > svCommand.VisitNum && t.SignTime != null && t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.InOrder)) { - //---该受试者后续访视已有任务完成阅片(有序阅片标准),不允许在此添加,如果确实需要,请回退 + //---该受试者后续访视已有任务完成阅片(有序阅片标准),不允许在此添加,如果确实需要,请回退 throw new BusinessValidationFailedException(_localizer["Visit_FinishedTasksNoAdd"]); } @@ -163,13 +163,13 @@ namespace IRaCIS.Core.Application.Services if (svCommand.PDState != dbBeforeEntity.PDState && dbBeforeEntity.SubmitState == SubmitStateEnum.Submitted) { - //---当前访视影像提交后,不允许修改PD确认状态。 + //---当前访视影像提交后,不允许修改PD确认状态。 throw new BusinessValidationFailedException(_localizer["Visit_NoPDStatusChangeAfterSubmission"]); } if (svCommand.PDState != dbBeforeEntity.PDState && dbBeforeEntity.RequestBackState == RequestBackStateEnum.PM_AgressBack) { - //---当前访视影像提交后,不允许修改PD确认状态。 + //---当前访视影像提交后,不允许修改PD确认状态。 throw new BusinessValidationFailedException(_localizer["Visit_NoPDStatusChangeAfterSubmission"]); } @@ -177,7 +177,7 @@ namespace IRaCIS.Core.Application.Services { if (await _subjectVisitRepository.AnyAsync(t => t.Id == svCommand.Id && t.SubmitState == SubmitStateEnum.ToSubmit)) { - //---当前访视已经有影像上传,不允许设置为失访。 + //---当前访视已经有影像上传,不允许设置为失访。 throw new BusinessValidationFailedException(_localizer["Visit_UploadedNoLost"]); } } @@ -269,8 +269,8 @@ namespace IRaCIS.Core.Application.Services }).ToListAsync(); 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,t.HtmlPath }).ToListAsync(); + var instanceList = await _repository.Where(t => studyIds.Contains(t.StudyId)) + .Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.HtmlPath }).ToListAsync(); foreach (var t in studyList) { @@ -280,15 +280,173 @@ namespace IRaCIS.Core.Application.Services 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 + }).ToList(); + } + + ); + + //设置为阅片与否 不更改数据库检查 的instance数量 和 SeriesCount 所以这里要实时统计 + t.SeriesCount = t.SeriesList.Count; + t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count(); + } + + + + + return studyList; + + //return ResponseOutput.Ok(studyList.Where(t => t.SeriesList.Count > 0).ToList()); + + } + + /// + /// 获取Series信息 + /// + /// + /// + [HttpPost] + public async Task GetDicomSeriesInfo(GetDicomSeriesInfoInDto inDto) + { + DicomSeriesDTO series = await _repository.Where(s => s.Id == inDto.SeriesId).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync(); + + var instanceList = await _repository.Where(t => t.SeriesId == inDto.SeriesId) + .Select(t => new { t.SeriesId, t.StudyId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath, t.SliceLocation }).ToListAsync(); + series.InstanceList = instanceList.Where(t => t.SeriesId == series.Id).OrderByDescending(t => t.SliceLocation).ThenBy(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.InstancePathList = instanceList.Where(s => s.SeriesId == series.Id).OrderBy(t => t.InstanceNumber) + .SelectMany(u => + { + + if (u.NumberOfFrames > 1) + { + var pathList = new List(); + + for (int i = 1; i <= u.NumberOfFrames; i++) + { + pathList.Add(u.Path + "?frame=" + (i - 1)); + } + return pathList; + } + else + { + return new List { u.Path }; + + } + }) + .ToList(); + + series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth; + series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter; + + return series; + } + + + /// + /// 获取PTAndCtSeries + /// + /// + /// + [HttpPost] + public async Task> GetPTAndCtSeries(GetPTAndCtSeriesInDto inDto) + { + + + + var pastResultList = await this.iServiceProvider.GetService().GetReadingPastResultList(new GetReadingPastResultListInDto() + { + VisitTaskId = inDto.VisitTaskId + }); + + var visitTaskIds = pastResultList.Select(x => x.VisitTaskId).ToList(); + var visitSeriesList = await _readingTableAnswerRowInfoRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId)) + .Where(x => x.PTSeriesId != null && x.CTSeriesId != null) + .Select(x => new + { + x.PTSeriesId, + x.CTSeriesId, + x.VisitTaskId, + x.OtherStudyId, + x.VisitTask.SourceSubjectVisitId, + x.VisitTask.SourceSubjectVisit.IsBaseLine, + x.VisitTask.VisitTaskNum, + x.VisitTask.TaskBlindName, + x.UpdateTime, + }).ToListAsync(); + + List result = new List(); + + List ctseriesIds = visitSeriesList.Select(x => x.CTSeriesId.Value).ToList(); + + List 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(); + if (visitSeries != null) + { + result.Add(new GetPTAndCtSeriesOutDto() + { + PTSeriesId = visitSeries.PTSeriesId!.Value, + CTSeriesId = visitSeries.CTSeriesId!.Value, + TaskBlindName = visitSeries.TaskBlindName, + VisitTaskId = item, + SubjectVisitId = visitSeries.SourceSubjectVisitId!.Value, + IsBaseLineTask = visitSeries.IsBaseLine, + }); + + + } + + } + + + List ctseriesLists = await _repository.Where(s => ctseriesIds.Contains(s.Id)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + List ptseriesLists = await _repository.Where(s => ptseriesIds.Contains(s.Id)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + var seriesIds = ctseriesIds.Union(ptseriesIds).ToList(); //并集 + + var instanceList = await _repository.Where(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(); + + var studyIds = instanceList.Select(x => x.StudyId).Distinct().ToList(); + + var studyList = await _repository.Where(t => studyIds.Contains(t.Id)) + .Select(k => new StudyInfo() + { + InstanceCount = k.InstanceCount, + Modalities = k.Modalities, + SeriesCount = k.SeriesCount, + StudyCode = k.StudyCode, + StudyId = k.Id, + SubjectVisitId = k.SubjectVisitId, + }).ToListAsync(); + AddinstanceList(ctseriesLists); + AddinstanceList(ptseriesLists); + + void AddinstanceList(List 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.InstancePathList = instanceList.OrderBy(t => t.InstanceNumber).Where(s => s.SeriesId == series.Id) + series.InstancePathList = instanceList.Where(s => s.SeriesId == series.Id).OrderBy(t => t.InstanceNumber) .SelectMany(u => { @@ -310,217 +468,39 @@ namespace IRaCIS.Core.Application.Services }) .ToList(); - } - - ); - - //设置为阅片与否 不更改数据库检查 的instance数量 和 SeriesCount 所以这里要实时统计 - t.SeriesCount = t.SeriesList.Count; - t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceList).Count(); + series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth; + series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter; + }); } - return studyList; - - //return ResponseOutput.Ok(studyList.Where(t => t.SeriesList.Count > 0).ToList()); - - } - - /// - /// 获取Series信息 - /// - /// - /// - [HttpPost] - public async Task GetDicomSeriesInfo(GetDicomSeriesInfoInDto inDto) - { - DicomSeriesDTO series = await _repository.Where(s =>s.Id==inDto.SeriesId ).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync(); - - var instanceList = await _repository.Where(t => t.SeriesId==inDto.SeriesId ) - .Select(t => new { t.SeriesId, t.StudyId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath ,t.SliceLocation}).ToListAsync(); - series.InstanceList = instanceList.Where(t => t.SeriesId == series.Id).OrderByDescending(t => t.SliceLocation).ThenBy(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.InstancePathList = instanceList.Where(s => s.SeriesId == series.Id).OrderBy(t => t.InstanceNumber) - .SelectMany(u => - { - - if (u.NumberOfFrames > 1) - { - var pathList = new List(); - - for (int i = 1; i <= u.NumberOfFrames; i++) - { - pathList.Add(u.Path + "?frame=" + (i - 1)); - } - return pathList; - } - else - { - return new List { u.Path }; - - } - }) - .ToList(); - - series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth; - series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter; - - return series; - } - - - /// - /// 获取PTAndCtSeries - /// - /// - /// - [HttpPost] - public async Task> GetPTAndCtSeries(GetPTAndCtSeriesInDto inDto) - { - - - - var pastResultList= await this.iServiceProvider.GetService().GetReadingPastResultList(new GetReadingPastResultListInDto() - { - VisitTaskId = inDto.VisitTaskId - }) ; - - var visitTaskIds = pastResultList.Select(x => x.VisitTaskId).ToList(); - var visitSeriesList=await _readingTableAnswerRowInfoRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId)) - .Where(x => x.PTSeriesId != null && x.CTSeriesId != null) - .Select(x => new - { - x.PTSeriesId, - x.CTSeriesId, - x.VisitTaskId, - x.OtherStudyId, - x.VisitTask.SourceSubjectVisitId, - x.VisitTask.SourceSubjectVisit.IsBaseLine, - x.VisitTask.VisitTaskNum, - x.VisitTask.TaskBlindName, - x.UpdateTime, - }).ToListAsync(); - - List result = new List(); - - List ctseriesIds = visitSeriesList.Select(x => x.CTSeriesId.Value).ToList(); - - List 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(); - if (visitSeries != null) - { - result.Add(new GetPTAndCtSeriesOutDto() - { - PTSeriesId = visitSeries.PTSeriesId!.Value, - CTSeriesId = visitSeries.CTSeriesId!.Value, - TaskBlindName=visitSeries.TaskBlindName, - VisitTaskId= item, - SubjectVisitId= visitSeries.SourceSubjectVisitId!.Value, - IsBaseLineTask=visitSeries.IsBaseLine, - }); - - - } - - } - - - List ctseriesLists = await _repository.Where(s => ctseriesIds.Contains(s.Id)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - List ptseriesLists = await _repository.Where(s => ptseriesIds.Contains(s.Id)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - - var seriesIds = ctseriesIds.Union(ptseriesIds).ToList(); //并集 - - var instanceList = await _repository.Where(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(); - - var studyIds = instanceList.Select(x => x.StudyId).Distinct().ToList(); - - var studyList = await _repository.Where(t => studyIds.Contains(t.Id)) - .Select(k => new StudyInfo() - { - InstanceCount = k.InstanceCount, - Modalities = k.Modalities, - SeriesCount = k.SeriesCount, - StudyCode = k.StudyCode, - StudyId = k.Id, - SubjectVisitId=k.SubjectVisitId, - }).ToListAsync(); - AddinstanceList(ctseriesLists); - AddinstanceList(ptseriesLists); - - void AddinstanceList(List 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.InstancePathList = instanceList.Where(s => s.SeriesId == series.Id).OrderBy(t => t.InstanceNumber) - .SelectMany(u => - { - - if (u.NumberOfFrames > 1) - { - var pathList = new List(); - - for (int i = 1; i <= u.NumberOfFrames; i++) - { - pathList.Add(u.Path + "?frame=" + (i - 1)); - } - return pathList; - } - else - { - return new List { u.Path }; - - } - }) - .ToList(); - - series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth; - series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter; - }); - } - - - - - foreach (var item in result) + foreach (var item in result) { item.StudyId = ptseriesLists.Where(x => x.Id == item.PTSeriesId).Select(x => x.StudyId).FirstOrDefault(); - item.StudyInfoList = studyList.Where(x => x.SubjectVisitId == item.SubjectVisitId).ToList(); + item.StudyInfoList = studyList.Where(x => x.SubjectVisitId == item.SubjectVisitId).ToList(); foreach (var study in item.StudyInfoList) { - study.PTSeriesList = ptseriesLists.Where(x => x.SubjectVisitId == item.SubjectVisitId).ToList(); - study.CTSeriesList = ctseriesLists.Where(x => x.SubjectVisitId == item.SubjectVisitId).ToList(); - } - - } + study.PTSeriesList = ptseriesLists.Where(x => x.SubjectVisitId == item.SubjectVisitId).ToList(); + study.CTSeriesList = ctseriesLists.Where(x => x.SubjectVisitId == item.SubjectVisitId).ToList(); + } + + } return result; - } + } - /// - /// 获取访视下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的 - /// - /// - /// - [HttpPost] + /// + /// 获取访视下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的 + /// + /// + /// + [HttpPost] public async Task> GetReadingVisitStudyList(GetReadingVisitStudyListIndto indto) { var result = new List(); @@ -544,7 +524,7 @@ namespace IRaCIS.Core.Application.Services var thisSeriesIdIds = thisRowinfo.Where(x => x.SeriesId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.SeriesId).Distinct().ToList(); if (thisRowinfo.Count > 0) { - var thisVisitTaskStudy = await _repository.Where(t => thisStudyIds.Contains(t.Id) ).Select(k => new VisitStudyDTO() + var thisVisitTaskStudy = await _repository.Where(t => thisStudyIds.Contains(t.Id)).Select(k => new VisitStudyDTO() { InstanceCount = k.InstanceCount, @@ -558,7 +538,7 @@ namespace IRaCIS.Core.Application.Services if (thisVisitTaskStudy != null) { thisVisitTaskStudy.StudyId = default(Guid); - var item = await _repository.Where(s => thisSeriesIdIds.Contains(s.Id) ).OrderBy(s => s.SeriesNumber). + var item = await _repository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber). ThenBy(s => s.SeriesTime) .ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); @@ -568,7 +548,7 @@ namespace IRaCIS.Core.Application.Services item.InstanceList = thisRowinfo.Where(y => y.InstanceId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(y => y.InstanceId!.Value).Distinct().ToList(); - var tempInstanceList = await _repository.Where(t => item.InstanceList.Contains(t.Id) ).OrderBy(t => t.InstanceNumber) + var tempInstanceList = await _repository.Where(t => item.InstanceList.Contains(t.Id)).OrderBy(t => t.InstanceNumber) .Select(t => new TempInstance { @@ -617,7 +597,7 @@ namespace IRaCIS.Core.Application.Services item.Description = "Key Series"; - var modalityList = await _repository.Where(s => thisSeriesIdIds.Contains(s.Id) ).OrderBy(s => s.SeriesNumber). + var modalityList = await _repository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber). ThenBy(s => s.SeriesTime).Select(x => x.Modality).Distinct().ToListAsync(); ; item.Modality = string.Join(",", modalityList); thisVisitTaskStudy.SeriesList.Add(item); @@ -642,7 +622,7 @@ namespace IRaCIS.Core.Application.Services var isManualGenerate = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == taskInfo.TrialReadingCriterionId && t.IsAutoCreate == false); var studyList = await _repository.Where(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId) - .WhereIf(isManualGenerate,t=>t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t=>t.TrialReadingCriterionId==taskInfo.TrialReadingCriterionId && t.IsConfirmed &&t.IsReading )) + .WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading)) .Select(k => new VisitStudyDTO() { InstanceCount = k.InstanceCount, @@ -654,13 +634,13 @@ namespace IRaCIS.Core.Application.Services }).ToListAsync(); 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,t.WindowCenter,t.WindowWidth,t.HtmlPath }).ToListAsync(); + var instanceList = await _repository.Where(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 seriesLists = await _repository.Where(s => studyIds.Contains(s.StudyId) /*&& s.IsReading*/) - .WhereIf(isManualGenerate==false, t => t.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) @@ -675,7 +655,7 @@ namespace IRaCIS.Core.Application.Services 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) @@ -736,28 +716,28 @@ namespace IRaCIS.Core.Application.Services { item.SeriesList = new List(); item.SeriesCount = 0; - } + } else { - item.SeriesList = new List() - { - new DicomSeriesDTO (){ - IsDicom=false, - Id=item.StudyId, - InstanceCount=instanceCount, - Modality=item.Modalities, - StudyId=item.StudyId, - TrialId=nodicom.TrialId, - SiteId=nodicom.SiteId, - SubjectVisitId=nodicom.SubjectVisitId, - SubjectId=nodicom.SubjectId, - SeriesNumber=1, - NoneDicomFileFirstFile=await _noneDicomStudyFileRepository.Where(x=>x.NoneDicomStudyId==item.StudyId).Select(x=>x.Path).FirstOrDefaultAsync(), - } + item.SeriesList = new List() + { + new DicomSeriesDTO (){ + IsDicom=false, + Id=item.StudyId, + InstanceCount=instanceCount, + Modality=item.Modalities, + StudyId=item.StudyId, + TrialId=nodicom.TrialId, + SiteId=nodicom.SiteId, + SubjectVisitId=nodicom.SubjectVisitId, + SubjectId=nodicom.SubjectId, + SeriesNumber=1, + NoneDicomFileFirstFile=await _noneDicomStudyFileRepository.Where(x=>x.NoneDicomStudyId==item.StudyId).Select(x=>x.Path).FirstOrDefaultAsync(), + } + + }; + } - }; - } - }