From 16d651d0c7a8778521497992e18045a8ad50a12b Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 26 Aug 2022 09:49:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingImageTaskViewModel.cs | 59 ++++++++ .../Reading/ReadingImageTaskService.cs | 141 +++++++++++++++++- .../Service/Reading/_MapConfig.cs | 8 + IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 5 + .../Reading/ReadingTableQuestionAnswer.cs | 8 +- 5 files changed, 217 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 681a8bd9f..1066b0e33 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -8,6 +8,65 @@ using System.Threading.Tasks; namespace IRaCIS.Core.Application.Service.Reading.Dto { + #region 阅片问题 + + + public class GetReadingQuestionAndAnswerOutDto + { + public List SinglePage { get; set; } + + public List MultiPage { get; set; } + + public List PublicPage { get; set; } + } + + public class TrialReadQuestionData : ReadingQuestionTrial + { + + public bool IsPage { get; set; } = false; + + public string Answer { get; set; } + + /// + /// 分页名称 + /// + public string PageName { get; set; } + + /// + /// 是否公共分页 + /// + public bool? IsPublicPage { get; set; } = false; + + public int PageShowOrder { get; set; } + + public List Childrens { get; set; } + + public TrialReadTableQuestion TableQuestions { get; set; } + + + } + + public class ReadingTableQuestionAnswerInfo : ReadingTableQuestionAnswer + { + public int ShowOrder { get; set; } + } + + public class TrialReadTableQuestion + { + public List Questions { get; set; } + + public List> Answers { get; set; } + } + + public class GetReadingQuestionAndAnswerInDto + { + + public Guid TrialId { get; set; } + + public Guid VisitTaskId { get; set; } + } + + #endregion public class GetHistoryGlobalInfoOutDto { public Guid VisitTaskId { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs index 46aaa69a3..ad1e62a54 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs @@ -107,7 +107,7 @@ namespace IRaCIS.Application.Services // var readingTrialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == inDto.TrialId && x.IsConfirm).FirstNotNullAsync(); // List qusetionList = await GetReadingAnswerView(readingTrialCriterion.Id, inDto.VisitTaskId); - + // var groupList = qusetionList.Where(x => x.Type == "group" || (x.ParentId == null && x.GroupName.IsNullOrEmpty())).ToList(); // groupList.ForEach(x => @@ -121,6 +121,143 @@ namespace IRaCIS.Application.Services //} + /// + /// 获取表格问题及答案(2022-08-26) + /// + /// + /// + [HttpPost] + public async Task<(GetReadingQuestionAndAnswerOutDto,object)> GetReadingQuestionAndAnswer(GetReadingQuestionAndAnswerInDto inDto) + { + + var readingTaskState = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.ReadingTaskState).FirstOrDefaultAsync(); + var criterion = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == inDto.TrialId && x.IsConfirm).FirstNotNullAsync(); + + + var result = new GetReadingQuestionAndAnswerOutDto(); + + #region 获取问题及答案 + + var qusetionList = await _readingQuestionTrialRepository.Where(x=>x.ReadingQuestionCriterionTrialId== criterion.Id) + .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync(); + + var answers = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ToListAsync(); + + qusetionList.ForEach(x => + { + x.Answer = answers.Where(y => y.ReadingQuestionTrialId == x.Id).Select(x => x.Answer).FirstOrDefault() ?? string.Empty; + }); + + + + #endregion + + var formType = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == criterion.Id).Select(x => x.FormType).FirstOrDefaultAsync(); + var groupList = new List(); + + var qusetionIds = qusetionList.Select(x => x.Id).ToList(); + var tableQuestionList = await _readingTableQuestionTrialRepository.Where(x => qusetionIds.Contains(x.ReadingQuestionId)) + .OrderBy(x => x.ShowOrder).ToListAsync(); + + + var tableAnswers = await _readingTableQuestionAnswerRepository + .ProjectTo(_mapper.ConfigurationProvider) + .Where(x => x.TaskId == inDto.VisitTaskId).ToListAsync(); + + + if (formType == FormType.MultiplePage) + { + qusetionList = qusetionList.Where(x => x.ReadingCriterionPageId != null).ToList(); + var readingCriterionPageIds = qusetionList.OrderBy(x => x.PageShowOrder).Select(x => x.ReadingCriterionPageId).Distinct().ToList(); + foreach (var item in readingCriterionPageIds) + { + var newPageQusetionList = qusetionList.Where(x => x.ReadingCriterionPageId == item).ToList(); + var firstData = newPageQusetionList.FirstOrDefault(); + var page = new TrialReadQuestionData() + { + PageName = firstData.PageName, + IsPage = true, + IsPublicPage = firstData.IsPublicPage, + }; + + var pageGroupList = newPageQusetionList.Where(x => x.Type == "group" || (x.ParentId == null && x.GroupName.IsNullOrEmpty())).ToList(); + pageGroupList.ForEach(x => + { + this.FindChildQuestion(x, newPageQusetionList, tableQuestionList, tableAnswers); + }); + + page.Childrens = pageGroupList.Where(x => !(x.Type == "group" && x.Childrens.Count() == 0)).ToList(); + groupList.Add(page); + } + + result.PublicPage = groupList.Where(x => x.IsPublicPage.Value).ToList(); + result.MultiPage = groupList.Where(x => !x.IsPublicPage.Value).ToList(); + } + else + { + qusetionList = qusetionList.Where(x => x.ReadingCriterionPageId == null).ToList(); + + groupList = qusetionList.Where(x => x.Type == "group" || (x.ParentId == null && x.GroupName.IsNullOrEmpty())).ToList(); + groupList.ForEach(x => + { + this.FindChildQuestion(x, qusetionList, tableQuestionList, tableAnswers); + }); + + groupList = groupList.Where(x => !(x.Type == "group" && x.Childrens.Count() == 0)).ToList(); + + result.SinglePage = groupList; + + + } + + + return (result, new + { + readingTaskState = readingTaskState, + FormType = formType + + }); ; + } + + + /// + /// 获取子元素 + /// + /// + /// + /// + public void FindChildQuestion(TrialReadQuestionData item, List questionlists, List tableQuestionLists,List tableAnswers) + { + item.Childrens = questionlists.Where(x => x.ParentId == item.Id || (item.Type == "group" && x.Type != "group" && x.ParentId == null && x.GroupName == item.GroupName)).ToList(); + item.TableQuestions = new TrialReadTableQuestion(); + + item.TableQuestions.Questions = tableQuestionLists.Where(x => x.ReadingQuestionId == item.Id).OrderBy(x=>x.ShowOrder).ToList(); + var thisAnswer = tableAnswers.Where(x => x.QuestionId == item.Id).ToList(); + var orders = thisAnswer.Select(x => x.RowIndex).Distinct().OrderBy(x => x).ToList(); + item.TableQuestions.Answers = new List>(); + orders.ForEach(x => + { + Dictionary answers = new Dictionary(); + var rowAnswer = thisAnswer.Where(y => y.RowIndex == x).OrderBy(y => y.ShowOrder).ToList(); + rowAnswer.ForEach(z => + { + + answers.Add(z.TableQuestionId, z.Answer); + }); + + item.TableQuestions.Answers.Add(answers); + }); + + if (item.Childrens != null && item.Childrens.Count != 0) + { + item.Childrens.ForEach(x => + { + this.FindChildQuestion(x, questionlists, tableQuestionLists, tableAnswers); + }); + } + } + + /// /// 获取关联的阅片任务 /// @@ -807,7 +944,7 @@ namespace IRaCIS.Application.Services readingTaskState = readingTaskState, FormType = formType - }); ; + }); } /// diff --git a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs index f2fa73d37..c409f8c49 100644 --- a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs @@ -51,6 +51,14 @@ namespace IRaCIS.Core.Application.Service #region 阅片问题 + + CreateMap() + .ForMember(d => d.ShowOrder, u => u.MapFrom(s => s.ReadingQuestionTrial.ShowOrder)); + + CreateMap() + .ForMember(d => d.PageShowOrder, u => u.MapFrom(s => s.ReadingCriterionPage.ShowOrder)) + .ForMember(d => d.PageName, u => u.MapFrom(s => s.ReadingCriterionPage.PageName)) + .ForMember(d => d.IsPublicPage, u => u.MapFrom(s => s.ReadingCriterionPage.IsPublicPage)); CreateMap(); CreateMap(); diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index c91b05303..522f1966c 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -241,6 +241,11 @@ namespace IRaCIS.Core.Domain.Share /// 是否淋巴结 /// IsLymph = 2, + + /// + /// 自增Id + /// + AutoId=3, } public enum QuestionType diff --git a/IRaCIS.Core.Domain/Reading/ReadingTableQuestionAnswer.cs b/IRaCIS.Core.Domain/Reading/ReadingTableQuestionAnswer.cs index 96d2843ab..531d911e1 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingTableQuestionAnswer.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingTableQuestionAnswer.cs @@ -55,8 +55,12 @@ namespace IRaCIS.Core.Domain.Models /// 创建人 /// public Guid CreateUserId { get; set; } - - } + + [ForeignKey("QuestionId")] + + public ReadingQuestionTrial ReadingQuestionTrial { get; set; } + + } }