From 26f049b31e4c6ecd7ed7c9b437c48c4e0010111f Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 12 Aug 2026 16:06:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A3=81=E5=88=A4=E8=A7=84=E5=88=99=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingJudgeTaskService.cs | 112 +++++++++++++++++- 1 file changed, 108 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 4d0feeaa4..9c6460738 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -768,6 +768,7 @@ namespace IRaCIS.Core.Application.Service x.ArbitrationRule, x.IsGlobalReading, x.IsReadingPeriod, + x.JudgeRuleEnum, }).FirstNotNullAsync(); var noteEqual = false; @@ -811,6 +812,7 @@ namespace IRaCIS.Core.Application.Service VisitTaskId = questionAnswer.VisitTaskId, }; var globalVisitAnswerlist = await globalVisitQuestionQuery.ToListAsync(); + await ApplyVisitJudgeRules(globalVisitAnswerlist, criterionInfo.JudgeRuleEnum); var taskNums = globalVisitAnswerlist.Select(x => x.VisitTaskNum).Distinct().OrderBy(x => x).ToList(); @@ -841,11 +843,13 @@ namespace IRaCIS.Core.Application.Service AnswerCombination = question.AnswerCombination, JudgeType = question.JudgeType, QuestionId = question.Id, - JudgeDifferenceValue = question.JudgeDifferenceValue, - JudgeDifferenceType = question.JudgeDifferenceType, - VisitTaskId = questionAnswet.VisitTaskId, - }; + JudgeDifferenceValue = question.JudgeDifferenceValue, + JudgeDifferenceType = question.JudgeDifferenceType, + VisitTaskId = questionAnswet.VisitTaskId, + VisitTaskNum = questionAnswet.VisitTask.VisitTaskNum, + }; var questionAnswerlist = await query.ToListAsync(); + await ApplyVisitJudgeRules(questionAnswerlist, criterionInfo.JudgeRuleEnum); // 将答案进行分组 List groupTasks = questionAnswerlist.GroupBy(x => new { x.JudgeDifferenceValue, x.JudgeDifferenceType, x.QuestionId, x.AnswerGroup, x.JudgeType, x.AnswerCombination }).Select(x => new GroupTaskAnswerDto @@ -893,6 +897,8 @@ namespace IRaCIS.Core.Application.Service } else { + await ApplyVisitJudgeRules(item.AfterQuestionList, item.VisitNum, criterionInfo.JudgeRuleEnum); + await ApplyVisitJudgeRules(twoItem.AfterQuestionList, twoItem.VisitNum, criterionInfo.JudgeRuleEnum); var newlist = item.AfterQuestionList.Where(x => x.QuestionId != null && x.IsJudgeQuestion).ToList().Union( twoItem.AfterQuestionList.Where(x => x.QuestionId != null && x.IsJudgeQuestion).ToList() ).ToList(); @@ -955,6 +961,8 @@ namespace IRaCIS.Core.Application.Service }; var visitTaskQuestions = await query.ToListAsync(); + await ApplyVisitJudgeRules(visitTaskQuestions, lastTask.VisitNum, criterionInfo.JudgeRuleEnum); + await ApplyVisitJudgeRules(lastTask.AfterQuestionList, lastTask.VisitNum, criterionInfo.JudgeRuleEnum); var newlist = visitTaskQuestions.Where(x => x.QuestionId != null).ToList().Union( lastTask.AfterQuestionList.Where(x => x.QuestionId != null).ToList() @@ -1073,6 +1081,102 @@ namespace IRaCIS.Core.Application.Service } + /// + /// 应用访视裁判规则 以及剔除排除的问题 + /// + private async Task ApplyVisitJudgeRules(List answerList, JudgeRule judgeRule) + { + if (answerList.Count == 0) + { + return; + } + + var questionIds = answerList.Select(x => x.QuestionId).Distinct().ToList(); + var questions = await _readingQuestionTrialRepository.Where(x => questionIds.Contains(x.Id)).Select(x => new + { + x.Id, + x.ExcludeShowVisitList, + }).ToListAsync(); + var excludedQuestionIds = answerList + .Where(x => questions.FirstOrDefault(question => question.Id == x.QuestionId)?.ExcludeShowVisitList.Contains(x.VisitTaskNum) == true) + .Select(x => x.QuestionId) + .Distinct() + .ToList(); + answerList.RemoveAll(x => excludedQuestionIds.Contains(x.QuestionId)); + + if (judgeRule != JudgeRule.Difference || answerList.Count == 0) + { + return; + } + + questionIds = answerList.Select(x => x.QuestionId).Distinct().ToList(); + var visitNums = answerList.Select(x => x.VisitTaskNum).Distinct().ToList(); + var visitRules = await _readingQuestionVisitJudgeRuleRepository + .Where(x => questionIds.Contains(x.ReadingQuestionId) && (visitNums.Contains(x.VisitNum) || x.VisitNum == -1)) + .ToListAsync(); + + answerList.ForEach(answer => + { + var rule = visitRules.FirstOrDefault(x => x.ReadingQuestionId == answer.QuestionId && x.VisitNum == answer.VisitTaskNum) + ?? visitRules.FirstOrDefault(x => x.ReadingQuestionId == answer.QuestionId && x.VisitNum == -1); + if (rule != null) + { + answer.AnswerGroup = JsonConvert.SerializeObject(rule.AnswerGroup); + answer.AnswerCombination = JsonConvert.SerializeObject(rule.AnswerCombination); + answer.JudgeType = rule.JudgeType; + answer.JudgeDifferenceValue = rule.JudgeDifferenceValue; + answer.JudgeDifferenceType = rule.JudgeDifferenceType; + } + }); + } + + /// + /// 应用访视裁判规则 以及剔除排除的问题 + /// + private async Task ApplyVisitJudgeRules(List questionList, decimal visitNum, JudgeRule judgeRule) + { + if (questionList.Count == 0) + { + return; + } + + var questionIds = questionList.Where(x => x.QuestionId != null).Select(x => x.QuestionId!.Value).Distinct().ToList(); + var excludedQuestionIds = await _readingQuestionTrialRepository + .Where(x => questionIds.Contains(x.Id) && x.ExcludeShowVisitList.Contains(visitNum)) + .Select(x => x.Id) + .ToListAsync(); + questionList.RemoveAll(x => x.QuestionId != null && excludedQuestionIds.Contains(x.QuestionId.Value)); + + if (judgeRule != JudgeRule.Difference || questionList.Count == 0) + { + return; + } + + questionIds = questionList.Where(x => x.QuestionId != null).Select(x => x.QuestionId!.Value).Distinct().ToList(); + var visitRules = await _readingQuestionVisitJudgeRuleRepository + .Where(x => questionIds.Contains(x.ReadingQuestionId) && (x.VisitNum == visitNum || x.VisitNum == -1)) + .ToListAsync(); + + questionList.ForEach(question => + { + if (question.QuestionId == null) + { + return; + } + + var rule = visitRules.FirstOrDefault(x => x.ReadingQuestionId == question.QuestionId && x.VisitNum == visitNum) + ?? visitRules.FirstOrDefault(x => x.ReadingQuestionId == question.QuestionId && x.VisitNum == -1); + if (rule != null) + { + question.AnswerGroup = JsonConvert.SerializeObject(rule.AnswerGroup); + question.AnswerCombination = JsonConvert.SerializeObject(rule.AnswerCombination); + question.JudgeType = rule.JudgeType; + question.JudgeDifferenceValue = rule.JudgeDifferenceValue; + question.JudgeDifferenceType = rule.JudgeDifferenceType; + } + }); + } + /// /// 发送微信通知