diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index dafdfcee2..5690e70ac 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -69,18 +69,30 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto [NotDefault] - public List AnswerGroup { get; set; } + public List AnswerGroup { get; set; } + + [NotDefault] + public List AnswerCombination { get; set; } + + + [NotDefault] + public JudgeTypeEnum JudgeType { get; set; } } public class GetTrialCriterionJudgeQuestionListOutDto { public Guid ReadingQuestionTrialId { get; set; } - + public string QuestionName { get; set; } public string TypeValue { get; set; } - public List AnswerGroup { get; set; } + public JudgeTypeEnum JudgeType { get; set; } + + public List AnswerGroup { get; set; } + + + public List AnswerCombination { get; set; } } @@ -112,6 +124,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid ReadingQuestionCriterionTrialId { get; set; } public List AnswerList { get; set; } = new List(); + + public JudgeTypeEnum JudgeType { get; set; } } public class SaveJudgeTaskDto @@ -142,6 +156,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string AnswerGroup { get; set; } + + public string AnswerCombination { get; set; } + + public JudgeTypeEnum JudgeType { get; set; } + public List TaskAnswerList { get; set; } } @@ -153,7 +172,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto } - public class AnswerGroupDto + public class AnswerCombinationDto { public List AnswerGroupA { get; set; } @@ -169,6 +188,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string Answer { get; set; } public string AnswerGroup { get; set; } + + public string AnswerCombination { get; set; } + + public JudgeTypeEnum JudgeType { get; set; } } public class GetTrialReadingQuestionOutDto diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs index cceb61e16..6b1ececd7 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs @@ -180,9 +180,11 @@ 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), + AnswerCombination = JsonConvert.DeserializeObject>(x.AnswerCombination.IsNullOrEmpty() ? "[]" : x.AnswerCombination), QuestionName = x.QuestionName, TypeValue =x.TypeValue, + JudgeType=x.JudgeType, ReadingQuestionTrialId = x.Id }).ToListAsync(); return result; @@ -198,7 +200,9 @@ namespace IRaCIS.Application.Services { await _readingQuestionTrialRepository.UpdatePartialFromQueryAsync(inDto.ReadingQuestionTrialId, x => new ReadingQuestionTrial() { - AnswerGroup = JsonConvert.SerializeObject(inDto.AnswerGroup) + AnswerGroup = JsonConvert.SerializeObject(inDto.AnswerCombination), + AnswerCombination = JsonConvert.SerializeObject(inDto.AnswerCombination), + JudgeType= inDto.JudgeType, }) ; var result = await _readingQuestionTrialRepository.SaveChangesAsync(); @@ -236,9 +240,6 @@ namespace IRaCIS.Application.Services }; var qusetionList =await query.OrderBy(x=>x.ShowOrder).ToListAsync(); - - - List groupList = qusetionList.Where(x => x.ParentId == null).ToList(); groupList.ForEach(x => { @@ -312,7 +313,7 @@ namespace IRaCIS.Application.Services }); var result = await _visitTaskRepository.SaveChangesAsync(); // 触裁判任务 - await this.TriggerJudgeQuestionNew(inDto.VisitTaskId); + await this.TriggerJudgeQuestion(inDto.VisitTaskId); // 添加阅片期任务 await this.AddReadingTask(inDto.VisitTaskId); // 完成阅片修改状态 @@ -428,10 +429,10 @@ namespace IRaCIS.Application.Services /// /// /// - private async Task TriggerJudgeQuestionNew(Guid visitTaskId) + private async Task TriggerJudgeQuestion(Guid visitTaskId) { var visitTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstOrDefaultAsync(); - var visitTaskids = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned &&x.ReadingCategory!= ReadingCategory.Judge && x.SourceSubjectVisitId == visitTask.SourceSubjectVisitId && x.SouceReadModuleId == visitTask.SouceReadModuleId).Select(x => x.Id).ToListAsync(); + var visitTaskids = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned &&x.ReadingCategory!= ReadingCategory.Judge&&!x.IsReReading && 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)) @@ -440,22 +441,26 @@ namespace IRaCIS.Application.Services { 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 }).Select(x => new GroupTaskAnswerDto + 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.ToList(), }).ToList(); - var verificationResults = false; + var noteEqual = false; foreach (var item in groupTasks) { if (item.TaskAnswerList.Count() != 2) { - verificationResults = true; + noteEqual = true; break; } else @@ -464,22 +469,45 @@ namespace IRaCIS.Application.Services var taskAnswer2 = item.TaskAnswerList[1]; if (taskAnswer1.Answer != taskAnswer2.Answer) { - var answerGroup = JsonConvert.DeserializeObject>(item.AnswerGroup==string.Empty?"[]": item.AnswerGroup).ToList(); - answerGroup.ForEach(x => + + switch (item.JudgeType) { - 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; - } - }); + case JudgeTypeEnum.AnswerDisaffinity: + noteEqual = true; + break; + case JudgeTypeEnum.AnswerGroup: + var answerGroupList = JsonConvert.DeserializeObject>(item.AnswerGroup).Select(x => new AnswerGroup() + { + GroupId = NewId.NextGuid(), + GroupValue = x + }).ToList(); + var itemAnswerGroupsitem1 = answerGroupList.Where(x => x.GroupValue.Contains($"|{taskAnswer1.Answer}|")); + var itemAnswerGroupsitem2 = answerGroupList.Where(x => x.GroupValue.Contains($"|{taskAnswer2.Answer}|")); + var unionList = itemAnswerGroupsitem1.Intersect(itemAnswerGroupsitem2).ToList(); + if (unionList.Count < 1) + { + noteEqual =true; + } + break; + case JudgeTypeEnum.AnswerCombination: + var answerCombinationList = JsonConvert.DeserializeObject>(item.AnswerCombination == string.Empty ? "[]" : item.AnswerCombination).ToList(); + answerCombinationList.ForEach(x => + { + if (x.AnswerGroupA.Contains(taskAnswer1.Answer) && x.AnswerGroupB.Contains(taskAnswer2.Answer)) + { + noteEqual = true; + } + if (x.AnswerGroupB.Contains(taskAnswer1.Answer) && x.AnswerGroupA.Contains(taskAnswer2.Answer)) + { + noteEqual = true; + } + }); + break; + } } } } - if (verificationResults) + if (noteEqual) { await this.SaveJudgeTask(new SaveJudgeTaskDto() { diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 94ef14367..12792c7cf 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -163,6 +163,28 @@ namespace IRaCIS.Core.Domain.Share Read = 2, } + public enum JudgeTypeEnum + { + None=0, + + /// + /// 答案不相同 + /// + AnswerDisaffinity=1, + + /// + /// 答案分组 + /// + AnswerGroup=2, + + /// + /// 答案组合 + /// + AnswerCombination=3, + + + } + /// /// 阅片状态 /// diff --git a/IRaCIS.Core.Domain/Reading/ReadingQuestionTrial.cs b/IRaCIS.Core.Domain/Reading/ReadingQuestionTrial.cs index 79b1efaff..26b4ddc41 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingQuestionTrial.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingQuestionTrial.cs @@ -92,6 +92,16 @@ namespace IRaCIS.Core.Domain.Models /// public string AnswerGroup { get; set; } = string.Empty; + /// + /// 答案组合 + /// + public string AnswerCombination { get; set; } = string.Empty; + + /// + /// 裁判类型 + /// + public JudgeTypeEnum JudgeType { get; set; } + /// /// 创建人 ///