From adaa085e5659dba47cb960762fb4ad4a4f6fd961 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 18 Aug 2026 11:19:06 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E4=B8=8D=E9=80=82=E7=94=A8=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingQuestionService.cs | 53 +++++++++++++++++++ .../ReadingQuestionVisitJudgeRule.cs | 2 +- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs index 8c99a7088..44f0b2173 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs @@ -36,6 +36,7 @@ namespace IRaCIS.Core.Application.Service IRepository _readingTaskQuestionAnswer, IRepository _previousPDFRepository, IRepository _readingQuestionVisitJudgeRuleRepository, + IRepository _visitStageRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IReadingQuestionService { @@ -713,9 +714,61 @@ namespace IRaCIS.Core.Application.Service } var entity = await _readingQuestionTrialRepository.InsertOrUpdateAsync(indto, true); + await AddNAJudgeRule(entity); return ResponseOutput.Ok(entity.Id.ToString()); } + /// + /// 添加问题的不适用规则 + /// + /// + private async Task AddNAJudgeRule(ReadingQuestionTrial entity) + { + List visitNums = new List(); + if (entity.IsJudgeQuestion) + { + var visitStageNums = await _visitStageRepository + .Where(x => x.TrialId == entity.TrialId) + .Select(x => x.VisitNum) + .Distinct() + .ToListAsync(); + + switch (entity.LimitShow) + { + case LimitShow.BaseLineShow: + visitNums = visitStageNums.Where(x => x > 0).ToList(); + visitNums.Add(-1); + break; + case LimitShow.FollowShow: + visitNums.Add(0); + break; + case LimitShow.ExcludeSomeVisits: + visitNums = entity.ExcludeShowVisitList; + break; + } + } + + if (visitNums.Count==0) + { + return; + } + + + await _readingQuestionVisitJudgeRuleRepository.BatchDeleteNoTrackingAsync(x => + x.ReadingQuestionId == entity.Id && visitNums.Contains(x.VisitNum)); + + var rules = visitNums.Select(visitNum => new ReadingQuestionVisitJudgeRule + { + Id = NewId.NextGuid(), + ReadingQuestionId = entity.Id, + VisitNum = visitNum, + JudgeType = JudgeTypeEnum.None, + }).ToList(); + + await _readingQuestionVisitJudgeRuleRepository.AddRangeAsync(rules); + await _readingQuestionVisitJudgeRuleRepository.SaveChangesAsync(); + } + /// /// 获取项目问题(项目) /// diff --git a/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionVisitJudgeRule.cs b/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionVisitJudgeRule.cs index 67dcf892d..e44d8c6b1 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionVisitJudgeRule.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionVisitJudgeRule.cs @@ -21,7 +21,7 @@ public class ReadingQuestionVisitJudgeRule : BaseAddAuditEntity public Guid ReadingQuestionId { get; set; } /// - /// 访视Num + /// 访视Num (计划外是-1) /// public decimal VisitNum { get; set; } From 4cab822a52750dd2701ac84d1a799945995da3ce Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 18 Aug 2026 11:27:14 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E4=B8=8D=E9=80=82=E7=94=A8=E7=9A=84?= =?UTF-8?q?=E8=AE=BF=E8=A7=86=E4=B8=8D=E8=BF=94=E5=9B=9E=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/ReadingCriterion/ReadingQuestionService.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs index 44f0b2173..440d2d13f 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs @@ -51,8 +51,11 @@ 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) + .Where(x => x.LimitShow == LimitShow.AllShow + || (x.LimitShow == LimitShow.BaseLineShow && inDto.VisitNum == 0) + || (x.LimitShow == LimitShow.FollowShow && inDto.VisitNum != 0) + || (x.LimitShow == LimitShow.ExcludeSomeVisits && !x.ExcludeShowVisitList.Contains(inDto.VisitNum))) .WhereIf(inDto.ReadingQuestionId != null, x => x.Id == inDto.ReadingQuestionId) .OrderBy(x => x.ShowOrder) .Select(x => new TrialQuestionVisitJudgeRuleItemDto From 747bb297294f513bbd6cd129ab195cf8147293d8 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 18 Aug 2026 13:12:30 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=A3=81=E5=88=A4?= =?UTF-8?q?=E8=A7=84=E5=88=99=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingCriterionService.cs | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingCriterionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingCriterionService.cs index 4b9eaa2c9..5ec42ce6d 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingCriterionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingCriterionService.cs @@ -386,6 +386,36 @@ namespace IRaCIS.Core.Application.Service.RC [HttpPost] public async Task SetTrialJudgeRuleInfo(SetTrialJudgeRuleInfoInDto inDto) { + if (inDto.JudgeRuleEnum == JudgeRule.Consistent) + { + if (await _readingQuestionTrialRepository.AnyAsync(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId&& x.IsJudgeQuestion && x.LimitShow != LimitShow.AllShow)) + { + + + var questionList = await _readingQuestionTrialRepository + .Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && x.IsJudgeQuestion && x.LimitShow != LimitShow.AllShow) + .OrderBy(x => x.ShowOrder) + .Select(x => new TrialQuestionVisitJudgeRuleItemDto + { + ReadingQuestionTrialId = x.Id, + QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us), + ShowOrder = x.ShowOrder, + Type = x.Type, + TypeValue = x.TypeValue, + QuestionGenre = x.QuestionGenre, + DictionaryCode = x.DictionaryCode, + Unit = x.Unit, + CustomUnit = x.CustomUnit, + }) + .ToListAsync(); + + var questionName=string.Join(",", questionList.Select(x => x.QuestionName)); + + + //---当前标准裁判规则为一致性,但存在非全部显示的裁判问题,操作失败 + throw new BusinessValidationFailedException(_localizer["JudgeCanNotLimitShow", questionName]); + } + } await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial() { JudgeModeEnum = inDto.JudgeModeEnum, From 1094c8ce2abbc55c7fc27e218492ef5581375494 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 18 Aug 2026 13:53:27 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E9=98=85=E7=89=87=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E7=AD=BE=E5=90=8D=E9=AA=8C=E8=AF=81=E6=8E=A5=E5=8F=A3=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TrialSiteUser/TrialConfigService.cs | 45 ++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index aab463e19..262d25d62 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -27,15 +27,16 @@ namespace IRaCIS.Core.Application IRepository _trialQCQuestionRepository, IRepository _readingQuestionCriterionTrialRepository, IRepository _readingQuestionTrialRepository, + IRepository _readingQuestionVisitJudgeRuleRepository, IRepository _trialCriterionDictionaryCode, IRepository _systemCriterionDictionaryCode, IRepository _readingQuestionCriterionSystemRepository, IRepository _clinicalDataTrialSetRepository, IRepository _readingCriterionPageRepository, - IRepository _systemCriterionKeyFileRepository, - IOSSService _oSSService, - - IRepository _trialCriterionKeyFileRepository, + IRepository _systemCriterionKeyFileRepository, + IOSSService _oSSService, + IRepository _visitStageRepository, + IRepository _trialCriterionKeyFileRepository, IOrganInfoService _iOrganInfoService, IRepository _trialBodyPartRepository, IRepository _readingCriterionDictionaryRepository, @@ -48,7 +49,7 @@ namespace IRaCIS.Core.Application IRepository _systemBasicDataRepository, IRepository _subjectVisitRepository, IRepository _enrollRepository, - IRepository _qcQuestionAnswerRepository, + IRepository _qcQuestionAnswerRepository, IRepository _trialStateChangeRepository, IRepository _readingTableQuestionTrialRepository, IRepository _dicomAERepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IFusionCache _fusionCache) : BaseService, ITrialConfigService @@ -105,6 +106,40 @@ namespace IRaCIS.Core.Application throw new BusinessValidationFailedException(_localizer["TrialConfig_JudgeTaskFail"]); } + if (trialCriterion.JudgeRuleEnum == JudgeRule.Difference) + { + var visitStageList = await _visitStageRepository.Where(x => x.TrialId == trialCriterion.TrialId).ToListAsync(); + + visitStageList.Add(new VisitStage() + { + VisitName = "Out of Plan", + VisitNum=-1, + }); + + + + var judgeCount = await _readingQuestionTrialRepository.CountAsync(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && x.IsJudgeQuestion); + + var ruleList = await _readingQuestionVisitJudgeRuleRepository.Where(x => x.ReadingQuestionTrial.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId).ToListAsync(); + + var errorList = new List(); + + visitStageList.ForEach(x => + { + if (judgeCount != ruleList.Count(y => y.VisitNum == x.VisitNum)) + { + errorList.Add(x.VisitName); + } + + }); + + if (errorList.Count() > 0) + { + throw new BusinessValidationFailedException(_localizer["TrialConfig_VisitjudgeDeficiency", string.Join(",", errorList)]); + } + + + } return ResponseOutput.Ok(true); } From e291953d099b994ac5411b238795bd68ea2bd105 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 18 Aug 2026 13:57:01 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E8=A3=81=E5=88=A4=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E8=BF=94=E5=9B=9EShowQuestion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Reading/Dto/ReadingImageTaskViewModel.cs | 2 ++ .../Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs | 1 + 2 files changed, 3 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 1d435bd13..d688c4e1b 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -2500,6 +2500,8 @@ 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 ShowQuestion ShowQuestion { get; set; } public string TypeValue { get; set; } = string.Empty; public int ShowOrder { get; set; } public string Answer { get; set; } = string.Empty; diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 36c25cd81..00e0ec4f5 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -188,6 +188,7 @@ namespace IRaCIS.Core.Application.Service ReadingQuestionId = x.Id, QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us), Type = x.Type, + ShowQuestion = x.ShowQuestion, TypeValue = x.TypeValue, ShowOrder = x.ShowOrder, Answer = answers.FirstOrDefault(answer => answer.ReadingQuestionTrialId == x.Id)?.Answer ?? string.Empty, From 10c9f6b8cc025cfe043c7ef07d8e7f50a28ef4e0 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 18 Aug 2026 14:24:54 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E8=A1=A8=E5=8D=95=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Reading/Dto/ReadingImageTaskViewModel.cs | 7 +++++++ .../Reading/ReadingImageTask/ReadingJudgeTaskService.cs | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index d688c4e1b..1b9f72a09 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -2510,6 +2510,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public ValueUnit? Unit { get; set; } public string? CustomUnit { get; set; } public ValueOfType? ValueType { get; set; } + public string ClassifyAlgorithms { get; set; } + + public ClassifyType? ClassifyType { get; set; } + + public Guid? ClassifyQuestionId { get; set; } + + public JudgeReadingQuestionType QuestionType { get; set; } = JudgeReadingQuestionType.Question; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 00e0ec4f5..eb1d3c85c 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -197,6 +197,11 @@ namespace IRaCIS.Core.Application.Service Unit = x.Unit, CustomUnit = x.CustomUnit, ValueType = x.ValueType, + + + ClassifyQuestionId = x.ClassifyQuestionId, + ClassifyAlgorithms = x.ClassifyAlgorithms, + ClassifyType = x.ClassifyType }).ToList(), }; } From 283524cb4f4b0512d4c15cc5929373315a1b7a4e Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 18 Aug 2026 14:36:19 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=A3=81=E5=88=A4?= =?UTF-8?q?=E5=8D=95=E4=B8=AA=E6=95=B0=E6=8D=AE=E6=8E=92=E9=99=A4=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/ReadingImageTask/ReadingJudgeTaskService.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index eb1d3c85c..5556a09ca 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -125,7 +125,7 @@ namespace IRaCIS.Core.Application.Service .Select(x => x.JudgeRuleEnum) .FirstNotNullAsync(); - var displayQuestions = await GetJudgeDisplayQuestions(r1Task.TrialReadingCriterionId, r1Task.VisitTaskNum, judgeRule); + var displayQuestions = await GetJudgeDisplayQuestions(r1Task.TrialReadingCriterionId, r1Task.VisitTaskNum, judgeRule, false); var judgeAnswers = displayQuestions .Select(x => new SingleVisitJudgeAnswerItemDto { @@ -175,7 +175,7 @@ namespace IRaCIS.Core.Application.Service { 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 questionList = await GetJudgeDisplayQuestions(taskInfo.TrialReadingCriterionId, taskInfo.VisitTaskNum, judgeRule, true); var questionIds = questionList.Select(x => x.Id).ToList(); var answers = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && questionIds.Contains(x.ReadingQuestionTrialId)).ToListAsync(); @@ -229,7 +229,7 @@ namespace IRaCIS.Core.Application.Service { 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 displayQuestionIds = (await GetJudgeDisplayQuestions(taskInfo.TrialReadingCriterionId, taskInfo.VisitTaskNum, judgeRule, true)).Select(x => x.Id).ToList(); var submittedQuestionIds = inDto.QuestionList.Select(x => x.ReadingQuestionId).ToList(); @@ -274,9 +274,10 @@ namespace IRaCIS.Core.Application.Service } - private async Task> GetJudgeDisplayQuestions(Guid trialReadingCriterionId, decimal visitNum, JudgeRule judgeRule) + private async Task> GetJudgeDisplayQuestions(Guid trialReadingCriterionId, decimal visitNum, JudgeRule judgeRule,bool isGetShowQuestion) { var questionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.IsJudgeQuestion) + .WhereIf(!isGetShowQuestion,x=>x.ShowQuestion!= ShowQuestion.Hide) .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)) From c35ec016dda1a08d52de915c99b85ce7e0eea8b0 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 18 Aug 2026 14:53:15 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 5556a09ca..71f220b0a 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -315,6 +315,7 @@ namespace IRaCIS.Core.Application.Service return questionList .Where(x => visitJudgeRules.FirstOrDefault(rule => rule.ReadingQuestionId == x.Id && rule.VisitNum == -1)?.JudgeType != JudgeTypeEnum.NotApplicable) + .OrderBy(x=>x.ShowOrder) .ToList(); } From bc8aeb8d7c54b8670cb2297516d0a6618378d6be Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 18 Aug 2026 15:14:17 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E5=A4=8D=E5=88=B6=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E8=AE=BF=E8=A7=86=E7=9A=84=E9=A1=B9=E7=9B=AE=E9=98=85=E7=89=87?= =?UTF-8?q?=E6=A0=87=E5=87=86=E8=A3=81=E5=88=A4=E8=A7=84=E5=88=99=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 | 16 ++++++ .../ReadingQuestionService.cs | 51 +++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs index 6101cc51d..8f09ae0ec 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs @@ -29,6 +29,22 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public List QuestionList { get; set; } = new List(); } + public class CopyTrialQuestionVisitJudgeRuleInDto + { + [NotDefault] + public Guid TrialReadingCriterionId { get; set; } + + /// + /// 来源访视 + /// + public decimal SourceVisitNum { get; set; } + + /// + /// 目标访视 + /// + public decimal TargetVisitNum { get; set; } + } + public class TrialQuestionVisitJudgeRuleItemDto { public Guid ReadingQuestionTrialId { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs index 440d2d13f..e5c05b668 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs @@ -43,6 +43,9 @@ namespace IRaCIS.Core.Application.Service #region 项目访视裁判规则 + + + /// /// 获取项目阅片标准各访视的裁判规则配置。 /// 未配置规则的访视问题也会返回,供前端直接进行配置。 @@ -132,6 +135,54 @@ namespace IRaCIS.Core.Application.Service return ResponseOutput.Result(await _readingQuestionVisitJudgeRuleRepository.SaveChangesAsync()); } + /// + /// 复制其他访视的项目阅片标准裁判规则配置。 + /// 目标访视不适用的问题保留其已有的不适用规则,不参与复制。 + /// + [HttpPost] + public async Task CopyTrialQuestionVisitJudgeRule(CopyTrialQuestionVisitJudgeRuleInDto inDto) + { + var targetQuestionIds = await _readingQuestionTrialRepository + .Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && x.IsJudgeQuestion) + .Where(x => x.LimitShow == LimitShow.AllShow + || (x.LimitShow == LimitShow.BaseLineShow && inDto.TargetVisitNum == 0) + || (x.LimitShow == LimitShow.FollowShow && inDto.TargetVisitNum != 0) + || (x.LimitShow == LimitShow.ExcludeSomeVisits && !x.ExcludeShowVisitList.Contains(inDto.TargetVisitNum))) + .Select(x => x.Id) + .ToListAsync(); + + if (targetQuestionIds.Count == 0) + { + return ResponseOutput.Ok(); + } + + var sourceRules = await _readingQuestionVisitJudgeRuleRepository + .Where(x => x.VisitNum == inDto.SourceVisitNum && targetQuestionIds.Contains(x.ReadingQuestionId)) + .ToListAsync(); + + await _readingQuestionVisitJudgeRuleRepository.BatchDeleteNoTrackingAsync(x => + x.VisitNum == inDto.TargetVisitNum && targetQuestionIds.Contains(x.ReadingQuestionId)); + + var targetRules = sourceRules.Select(rule => new ReadingQuestionVisitJudgeRule + { + Id = NewId.NextGuid(), + ReadingQuestionId = rule.ReadingQuestionId, + VisitNum = inDto.TargetVisitNum, + AnswerGroup = rule.AnswerGroup, + AnswerCombination = rule.AnswerCombination, + JudgeType = rule.JudgeType, + JudgeDifferenceValue = rule.JudgeDifferenceValue, + JudgeDifferenceType = rule.JudgeDifferenceType, + }).ToList(); + + if (targetRules.Count > 0) + { + await _readingQuestionVisitJudgeRuleRepository.AddRangeAsync(targetRules); + } + + return ResponseOutput.Result(await _readingQuestionVisitJudgeRuleRepository.SaveChangesAsync()); + } + #endregion