diff --git a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs index db97d95..7c0979f 100644 --- a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs +++ b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs @@ -9,6 +9,7 @@ using Shentun.WebPeis.OrganizationUnits; using Shentun.WebPeis.PatientRegisters; using Shentun.WebPeis.Persons; using Shentun.WebPeis.QuestionRegisters; +using Shentun.WebPeis.SysParmValues; using System; using System.Collections; using System.Collections.Generic; @@ -62,6 +63,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters private readonly IRepository _diseaseRiskLevelRepository; private readonly IRepository _questionAnswerRiskLevelRepository; private readonly IRepository _questionAnswerAsbitemRepository; + private readonly SysParmValueManager _sysParmValueManager; + private readonly PersonManager _personManager; public AppointPatientRegisterAppService(IRepository repository, CacheService cacheService, IRepository itemTypeRepository, @@ -91,7 +94,9 @@ namespace Shentun.WebPeis.AppointPatientRegisters IRepository diseaseRiskRepository, IRepository diseaseRiskLevelRepository, IRepository questionAnswerRiskLevelRepository, - IRepository questionAnswerAsbitemRepository + IRepository questionAnswerAsbitemRepository, + SysParmValueManager sysParmValueManager, + PersonManager personManager ) { @@ -125,6 +130,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters _diseaseRiskLevelRepository = diseaseRiskLevelRepository; _questionAnswerRiskLevelRepository = questionAnswerRiskLevelRepository; _questionAnswerAsbitemRepository = questionAnswerAsbitemRepository; + _personManager = personManager; + _sysParmValueManager = sysParmValueManager; } @@ -960,6 +967,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters asbitem, }).ToList(); + //获取所有疾病风险基础字典 var diseaseRisks = (from diseaseRisk in await _diseaseRiskRepository.GetQueryableAsync() join diseaseRiskLevel in await _diseaseRiskLevelRepository.GetQueryableAsync() @@ -1017,17 +1025,17 @@ namespace Shentun.WebPeis.AppointPatientRegisters DiseaseRiskLevelDisplayOrder = o.haveDiseaseRiskLevel.DisplayOrder, Asbitems = questionAnswerAsbitems }).DistinctBy(o => o.DiseaseRiskId).ToList(); - if(!personDiseaseRiskLevelDtos.Any()) + if (!personDiseaseRiskLevelDtos.Any()) { //如果答案没有对应的风险级别则虚拟一个,用答案名称作为风险级别 - var personDiseaseRiskLevelDto = new PersonDiseaseRiskLevelDto() + var personDiseaseRiskLevelDto = new PersonDiseaseRiskLevelDto() { DiseaseRiskId = questionAnswer.QuestionAnswerId, DiseaseRiskName = questionAnswer.QuestionAnswerName, - DisplayOrder = 1000, + DisplayOrder = 1000 + questionAnswer.DisplayOrder, DiseaseRiskLevelId = questionAnswer.QuestionAnswerId, DiseaseRiskLevelName = questionAnswer.QuestionAnswerName, - DiseaseRiskLevelDisplayOrder = 1000, + DiseaseRiskLevelDisplayOrder = 1000 + questionAnswer.DisplayOrder, Asbitems = questionAnswerAsbitems }; personDiseaseRiskLevels.Add(personDiseaseRiskLevelDto); @@ -1036,8 +1044,49 @@ namespace Shentun.WebPeis.AppointPatientRegisters { personDiseaseRiskLevels.AddRange(personDiseaseRiskLevelDtos); } - + } + //获取超重对应的疾病风险和组合项目 + var isOverweight = await _personManager.IsOverweight(personId); + QuestionAnswer overweightQuestionAnswer = null; + if (isOverweight) + { + var questionAnswerOverweightCodeStr = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "question_answer_overweight_code"); + if (!Guid.TryParse(questionAnswerOverweightCodeStr, out var questionAnswerOverweightCode)) + { + throw new UserFriendlyException("在系统参数中超重编码维护不正确"); + } + overweightQuestionAnswer = await _questionAnswerRepository.GetAsync(o => o.QuestionAnswerId == questionAnswerOverweightCode); + + var questionAnswerAsbitems = (from questionAnswerAsbitem in await _questionAnswerAsbitemRepository.GetQueryableAsync() + join asbitem in await _asbitemRepository.GetQueryableAsync() + on questionAnswerAsbitem.AsbitemId equals asbitem.AsbitemId + where questionAnswerAsbitem.QuestionAnswerId == overweightQuestionAnswer.QuestionAnswerId + select new RecommendMedicalPackageAsbitem() + { + AsbitemId = asbitem.AsbitemId, + AsbitemName = asbitem.AsbitemName, + ShortName = asbitem.ShortName, + Price = asbitem.Price, + ClinicalMeaning = asbitem.ClinicalMeaning, + Warn = asbitem.Warn, + DisplayOrder = asbitem.DisplayOrder, + AsbitemRecommendLevelId = questionAnswerAsbitem.AsbitemRecommendLevelId + }).ToList(); + + var personDiseaseRiskLevelDto = new PersonDiseaseRiskLevelDto() + { + DiseaseRiskId = overweightQuestionAnswer.QuestionAnswerId, + DiseaseRiskName = overweightQuestionAnswer.QuestionAnswerName, + DisplayOrder = 1000 + overweightQuestionAnswer.DisplayOrder, + DiseaseRiskLevelId = overweightQuestionAnswer.QuestionAnswerId, + DiseaseRiskLevelName = overweightQuestionAnswer.QuestionAnswerName, + DiseaseRiskLevelDisplayOrder = 1000 + overweightQuestionAnswer.DisplayOrder, + Asbitems = questionAnswerAsbitems + }; + personDiseaseRiskLevels.Add(personDiseaseRiskLevelDto); + } + //合并同一个疾病风险中的不同组合项目,将低级别风险中的组合项目合并到高风险级别中 personDiseaseRiskLevels = personDiseaseRiskLevels.OrderBy(o => o.DisplayOrder).ThenByDescending(o => o.DiseaseRiskLevelDisplayOrder).ToList(); for (var i = 0; i < personDiseaseRiskLevels.Count; i++) @@ -1067,6 +1116,15 @@ namespace Shentun.WebPeis.AppointPatientRegisters AsbitemRecommendLevelId = o.FirstOrDefault().AsbitemRecommendLevelId }).ToList(); } + //将疾病风险和疾病风险级别名称合并 + foreach (var personDiseaseRiskLevel in personDiseaseRiskLevels) + { + //将疾病风险和疾病风险级别名称合并 + if (!personDiseaseRiskLevel.DiseaseRiskLevelName.Contains(personDiseaseRiskLevel.DiseaseRiskName)) + { + personDiseaseRiskLevel.DiseaseRiskName += personDiseaseRiskLevel.DiseaseRiskLevelName; + } + } //获取有共同组合项目的风险级别 var newPersonDiseaseRiskLevelDtos = new List(); @@ -1091,6 +1149,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters } } return personDiseaseRiskLevels; + + /* var questionRegisterDiseaseRiskDtos = diseaseRisks.GroupBy(o => o.diseaseRisk) .Select(o => new PersonDiseaseRiskLevelDto() { @@ -1155,6 +1215,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters } return questionRegisterDiseaseRiskDtos; + */ } } } diff --git a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs index 8042310..1027c5c 100644 --- a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs +++ b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs @@ -238,9 +238,7 @@ namespace Shentun.WebPeis.QuestionRegisters } //超重信息 - //var person = await _personRepository.GetAsync(o => o.PersonId == input.PersonId); - _personManager.IsOverweight(input.PersonId); - var isOverweight = await _personManager.IsOverweight(input.PersonId); //await IsOverweight(person.Height, person.Weight); + var isOverweight = await _personManager.IsOverweight(input.PersonId); if (isOverweight) { //危险因素编码是03 @@ -887,32 +885,7 @@ namespace Shentun.WebPeis.QuestionRegisters return questionRegisterDto; } - /// - /// 是否超重 - /// - /// - /// - /// - private async Task IsOverweight(decimal? height, decimal? weight) - { - if (height == null || weight == null || height <= 0 || weight <= 0) - { - return false; - } - - var tzzs = (weight / ((height / 100) * (height / 100))); - var sysTzzsStr = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "question_overweight"); - decimal sysTzzs; - if (!decimal.TryParse(sysTzzsStr, out sysTzzs)) - { - sysTzzs = (decimal)24.5; - } - if (tzzs >= sysTzzs) - { - return true; - } - return false; - } + } } diff --git a/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs b/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs index 891c40f..77f79df 100644 --- a/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs +++ b/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs @@ -133,8 +133,9 @@ namespace Shentun.WebPeis } foreach (var item2 in item.DiseaseRiskLevelAsbitems) { - _output.WriteLine("---" + item2.DiseaseRiskName +"-" + item2.DiseaseRiskLevelName + "---"); - foreach(var item3 in item2.Asbitems) + //_output.WriteLine("---" + item2.DiseaseRiskName +"-" + item2.DiseaseRiskLevelName + "---"); + _output.WriteLine("---" + item2.DiseaseRiskName + "---"); + foreach (var item3 in item2.Asbitems) { _output.WriteLine(item3.AsbitemName ); }