From 6e0282ad18a238267ded78391230c12b220a73f7 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 12 Aug 2026 10:15:44 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E8=AE=BF=E8=A7=86=E8=A3=81=E5=88=A4?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingQuestionViewModel.cs | 37 +++++++++ .../ReadingQuestionService.cs | 83 ++++++++++++++++++- 2 files changed, 119 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs index 6a130a511..3ded1dabc 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs @@ -6,6 +6,43 @@ using System.ComponentModel.DataAnnotations.Schema; namespace IRaCIS.Core.Application.Service.Reading.Dto { + public class GetTrialQuestionVisitJudgeRuleInDto + { + [NotDefault] + public Guid TrialId { get; set; } + + [NotDefault] + public Guid TrialReadingCriterionId { get; set; } + + [NotDefault] + public decimal VisitNum { get; set; } + + public Guid? ReadingQuestionId { get; set; } + } + + public class SetTrialQuestionVisitJudgeRuleInDto + { + [NotDefault] + public Guid TrialReadingCriterionId { get; set; } + + [NotDefault] + public decimal VisitNum { get; set; } + + public List QuestionList { get; set; } = new List(); + } + + public class TrialQuestionVisitJudgeRuleItemDto + { + public Guid ReadingQuestionId { get; set; } + public string QuestionName { get; set; } = string.Empty; + public int ShowOrder { get; set; } + public List AnswerGroup { get; set; } = new List(); + public List AnswerCombination { get; set; } = new List(); + public JudgeTypeEnum JudgeType { get; set; } + public decimal? JudgeDifferenceValue { get; set; } + public JudgeDifferenceType JudgeDifferenceType { get; set; } + } + public class TumorAssessmentView : AddOrUpdateTumorAssessmentInDto { diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs index 53c1ba5fd..57ac7d4d8 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs @@ -33,10 +33,91 @@ namespace IRaCIS.Core.Application.Service IRepository _organInfoRepository, IRepository _readingTableQuestionSystemRepository, IRepository _readingTaskQuestionAnswer, - IRepository _previousPDFRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IReadingQuestionService + IRepository _previousPDFRepository, + IRepository _readingQuestionVisitJudgeRuleRepository, + IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IReadingQuestionService { + #region 项目访视裁判规则 + + /// + /// 获取项目阅片标准各访视的裁判规则配置。 + /// 未配置规则的访视问题也会返回,供前端直接进行配置。 + /// + [HttpPost] + public async Task> GetTrialQuestionVisitJudgeRule(GetTrialQuestionVisitJudgeRuleInDto inDto) + { + var questionList = await _readingQuestionTrialRepository + .Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && x.IsJudgeQuestion) + .WhereIf(inDto.ReadingQuestionId != null, x => x.Id == inDto.ReadingQuestionId) + .OrderBy(x => x.ShowOrder) + .Select(x => new TrialQuestionVisitJudgeRuleItemDto + { + ReadingQuestionId = x.Id, + QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us), + ShowOrder = x.ShowOrder, + }) + .ToListAsync(); + + var questionIds = questionList.Select(x => x.ReadingQuestionId).ToList(); + var ruleList = await _readingQuestionVisitJudgeRuleRepository + .Where(x => x.VisitNum == inDto.VisitNum && questionIds.Contains(x.ReadingQuestionId)) + .ToListAsync(); + + return questionList.Select(question => + { + var rule = ruleList.FirstOrDefault(x => x.ReadingQuestionId == question.ReadingQuestionId); + return new TrialQuestionVisitJudgeRuleItemDto + { + ReadingQuestionId = question.ReadingQuestionId, + QuestionName = question.QuestionName, + ShowOrder = question.ShowOrder, + AnswerGroup = rule?.AnswerGroup ?? new List(), + AnswerCombination = rule?.AnswerCombination ?? new List(), + JudgeType = rule?.JudgeType ?? JudgeTypeEnum.None, + JudgeDifferenceValue = rule?.JudgeDifferenceValue, + JudgeDifferenceType = rule?.JudgeDifferenceType ?? default, + }; + }).ToList(); + } + + /// + /// 编辑项目阅片标准各访视的裁判规则配置。 + /// + [HttpPost] + public async Task SetTrialQuestionVisitJudgeRule(SetTrialQuestionVisitJudgeRuleInDto inDto) + { + var questionIds = await _readingQuestionTrialRepository + .Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && x.IsJudgeQuestion) + .Select(x => x.Id) + .ToListAsync(); + + await _readingQuestionVisitJudgeRuleRepository.BatchDeleteNoTrackingAsync(x => + x.VisitNum == inDto.VisitNum && questionIds.Contains(x.ReadingQuestionId)); + + var rules = inDto.QuestionList.Select(question => new ReadingQuestionVisitJudgeRule + { + Id = NewId.NextGuid(), + ReadingQuestionId = question.ReadingQuestionId, + VisitNum = inDto.VisitNum, + AnswerGroup = question.AnswerGroup ?? new List(), + AnswerCombination = question.AnswerCombination ?? new List(), + JudgeType = question.JudgeType, + JudgeDifferenceValue = question.JudgeDifferenceValue, + JudgeDifferenceType = question.JudgeDifferenceType, + }).ToList(); + + if (rules.Count > 0) + { + await _readingQuestionVisitJudgeRuleRepository.AddRangeAsync(rules); + } + + return ResponseOutput.Result(await _readingQuestionVisitJudgeRuleRepository.SaveChangesAsync()); + } + + #endregion + #region 获取计算问题 From 51b9aaa9b165792a5b70176a8bba686338514665 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 12 Aug 2026 10:53:08 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=8D=95=E4=B8=AA?= =?UTF-8?q?=E8=AE=BF=E8=A7=86=E8=A3=81=E5=88=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingImageTaskViewModel.cs | 20 +++++++ .../ReadingJudgeTaskService.cs | 53 +++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 81092d152..9e49b0369 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -2437,6 +2437,26 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid VisitTaskId { get; set; } } + public class GetSingleVisitJudgeAnswerInDto + { + [NotDefault] + public Guid VisitTaskId { get; set; } + } + + public class GetSingleVisitJudgeAnswerOutDto + { + public List QuestionList { get; set; } = new List(); + } + + public class SingleVisitJudgeAnswerItemDto + { + public Guid ReadingQuestionId { get; set; } + public string QuestionName { get; set; } = string.Empty; + public int ShowOrder { get; set; } + public string R1Answer { get; set; } = string.Empty; + public string R2Answer { get; set; } = string.Empty; + } + public class JudgeReadingInfoDto { public string VisitName { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 7b6102a48..9a9e11e93 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -91,6 +91,59 @@ namespace IRaCIS.Core.Application.Service #region 获取裁判阅片任务信息 + + /// + /// 获取单个访视裁判任务的 R1、R2 裁判问题答案。 + /// + /// + /// + [HttpPost] + public async Task GetSingleVisitJudgeAnswer(GetSingleVisitJudgeAnswerInDto inDto) + { + var judgeDataInfo = await _readingJudgeInfoRepository + .Where(x => x.JudgeTaskId == inDto.VisitTaskId) + .FirstNotNullAsync(); + + var taskIds = new List { judgeDataInfo.TaskIdOne, judgeDataInfo.TaskIdTwo }; + var trialReadingCriterionId = await _visitTaskRepository + .Where(x => x.Id == judgeDataInfo.TaskIdOne) + .Select(x => x.TrialReadingCriterionId) + .FirstNotNullAsync(); + + var questionList = await _readingQuestionTrialRepository + .Where(x => x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.IsJudgeQuestion) + .OrderBy(x => x.ShowOrder) + .Select(x => new SingleVisitJudgeAnswerItemDto + { + ReadingQuestionId = x.Id, + QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us), + ShowOrder = x.ShowOrder, + }) + .ToListAsync(); + + var questionIds = questionList.Select(x => x.ReadingQuestionId).ToList(); + var answerList = await _readingTaskQuestionAnswerRepository + .Where(x => taskIds.Contains(x.VisitTaskId) && questionIds.Contains(x.ReadingQuestionTrialId)) + .Select(x => new + { + x.VisitTaskId, + x.ReadingQuestionTrialId, + x.Answer, + }) + .ToListAsync(); + + questionList.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; + }); + + return new GetSingleVisitJudgeAnswerOutDto + { + QuestionList = questionList, + }; + } + /// /// 获取裁判阅片任务信息 /// From 6bb4167ac77f67a3ce846a65206da45b7b6095cb Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 12 Aug 2026 11:07:25 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=8D=95=E4=B8=AA?= =?UTF-8?q?=E8=A3=81=E5=88=A4=E8=AE=BF=E8=A7=86=E4=BF=A1=E6=81=AF=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingImageTaskService.cs | 1 + .../ReadingJudgeTaskService.cs | 48 +++++++++++++++---- 2 files changed, 41 insertions(+), 8 deletions(-) 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, }; } From 7b1449189e3f979226bf4ab99d3bbdbd3f9e83cf Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 12 Aug 2026 11:22:49 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=A3=81=E8=A1=A8=E5=8D=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingImageTaskViewModel.cs | 35 ++++++ .../ReadingJudgeTaskService.cs | 107 +++++++++++++----- 2 files changed, 112 insertions(+), 30 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 9e49b0369..208b80a1d 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -2457,6 +2457,41 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string R2Answer { get; set; } = string.Empty; } + public class GetJudgeFormInDto + { + [NotDefault] + public Guid VisitTaskId { get; set; } + } + + public class GetJudgeFormOutDto + { + public List QuestionList { get; set; } = new List(); + } + + public class JudgeFormQuestionDto + { + public Guid ReadingQuestionId { get; set; } + public string QuestionName { get; set; } = string.Empty; + public string Type { get; set; } = string.Empty; + public string TypeValue { get; set; } = string.Empty; + public int ShowOrder { get; set; } + public string Answer { get; set; } = string.Empty; + } + + public class SetJudgeFormInDto + { + [NotDefault] + public Guid VisitTaskId { get; set; } + + public List QuestionList { get; set; } = new List(); + } + + public class JudgeFormAnswerDto + { + public Guid ReadingQuestionId { get; set; } + public string Answer { get; set; } = string.Empty; + } + public class JudgeReadingInfoDto { public string VisitName { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index ae58f5933..805aea61b 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -119,41 +119,17 @@ namespace IRaCIS.Core.Application.Service .Select(x => x.JudgeRuleEnum) .FirstNotNullAsync(); - var questionList = await _readingQuestionTrialRepository - .Where(x => x.ReadingQuestionCriterionTrialId == taskInfo.TrialReadingCriterionId && x.IsJudgeQuestion) - .OrderBy(x => x.ShowOrder) - .Select(x => new + var displayQuestions = await GetJudgeDisplayQuestions(taskInfo.TrialReadingCriterionId, taskInfo.VisitTaskNum, judgeRule); + var judgeAnswers = displayQuestions + .Select(x => new SingleVisitJudgeAnswerItemDto { 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 displayQuestionIds = judgeAnswers.Select(x => x.ReadingQuestionId).ToList(); var answerList = await _readingTaskQuestionAnswerRepository .Where(x => taskIds.Contains(x.VisitTaskId) && displayQuestionIds.Contains(x.ReadingQuestionTrialId)) .Select(x => new @@ -164,7 +140,7 @@ namespace IRaCIS.Core.Application.Service }) .ToListAsync(); - displayQuestions.ForEach(question => + judgeAnswers.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; @@ -172,10 +148,81 @@ namespace IRaCIS.Core.Application.Service return new GetSingleVisitJudgeAnswerOutDto { - QuestionList = displayQuestions, + QuestionList = judgeAnswers, }; } + /// + /// 获取裁判表单 + /// + [HttpPost] + public async Task GetJudgeForm(GetJudgeFormInDto inDto) + { + var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); + var judgeRule = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == taskInfo.TrialReadingCriterionId).Select(x => x.JudgeRuleEnum).FirstNotNullAsync(); + var questionList = await GetJudgeDisplayQuestions(taskInfo.TrialReadingCriterionId, taskInfo.VisitTaskNum, judgeRule); + var questionIds = questionList.Select(x => x.Id).ToList(); + var answers = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && questionIds.Contains(x.ReadingQuestionTrialId)).ToListAsync(); + + return new GetJudgeFormOutDto + { + QuestionList = questionList.Select(x => new JudgeFormQuestionDto + { + ReadingQuestionId = x.Id, + QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us), + Type = x.Type, + TypeValue = x.TypeValue, + ShowOrder = x.ShowOrder, + Answer = answers.FirstOrDefault(answer => answer.ReadingQuestionTrialId == x.Id)?.Answer ?? string.Empty, + }).ToList(), + }; + } + + /// + /// 编辑裁判表单 + /// + [HttpPost] + public async Task SetJudgeForm(SetJudgeFormInDto inDto) + { + var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); + var judgeRule = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == taskInfo.TrialReadingCriterionId).Select(x => x.JudgeRuleEnum).FirstNotNullAsync(); + var displayQuestionIds = (await GetJudgeDisplayQuestions(taskInfo.TrialReadingCriterionId, taskInfo.VisitTaskNum, judgeRule)).Select(x => x.Id).ToList(); + var submittedQuestionIds = inDto.QuestionList.Select(x => x.ReadingQuestionId).ToList(); + + + await _readingTaskQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && submittedQuestionIds.Contains(x.ReadingQuestionTrialId)); + if (inDto.QuestionList.Count > 0) + { + await _readingTaskQuestionAnswerRepository.AddRangeAsync(inDto.QuestionList.Select(x => new ReadingTaskQuestionAnswer + { + ReadingQuestionTrialId = x.ReadingQuestionId, + ReadingQuestionCriterionTrialId = taskInfo.TrialReadingCriterionId, + TrialId = taskInfo.TrialId, + SubjectId = taskInfo.SubjectId, + VisitTaskId = inDto.VisitTaskId, + Answer = x.Answer, + }).ToList()); + } + + return ResponseOutput.Result(await _readingTaskQuestionAnswerRepository.SaveChangesAsync()); + } + + private async Task> GetJudgeDisplayQuestions(Guid trialReadingCriterionId, decimal visitNum, JudgeRule judgeRule) + { + var questionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.IsJudgeQuestion).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(); + + 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(); + } + /// /// 获取裁判阅片任务信息 /// From 960d1f41163f71c043a25f53cfde8b44be203b3d Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 12 Aug 2026 11:29:12 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E8=A3=81=E5=88=A4=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=8A=A0=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingImageTaskViewModel.cs | 14 ++++++++++++++ .../ReadingImageTask/ReadingJudgeTaskService.cs | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 208b80a1d..4a8500658 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -2452,9 +2452,17 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { public Guid ReadingQuestionId { get; set; } public string QuestionName { get; set; } = string.Empty; + public string Type { get; set; } = string.Empty; + public string TypeValue { get; set; } = string.Empty; public int ShowOrder { get; set; } public string R1Answer { get; set; } = string.Empty; public string R2Answer { get; set; } = string.Empty; + public TableQuestionType? QuestionGenre { get; set; } + public string DictionaryCode { get; set; } = string.Empty; + public ValueUnit? Unit { get; set; } + public string? CustomUnit { get; set; } + public ValueOfType? ValueType { get; set; } + public JudgeReadingQuestionType QuestionType { get; set; } = JudgeReadingQuestionType.Question; } public class GetJudgeFormInDto @@ -2476,6 +2484,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string TypeValue { get; set; } = string.Empty; public int ShowOrder { get; set; } public string Answer { get; set; } = string.Empty; + public TableQuestionType? QuestionGenre { get; set; } + public string DictionaryCode { get; set; } = string.Empty; + public ValueUnit? Unit { get; set; } + public string? CustomUnit { get; set; } + public ValueOfType? ValueType { get; set; } + public JudgeReadingQuestionType QuestionType { get; set; } = JudgeReadingQuestionType.Question; } public class SetJudgeFormInDto diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 805aea61b..4d0feeaa4 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -125,7 +125,14 @@ namespace IRaCIS.Core.Application.Service { ReadingQuestionId = x.Id, QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us), + Type = x.Type, + TypeValue = x.TypeValue, ShowOrder = x.ShowOrder, + QuestionGenre = x.QuestionGenre, + DictionaryCode = x.DictionaryCode, + Unit = x.Unit, + CustomUnit = x.CustomUnit, + ValueType = x.ValueType, }) .ToList(); @@ -174,6 +181,11 @@ namespace IRaCIS.Core.Application.Service TypeValue = x.TypeValue, ShowOrder = x.ShowOrder, Answer = answers.FirstOrDefault(answer => answer.ReadingQuestionTrialId == x.Id)?.Answer ?? string.Empty, + QuestionGenre = x.QuestionGenre, + DictionaryCode = x.DictionaryCode, + Unit = x.Unit, + CustomUnit = x.CustomUnit, + ValueType = x.ValueType, }).ToList(), }; } From ca1953a348e35f204192c7bd835e7858545929ec Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 12 Aug 2026 13:39:48 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E4=B8=AD=E5=BF=83=E8=B0=83=E7=A0=94?= =?UTF-8?q?=E4=BA=8C=E6=AC=A1=E4=BF=AE=E6=94=B9-=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=9F=A5=E8=AF=A2=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Allocation/VisitTaskHelpeService.cs | 2 ++ .../SiteSurvey/DTO/TrialSiteSurveyViewModel.cs | 3 +++ .../Service/SiteSurvey/TrialSiteSurveyService.cs | 11 +++++++---- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs index 0ee98e373..0d195ab95 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs @@ -767,6 +767,7 @@ namespace IRaCIS.Core.Application.Service TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt, nameof(VisitTask)), ReadingCategory = ReadingCategory.Visit, + TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId, IsNeedClinicalDataSign = isNeedClinicalDataSign, IsClinicalDataSign = isClinicalDataSign, @@ -1421,6 +1422,7 @@ namespace IRaCIS.Core.Application.Service // AllocateTime = DateTime.Now, //DoctorUserId = reReadingVisitTask.DoctorUserId, + IsIRImageDownloaded= reReadingVisitTask.IsIRImageDownloaded, }); generateTaskCommand.Action(newTask); diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/DTO/TrialSiteSurveyViewModel.cs b/IRaCIS.Core.Application/Service/SiteSurvey/DTO/TrialSiteSurveyViewModel.cs index c653b9082..da5af4862 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/DTO/TrialSiteSurveyViewModel.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/DTO/TrialSiteSurveyViewModel.cs @@ -454,10 +454,13 @@ namespace IRaCIS.Core.Application.Contracts { [NotDefault] public Guid TrialSiteSurveyId { get; set; } + + public Guid? Id { get; set; } } public class SiteSurveyLogDTO { + public Guid Id { get; set; } public Guid TrialSiteSurveyId { get; set; } public string Name { get; set; } diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs index 512f01876..a66d01873 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs @@ -660,7 +660,7 @@ namespace IRaCIS.Core.Application.Contracts //找到最新的调研表 var currentLatest = await _trialSiteSurveyRepository.Where(t => t.TrialId == userInfo.TrialId && t.TrialSiteId == userInfo.TrialSiteId, true) - .Include(u => u.TrialSiteEquipmentSurveyList).Include(u => u.TrialSiteUserSurveyList).OrderByDescending(t => t.CreateTime).FirstOrDefaultAsync(); + .Include(u => u.TrialSiteEquipmentSurveyList).Include(u => u.TrialSiteUserSurveyList).Include(t => t.SiteSurveyLogList).OrderByDescending(t => t.CreateTime).FirstOrDefaultAsync(); if (currentLatest == null) { @@ -687,7 +687,7 @@ namespace IRaCIS.Core.Application.Contracts } //更新调研表日志 - 老的调研表 - currentLatest.SiteSurveyLogList.Add(new SiteSurveyLog() { Name = userInfo.ReplaceUserEmailOrPhone, OptType = SiteSurveyOptTyp.Over }); + //currentLatest.SiteSurveyLogList.Add(new SiteSurveyLog() { Name = userInfo.ReplaceUserEmailOrPhone, OptType = SiteSurveyOptTyp.Over }); var copy = currentLatest.Clone(); @@ -706,6 +706,7 @@ namespace IRaCIS.Core.Application.Contracts copy.Phone = String.Empty; //更新调研表日志 + var info = await GetSiteSurveyInfo(currentLatest.Id, currentLatest.TrialId); copy.SiteSurveyLogList.Add(new SiteSurveyLog() { Name = userInfo.ReplaceUserEmailOrPhone, OptType = SiteSurveyOptTyp.Update, OriginTrialSiteSurveyId = currentLatest.Id, Json = info.ToJsonStr() }); } @@ -1454,7 +1455,9 @@ namespace IRaCIS.Core.Application.Contracts [HttpPost] public async Task> GetSiteSurveyLogList(SiteSurveyLogQuery inQuery) { - return _siteSurveyLogRepository.Where(t => t.TrialSiteSurveyId == inQuery.TrialSiteSurveyId).ProjectTo(_mapper.ConfigurationProvider).ToList(); + return _siteSurveyLogRepository.Where(t => t.TrialSiteSurveyId == inQuery.TrialSiteSurveyId) + .WhereIf(inQuery.Id != null, t => t.Id == inQuery.Id) + .ProjectTo(_mapper.ConfigurationProvider).ToList(); } /// @@ -1466,7 +1469,7 @@ namespace IRaCIS.Core.Application.Contracts public async Task GetSiteSurveyEquipmentList(SiteSurveyEquipmentQuery inQuery) { var pageList = await _trialSiteEquipmentSurveyRepository.Where(t => t.TrialSiteSurvey.TrialId == inQuery.TrialId) - .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteSurvey.TrialSiteId==inQuery.TrialSiteId) + .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteSurvey.TrialSiteId == inQuery.TrialSiteId) .WhereIf(inQuery.TrialSiteCode.IsNotNullOrEmpty(), t => t.TrialSiteSurvey.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode)) .WhereIf(inQuery.TrialSiteName.IsNotNullOrEmpty(), t => t.TrialSiteSurvey.TrialSite.TrialSiteAliasName.Contains(inQuery.TrialSiteName) || t.TrialSiteSurvey.TrialSite.TrialSiteName.Contains(inQuery.TrialSiteName)) From 8e406fd8ca39c1340bebffbfff51229c401f579b Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 12 Aug 2026 13:58:56 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=92=8C=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E6=96=B0=E5=A2=9E=E7=9A=84=E8=A3=81=E5=88=A4=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingQuestionViewModel.cs | 25 +++++++++++++++++++ .../ReadingCriterionService.cs | 22 ++++++++++++++-- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs index 3ded1dabc..75821232d 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs @@ -739,6 +739,16 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid TrialReadingCriterionId { get; set; } } + public class SetTrialJudgeRuleInfoInDto + { + [NotDefault] + public Guid TrialReadingCriterionId { get; set; } + + public JudgeMode JudgeModeEnum { get; set; } = JudgeMode.SelectOne; + public JudgeRule JudgeRuleEnum { get; set; } = JudgeRule.Consistent; + public JudgeGenerate JudgeGenerateEnum { get; set; } = JudgeGenerate.Instant; + } + public class GetTrialJudgyInfoOutDto { public Guid TrialId { get; set; } @@ -754,6 +764,21 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// 仲裁规则 /// public ArbitrationRule ArbitrationRule { get; set; } + + /// + /// 仲裁模式 + /// + public JudgeMode JudgeModeEnum { get; set; } = JudgeMode.SelectOne; + + /// + /// 裁判规则 + /// + public JudgeRule JudgeRuleEnum { get; set; } = JudgeRule.Consistent; + + /// + /// 裁判任务生成 + /// + public JudgeGenerate JudgeGenerateEnum { get; set; } = JudgeGenerate.Instant; } public enum NeedSynchronize diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingCriterionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingCriterionService.cs index 1481e4766..b493d9e6a 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingCriterionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingCriterionService.cs @@ -370,13 +370,32 @@ namespace IRaCIS.Core.Application.Service.RC TrialId = x.TrialId, IsReadingTaskViewInOrder = x.IsReadingTaskViewInOrder, ArbitrationRule = x.ArbitrationRule, - IsArbitrationReading = x.IsArbitrationReading + IsArbitrationReading = x.IsArbitrationReading, + JudgeModeEnum = x.JudgeModeEnum, + JudgeRuleEnum = x.JudgeRuleEnum, + JudgeGenerateEnum = x.JudgeGenerateEnum, }).FirstNotNullAsync(); return result; } + /// + /// 编辑裁判规则配置 + /// + [HttpPost] + public async Task SetTrialJudgeRuleInfo(SetTrialJudgeRuleInfoInDto inDto) + { + await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial() + { + JudgeModeEnum = inDto.JudgeModeEnum, + JudgeRuleEnum = inDto.JudgeRuleEnum, + JudgeGenerateEnum = inDto.JudgeGenerateEnum, + }); + + return ResponseOutput.Ok(await _readingQuestionCriterionTrialRepository.SaveChangesAsync()); + } + /// /// 新增修改项目问题标准(项目) /// @@ -482,7 +501,6 @@ namespace IRaCIS.Core.Application.Service.RC return ResponseOutput.Ok(result); } - #endregion #region 项目阅片标准问题分页 From 969341380dd0f1687fd45dc205c24143490723b7 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 12 Aug 2026 14:06:49 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=B8=8B=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E9=98=85=E7=89=87=E4=BB=BB=E5=8A=A1=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=A3=81=E5=88=A4=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Reading/Dto/ReadingImageTaskViewModel.cs | 10 ++++++++++ .../ReadingImageTask/ReadingImageTaskService.cs | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 4a8500658..9cdcb79c3 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -2199,6 +2199,16 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public DefaultSegmentNameDto DefaultSegmentName { get; set; } + /// + /// 仲裁模式 + /// + public JudgeMode JudgeModeEnum { get; set; } = JudgeMode.SelectOne; + + /// + /// 裁判规则 + /// + public JudgeRule JudgeRuleEnum { get; set; } = JudgeRule.Consistent; + } public class GetReadingImgInDto diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 7adf73788..2a285b05b 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -3935,6 +3935,9 @@ namespace IRaCIS.Core.Application.Service x.ReadingToolList, x.CircleRadius, x.DefaultSegmentName, + x.JudgeGenerateEnum, + x.JudgeModeEnum, + x.JudgeRuleEnum, }).FirstNotNullAsync(); task.IsReadingShowPreviousResults = criterionInfo.IsReadingShowPreviousResults; @@ -3998,6 +4001,8 @@ namespace IRaCIS.Core.Application.Service task.IsViewStudyPart = visitTaskInfo.ReadingCategory == ReadingCategory.Judge || visitTaskInfo.IsViewStudyPart; task.IsReadKeyFile = await _criterionKeyFileReadRepository.AnyAsync(x => x.IdentityUserId == _userInfo.IdentityUserId && x.TrialCriterionId == task.TrialReadingCriterionId); task.IsHaveKeyFile = await _trialCriterionKeyFileRepository.AnyAsync(x => x.TrialCriterionId == task.TrialReadingCriterionId); + task.JudgeModeEnum = criterionInfo.JudgeModeEnum; + task.JudgeRuleEnum = criterionInfo.JudgeRuleEnum; // 添加默认答案 if (inDto.VisitTaskId == null && visitTaskInfo.ReadingTaskState != ReadingTaskState.HaveSigned) { From 4e2fc0d2d9abfa4546fa27548769cb4ada5f73f7 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 12 Aug 2026 14:11:04 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=98=85=E7=89=87=E6=A0=87=E5=87=86=E5=90=84=E8=AE=BF=E8=A7=86?= =?UTF-8?q?=E7=9A=84=E8=A3=81=E5=88=A4=E8=A7=84=E5=88=99=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=20=E5=B7=B2=E7=BB=8F=E6=8E=92=E9=99=A4=E7=9A=84=E8=AE=BF?= =?UTF-8?q?=E8=A7=86=20=E5=9C=A8=E8=8E=B7=E5=8F=96=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=20=E4=B8=8D=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Reading/ReadingCriterion/ReadingQuestionService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs index 57ac7d4d8..c76353280 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs @@ -49,6 +49,7 @@ namespace IRaCIS.Core.Application.Service public async Task> GetTrialQuestionVisitJudgeRule(GetTrialQuestionVisitJudgeRuleInDto inDto) { var questionList = await _readingQuestionTrialRepository + .Where(x=>!x.ExcludeShowVisitList.Contains(inDto.VisitNum)) .Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && x.IsJudgeQuestion) .WhereIf(inDto.ReadingQuestionId != null, x => x.Id == inDto.ReadingQuestionId) .OrderBy(x => x.ShowOrder) From 22afd356a62b1cb3e3d3e67940a8deff66e718da Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 12 Aug 2026 14:17:02 +0800 Subject: [PATCH 10/13] =?UTF-8?q?GetNextTask=20=E6=96=B0=E5=A2=9E=20Arbitr?= =?UTF-8?q?ationRule?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Reading/Dto/ReadingImageTaskViewModel.cs | 5 +++++ .../Reading/ReadingImageTask/ReadingImageTaskService.cs | 2 ++ 2 files changed, 7 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 9cdcb79c3..6ab71cbf2 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -2209,6 +2209,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public JudgeRule JudgeRuleEnum { get; set; } = JudgeRule.Consistent; + /// + /// 仲裁对象 + /// + public ArbitrationRule ArbitrationRule { get; set; } = ArbitrationRule.Reading; + } public class GetReadingImgInDto diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 2a285b05b..636644bd0 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -3938,6 +3938,7 @@ namespace IRaCIS.Core.Application.Service x.JudgeGenerateEnum, x.JudgeModeEnum, x.JudgeRuleEnum, + x.ArbitrationRule, }).FirstNotNullAsync(); task.IsReadingShowPreviousResults = criterionInfo.IsReadingShowPreviousResults; @@ -4003,6 +4004,7 @@ namespace IRaCIS.Core.Application.Service task.IsHaveKeyFile = await _trialCriterionKeyFileRepository.AnyAsync(x => x.TrialCriterionId == task.TrialReadingCriterionId); task.JudgeModeEnum = criterionInfo.JudgeModeEnum; task.JudgeRuleEnum = criterionInfo.JudgeRuleEnum; + task.ArbitrationRule = criterionInfo.ArbitrationRule; // 添加默认答案 if (inDto.VisitTaskId == null && visitTaskInfo.ReadingTaskState != ReadingTaskState.HaveSigned) { 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 11/13] =?UTF-8?q?=E8=A3=81=E5=88=A4=E8=A7=84=E5=88=99?= =?UTF-8?q?=E4=BF=AE=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; + } + }); + } + /// /// 发送微信通知 From f9c33e373a7a4d558beb2c44bf21dd97677fee9e Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 12 Aug 2026 16:38:31 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E8=A3=81=E5=88=A4=E7=AD=BE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/InspectionController.cs | 17 ++++++ .../Reading/Dto/ReadingImageTaskViewModel.cs | 4 ++ .../Interface/IReadingImageTaskService.cs | 1 + .../ReadingJudgeTaskService.cs | 60 ++++++++++++++++--- 4 files changed, 75 insertions(+), 7 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index 88534140b..f9798cd6b 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -351,6 +351,23 @@ namespace IRaCIS.Core.API.Controllers return result; } + /// + /// 提交阅片裁判表单 + /// + /// + /// + [HttpPost, Route("Inspection/ReadingImageTask/SubmitJudgeForm")] + [TrialGlobalLimit("AfterStopCannNotOpt")] + + [UnitOfWork] + + public async Task SubmitJudgeForm(DataInspectionDto opt) + { + var singid = await _inspectionService.RecordSing(opt.SignInfo); + var result = await _iReadingImageTaskService.SubmitJudgeForm(opt.Data); + await _inspectionService.CompletedSign(singid, result); + return result; + } /// /// 配置 基础逻辑信息并确认 diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 6ab71cbf2..52d141259 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -2512,6 +2512,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto [NotDefault] public Guid VisitTaskId { get; set; } + public string JudgeResultRemark { get; set; } = string.Empty; + + public List JudgeResultImagePathList { get; set; } = new List(); + public List QuestionList { get; set; } = new List(); } diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs index db9ca1114..dc3a3874d 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs @@ -15,6 +15,7 @@ namespace IRaCIS.Core.Application.Contracts Task TriggerJudgeQuestion(Guid visitTaskId); Task SubmitVisitTaskQuestions(SubmitVisitTaskQuestionsInDto inDto); + Task SubmitJudgeForm(SetJudgeFormInDto inDto); Task SubmitJudgeVisitTaskResult(SaveJudgeVisitTaskResult inDto); Task GetOncologyReadingInfo(GetOncologyReadingInfoInDto inDto); diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 9c6460738..5852b444d 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -195,6 +195,21 @@ namespace IRaCIS.Core.Application.Service /// [HttpPost] public async Task SetJudgeForm(SetJudgeFormInDto inDto) + { + + await SaveJudgeForm(inDto); + await _visitTaskRepository.UpdatePartialFromQueryAsync(inDto.VisitTaskId, x => new VisitTask() + { + JudgeResultRemark = inDto.JudgeResultRemark, + JudgeResultImagePath = string.Join(',', inDto.JudgeResultImagePathList), + + }); + + return ResponseOutput.Result(await _readingTaskQuestionAnswerRepository.SaveChangesAsync()); + } + + + private async Task SaveJudgeForm(SetJudgeFormInDto inDto) { var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); var judgeRule = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == taskInfo.TrialReadingCriterionId).Select(x => x.JudgeRuleEnum).FirstNotNullAsync(); @@ -216,12 +231,38 @@ namespace IRaCIS.Core.Application.Service }).ToList()); } - return ResponseOutput.Result(await _readingTaskQuestionAnswerRepository.SaveChangesAsync()); } + /// + /// 提交裁判表单 + /// + /// + /// + [HttpPost] + public async Task SubmitJudgeForm(SetJudgeFormInDto inDto) + { + + await SaveJudgeForm(inDto); + await _visitTaskRepository.UpdatePartialFromQueryAsync(inDto.VisitTaskId, x => new VisitTask() + { + JudgeResultRemark = inDto.JudgeResultRemark, + ReadingTaskState = ReadingTaskState.HaveSigned, + SignTime=DateTime.Now, + JudgeResultImagePath = string.Join(',', inDto.JudgeResultImagePathList), + + }); + await _readingTaskQuestionAnswerRepository.SaveChangesAsync(); + + await SignatureAfter(inDto.VisitTaskId); + return ResponseOutput.Ok(); + } + + private async Task> GetJudgeDisplayQuestions(Guid trialReadingCriterionId, decimal visitNum, JudgeRule judgeRule) { - var questionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.IsJudgeQuestion).OrderBy(x => x.ShowOrder).ToListAsync(); + 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() @@ -620,8 +661,15 @@ namespace IRaCIS.Core.Application.Service }); var result = await _visitTaskRepository.SaveChangesAsync(); + await SignatureAfter(inDto.VisitTaskId); + + return ResponseOutput.Ok(result); + } + + private async Task SignatureAfter(Guid visitTaskId) + { // 需要判断是否添加肿瘤学任务 - var taskInfo = await _visitTaskRepository.Where(x => x.JudgeVisitTaskId == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); + var taskInfo = await _visitTaskRepository.Where(x => x.JudgeVisitTaskId == visitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); if (taskInfo.ReadingCategory == ReadingCategory.Visit) { @@ -658,11 +706,9 @@ namespace IRaCIS.Core.Application.Service // 创建任务关联关系 - await this.CreateTaskRelated(inDto.VisitTaskId); + await this.CreateTaskRelated(visitTaskId); - await SafeMailHelper.Run(async () => await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(inDto.VisitTaskId)); - - return ResponseOutput.Ok(result); + await SafeMailHelper.Run(async () => await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(visitTaskId)); } /// From fe19c3b35e645af88bb5c7b8a0dbdf677d7b9c5f Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 12 Aug 2026 16:59:20 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E8=BF=94=E5=9B=9ER1=20R2=20=E7=9A=84?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1Id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingImageTaskViewModel.cs | 2 ++ .../ReadingJudgeTaskService.cs | 21 ++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 52d141259..34b68eac9 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -2460,6 +2460,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public class GetSingleVisitJudgeAnswerOutDto { + public Guid R1VisitTaskId { get; set; } + public Guid R2VisitTaskId { get; set; } public List QuestionList { get; set; } = new List(); } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 5852b444d..3fcac31fb 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -105,21 +105,26 @@ namespace IRaCIS.Core.Application.Service .FirstNotNullAsync(); var taskIds = new List { judgeDataInfo.TaskIdOne, judgeDataInfo.TaskIdTwo }; - var taskInfo = await _visitTaskRepository - .Where(x => x.Id == judgeDataInfo.TaskIdOne) + var readingTasks = await _visitTaskRepository + .Where(x => taskIds.Contains(x.Id)) .Select(x => new { + x.Id, + x.ArmEnum, x.TrialReadingCriterionId, x.VisitTaskNum, }) - .FirstNotNullAsync(); + .ToListAsync(); + + var r1Task = readingTasks.First(x => x.ArmEnum == Arm.DoubleReadingArm1); + var r2Task = readingTasks.First(x => x.ArmEnum == Arm.DoubleReadingArm2); var judgeRule = await _readingQuestionCriterionTrialRepository - .Where(x => x.Id == taskInfo.TrialReadingCriterionId) + .Where(x => x.Id == r1Task.TrialReadingCriterionId) .Select(x => x.JudgeRuleEnum) .FirstNotNullAsync(); - var displayQuestions = await GetJudgeDisplayQuestions(taskInfo.TrialReadingCriterionId, taskInfo.VisitTaskNum, judgeRule); + var displayQuestions = await GetJudgeDisplayQuestions(r1Task.TrialReadingCriterionId, r1Task.VisitTaskNum, judgeRule); var judgeAnswers = displayQuestions .Select(x => new SingleVisitJudgeAnswerItemDto { @@ -149,12 +154,14 @@ namespace IRaCIS.Core.Application.Service judgeAnswers.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; + question.R1Answer = answerList.FirstOrDefault(x => x.VisitTaskId == r1Task.Id && x.ReadingQuestionTrialId == question.ReadingQuestionId)?.Answer ?? string.Empty; + question.R2Answer = answerList.FirstOrDefault(x => x.VisitTaskId == r2Task.Id && x.ReadingQuestionTrialId == question.ReadingQuestionId)?.Answer ?? string.Empty; }); return new GetSingleVisitJudgeAnswerOutDto { + R1VisitTaskId = r1Task.Id, + R2VisitTaskId = r2Task.Id, QuestionList = judgeAnswers, }; }