diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs index e323cf048..6101cc51d 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs @@ -1729,6 +1729,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public bool IsGetAll { get; set; } = false; + public bool IsGetJudge { get; set; } = false; + } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs index 04f855ea3..8c99a7088 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs @@ -103,10 +103,7 @@ namespace IRaCIS.Core.Application.Service [HttpPost] public async Task SetTrialQuestionVisitJudgeRule(SetTrialQuestionVisitJudgeRuleInDto inDto) { - var questionIds = await _readingQuestionTrialRepository - .Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && x.IsJudgeQuestion) - .Select(x => x.Id) - .ToListAsync(); + var questionIds = inDto.QuestionList.Select(x => x.ReadingQuestionTrialId).ToList(); await _readingQuestionVisitJudgeRuleRepository.BatchDeleteNoTrackingAsync(x => x.VisitNum == inDto.VisitNum && questionIds.Contains(x.ReadingQuestionId)); @@ -783,6 +780,7 @@ namespace IRaCIS.Core.Application.Service if (inDto.TrialReadingCriterionId != null) { return await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId) + .WhereIf(inDto.IsGetJudge,x=>x.IsJudgeQuestion) .WhereIf(!inDto.IsGetAll, x => x.DataSource == DataSources.Automatic && x.Type == "number") .Select(x => new CalculateRelationDto() { diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 1a6b462e3..fc9e98eec 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -26,6 +26,7 @@ namespace IRaCIS.Core.Application.Service public partial class ReadingImageTaskService( IRepository _noneDicomStudyRepository, IRepository _visitTaskRepository, + IRepository _visitStageRepository, IRepository _trialRepository, IRepository _taskInstanceRepository, IRepository _noneDicomStudyFileRepository, diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 9a765d0f3..36c25cd81 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -14,6 +14,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using MimeKit; using Newtonsoft.Json; +using System.Linq.Dynamic.Core; namespace IRaCIS.Core.Application.Service { @@ -270,19 +271,44 @@ namespace IRaCIS.Core.Application.Service private async Task> GetJudgeDisplayQuestions(Guid trialReadingCriterionId, decimal visitNum, JudgeRule judgeRule) { var questionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.IsJudgeQuestion) - .Where(x=>x.ShowQuestion== ShowQuestion.Show) - .OrderBy(x => x.ShowOrder).ToListAsync(); - var questionIds = questionList.Select(x => x.Id).ToList(); - var visitJudgeRules = judgeRule == JudgeRule.Difference - ? await _readingQuestionVisitJudgeRuleRepository.Where(x => questionIds.Contains(x.ReadingQuestionId) && (x.VisitNum == visitNum || x.VisitNum == -1)).ToListAsync() - : new List(); + .WhereIf(visitNum == 0, x => x.LimitShow != LimitShow.FollowShow) + .WhereIf(visitNum != 0, x => x.LimitShow != LimitShow.BaseLineShow) + .Where(x=>x.LimitShow!=LimitShow.ExcludeSomeVisits||x.ExcludeShowVisitList.Contains(visitNum)) + .ToListAsync(); - return questionList.Where(x => !x.ExcludeShowVisitList.Contains(visitNum)) - .Where(x => judgeRule == JudgeRule.Consistent - ? x.JudgeType != JudgeTypeEnum.NotApplicable - : (visitJudgeRules.FirstOrDefault(rule => rule.ReadingQuestionId == x.Id && rule.VisitNum == visitNum) - ?? visitJudgeRules.FirstOrDefault(rule => rule.ReadingQuestionId == x.Id && rule.VisitNum == -1))?.JudgeType != JudgeTypeEnum.NotApplicable) - .ToList(); + + var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == trialReadingCriterionId).FirstNotNullAsync(); + var questionIds = questionList.Select(x => x.Id).ToList(); + var visitJudgeRules=new List(); + if (judgeRule == JudgeRule.Difference) + { + if (await _visitStageRepository.AnyAsync(x => x.TrialId == trialCriterion.TrialId && x.VisitNum == visitNum)) + { + visitJudgeRules = await _readingQuestionVisitJudgeRuleRepository.Where(x => questionIds.Contains(x.ReadingQuestionId) && x.VisitNum == visitNum).ToListAsync(); + } + else + { + visitJudgeRules = await _readingQuestionVisitJudgeRuleRepository.Where(x => questionIds.Contains(x.ReadingQuestionId) && x.VisitNum == -1).ToListAsync(); + } + + } + else + { + visitJudgeRules = questionList.Select(x => new ReadingQuestionVisitJudgeRule() + { + ReadingQuestionId = x.Id, + AnswerCombination = JsonConvert.DeserializeObject>(x.AnswerCombination.IsNullOrEmpty() ? "[]" : x.AnswerCombination), + AnswerGroup = JsonConvert.DeserializeObject>(x.AnswerGroup.IsNullOrEmpty() ? "[]" : x.AnswerGroup), + JudgeDifferenceType = x.JudgeDifferenceType, + JudgeType = x.JudgeType, + JudgeDifferenceValue = x.JudgeDifferenceValue, + }).ToList(); + } + + + return questionList + .Where(x => visitJudgeRules.FirstOrDefault(rule => rule.ReadingQuestionId == x.Id && rule.VisitNum == -1)?.JudgeType != JudgeTypeEnum.NotApplicable) + .ToList(); } ///