From fa0f04c808d0ea489fa92da55a5ca4f9d4d8c0c8 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 22 Jun 2022 10:48:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interface/IVisitTaskHelpeService.cs | 4 + .../Allocation/VisitTaskHelpeService.cs | 2 +- .../Reading/Dto/ReadingImageTaskViewModel.cs | 9 +- .../Reading/ReadingImageTaskService.cs | 114 ++++++++++++++---- 4 files changed, 103 insertions(+), 26 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/Interface/IVisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/Interface/IVisitTaskHelpeService.cs index 73e4aa747..73e891112 100644 --- a/IRaCIS.Core.Application/Service/Allocation/Interface/IVisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/Interface/IVisitTaskHelpeService.cs @@ -5,10 +5,14 @@ //-------------------------------------------------------------------- +using IRaCIS.Core.Application.ViewModel; + namespace IRaCIS.Core.Application.Service { public interface IVisitTaskHelpeService { Task GenerateVisitTaskAsync(Guid trialId, List subjectVisitIdList, bool isAssignSubjectToDoctor = false); + + Task AddTaskAsync(GenerateTaskCommand generateTaskCommand); } } \ No newline at end of file diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs index e8eb61fb9..de98b9b3b 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs @@ -294,7 +294,7 @@ namespace IRaCIS.Core.Application.Service SubjectId = firstTask.SubjectId, ReadingTaskState = ReadingTaskState.WaitReading, - TaskName = firstTask.TaskName + "AD", + TaskName = firstTask.TaskName, ReadingCategory = ReadingCategory.Judge, TrialId = firstTask.TrialId, diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 886233c8c..432654d04 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -80,7 +80,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string TypeValue { get; set; } - public List AnswerGroup { get; set; } + public List AnswerGroup { get; set; } } @@ -153,6 +153,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto } + public class AnswerGroupDto + { + public List AnswerGroupA { get; set; } + + public List AnswerGroupB { get; set; } + } + public class TaskAnswerDto { public Guid VisitTaskId { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs index f817c9368..57a822a1f 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs @@ -15,6 +15,8 @@ using AutoMapper; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Infrastructure; using Newtonsoft.Json; +using IRaCIS.Core.Application.Service; +using IRaCIS.Core.Application.ViewModel; namespace IRaCIS.Application.Services { @@ -27,15 +29,18 @@ namespace IRaCIS.Application.Services private readonly IMapper mapper; private readonly IRepository _noneDicomStudyRepository; private readonly IRepository _visitTaskRepository; + private readonly IVisitTaskHelpeService _visitTaskHelpeService; private readonly IRepository _subjectVisitRepository; private readonly IRepository _readingTaskQuestionAnswerRepository; private readonly IRepository _readingQuestionCriterionTrialRepository; private readonly IRepository _readingQuestionTrialRepository; + public ReadingImageTaskService( IMapper mapper, IRepository noneDicomStudyRepository, IRepository visitTaskRepository, + IVisitTaskHelpeService visitTaskHelpeService, IRepository subjectVisitRepository, IRepository readingTaskQuestionAnswerRepository, IRepository readingQuestionCriterionTrialRepository, @@ -45,6 +50,7 @@ namespace IRaCIS.Application.Services this.mapper = mapper; this._noneDicomStudyRepository = noneDicomStudyRepository; this._visitTaskRepository = visitTaskRepository; + this._visitTaskHelpeService = visitTaskHelpeService; this._subjectVisitRepository = subjectVisitRepository; this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository; this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository; @@ -170,7 +176,7 @@ namespace IRaCIS.Application.Services var result = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == inDto.ReadingQuestionCriterionTrialId && x.IsJudgeQuestion) .Select(x => new GetTrialCriterionJudgeQuestionListOutDto() { - AnswerGroup = JsonConvert.DeserializeObject>(x.AnswerGroup.IsNullOrEmpty()?"[]": x.AnswerGroup), + AnswerGroup = JsonConvert.DeserializeObject>(x.AnswerGroup.IsNullOrEmpty()?"[]": x.AnswerGroup), QuestionName = x.QuestionName, TypeValue =x.TypeValue, ReadingQuestionTrialId = x.Id @@ -301,17 +307,92 @@ namespace IRaCIS.Application.Services ReadingTaskState = ReadingTaskState.HaveSigned }); var result = await _visitTaskRepository.SaveChangesAsync(); - await this.TriggerJudgeQuestion(inDto.VisitTaskId); + await this.TriggerJudgeQuestionNew(inDto.VisitTaskId); return ResponseOutput.Ok(result); } /// - /// 触发裁判任务 + /// 添加阅片期任务 + /// + /// + private async Task AddReadingTask(Guid VisitTaskId) + { + + } + + /// + /// 触发裁判任务(新) /// /// /// - private async Task TriggerJudgeQuestion(Guid VisitTaskId) + private async Task TriggerJudgeQuestionNew(Guid VisitTaskId) + { + var visitTask = await _visitTaskRepository.Where(x => x.Id == VisitTaskId).FirstOrDefaultAsync(); + var visitTaskids = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.SourceSubjectVisitId == visitTask.SourceSubjectVisitId && x.SouceReadModuleId == visitTask.SouceReadModuleId).Select(x => x.Id).ToListAsync(); + if (visitTaskids.Count == 2) + { + 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, + QuestionId = question.Id, + VisitTaskId = questionAnswet.VisitTaskId, + }; + var questionAnswerlist = await query.ToListAsync(); + List groupTasks = questionAnswerlist.GroupBy(x => new { x.QuestionId, x.AnswerGroup }).Select(x => new GroupTaskAnswerDto + { + QuestionId = x.Key.QuestionId, + AnswerGroup = x.Key.AnswerGroup, + TaskAnswerList = x.ToList(), + }).ToList(); + var verificationResults = false; + foreach (var item in groupTasks) + { + if (item.TaskAnswerList.Count() != 2) + { + verificationResults = true; + break; + } + else + { + var taskAnswer1 = item.TaskAnswerList[0]; + var taskAnswer2 = item.TaskAnswerList[1]; + if (taskAnswer1.Answer != taskAnswer2.Answer) + { + var answerGroup = JsonConvert.DeserializeObject>(item.AnswerGroup==string.Empty?"[]": item.AnswerGroup).ToList(); + answerGroup.ForEach(x => + { + if (x.AnswerGroupA.Contains(taskAnswer1.Answer) && x.AnswerGroupB.Contains(taskAnswer2.Answer)) + { + verificationResults = true; + } + if (x.AnswerGroupB.Contains(taskAnswer1.Answer) && x.AnswerGroupA.Contains(taskAnswer2.Answer)) + { + verificationResults = true; + } + }); + } + } + } + if (verificationResults) + { + await this.SaveJudgeTask(new SaveJudgeTaskDto() + { + VisitTaskIds = visitTaskids, + }); + } + } + } + + /// + /// 触发裁判任务(老) + /// + /// + /// + private async Task TriggerJudgeQuestionOld(Guid VisitTaskId) { var visitTask = await _visitTaskRepository.Where(x => x.Id == VisitTaskId).FirstOrDefaultAsync(); var visitTaskids = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.SourceSubjectVisitId == visitTask.SourceSubjectVisitId && x.SouceReadModuleId == visitTask.SouceReadModuleId).Select(x => x.Id).ToListAsync(); @@ -379,29 +460,14 @@ namespace IRaCIS.Application.Services /// private async Task SaveJudgeTask(SaveJudgeTaskDto inDto) { - var firstTask = await _visitTaskRepository.Where(x => inDto.VisitTaskIds.Contains(x.Id)).FirstOrDefaultAsync(); + var trialId = await _visitTaskRepository.Where(x => inDto.VisitTaskIds.Contains(x.Id)).Select(x => x.TrialId).FirstOrDefaultAsync(); - VisitTask visitTask = new VisitTask() + await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() { - Id = NewId.NextGuid(), - ArmEnum = Arm.JudgeArm, - SouceReadModuleId = firstTask.SouceReadModuleId, - SourceSubjectVisitId = firstTask.SourceSubjectVisitId, - SubjectId = firstTask.SubjectId, - ReadingTaskState = ReadingTaskState.WaitReading, - TaskName = firstTask.TaskName + " AD", - ReadingCategory = ReadingCategory.Judge, - TrialId = firstTask.TrialId, - }; - - await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => inDto.VisitTaskIds.Contains(x.Id), x => new VisitTask() - { - JudgeVisitTaskId = visitTask.Id + JudgeVisitTaskIdList= inDto.VisitTaskIds, + ReadingCategory= ReadingCategory.Judge, + TrialId= trialId }); - - await _visitTaskRepository.AddAsync(visitTask); - - await _visitTaskRepository.SaveChangesAsync(); } }