From e8b4b71499742e4f961335243672caaf837da291 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 15 Dec 2022 15:23:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BF=E8=A7=86=E5=85=A8=E5=B1=80=E9=98=85?= =?UTF-8?q?=E7=89=87=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 | 13 + .../ReadingJudgeTaskService.cs | 235 ++++++++++++++---- 2 files changed, 204 insertions(+), 44 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index c70457f9e..00cf33a14 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -1307,6 +1307,16 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public List JudgeQuestionList { get; set; } } + public class GlobalVisitJudgeQuestion : JudgeQuestion + { + public Guid VisitTaskId { get; set; } + + /// + /// 排序 + /// + public int ShowOrder { get; set; } + } + public class JudgeQuestion { public Guid QuestionId { get; set; } @@ -1314,6 +1324,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string QuestionName { get; set; } + + /// /// 问题类型 @@ -1522,6 +1534,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid QuestionId { get; set; } + public decimal VisitTaskNum { get; set; } public string Answer { get; set; } public string AnswerGroup { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 6b6ff2cdc..15459ff41 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -117,32 +117,106 @@ namespace IRaCIS.Application.Services switch (taskList[0].ReadingCategory) { case ReadingCategory.Visit: - JudgeReadingInfoDto judgeReadingInfoDto = new JudgeReadingInfoDto() - { - VisitId = taskList[0].SourceSubjectVisitId.Value, - VisitName = taskList[0].TaskBlindName, - VisitTaskInfoList = new List(), - }; - foreach (var item in taskList) + // 判断是否是全局访视任务 + if (await VerifyIsGlobalVisitTask(taskList[0].Id)) { - judgeReadingInfoDto.VisitTaskInfoList.Add(new JudgeReadingQuestion() - { - ArmEnum = item.ArmEnum, - VisitTaskId = item.Id, - JudgeQuestionList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == item.Id && x.ReadingQuestionTrial.IsJudgeQuestion).OrderBy(x => x.ReadingQuestionTrial.ShowOrder) - .Select(x => new JudgeQuestion() - { - Answer = x.Answer, - QuestionId = x.ReadingQuestionTrial.Id, - QuestionName = x.ReadingQuestionTrial.QuestionName, - QuestionGenre=x.ReadingQuestionTrial.QuestionGenre, - DictionaryCode=x.ReadingQuestionTrial.DictionaryCode, + + // 找到所有的的任务 + var globalVisitTasks = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReadingCategory != ReadingCategory.Judge + && x.TaskState == TaskState.Effect + && x.TrialReadingCriterionId == taskList[0].TrialReadingCriterionId + && x.IsAnalysisCreate == false + && x.ReadingCategory == ReadingCategory.Visit && x.VisitTaskNum <= taskList[0].VisitTaskNum).Select(x => new { + x.Id, + x.ArmEnum, + x.VisitTaskNum, + x.SourceSubjectVisitId, + x.TaskBlindName, + } ).ToListAsync(); + + var globalVisitTaskIds = globalVisitTasks.Select(x => x.Id).ToList(); + + var taskNum = globalVisitTasks.Select(x => x.VisitTaskNum).Distinct().OrderBy(x=>x).ToList(); + + + var judgeQuestionAnswer = await _readingTaskQuestionAnswerRepository.Where(x => globalVisitTaskIds.Contains(x.VisitTaskId) && x.ReadingQuestionTrial.IsJudgeQuestion).OrderBy(x => x.ReadingQuestionTrial.ShowOrder) + .Select(x => new GlobalVisitJudgeQuestion() + { + Answer = x.Answer, + ShowOrder = x.ReadingQuestionTrial.ShowOrder, + VisitTaskId = x.VisitTaskId, + QuestionId = x.ReadingQuestionTrial.Id, + QuestionName = x.ReadingQuestionTrial.QuestionName, + QuestionGenre = x.ReadingQuestionTrial.QuestionGenre, + DictionaryCode = x.ReadingQuestionTrial.DictionaryCode, + + }).ToListAsync(); + + foreach (var item in taskNum) + { + var globalTaskInfos = globalVisitTasks.Where(x => x.VisitTaskNum == item).OrderBy(x => x.ArmEnum).ToList(); + + JudgeReadingInfoDto judgeReadingInfoDto = new JudgeReadingInfoDto() + { + VisitId = globalTaskInfos[0].SourceSubjectVisitId.Value, + VisitName = globalTaskInfos[0].TaskBlindName, + VisitTaskInfoList = new List(), + }; + + foreach (var globalitem in globalTaskInfos) + { + judgeReadingInfoDto.VisitTaskInfoList.Add(new JudgeReadingQuestion() + { + ArmEnum = globalitem.ArmEnum, + VisitTaskId = globalitem.Id, + JudgeQuestionList = judgeQuestionAnswer.Where(x => x.VisitTaskId == globalitem.Id).OrderBy(x => x.ShowOrder) + .Select(x => new JudgeQuestion() + { + Answer = x.Answer, + QuestionId = x.QuestionId, + QuestionName = x.QuestionName, + QuestionGenre = x.QuestionGenre, + DictionaryCode = x.DictionaryCode, + + }).ToList(), + }); + } + judgeInfo.VisitInfoList.Add(judgeReadingInfoDto); + } - }).ToListAsync(), - }); } - judgeInfo.VisitInfoList.Add(judgeReadingInfoDto); + else + { + JudgeReadingInfoDto judgeReadingInfoDto = new JudgeReadingInfoDto() + { + VisitId = taskList[0].SourceSubjectVisitId.Value, + VisitName = taskList[0].TaskBlindName, + VisitTaskInfoList = new List(), + }; + + foreach (var item in taskList) + { + judgeReadingInfoDto.VisitTaskInfoList.Add(new JudgeReadingQuestion() + { + ArmEnum = item.ArmEnum, + VisitTaskId = item.Id, + JudgeQuestionList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == item.Id && x.ReadingQuestionTrial.IsJudgeQuestion).OrderBy(x => x.ReadingQuestionTrial.ShowOrder) + .Select(x => new JudgeQuestion() + { + Answer = x.Answer, + QuestionId = x.ReadingQuestionTrial.Id, + QuestionName = x.ReadingQuestionTrial.QuestionName, + QuestionGenre = x.ReadingQuestionTrial.QuestionGenre, + DictionaryCode = x.ReadingQuestionTrial.DictionaryCode, + + }).ToListAsync(), + }); + } + judgeInfo.VisitInfoList.Add(judgeReadingInfoDto); + } + + break; case ReadingCategory.Global: @@ -318,6 +392,35 @@ namespace IRaCIS.Application.Services return ResponseOutput.Ok(result); } + /// + /// 判断任务是否是全局访视任务 + /// + /// + private async Task VerifyIsGlobalVisitTask(Guid visitTaskId) + { + // 任务 + var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync(); + + if (taskinfo.ReadingCategory != ReadingCategory.Visit) + { + return false; + } + + var criterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == taskinfo.TrialReadingCriterionId).FirstNotNullAsync(); + + var readModule = await _readModuleRepository.Where(x => x.SubjectVisitId == taskinfo.SourceSubjectVisitId && x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId).FirstOrDefaultAsync(); + + if (criterion.IsGlobalReading && !criterion.IsGlobalTask && readModule != null) + { + return true; + } + else + { + return false; + } + + } + /// /// 触发裁判任务(新) /// @@ -369,29 +472,73 @@ namespace IRaCIS.Application.Services // 判断是单访视裁判还是全局访视裁判 // 查找两个 访视的阅片答案 - 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 } - select new TaskAnswerDto() - { - Answer = questionAnswet.Answer, - AnswerGroup = question.AnswerGroup, - AnswerCombination = question.AnswerCombination, - JudgeType = question.JudgeType, - QuestionId = question.Id, - VisitTaskId = questionAnswet.VisitTaskId, - }; - var questionAnswerlist = await query.ToListAsync(); - - // 将答案进行分组 - List groupTasks = questionAnswerlist.GroupBy(x => new { x.QuestionId, x.AnswerGroup, x.JudgeType, x.AnswerCombination }).Select(x => new GroupTaskAnswerDto + if (await VerifyIsGlobalVisitTask(visitTaskId)) { - QuestionId = x.Key.QuestionId, - AnswerGroup = x.Key.AnswerGroup, - AnswerCombination = x.Key.AnswerCombination, - JudgeType = x.Key.JudgeType, - TaskAnswerList = x.Select(y => y.Answer).ToList(), - }).ToList(); - noteEqual = ComputeJudgeResult(groupTasks); + // 找到所有的的任务 + var GlobalVisitTaskIds = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReadingCategory != ReadingCategory.Judge + && x.TaskState == TaskState.Effect + && x.TrialReadingCriterionId == visitTask.TrialReadingCriterionId + && x.IsAnalysisCreate == false + && x.ReadingCategory == ReadingCategory.Visit && x.VisitTaskNum <= visitTask.VisitTaskNum).Select(x => x.Id).ToListAsync(); + + + var globalVisitQuestionQuery = from questionAnswer in _readingTaskQuestionAnswerRepository.Where(x => GlobalVisitTaskIds.Contains(x.VisitTaskId)) + 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, + Answer = questionAnswer.Answer, + AnswerGroup = question.AnswerGroup, + AnswerCombination = question.AnswerCombination, + JudgeType = question.JudgeType, + QuestionId = question.Id, + VisitTaskId = questionAnswer.VisitTaskId, + }; + var globalVisitAnswerlist = await globalVisitQuestionQuery.ToListAsync(); + + var taskNums = globalVisitAnswerlist.Select(x => x.VisitTaskNum).Distinct().OrderBy(x => x).ToList(); + + 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 + { + QuestionId = x.Key.QuestionId, + AnswerGroup = x.Key.AnswerGroup, + AnswerCombination = x.Key.AnswerCombination, + JudgeType = x.Key.JudgeType, + TaskAnswerList = x.Select(y => y.Answer).ToList(), + }).ToList(); + noteEqual = noteEqual || ComputeJudgeResult(groupTasks); + } + + } + else + { + 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 } + select new TaskAnswerDto() + { + Answer = questionAnswet.Answer, + AnswerGroup = question.AnswerGroup, + AnswerCombination = question.AnswerCombination, + JudgeType = question.JudgeType, + QuestionId = question.Id, + VisitTaskId = questionAnswet.VisitTaskId, + }; + var questionAnswerlist = await query.ToListAsync(); + + // 将答案进行分组 + List groupTasks = questionAnswerlist.GroupBy(x => new { x.QuestionId, x.AnswerGroup, x.JudgeType, x.AnswerCombination }).Select(x => new GroupTaskAnswerDto + { + QuestionId = x.Key.QuestionId, + AnswerGroup = x.Key.AnswerGroup, + AnswerCombination = x.Key.AnswerCombination, + JudgeType = x.Key.JudgeType, + TaskAnswerList = x.Select(y => y.Answer).ToList(), + }).ToList(); + noteEqual = ComputeJudgeResult(groupTasks); + } + break; case ReadingCategory.Global: var taskOneInfo = await this.GetGlobalReadingInfo(new GetGlobalReadingInfoInDto()