diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 2a2ce792d..7adf73788 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -66,6 +66,7 @@ namespace IRaCIS.Core.Application.Service IRepository _readingTableQuestionTrialRepository, IRepository _readingTaskQuestionAnswerRepository, IRepository _readingQuestionCriterionTrialRepository, + IRepository _readingQuestionVisitJudgeRuleRepository, IRepository _readingQuestionSystem, IRepository _criterionKeyFileReadRepository, IRepository _trialCriterionKeyFileRepository, diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 9a9e11e93..ae58f5933 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -93,7 +93,7 @@ namespace IRaCIS.Core.Application.Service #region 获取裁判阅片任务信息 /// - /// 获取单个访视裁判任务的 R1、R2 裁判问题答案。 + /// 获取单访视裁判答案 /// /// /// @@ -105,25 +105,57 @@ namespace IRaCIS.Core.Application.Service .FirstNotNullAsync(); var taskIds = new List { judgeDataInfo.TaskIdOne, judgeDataInfo.TaskIdTwo }; - var trialReadingCriterionId = await _visitTaskRepository + var taskInfo = await _visitTaskRepository .Where(x => x.Id == judgeDataInfo.TaskIdOne) - .Select(x => x.TrialReadingCriterionId) + .Select(x => new + { + x.TrialReadingCriterionId, + x.VisitTaskNum, + }) + .FirstNotNullAsync(); + + var judgeRule = await _readingQuestionCriterionTrialRepository + .Where(x => x.Id == taskInfo.TrialReadingCriterionId) + .Select(x => x.JudgeRuleEnum) .FirstNotNullAsync(); var questionList = await _readingQuestionTrialRepository - .Where(x => x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.IsJudgeQuestion) + .Where(x => x.ReadingQuestionCriterionTrialId == taskInfo.TrialReadingCriterionId && x.IsJudgeQuestion) .OrderBy(x => x.ShowOrder) - .Select(x => new SingleVisitJudgeAnswerItemDto + .Select(x => new { ReadingQuestionId = x.Id, QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us), ShowOrder = x.ShowOrder, + x.JudgeType, + x.ExcludeShowVisitList, }) .ToListAsync(); var questionIds = questionList.Select(x => x.ReadingQuestionId).ToList(); + var visitJudgeRules = judgeRule == JudgeRule.Difference + ? await _readingQuestionVisitJudgeRuleRepository + .Where(x => questionIds.Contains(x.ReadingQuestionId) && (x.VisitNum == taskInfo.VisitTaskNum || x.VisitNum == -1)) + .ToListAsync() + : new List(); + + var displayQuestions = questionList + .Where(x => !x.ExcludeShowVisitList.Contains(taskInfo.VisitTaskNum)) + .Where(x => judgeRule == JudgeRule.Consistent + ? x.JudgeType != JudgeTypeEnum.NotApplicable + : (visitJudgeRules.FirstOrDefault(rule => rule.ReadingQuestionId == x.ReadingQuestionId && rule.VisitNum == taskInfo.VisitTaskNum) + ?? visitJudgeRules.FirstOrDefault(rule => rule.ReadingQuestionId == x.ReadingQuestionId && rule.VisitNum == -1))?.JudgeType != JudgeTypeEnum.NotApplicable) + .Select(x => new SingleVisitJudgeAnswerItemDto + { + ReadingQuestionId = x.ReadingQuestionId, + QuestionName = x.QuestionName, + ShowOrder = x.ShowOrder, + }) + .ToList(); + + var displayQuestionIds = displayQuestions.Select(x => x.ReadingQuestionId).ToList(); var answerList = await _readingTaskQuestionAnswerRepository - .Where(x => taskIds.Contains(x.VisitTaskId) && questionIds.Contains(x.ReadingQuestionTrialId)) + .Where(x => taskIds.Contains(x.VisitTaskId) && displayQuestionIds.Contains(x.ReadingQuestionTrialId)) .Select(x => new { x.VisitTaskId, @@ -132,7 +164,7 @@ namespace IRaCIS.Core.Application.Service }) .ToListAsync(); - questionList.ForEach(question => + displayQuestions.ForEach(question => { question.R1Answer = answerList.FirstOrDefault(x => x.VisitTaskId == judgeDataInfo.TaskIdOne && x.ReadingQuestionTrialId == question.ReadingQuestionId)?.Answer ?? string.Empty; question.R2Answer = answerList.FirstOrDefault(x => x.VisitTaskId == judgeDataInfo.TaskIdTwo && x.ReadingQuestionTrialId == question.ReadingQuestionId)?.Answer ?? string.Empty; @@ -140,7 +172,7 @@ namespace IRaCIS.Core.Application.Service return new GetSingleVisitJudgeAnswerOutDto { - QuestionList = questionList, + QuestionList = displayQuestions, }; }