diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs index f473f9058..7ac6667de 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs @@ -1112,7 +1112,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto } - + public class GetCustomQuestionPreviewInDto + { + [NotDefault] + public Guid TrialReadingCriterionId { get; set; } + } public class GetCalculateQuestionsInDto { [NotDefault] diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs index 77846b7ff..da38fa009 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs @@ -16,7 +16,9 @@ namespace IRaCIS.Core.Application.Contracts Task SubmitJudgeVisitTaskResult(SaveJudgeVisitTaskResult inDto); - + Task> GetReadingQuestion(Guid trialReadingCriterionId, Guid? visitTaskId); + + Task GetReadingTableQuestion(Guid trialReadingCriterionId, Guid? taskId, List tableAnswers, List tableAnsweRowInfos); Task SubmitGlobalReadingInfo(SubmitGlobalReadingInfoInDto inDto); diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs index 46d2bf7ef..b05d8b652 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs @@ -24,6 +24,7 @@ namespace IRaCIS.Application.Services private readonly IRepository _clinicalDataTrialSetRepository; private readonly IRepository _clinicalDataSystemSetRepository; private readonly IRepository _dictionaryRepository; + private readonly IReadingImageTaskService _iReadingImageTaskService; private readonly IRepository _readingCriterionDictionaryRepository; private readonly IRepository _readingTableQuestionTrialRepository; private readonly IRepository _readingCriterionPageRepository; @@ -43,6 +44,7 @@ namespace IRaCIS.Application.Services IRepository ClinicalDataTrialSetRepository, IRepository ClinicalDataSystemSetRepository, IRepository dictionaryRepository, + IReadingImageTaskService iReadingImageTaskService, IRepository readingCriterionDictionaryRepository, IRepository readingTableQuestionTrialRepository, IRepository readingCriterionPageRepository, @@ -62,6 +64,7 @@ namespace IRaCIS.Application.Services this._clinicalDataTrialSetRepository = ClinicalDataTrialSetRepository; this._clinicalDataSystemSetRepository = ClinicalDataSystemSetRepository; this._dictionaryRepository = dictionaryRepository; + this._iReadingImageTaskService = iReadingImageTaskService; this._readingCriterionDictionaryRepository = readingCriterionDictionaryRepository; this._readingTableQuestionTrialRepository = readingTableQuestionTrialRepository; this._readingCriterionPageRepository = readingCriterionPageRepository; @@ -75,6 +78,29 @@ namespace IRaCIS.Application.Services #region 获取计算问题 + /// + /// 获取自定义问题预览 + /// + /// + [HttpPost] + public async Task> GetCustomQuestionPreview(GetCustomQuestionPreviewInDto inDto) + { + return await _iReadingImageTaskService.GetReadingQuestion(inDto.TrialReadingCriterionId, null); + } + + + /// + /// 获取自定义表格问题预览 + /// + /// + [HttpPost] + public async Task GetCustomTableQuestionPreview(GetCustomQuestionPreviewInDto inDto) + { + List tableAnswers = new List(); + List tableAnsweRowInfos = new List(); + return await _iReadingImageTaskService.GetReadingTableQuestion(inDto.TrialReadingCriterionId, null, tableAnswers, tableAnsweRowInfos); + } + /// /// 获取问题 /// diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 0a7bc3029..2643ff7c3 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -351,15 +351,46 @@ namespace IRaCIS.Application.Services [HttpPost] public async Task<(List, object)> GetDicomReadingQuestionAnswer(GetDicomReadingQuestionAnswerInDto inDto) { - await AddDefaultValueToTask(inDto.VisitTaskId); + await AddDefaultValueToTask(inDto.VisitTaskId); var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); - var criterionId = taskInfo.TrialReadingCriterionId; + var result = await GetReadingQuestion(taskInfo.TrialReadingCriterionId, taskInfo.Id); + + return (result, new + { + + ReadingTaskState = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.ReadingTaskState).FirstOrDefaultAsync() + }); + } + + /// + /// 获取阅片外层问题 + /// + /// + /// + /// + [NonDynamicMethod] + public async Task> GetReadingQuestion(Guid trialReadingCriterionId,Guid? visitTaskId) + { + + + var criterionIdInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == trialReadingCriterionId).FirstNotNullAsync(); + //排除表格问题 - var questions = await _readingQuestionTrialRepository.Where(x => x.IsShowInDicom && x.ReadingQuestionCriterionTrialId == criterionId && x.Type != ReadingQestionType.Table) + var questions = await _readingQuestionTrialRepository + .WhereIf(criterionIdInfo.IseCRFShowInDicomReading, x=>x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.Type != ReadingQestionType.Table) + .WhereIf(!criterionIdInfo.IseCRFShowInDicomReading, x=>x.IsShowInDicom && x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.Type != ReadingQestionType.Table) + .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync(); - var answers = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ToListAsync(); + + var answers = new List(); + + if (visitTaskId != null) + { + answers = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == visitTaskId).ToListAsync(); ; + } + //排除表格问题 同时排除组问题 var groups = questions.Where(x => x.Type != ReadingQestionType.Group).Select(x => x.GroupName).ToList(); @@ -371,11 +402,7 @@ namespace IRaCIS.Application.Services GetDicomReadingAnswer(item, questions, answers); } - return (result, new - { - - ReadingTaskState = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.ReadingTaskState).FirstOrDefaultAsync() - }); + return result; } private void GetDicomReadingAnswer(DicomReadingQuestionAnswer item, List questions, List answers) @@ -479,7 +506,7 @@ namespace IRaCIS.Application.Services } /// - /// 获取表格问题及答案 只返回表格问题 + /// 获取表格问题及答案 只返回表格问题(任务和标准) /// /// /// diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index adaa686b9..2c7ca2104 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -257,8 +257,8 @@ namespace IRaCIS.Core.Application.Services if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned) { - var thisStudyIds = thisRowinfo.Select(x => x.StudyId).ToList(); - var thisSeriesIdIds = thisRowinfo.Where(x => x.SeriesId != null).Select(x => x.SeriesId).ToList(); + var thisStudyIds = thisRowinfo.Select(x => x.StudyId).Distinct().ToList(); + var thisSeriesIdIds = thisRowinfo.Where(x => x.SeriesId != null).Select(x => x.SeriesId).Distinct().ToList(); if (thisRowinfo.Count > 0) { var thisVisitTaskStudy = await _repository.Where(t => thisStudyIds.Contains(t.Id)).Select(k => new VisitStudyDTO() @@ -287,7 +287,7 @@ namespace IRaCIS.Core.Application.Services thisVisitTaskStudy.SeriesList.ForEach(x => { - x.InstanceList = thisRowinfo.Where(y => y.InstanceId != null).Select(y => y.InstanceId.Value).ToList(); + x.InstanceList = thisRowinfo.Where(y => y.InstanceId != null).Select(y => y.InstanceId.Value).Distinct().ToList(); x.InstanceCount = x.InstanceList.Count(); });