From 54bd7795bea5619a58610f2a9a1880e0281c1d83 Mon Sep 17 00:00:00 2001 From: "DESKTOP-G961P6V\\Zhh" <839860190@qq.com> Date: Sun, 16 Jun 2024 01:51:48 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E7=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../QuestionRegisters/PersonSubjectTypeDto.cs | 13 +- .../QuestionRegisterDiseaseRiskDto.cs | 27 +++ .../QuestionRegisterItemResultDto.cs | 37 ++++ .../QuestionRegisterAppService.cs | 209 ++++++++++++++++-- .../Models/DiseaseRiskLevel.cs | 6 +- .../Models/DiseaseRiskLevelAnswer.cs | 3 +- .../EntityFrameworkCore/WebPeisDbContext.cs | 2 + .../QuestionRegisterAppServiceTest.cs | 26 +++ 8 files changed, 300 insertions(+), 23 deletions(-) create mode 100644 src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterDiseaseRiskDto.cs create mode 100644 src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemResultDto.cs diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonSubjectTypeDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonSubjectTypeDto.cs index 89542ee..5af3cd0 100644 --- a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonSubjectTypeDto.cs +++ b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonSubjectTypeDto.cs @@ -15,8 +15,13 @@ namespace Shentun.WebPeis.QuestionRegisters /// public string QuestionSubjectTypeName { get; set; } = null!; - + /// + /// 显示顺序 + /// public int DisplayOrder { get; set; } + /// + /// 答案集合 + /// public List Answers { get; set; } = new List(); @@ -24,7 +29,13 @@ namespace Shentun.WebPeis.QuestionRegisters public class PersonSubjectTypeQuestionAnswer { + /// + /// 答案 + /// public string QuestionAnswerName { get; set; } + /// + /// 显示顺序 + /// public int DisplayOrder { get; set; } } } diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterDiseaseRiskDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterDiseaseRiskDto.cs new file mode 100644 index 0000000..810dd1d --- /dev/null +++ b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterDiseaseRiskDto.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.WebPeis.QuestionRegisters +{ + public class QuestionRegisterDiseaseRiskDto + { + /// + /// 主键 + /// + public Guid DiseaseRiskId { get; set; } + /// + /// 名称 + /// + + public string DiseaseRiskName { get; set; } = null!; + + /// + /// 显示顺序 + /// + + public int DisplayOrder { get; set; } + + public string DiseaseRiskLevelName { get; set; } + } +} diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemResultDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemResultDto.cs new file mode 100644 index 0000000..b0617c3 --- /dev/null +++ b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemResultDto.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.WebPeis.QuestionRegisters +{ + public class QuestionRegisterItemResultDto + { + /// + /// 主键 + /// + public Guid QuestionRegisterItemId { get; set; } + /// + /// 问卷ID + /// + public Guid QuestionId { get; set; } + /// + /// 题目 + /// + + public string QuestionName { get; set; } = null!; + + + /// + /// 显示顺序 + /// + public int DisplayOrder { get; set; } + + public List Answers { get; set; } = new List(); + } + + public class QuestionRegisterItemResultAnswer + { + public string Answer { get; set; } + public int DisplayOrder { get; set; } + } +} diff --git a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs index 15d620a..428157e 100644 --- a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs +++ b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs @@ -26,6 +26,9 @@ namespace Shentun.WebPeis.QuestionRegisters private readonly IRepository _questionRepository; private readonly IRepository _questionAnswerRepository; private readonly IRepository _questionSubjectTypeRepository; + private readonly IRepository _diseaseRiskRepository; + private readonly IRepository _diseaseRiskLevelRepository; + private readonly IRepository _diseaseRiskLevelAnswerRepository; private readonly QuestionRegisterManager _questionRegisterManager; private readonly IUnitOfWorkManager _unitOfWorkManager; public QuestionRegisterAppService(IRepository repository, @@ -35,7 +38,10 @@ namespace Shentun.WebPeis.QuestionRegisters IRepository questionAnswerRepository, QuestionRegisterManager questionRegisterManager, IUnitOfWorkManager unitOfWorkManager, - IRepository questionSubjectTypeRepository) + IRepository questionSubjectTypeRepository, + IRepository diseaseRiskRepository, + IRepository diseaseRiskLevelRepository, + IRepository diseaseRiskLevelAnswerRepository) { _repository = repository; _questionRegisterItemRepository = questionRegisterItemRepository; @@ -45,6 +51,9 @@ namespace Shentun.WebPeis.QuestionRegisters _questionRegisterManager = questionRegisterManager; _unitOfWorkManager = unitOfWorkManager; _questionSubjectTypeRepository = questionSubjectTypeRepository; + _diseaseRiskRepository = diseaseRiskRepository; + _diseaseRiskLevelRepository = diseaseRiskLevelRepository; + _diseaseRiskLevelAnswerRepository = diseaseRiskLevelAnswerRepository; } @@ -163,25 +172,28 @@ namespace Shentun.WebPeis.QuestionRegisters questionAnswer }).ToList(); - var personSubjectTypeDtos = questionRegisterItems.GroupBy(o=>o.questionSubjectType) - .Select(o=>new PersonSubjectTypeDto() - { - QuestionSubjectTypeId = o.Key.QuestionSubjectTypeId, - QuestionSubjectTypeName = o.Key.QuestionSubjectTypeName, - DisplayOrder = o.Key.DisplayOrder - }).ToList(); + var personSubjectTypeDtos = questionRegisterItems.GroupBy(o => o.questionSubjectType) + .Select(o => new PersonSubjectTypeDto() + { + QuestionSubjectTypeId = o.Key.QuestionSubjectTypeId, + QuestionSubjectTypeName = o.Key.QuestionSubjectTypeName, + DisplayOrder = o.Key.DisplayOrder + }).ToList(); foreach (var personSubjectTypeDto in personSubjectTypeDtos) { - var questionSubjectTypeItems = questionRegisterItems.Where(o => - o.questionSubjectType.QuestionSubjectTypeId == personSubjectTypeDto.QuestionSubjectTypeId - ) - .OrderBy(o=>o.questionAnswer.DisplayOrder).ToList(); - foreach(var questionRegisterItem in questionSubjectTypeItems) + var questionSubjectTypeItems = questionRegisterItems.Where(o => + o.questionSubjectType.QuestionSubjectTypeId == personSubjectTypeDto.QuestionSubjectTypeId) + .OrderBy(o => o.questionAnswer.DisplayOrder).ToList(); + foreach (var questionRegisterItem in questionSubjectTypeItems) { + if (questionRegisterItem.questionAnswer.IsNone == 'Y') + { + continue; + } string answer; - if(questionRegisterItem.questionAnswer.AnswerResultType == AnswerResultTypeFlag.Choice) + if (questionRegisterItem.questionAnswer.AnswerResultType == AnswerResultTypeFlag.Choice) { - if(string.IsNullOrWhiteSpace(questionRegisterItem.questionAnswer.Aliases)) + if (string.IsNullOrWhiteSpace(questionRegisterItem.questionAnswer.Aliases)) { answer = questionRegisterItem.questionAnswer.QuestionAnswerName; } @@ -194,7 +206,7 @@ namespace Shentun.WebPeis.QuestionRegisters { answer = questionRegisterItem.questionRegisterAnswer.Content; } - if(string.IsNullOrWhiteSpace(answer)) + if (string.IsNullOrWhiteSpace(answer)) { continue; } @@ -208,6 +220,163 @@ namespace Shentun.WebPeis.QuestionRegisters return personSubjectTypeDtos; } + + /// + /// + /// + /// + /// + [HttpPost("api/app/QuestionRegister/GetQuestionRegisterListByPersonId")] + public async Task> GetQuestionRegisterListByPersonIdAsync(PersonIdInputDto input) + { + var questionRegister = (await _repository.GetQueryableAsync()) + .Where(o => o.PersonId == input.PersonId) + .OrderByDescending(o => o.CreationTime) + .FirstOrDefault(); + if (questionRegister == null) + { + return null; + } + var questionRegisterItems = (from questionRegisterItem in await _questionRegisterItemRepository.GetQueryableAsync() + join questionRegisterAnswer in await _questionRegisterAnswerRrepository.GetQueryableAsync() + on questionRegisterItem.QuestionRegisterItemId equals questionRegisterAnswer.QuestionRegisterItemId + join questionAnswer in await _questionAnswerRepository.GetQueryableAsync() + on questionRegisterAnswer.QuestionAnswerId equals questionAnswer.QuestionAnswerId + join question in await _questionRepository.GetQueryableAsync() + on questionRegisterItem.QuestionId equals question.QuestionId + join questionSubjectType in await _questionSubjectTypeRepository.GetQueryableAsync() + on question.QuestionSubjectTypeId equals questionSubjectType.QuestionSubjectTypeId + where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId + orderby questionSubjectType.DisplayOrder, question.DisplayOrder + select new + { + questionSubjectType, + question, + questionRegisterItem, + questionRegisterAnswer, + questionAnswer + }).ToList(); + var questions = questionRegisterItems.GroupBy(o => o.question) + .Select(o => new QuestionRegisterItemResultDto() + { + QuestionId = o.Key.QuestionId, + QuestionName = o.Key.QuestionName, + DisplayOrder = o.Key.DisplayOrder + }).ToList(); + + foreach (var question in questions) + { + var questionAnswers = questionRegisterItems.Where(o => + o.question.QuestionId == question.QuestionId) + .OrderBy(o => o.questionAnswer.DisplayOrder).ToList(); + foreach (var questionRegisterItem in questionAnswers) + { + string answer; + if (questionRegisterItem.questionAnswer.AnswerResultType == AnswerResultTypeFlag.Choice) + { + if (string.IsNullOrWhiteSpace(questionRegisterItem.questionAnswer.Aliases)) + { + answer = questionRegisterItem.questionAnswer.QuestionAnswerName; + } + else + { + answer = questionRegisterItem.questionAnswer.Aliases; + } + } + else + { + answer = questionRegisterItem.questionRegisterAnswer.Content; + } + if (string.IsNullOrWhiteSpace(answer)) + { + continue; + } + question.Answers.Add(new QuestionRegisterItemResultAnswer() + { + Answer = answer, + DisplayOrder = questionRegisterItem.questionAnswer.DisplayOrder, + }); + } + } + + return questions; + } + + /// + /// + /// + /// + /// + [HttpPost("api/app/QuestionRegister/GetDiseaseRiskListByPersonId")] + public async Task> GetDiseaseRiskListByPersonIdAsync(PersonIdInputDto input) + { + var questionRegister = (await _repository.GetQueryableAsync()) + .Where(o => o.PersonId == input.PersonId) + .OrderByDescending(o => o.CreationTime) + .FirstOrDefault(); + + if (questionRegister == null) + { + return null; + } + + var questionRegisterItems = (from questionRegisterItem in await _questionRegisterItemRepository.GetQueryableAsync() + join questionRegisterAnswer in await _questionRegisterAnswerRrepository.GetQueryableAsync() + on questionRegisterItem.QuestionRegisterItemId equals questionRegisterAnswer.QuestionRegisterItemId + join questionAnswer in await _questionAnswerRepository.GetQueryableAsync() + on questionRegisterAnswer.QuestionAnswerId equals questionAnswer.QuestionAnswerId + join question in await _questionRepository.GetQueryableAsync() + on questionRegisterItem.QuestionId equals question.QuestionId + join questionSubjectType in await _questionSubjectTypeRepository.GetQueryableAsync() + on question.QuestionSubjectTypeId equals questionSubjectType.QuestionSubjectTypeId + where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId + orderby questionSubjectType.DisplayOrder, question.DisplayOrder + select new + { + questionSubjectType, + question, + questionRegisterItem, + questionRegisterAnswer, + questionAnswer + }).ToList(); + + var diseaseRisks = (from diseaseRisk in await _diseaseRiskRepository.GetQueryableAsync() + join diseaseRiskLevel in await _diseaseRiskLevelRepository.GetQueryableAsync() + on diseaseRisk.DiseaseRiskId equals diseaseRiskLevel.DiseaseRiskId into emptyDiseaseRiskLevel + from haveDiseaseRiskLevel in emptyDiseaseRiskLevel.DefaultIfEmpty() + join diseaseRiskLevelAnswer in await _diseaseRiskLevelAnswerRepository.GetQueryableAsync() + on haveDiseaseRiskLevel.DiseaseRiskLevelId equals diseaseRiskLevelAnswer.DiseaseRiskLevelId into emptyDiseaseRiskLevelAnswer + from haveDiseaseRiskLevelAnswer in emptyDiseaseRiskLevelAnswer.DefaultIfEmpty() + orderby diseaseRisk.DisplayOrder + select new + { + diseaseRisk, + haveDiseaseRiskLevel, + haveDiseaseRiskLevelAnswer + }).ToList(); + + var questionRegisterDiseaseRiskDtos = diseaseRisks.GroupBy(o => o.diseaseRisk) + .Select(o => new QuestionRegisterDiseaseRiskDto() + { + DiseaseRiskId = o.Key.DiseaseRiskId, + DiseaseRiskLevelName = o.Key.DiseaseRiskName, + DisplayOrder = o.Key.DisplayOrder + }).ToList(); + + foreach (var diseaseRisk in questionRegisterDiseaseRiskDtos) + { + var diseaseRiskLevels = diseaseRisks.Where(o=>o.diseaseRisk.DiseaseRiskId == diseaseRisk.DiseaseRiskId) + .OrderBy(o=>o.haveDiseaseRiskLevel.DisplayOrder).ToList(); + foreach(var diseaseRiskLevel in diseaseRiskLevels) + { + var cnt = questionRegisterItems.Where(o => o.questionRegisterAnswer.QuestionAnswerId == + diseaseRiskLevel.haveDiseaseRiskLevelAnswer.QuestionAnswerId).Count(); + + } + } + + return questionRegisterDiseaseRiskDtos; + } /// /// /// @@ -254,7 +423,7 @@ namespace Shentun.WebPeis.QuestionRegisters foreach (var childQuestionRegisterAnswer in questionRegisterAnswerDto.Childs) { - if(childQuestionRegisterAnswer.IsSelected == 'Y') + if (childQuestionRegisterAnswer.IsSelected == 'Y') { questionRegisterAnswer = new QuestionRegisterAnswer() { @@ -266,7 +435,7 @@ namespace Shentun.WebPeis.QuestionRegisters }; questionRegisterItem.QuestionRegisterAnswers.Add(questionRegisterAnswer); } - + } } @@ -330,7 +499,7 @@ namespace Shentun.WebPeis.QuestionRegisters QuestionId = questionRegisterItemDto.QuestionId, }; questionRegister.QuestionRegisterItems.Add(questionRegisterItem); - // await _questionRegisterItemRepository.InsertAsync(questionRegisterItem); + // await _questionRegisterItemRepository.InsertAsync(questionRegisterItem); } var questionRegisterAnswer = new QuestionRegisterAnswer() { @@ -356,7 +525,7 @@ namespace Shentun.WebPeis.QuestionRegisters }; questionRegisterItem.QuestionRegisterAnswers.Add(questionRegisterAnswer); } - + } } diff --git a/src/Shentun.WebPeis.Domain/Models/DiseaseRiskLevel.cs b/src/Shentun.WebPeis.Domain/Models/DiseaseRiskLevel.cs index 6e5a8cb..3a095b5 100644 --- a/src/Shentun.WebPeis.Domain/Models/DiseaseRiskLevel.cs +++ b/src/Shentun.WebPeis.Domain/Models/DiseaseRiskLevel.cs @@ -10,6 +10,10 @@ namespace Shentun.WebPeis.Models; /// public partial class DiseaseRiskLevel : AuditedEntity, IHasConcurrencyStamp, IDisplayOrder { + public DiseaseRiskLevel() + { + + } /// /// 风险级别ID /// @@ -45,7 +49,7 @@ public partial class DiseaseRiskLevel : AuditedEntity, IHasConcurrencyStamp, IDi public string? Suggestion { get; set; } - public string DiagnosisFunction { get; set; } + public string? DiagnosisFunction { get; set; } public virtual DiseaseRisk DiseaseRisk { get; set; } = null!; diff --git a/src/Shentun.WebPeis.Domain/Models/DiseaseRiskLevelAnswer.cs b/src/Shentun.WebPeis.Domain/Models/DiseaseRiskLevelAnswer.cs index 7bd4b5b..4e43403 100644 --- a/src/Shentun.WebPeis.Domain/Models/DiseaseRiskLevelAnswer.cs +++ b/src/Shentun.WebPeis.Domain/Models/DiseaseRiskLevelAnswer.cs @@ -13,11 +13,12 @@ namespace Shentun.WebPeis.Models /// public class DiseaseRiskLevelAnswer : Entity, IHasConcurrencyStamp { + //public DiseaseRiskLevelAnswer() { } public Guid DiseaseRiskLevelId { get; set; } public Guid QuestionAnswerId { get; set; } - public string ConcurrencyStamp { get; set; } + public string? ConcurrencyStamp { get; set; } public override object?[] GetKeys() { diff --git a/src/Shentun.WebPeis.EntityFrameworkCore/EntityFrameworkCore/WebPeisDbContext.cs b/src/Shentun.WebPeis.EntityFrameworkCore/EntityFrameworkCore/WebPeisDbContext.cs index b95b0b7..ce98e18 100644 --- a/src/Shentun.WebPeis.EntityFrameworkCore/EntityFrameworkCore/WebPeisDbContext.cs +++ b/src/Shentun.WebPeis.EntityFrameworkCore/EntityFrameworkCore/WebPeisDbContext.cs @@ -152,6 +152,8 @@ public partial class WebPeisDbContext : AbpDbContext, public virtual DbSet DiseaseRiskLevelAsbitems { get; set; } + public virtual DbSet DiseaseRiskLevelAnswers { get; set; } + public virtual DbSet DiseaseRiskNormalLevels { get; set; } diff --git a/test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs b/test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs index e1b1b47..196e200 100644 --- a/test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs +++ b/test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs @@ -90,6 +90,32 @@ namespace Shentun.WebPeis } + await unitOfWork.CompleteAsync(); + } + } + + [Fact] + public async Task GetQuestionRegisterListByPersonIdAsync() + { + using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true)) + { + + var entity = await _appService.GetQuestionRegisterListByPersonIdAsync(new PersonIdInputDto() + { + PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191") // 3a12d7fa-63f1-d549-c2f8-01123e5b7a8a + }); + foreach (var item in entity) + { + _output.WriteLine("-----------" + item.QuestionName); + foreach (var answer in item.Answers) + { + _output.WriteLine(answer.Answer); + + } + + } + + await unitOfWork.CompleteAsync(); } }