| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -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<DiseaseRiskLevel> _diseaseRiskLevelRepository; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        private readonly IRepository<QuestionAnswerRiskLevel> _questionAnswerRiskLevelRepository; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        private readonly IRepository<QuestionAnswerAsbitem> _questionAnswerAsbitemRepository; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        private readonly SysParmValueManager _sysParmValueManager; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        private readonly PersonManager _personManager; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        public AppointPatientRegisterAppService(IRepository<AppointPatientRegister> repository, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					             CacheService cacheService, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					             IRepository<ItemType> itemTypeRepository, | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -91,7 +94,9 @@ namespace Shentun.WebPeis.AppointPatientRegisters | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            IRepository<DiseaseRisk> diseaseRiskRepository, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            IRepository<DiseaseRiskLevel> diseaseRiskLevelRepository, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            IRepository<QuestionAnswerRiskLevel> questionAnswerRiskLevelRepository, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            IRepository<QuestionAnswerAsbitem> questionAnswerAsbitemRepository | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            IRepository<QuestionAnswerAsbitem> 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<PersonDiseaseRiskLevelDto>(); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -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; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} |