diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 1568499f5..7a6120ef6 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -480,12 +480,28 @@ namespace IRaCIS.Application.Services var visitTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).AsNoTracking().FirstNotNullAsync(); + // 是否是组件一致性 + var isGroupAnalysis = false; + // 判断是否是一致性核查产生 if (visitTask.IsAnalysisCreate) { - visitTaskids = await _visitTaskRepository.Where(x => x.ArmEnum == visitTask.ArmEnum && x.TaskState == TaskState.Effect && x.SourceSubjectVisitId == visitTask.SourceSubjectVisitId - &&x.TrialReadingCriterionId== visitTask.TrialReadingCriterionId - && x.SouceReadModuleId == visitTask.SouceReadModuleId && x.ReadingCategory != ReadingCategory.Judge && x.ReadingTaskState == ReadingTaskState.HaveSigned).Select(x => x.Id).ToListAsync(); + if (visitTask.IsSelfAnalysis == true) + { + visitTaskids = await _visitTaskRepository.Where(x => x.ArmEnum == visitTask.ArmEnum && x.TaskState == TaskState.Effect && x.SourceSubjectVisitId == visitTask.SourceSubjectVisitId + && x.TrialReadingCriterionId == visitTask.TrialReadingCriterionId + && x.SouceReadModuleId == visitTask.SouceReadModuleId && x.ReadingCategory != ReadingCategory.Judge && x.ReadingTaskState == ReadingTaskState.HaveSigned).Select(x => x.Id).ToListAsync(); + } + + else + { + isGroupAnalysis = true; + visitTaskids = await _visitTaskRepository.Where(x => x.TaskState == TaskState.Effect && x.SourceSubjectVisitId == visitTask.SourceSubjectVisitId + && x.TrialReadingCriterionId == visitTask.TrialReadingCriterionId + && x.SouceReadModuleId == visitTask.SouceReadModuleId && x.ReadingCategory != ReadingCategory.Judge && x.ReadingTaskState == ReadingTaskState.HaveSigned).Select(x => x.Id).ToListAsync(); + + } + } else @@ -499,6 +515,28 @@ namespace IRaCIS.Application.Services } + if (!isGroupAnalysis) + { + await VerifyJudgeResult(visitTask, visitTaskids); + } + else + { + foreach (var item in visitTaskids.Where(x=>x!=visitTask.Id)) + { + var armEnum = await _visitTaskRepository.Where(x => x.Id == item).Select(x=>x.ArmEnum).FirstNotNullAsync(); + await VerifyJudgeResult(visitTask, new List() { visitTask.Id, item }, armEnum); + } + } + + + + + + } + + + private async Task VerifyJudgeResult(VisitTask visitTask,List visitTaskids,Arm? groupArm = null) + { var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == visitTask.TrialReadingCriterionId).Select(x => new { x.IsArbitrationReading, @@ -522,7 +560,7 @@ namespace IRaCIS.Application.Services // 判断是单访视裁判还是全局访视裁判 // 查找两个 访视的阅片答案 - if (await VerifyIsGlobalVisitTask(visitTaskId)) + if (await VerifyIsGlobalVisitTask(visitTask.Id)) { // 找到所有的的任务 var GlobalVisitTaskIds = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReadingCategory != ReadingCategory.Judge @@ -536,7 +574,7 @@ namespace IRaCIS.Application.Services join question in _readingQuestionTrialRepository.Where(x => x.IsJudgeQuestion) on new { ReadingQuestionTrialId = questionAnswer.ReadingQuestionTrialId } equals new { ReadingQuestionTrialId = question.Id } select new TaskAnswerDto() { - VisitTaskNum=questionAnswer.VisitTask.VisitTaskNum, + VisitTaskNum = questionAnswer.VisitTask.VisitTaskNum, Answer = questionAnswer.Answer, AnswerGroup = question.AnswerGroup, AnswerCombination = question.AnswerCombination, @@ -550,7 +588,7 @@ namespace IRaCIS.Application.Services foreach (var item in taskNums) { - List groupTasks = globalVisitAnswerlist.Where(x=>x.VisitTaskNum==item).GroupBy(x => new { x.QuestionId, x.AnswerGroup, x.JudgeType, x.AnswerCombination }).Select(x => new GroupTaskAnswerDto + List groupTasks = globalVisitAnswerlist.Where(x => x.VisitTaskNum == item).GroupBy(x => new { x.QuestionId, x.AnswerGroup, x.JudgeType, x.AnswerCombination }).Select(x => new GroupTaskAnswerDto { QuestionId = x.Key.QuestionId, AnswerGroup = x.Key.AnswerGroup, @@ -562,7 +600,7 @@ namespace IRaCIS.Application.Services } } - else if(!criterionInfo.IsReadingPeriod) + else if (!criterionInfo.IsReadingPeriod) { var query = from questionAnswet in _readingTaskQuestionAnswerRepository.Where(x => visitTaskids.Contains(x.VisitTaskId)) join question in _readingQuestionTrialRepository.Where(x => x.IsJudgeQuestion) on new { ReadingQuestionTrialId = questionAnswet.ReadingQuestionTrialId } equals new { ReadingQuestionTrialId = question.Id } @@ -588,7 +626,7 @@ namespace IRaCIS.Application.Services }).ToList(); noteEqual = ComputeJudgeResult(groupTasks); } - + break; case ReadingCategory.Global: var taskOneInfo = await this.GetGlobalReadingInfo(new GetGlobalReadingInfoInDto() @@ -621,8 +659,8 @@ namespace IRaCIS.Application.Services } else { - var newlist = item.AfterQuestionList.Where(x => x.QuestionId != null&&x.IsJudgeQuestion).ToList().Union( - twoItem.AfterQuestionList.Where(x => x.QuestionId != null&&x.IsJudgeQuestion).ToList() + var newlist = item.AfterQuestionList.Where(x => x.QuestionId != null && x.IsJudgeQuestion).ToList().Union( + twoItem.AfterQuestionList.Where(x => x.QuestionId != null && x.IsJudgeQuestion).ToList() ).ToList(); List globalGroupTasks = newlist.GroupBy(x => new { x.QuestionId, x.AnswerGroup, x.JudgeType, x.AnswerCombination }).Select(x => new GroupTaskAnswerDto @@ -709,10 +747,30 @@ namespace IRaCIS.Application.Services { if (visitTask.IsAnalysisCreate) { - await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => x.Id == visitTaskId, x => new VisitTask() + if (groupArm == null) { - IsAnalysisDiffToOriginalData = true - }); + await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => x.Id == visitTask.Id, x => new VisitTask() + { + IsAnalysisDiffToOriginalData = true + }); + } + else if (groupArm == Arm.SingleReadingArm || groupArm == Arm.DoubleReadingArm1) + { + await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => x.Id == visitTask.Id, x => new VisitTask() + { + IsAnalysisDiffToOriginalData = true, + IsGroupDiffArm1 = true + }); + } + else if (groupArm == Arm.DoubleReadingArm2) + { + await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => x.Id == visitTask.Id, x => new VisitTask() + { + IsAnalysisDiffToOriginalData = true, + IsGroupDiffArm2 = true + }); + } + await _visitTaskRepository.SaveChangesAsync(); } @@ -720,13 +778,13 @@ namespace IRaCIS.Application.Services { if ( - - (visitTask.SourceSubjectVisitId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Visit) - ||(visitTask.SouceReadModuleId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Reading) - // 全局访视任务仲裁 - ||(visitTask.SourceSubjectVisitId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Reading&& criterionInfo.IsReadingPeriod&&!criterionInfo.IsGlobalReading) - + (visitTask.SourceSubjectVisitId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Visit) + || (visitTask.SouceReadModuleId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Reading) + // 全局访视任务仲裁 + || (visitTask.SourceSubjectVisitId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Reading && criterionInfo.IsReadingPeriod && !criterionInfo.IsGlobalReading) + + ) { await this.SaveJudgeTask(new SaveJudgeTaskDto() @@ -743,18 +801,38 @@ namespace IRaCIS.Application.Services if (visitTask.IsAnalysisCreate) { - await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => x.Id == visitTaskId, x => new VisitTask() + + + if (groupArm == null) { - IsAnalysisDiffToOriginalData = false - }); + await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => x.Id == visitTask.Id, x => new VisitTask() + { + IsAnalysisDiffToOriginalData = false + }); + } + else if (groupArm == Arm.SingleReadingArm || groupArm == Arm.DoubleReadingArm1) + { + await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => x.Id == visitTask.Id, x => new VisitTask() + { + IsAnalysisDiffToOriginalData = false, + IsGroupDiffArm1 = false + }); + } + else if (groupArm == Arm.DoubleReadingArm2) + { + await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => x.Id == visitTask.Id, x => new VisitTask() + { + IsAnalysisDiffToOriginalData = false, + IsGroupDiffArm2 = false + }); + } await _visitTaskRepository.SaveChangesAsync(); } } + } - - /// /// 计算返回的结果 为True表示不相等 ///