From 3cf8f587f55d7290b21a7157d6a967bf78ada08e Mon Sep 17 00:00:00 2001 From: "DESKTOP-G961P6V\\Zhh" <839860190@qq.com> Date: Sat, 22 Jun 2024 17:46:35 +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 --- .../PersonDiseaseRiskLevelDto.cs | 2 + ...MedicalPackagePatientRegisterIdInputDto.cs | 1 + .../Persons/CreatePersonDto.cs | 5 + .../Persons/UpdatePersonDto.cs | 13 +- .../PersonDiseaseRiskIdInputDto.cs | 24 +- .../AppointPatientRegisterAppService.cs | 214 ++++++++++++++---- .../Persons/PersonAppService.cs | 32 ++- .../QuestionRegisterAppService.cs | 129 +++++++++-- src/Shentun.WebPeis.Domain/Models/Person.cs | 5 + .../Persons/PersonManager.cs | 40 +++- .../QuestionRegisterManager.cs | 3 + .../AppointPatientRegisterConfigure.cs | 15 ++ .../Configures/PersonConfigure.cs | 16 ++ .../QuestionRegisterAppServiceTest.cs | 4 +- 14 files changed, 419 insertions(+), 84 deletions(-) diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs index b08a70b..f9f9c31 100644 --- a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs +++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs @@ -32,6 +32,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters public string DiseaseRiskLevelName { get; set; } + public int DiseaseRiskLevelDisplayOrder { get; set; } + public List Asbitems { get; set; } = new List(); } diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterIdInputDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterIdInputDto.cs index 5e65304..1112615 100644 --- a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterIdInputDto.cs +++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterIdInputDto.cs @@ -15,5 +15,6 @@ namespace Shentun.WebPeis.AppointPatientRegisters /// 人员ID /// public Guid PersonId { get; set; } + } } diff --git a/src/Shentun.WebPeis.Application.Contracts/Persons/CreatePersonDto.cs b/src/Shentun.WebPeis.Application.Contracts/Persons/CreatePersonDto.cs index 6c99799..444098f 100644 --- a/src/Shentun.WebPeis.Application.Contracts/Persons/CreatePersonDto.cs +++ b/src/Shentun.WebPeis.Application.Contracts/Persons/CreatePersonDto.cs @@ -91,6 +91,11 @@ namespace Shentun.WebPeis.Persons public decimal? Weight { get; set; } + /// + /// 备孕标志 + /// + public char? PregnantFlag { get; set; } = '0'; + /// /// 微信JsCode /// diff --git a/src/Shentun.WebPeis.Application.Contracts/Persons/UpdatePersonDto.cs b/src/Shentun.WebPeis.Application.Contracts/Persons/UpdatePersonDto.cs index 0abaa44..3fcc491 100644 --- a/src/Shentun.WebPeis.Application.Contracts/Persons/UpdatePersonDto.cs +++ b/src/Shentun.WebPeis.Application.Contracts/Persons/UpdatePersonDto.cs @@ -88,24 +88,29 @@ namespace Shentun.WebPeis.Persons public decimal? Weight { get; set; } + /// + /// 备孕标志 + /// + public char? PregnantFlag { get; set; } = '0'; + /// /// 短信校验码 /// - public string SmsVerifyCode { get; set; } + public string? SmsVerifyCode { get; set; } /// /// 短信校验码键 /// - public string SmsVerifyCodeKey { get; set; } + public string? SmsVerifyCodeKey { get; set; } /// /// 会话键 /// - public string SessionKey { get; set; } + public string? SessionKey { get; set; } /// /// 会话键值 /// - public string SessionKeyValue { get; set; } + public string? SessionKeyValue { get; set; } } } diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonDiseaseRiskIdInputDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonDiseaseRiskIdInputDto.cs index 16869b8..5d0fa5a 100644 --- a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonDiseaseRiskIdInputDto.cs +++ b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonDiseaseRiskIdInputDto.cs @@ -15,19 +15,19 @@ namespace Shentun.WebPeis.QuestionRegisters /// public Guid DiseaseRiskId { get; set; } - /// - /// 备孕标志 - /// - public char PregnantFlag { get; set; } - /// - /// 身高 - /// + ///// + ///// 备孕标志 + ///// + //public char PregnantFlag { get; set; } + ///// + ///// 身高 + ///// - public decimal? Height { get; set; } - /// - /// 体重 - /// + //public decimal? Height { get; set; } + ///// + ///// 体重 + ///// - public decimal? Weight { get; set; } + //public decimal? Weight { get; set; } } } diff --git a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs index dfb2a04..db97d95 100644 --- a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs +++ b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs @@ -617,11 +617,11 @@ namespace Shentun.WebPeis.AppointPatientRegisters public async Task> GetCustomerOrgRecommendMedicalPackageListByPatientRegisterIdAsync(RecommendMedicalPackagePatientRegisterIdInputDto input) { var customerOrgGroupEntity = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() - join customerOrgGroup in await _customerOrgGroupRepository.GetQueryableAsync() - on patientRegister.CustomerOrgGroupId equals customerOrgGroup.CustomerOrgGroupId - - where patientRegister.PatientRegisterId == input.PatientRegisterId - select customerOrgGroup + join customerOrgGroup in await _customerOrgGroupRepository.GetQueryableAsync() + on patientRegister.CustomerOrgGroupId equals customerOrgGroup.CustomerOrgGroupId + + where patientRegister.PatientRegisterId == input.PatientRegisterId + select customerOrgGroup ).FirstOrDefault(); var recommendMedicalPackageDtos = new List(); @@ -662,23 +662,23 @@ namespace Shentun.WebPeis.AppointPatientRegisters var asbitems = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join customerOrgGroup in await _customerOrgGroupRepository.GetQueryableAsync() on patientRegister.CustomerOrgGroupId equals customerOrgGroup.CustomerOrgGroupId - join registerCheck in await _registerCheckRepository.GetQueryableAsync() + join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.PatientRegisterId equals registerCheck.PatientRegisterId join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.RegisterCheckId equals registerCheckAsbitem.RegisterCheckId join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.AsbitemId - join itemType in await _itemTypeRepository.GetQueryableAsync() + join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.ItemTypeId where registerCheck.PatientRegisterId == input.PatientRegisterId select new { - customerOrgGroup, - asbitem, - itemType + customerOrgGroup, + asbitem, + itemType } ).ToList(); - + var recommendMedicalPackageDto = new RecommendMedicalPackageDto() { @@ -690,22 +690,22 @@ namespace Shentun.WebPeis.AppointPatientRegisters }; - var medicalPackageAsbitems = asbitems.Select(o=> + var medicalPackageAsbitems = asbitems.Select(o => new RecommendMedicalPackageAsbitem() - { - AsbitemId = o.asbitem.AsbitemId, - AsbitemName = o.asbitem.AsbitemName, - ShortName = o.asbitem.ShortName, - Price = o.asbitem.Price, - ClinicalMeaning = o.asbitem.ClinicalMeaning, - Warn = o.asbitem.Warn, - IsBelongMedicalPackage = 'Y', - DisplayOrder = o.asbitem.ItemType.DisplayOrder * 100 + o.asbitem.DisplayOrder - }).ToList(); + { + AsbitemId = o.asbitem.AsbitemId, + AsbitemName = o.asbitem.AsbitemName, + ShortName = o.asbitem.ShortName, + Price = o.asbitem.Price, + ClinicalMeaning = o.asbitem.ClinicalMeaning, + Warn = o.asbitem.Warn, + IsBelongMedicalPackage = 'Y', + DisplayOrder = o.asbitem.ItemType.DisplayOrder * 100 + o.asbitem.DisplayOrder + }).ToList(); recommendMedicalPackageDto.Asbitems.AddRange(medicalPackageAsbitems); - + //----推荐组合项目 @@ -760,7 +760,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters var age = DateTime.Now.Year - ((DateTime)person.BirthDate).Year; var medicalPackages = await _medicalPackageRepository.GetListAsync(o => o.IsActive == 'Y' && o.IsWebAppoint == 'Y' && o.IsBasicRecommend == 'Y' && - (o.ForSexId == ForSexFlag.All || o.ForSexId == person.SexId) && + (o.ForSexId == ForSexFlag.All || o.ForSexId == person.SexId) && o.AgeUpperLimit >= age && o.AgeLowerLimit <= age); if (person.MaritalStatusId == MaritalStatusFlag.UnMarried) { @@ -822,7 +822,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters ClinicalMeaning = asbitem.ClinicalMeaning, Warn = asbitem.Warn, IsBelongMedicalPackage = 'Y', - DisplayOrder = itemType.DisplayOrder * 100 + asbitem.DisplayOrder + DisplayOrder = itemType.DisplayOrder * 100 + asbitem.DisplayOrder }).ToList(); recommendMedicalPackageDto.Asbitems.AddRange(medicalPackageAsbitems); @@ -839,28 +839,28 @@ namespace Shentun.WebPeis.AppointPatientRegisters //----推荐组合项目 - var personDiseaseRiskLevelDtos = await GetDiseaseRiskListByPersonIdAsync(input.PersonId); + var personDiseaseRiskLevelDtos = await GetDiseaseRiskListByPersonIdAsync(input.PersonId, input.RecommendId); //var pregnancyAsbitems = await _asbitemRepository.GetListAsync(o => //o.ForPregnantFlag == ForPregnantFlag.PreparePregnancy || o.ForPregnantFlag == ForPregnantFlag.Pregnancy); //去掉基本套餐已经包含的组合项目和和怀孕禁止检查的项目 foreach (var personDiseaseRiskLevelDto in personDiseaseRiskLevelDtos) { - for (var i = 0; i< personDiseaseRiskLevelDto.Asbitems.Count; i++ ) + for (var i = 0; i < personDiseaseRiskLevelDto.Asbitems.Count; i++) { var personDiseaseRiskLevelAsbitem = personDiseaseRiskLevelDto.Asbitems[i]; if (medicalPackageAsbitems.Where(o => o.AsbitemId == personDiseaseRiskLevelAsbitem.AsbitemId).Any()) { personDiseaseRiskLevelDto.Asbitems.Remove(personDiseaseRiskLevelAsbitem); - i --; + i--; } - + } } var personDiseaseRiskLevelResultDtos = new List(); foreach (var personDiseaseRiskLevelDto in personDiseaseRiskLevelDtos) { - if(personDiseaseRiskLevelDto.Asbitems.Where(o=>o.AsbitemRecommendLevelId == input.RecommendId).Count() > 0) + if (personDiseaseRiskLevelDto.Asbitems.Where(o => o.AsbitemRecommendLevelId == input.RecommendId).Count() > 0) { //只有有推荐的项目才进入推荐风险项目列表 var personDiseaseRiskLevelResultDto = new PersonDiseaseRiskLevelDto() @@ -871,12 +871,12 @@ namespace Shentun.WebPeis.AppointPatientRegisters DiseaseRiskLevelId = personDiseaseRiskLevelDto.DiseaseRiskLevelId, DiseaseRiskLevelName = personDiseaseRiskLevelDto.DiseaseRiskLevelName }; - personDiseaseRiskLevelResultDto.Asbitems = + personDiseaseRiskLevelResultDto.Asbitems = personDiseaseRiskLevelDto.Asbitems.Where(o => o.AsbitemRecommendLevelId == input.RecommendId).ToList(); recommendMedicalPackageDto.SumPrice += personDiseaseRiskLevelResultDto.Asbitems.Sum(o => o.Price); personDiseaseRiskLevelResultDtos.Add(personDiseaseRiskLevelResultDto); } - + } recommendMedicalPackageDto.DiseaseRiskLevelAsbitems = personDiseaseRiskLevelResultDtos; return recommendMedicalPackageDto; @@ -899,15 +899,15 @@ namespace Shentun.WebPeis.AppointPatientRegisters PersonId = input.PersonId, RecommendId = i + 1 }); - if(i == 0) + if (i == 0) { recommendMedicalPackageDto.MedicalPackageName = "推荐必查方案"; } - else if(i == 1) + else if (i == 1) { recommendMedicalPackageDto.MedicalPackageName = "精准筛查方案"; } - else if(i == 2) + else if (i == 2) { recommendMedicalPackageDto.MedicalPackageName = "深入检查方案"; } @@ -920,7 +920,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters /// /// /// - private async Task> GetDiseaseRiskListByPersonIdAsync(Guid personId) + private async Task> GetDiseaseRiskListByPersonIdAsync(Guid personId, int recommendId = 1) { var questionRegister = (await _questionRegisterRepository.GetQueryableAsync()) .Where(o => o.PersonId == personId) @@ -931,7 +931,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters { return null; } - + //获取人员所有答案和对应的组合项目 var questionRegisterItems = (from questionRegisterItem in await _questionRegisterItemRepository.GetQueryableAsync() join questionRegisterAnswer in await _questionRegisterAnswerRrepository.GetQueryableAsync() on questionRegisterItem.QuestionRegisterItemId equals questionRegisterAnswer.QuestionRegisterItemId @@ -941,7 +941,13 @@ namespace Shentun.WebPeis.AppointPatientRegisters on questionRegisterItem.QuestionId equals question.QuestionId join questionSubjectType in await _questionSubjectTypeRepository.GetQueryableAsync() on question.QuestionSubjectTypeId equals questionSubjectType.QuestionSubjectTypeId - where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId + + join questionAnswerAsbitem in await _questionAnswerAsbitemRepository.GetQueryableAsync() + on questionRegisterAnswer.QuestionAnswerId equals questionAnswerAsbitem.QuestionAnswerId + join asbitem in await _asbitemRepository.GetQueryableAsync() + on questionAnswerAsbitem.AsbitemId equals asbitem.AsbitemId + where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId && + questionAnswerAsbitem.AsbitemRecommendLevelId == recommendId orderby questionSubjectType.DisplayOrder, question.DisplayOrder select new { @@ -949,9 +955,12 @@ namespace Shentun.WebPeis.AppointPatientRegisters question, questionRegisterItem, questionRegisterAnswer, - questionAnswer + questionAnswerAsbitem, + questionAnswer, + asbitem, }).ToList(); + //获取所有疾病风险基础字典 var diseaseRisks = (from diseaseRisk in await _diseaseRiskRepository.GetQueryableAsync() join diseaseRiskLevel in await _diseaseRiskLevelRepository.GetQueryableAsync() on diseaseRisk.DiseaseRiskId equals diseaseRiskLevel.DiseaseRiskId into emptyDiseaseRiskLevel @@ -967,13 +976,128 @@ namespace Shentun.WebPeis.AppointPatientRegisters haveQuestionAnswerRiskLevel }).ToList(); - var questionRegisterDiseaseRiskDtos = diseaseRisks.GroupBy(o => o.diseaseRisk) - .Select(o => new PersonDiseaseRiskLevelDto() + //获取人员所有答案 + var questionAnswers = questionRegisterItems.GroupBy(o => o.questionAnswer) + .Select(x => new QuestionAnswer + { + QuestionAnswerId = x.Key.QuestionAnswerId, + QuestionAnswerName = x.Key.QuestionAnswerName, + DisplayOrder = x.Key.DisplayOrder, + }).OrderBy(m => m.DisplayOrder).ToList(); + + //获取答案对应的所有风险级别和组合项目 + var personDiseaseRiskLevels = new List(); + foreach (var questionAnswer in questionAnswers) + { + //获取答案对应的所有组合项目 + var questionAnswerAsbitems = questionRegisterItems.Where(o => o.questionAnswer.QuestionAnswerId == questionAnswer.QuestionAnswerId) + .Select(o => new RecommendMedicalPackageAsbitem() + { + AsbitemId = o.asbitem.AsbitemId, + AsbitemName = o.asbitem.AsbitemName, + ShortName = o.asbitem.ShortName, + Price = o.asbitem.Price, + ClinicalMeaning = o.asbitem.ClinicalMeaning, + Warn = o.asbitem.Warn, + DisplayOrder = o.asbitem.DisplayOrder, + AsbitemRecommendLevelId = o.questionAnswerAsbitem.AsbitemRecommendLevelId + } + ).ToList(); + + //获取答案对应的所有风险级别 + var personDiseaseRiskLevelDtos = diseaseRisks.Where(o => o.haveQuestionAnswerRiskLevel != null && + o.haveQuestionAnswerRiskLevel.QuestionAnswerId == questionAnswer.QuestionAnswerId) + .Select(o => new PersonDiseaseRiskLevelDto() + { + DiseaseRiskId = o.diseaseRisk.DiseaseRiskId, + DiseaseRiskName = o.diseaseRisk.DiseaseRiskName, + DisplayOrder = o.diseaseRisk.DisplayOrder, + DiseaseRiskLevelId = o.haveDiseaseRiskLevel.DiseaseRiskLevelId, + DiseaseRiskLevelName = o.haveDiseaseRiskLevel.DiseaseRiskLevelName, + DiseaseRiskLevelDisplayOrder = o.haveDiseaseRiskLevel.DisplayOrder, + Asbitems = questionAnswerAsbitems + }).DistinctBy(o => o.DiseaseRiskId).ToList(); + if(!personDiseaseRiskLevelDtos.Any()) + { + //如果答案没有对应的风险级别则虚拟一个,用答案名称作为风险级别 + var personDiseaseRiskLevelDto = new PersonDiseaseRiskLevelDto() + { + DiseaseRiskId = questionAnswer.QuestionAnswerId, + DiseaseRiskName = questionAnswer.QuestionAnswerName, + DisplayOrder = 1000, + DiseaseRiskLevelId = questionAnswer.QuestionAnswerId, + DiseaseRiskLevelName = questionAnswer.QuestionAnswerName, + DiseaseRiskLevelDisplayOrder = 1000, + Asbitems = questionAnswerAsbitems + }; + personDiseaseRiskLevels.Add(personDiseaseRiskLevelDto); + } + else + { + personDiseaseRiskLevels.AddRange(personDiseaseRiskLevelDtos); + } + + } + //合并同一个疾病风险中的不同组合项目,将低级别风险中的组合项目合并到高风险级别中 + personDiseaseRiskLevels = personDiseaseRiskLevels.OrderBy(o => o.DisplayOrder).ThenByDescending(o => o.DiseaseRiskLevelDisplayOrder).ToList(); + for (var i = 0; i < personDiseaseRiskLevels.Count; i++) + { + var loweriseaseRiskLevels = personDiseaseRiskLevels.Where(o => o.DiseaseRiskId == personDiseaseRiskLevels[i].DiseaseRiskId && + o.DiseaseRiskLevelDisplayOrder < personDiseaseRiskLevels[i].DiseaseRiskLevelDisplayOrder).ToList(); + foreach (var loweriseaseRiskLevel in loweriseaseRiskLevels) + { + personDiseaseRiskLevels[i].Asbitems.AddRange(loweriseaseRiskLevel.Asbitems); + + } + personDiseaseRiskLevels.RemoveAll(loweriseaseRiskLevels); + } + //去掉相同级别的相同组合项目 + foreach (var personDiseaseRiskLevel in personDiseaseRiskLevels) + { + personDiseaseRiskLevel.Asbitems = personDiseaseRiskLevel.Asbitems.GroupBy(o => new { o.AsbitemId, o.AsbitemRecommendLevelId }) + .Select(o => new RecommendMedicalPackageAsbitem() + { + AsbitemId = o.FirstOrDefault().AsbitemId, + AsbitemName = o.FirstOrDefault().AsbitemName, + ShortName = o.FirstOrDefault().ShortName, + Price = o.FirstOrDefault().Price, + ClinicalMeaning = o.FirstOrDefault().ClinicalMeaning, + Warn = o.FirstOrDefault().Warn, + DisplayOrder = o.FirstOrDefault().DisplayOrder, + AsbitemRecommendLevelId = o.FirstOrDefault().AsbitemRecommendLevelId + }).ToList(); + } + + //获取有共同组合项目的风险级别 + var newPersonDiseaseRiskLevelDtos = new List(); + foreach (var personDiseaseRiskLevel in personDiseaseRiskLevels) + { + + foreach (var personDiseaseRiskLevel2 in personDiseaseRiskLevels) { - DiseaseRiskId = o.Key.DiseaseRiskId, - DiseaseRiskName = o.Key.DiseaseRiskName, - DisplayOrder = o.Key.DisplayOrder - }).ToList(); + if (personDiseaseRiskLevel == personDiseaseRiskLevel2) + { + continue; + } + for (var i = 0; i < personDiseaseRiskLevel2.Asbitems.Count(); i++) + { + if (personDiseaseRiskLevel.Asbitems.Where(o => o.AsbitemId == personDiseaseRiskLevel2.Asbitems[i].AsbitemId).Any()) + { + personDiseaseRiskLevel.DiseaseRiskName += "," + personDiseaseRiskLevel2.DiseaseRiskName; + personDiseaseRiskLevel2.Asbitems.Remove(personDiseaseRiskLevel2.Asbitems[i]); + i--; + } + } + } + } + return personDiseaseRiskLevels; + var questionRegisterDiseaseRiskDtos = diseaseRisks.GroupBy(o => o.diseaseRisk) + .Select(o => new PersonDiseaseRiskLevelDto() + { + DiseaseRiskId = o.Key.DiseaseRiskId, + DiseaseRiskName = o.Key.DiseaseRiskName, + DisplayOrder = o.Key.DisplayOrder + }).ToList(); foreach (var diseaseRisk in questionRegisterDiseaseRiskDtos) { diff --git a/src/Shentun.WebPeis.Application/Persons/PersonAppService.cs b/src/Shentun.WebPeis.Application/Persons/PersonAppService.cs index 410b002..c238cb0 100644 --- a/src/Shentun.WebPeis.Application/Persons/PersonAppService.cs +++ b/src/Shentun.WebPeis.Application/Persons/PersonAppService.cs @@ -37,6 +37,7 @@ using Shentun.WebPeis.CustomerOrgs; using Shentun.Utilities.Enums; using Shentun.Sms.Client; using Shentun.Utilities; +using IdentityModel; namespace Shentun.WebPeis.Persons { /// @@ -95,7 +96,21 @@ namespace Shentun.WebPeis.Persons { var entity = await _repository.GetAsync(o => o.PersonId == input.PersonId); var entityDto = ObjectMapper.Map(entity); - + var user = await _identityUserRepository.GetAsync(input.PersonId); + entityDto.MobileTelephone = user.PhoneNumber; + entityDto.PersonName = user.Name; + entityDto.SexName = await _cacheService.GetSexNameAsync(entityDto.SexId); + entityDto.MaritalStatusName = await _cacheService.GetMaritalStatusNameAsync(entityDto.MaritalStatusId); + entityDto.NationName = await _cacheService.GetNationNameAsync(entityDto.NationId); + var questionRegister = await _questionRegisterRepository.FindAsync(o=>o.PersonId == input.PersonId); + if(questionRegister != null) + { + entityDto.IsHaveQuestionRegister = 'Y'; + } + else + { + entityDto.IsHaveQuestionRegister = 'N'; + } return entityDto; } @@ -185,6 +200,7 @@ namespace Shentun.WebPeis.Persons throw new UserFriendlyException("无效的短信校验码或已过期"); } + var person = await _repository.FindAsync(o => o.IdNo == input.IdNo); if (person != null) { @@ -307,14 +323,22 @@ namespace Shentun.WebPeis.Persons var person = await _repository.GetAsync(o => o.PersonId == input.PersonId); await _personManager.UpdateAsync(entity, person); - await _repository.UpdateAsync(person); + await _repository.UpdateAsync(person,true); //更新用户信息 var user = await _identityUserRepository.GetAsync(person.PersonId); user.Name = input.PersonName; - await _identityUserRepository.UpdateAsync(user); + await _identityUserRepository.UpdateAsync(user,true); - return ObjectMapper.Map(person); + + var personDto = await GetByIdAsync(new PersonIdInputDto() { PersonId = input.PersonId }); + + //personDto.MobileTelephone = user.PhoneNumber; + //personDto.PersonName = user.Name; + + + + return personDto; } /// diff --git a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs index 1d43a77..8042310 100644 --- a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs +++ b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs @@ -36,9 +36,11 @@ namespace Shentun.WebPeis.QuestionRegisters private readonly IRepository _questionAnswerRiskLevelRepository; private readonly IRepository _questionAnswerAsbitemRepository; private readonly IRepository _asbitemRepository; + private readonly IRepository _personRepository; private readonly QuestionRegisterManager _questionRegisterManager; private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly SysParmValueManager _sysParmValueManager; + private readonly PersonManager _personManager; public QuestionRegisterAppService(IRepository repository, IRepository questionRegisterItemRepository, IRepository questionRegisterAnswerRrepository, @@ -52,7 +54,9 @@ namespace Shentun.WebPeis.QuestionRegisters IRepository questionAnswerRiskLevelRepository, IRepository questionAnswerAsbitemRepository, IRepository asbitemRepository, - SysParmValueManager sysParmValueManager) + SysParmValueManager sysParmValueManager, + IRepository personRepository, + PersonManager personManager) { _repository = repository; _questionRegisterItemRepository = questionRegisterItemRepository; @@ -68,6 +72,8 @@ namespace Shentun.WebPeis.QuestionRegisters _questionAnswerAsbitemRepository = questionAnswerAsbitemRepository; _asbitemRepository = asbitemRepository; _sysParmValueManager = sysParmValueManager; + _personRepository = personRepository; + _personManager = personManager; } @@ -231,6 +237,26 @@ 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); + if (isOverweight) + { + //危险因素编码是03 + var personSubjectTypeDto = personSubjectTypeDtos.Where(o => o.QuestionSubjectTypeId == "03").Single(); + var questionAnswerOverweightCodeStr = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "question_answer_overweight_code"); + if (!Guid.TryParse(questionAnswerOverweightCodeStr, out var questionAnswerOverweightCode)) + { + throw new UserFriendlyException("在系统参数中超重编码维护不正确"); + } + var questionAnswer = await _questionAnswerRepository.GetAsync(o => o.QuestionAnswerId == questionAnswerOverweightCode); + personSubjectTypeDto.Answers.Add(new PersonSubjectTypeQuestionAnswer() + { + QuestionAnswerName = questionAnswer.QuestionAnswerName, + DisplayOrder = questionAnswer.DisplayOrder, + }); + } return personSubjectTypeDtos; } @@ -240,7 +266,7 @@ namespace Shentun.WebPeis.QuestionRegisters /// /// [HttpPost("api/app/QuestionRegister/GetQuestionRegisterListByPersonId")] - public async Task> GetQuestionRegisterListByPersonIdAsync(PersonAppointInputDto input) + public async Task> GetQuestionRegisterListByPersonIdAsync(PersonIdInputDto input) { var questionRegister = (await _repository.GetQueryableAsync()) .Where(o => o.PersonId == input.PersonId) @@ -328,7 +354,7 @@ namespace Shentun.WebPeis.QuestionRegisters /// /// [HttpPost("api/app/QuestionRegister/GetDiseaseRiskListByPersonId")] - public async Task> GetDiseaseRiskListByPersonIdAsync(PersonAppointInputDto input) + public async Task> GetDiseaseRiskListByPersonIdAsync(PersonIdInputDto input) { var questionRegister = (await _repository.GetQueryableAsync()) .Where(o => o.PersonId == input.PersonId) @@ -383,6 +409,20 @@ namespace Shentun.WebPeis.QuestionRegisters DisplayOrder = o.Key.DisplayOrder }).ToList(); + //超重信息 + var isOverweight = await _personManager.IsOverweight(input.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); + + } + foreach (var diseaseRisk in questionRegisterDiseaseRiskDtos) { //疾病级别必须按优先级别排序,取顺序最高的作为最高风险级 @@ -403,6 +443,15 @@ namespace Shentun.WebPeis.QuestionRegisters } } + //超重 + if (overweightQuestionAnswer != null && diseaseRiskLevel.haveQuestionAnswerRiskLevel != null) + { + if (diseaseRiskLevel.haveQuestionAnswerRiskLevel.QuestionAnswerId == overweightQuestionAnswer.QuestionAnswerId) + { + matchDiseaseRiskLevel = diseaseRiskLevel.haveDiseaseRiskLevel; + break; + } + } } if (matchDiseaseRiskLevel == null) { @@ -435,23 +484,38 @@ namespace Shentun.WebPeis.QuestionRegisters { if (input == null) { throw new UserFriendlyException("input参数不能为空"); } + var questionRegister = (await _repository.GetQueryableAsync()) + .Where(o => o.PersonId == input.PersonId) + .OrderByDescending(o => o.CreationTime) + .FirstOrDefault(); + + if (questionRegister == null) + { + return null; + } + var diseaseRisk = await _diseaseRiskRepository.GetAsync(o => o.DiseaseRiskId == input.DiseaseRiskId); var diseaseRiskLevels = (await _diseaseRiskLevelRepository.GetListAsync(o => o.DiseaseRiskId == input.DiseaseRiskId)) .OrderBy(o => o.DisplayOrder); //获取人员疾病风险列表 - var diseaseRiskList = await GetDiseaseRiskListByPersonIdAsync(new PersonAppointInputDto() { PersonId = input.PersonId }); + var diseaseRiskList = await GetDiseaseRiskListByPersonIdAsync(new PersonIdInputDto() { PersonId = input.PersonId }); var personDiseaseRisk = diseaseRiskList.Where(o => o.DiseaseRiskId == input.DiseaseRiskId).First(); var diseaseRiskLevel = diseaseRiskLevels.Where(o => o.DiseaseRiskLevelId == personDiseaseRisk.DiseaseRiskLevelId).FirstOrDefault(); - - var asbitems = (from questionAnswerAsbitem in await _questionAnswerAsbitemRepository.GetQueryableAsync() + + var asbitems = (from questionRegisterItem in await _questionRegisterItemRepository.GetQueryableAsync() + join questionRegisterAnswer in await _questionRegisterAnswerRrepository.GetQueryableAsync() + on questionRegisterItem.QuestionRegisterItemId equals questionRegisterAnswer.QuestionRegisterItemId + join questionAnswerAsbitem in await _questionAnswerAsbitemRepository.GetQueryableAsync() + on questionRegisterAnswer.QuestionAnswerId equals questionAnswerAsbitem.QuestionAnswerId join asbitem in await _asbitemRepository.GetQueryableAsync() on questionAnswerAsbitem.AsbitemId equals asbitem.AsbitemId join questionAnswerRiskLevel in await _questionAnswerRiskLevelRepository.GetQueryableAsync() on questionAnswerAsbitem.QuestionAnswerId equals questionAnswerRiskLevel.QuestionAnswerId - where questionAnswerRiskLevel.DiseaseRiskLevelId == diseaseRiskLevel.DiseaseRiskLevelId + where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId && + questionAnswerRiskLevel.DiseaseRiskLevelId == diseaseRiskLevel.DiseaseRiskLevelId orderby asbitem.DisplayOrder - select asbitem).ToList(); + select asbitem).Distinct().ToList(); var questionRegisterDiseaseRiskSingleDto = new QuestionRegisterDiseaseRiskSingleDto() { @@ -475,16 +539,51 @@ namespace Shentun.WebPeis.QuestionRegisters }).ToList() }; + //超重信息 - var questionRegister = (await _repository.GetQueryableAsync()) - .Where(o => o.PersonId == input.PersonId) - .OrderByDescending(o => o.CreationTime) - .FirstOrDefault(); - if (questionRegister == null) + var isOverweight = await _personManager.IsOverweight(input.PersonId); + QuestionAnswer overweightQuestionAnswer = null; + if (isOverweight) { - return null; + 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 questionAnswerRiskLevel = await _questionAnswerRiskLevelRepository.FindAsync(o => o.QuestionAnswerId == overweightQuestionAnswer.QuestionAnswerId && + o.DiseaseRiskLevelId == diseaseRiskLevel.DiseaseRiskLevelId); + if (questionAnswerRiskLevel != null) + { + 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 asbitem).ToList(); + + foreach (var questionAnswerAsbitem in questionAnswerAsbitems) + { + if (!questionRegisterDiseaseRiskSingleDto.Asbitems.Where(o => o.AsbitemId == questionAnswerAsbitem.AsbitemId).Any()) + { + questionRegisterDiseaseRiskSingleDto.Asbitems.Add(new QuestionRegisterDiseaseRiskAsbitem() + { + AsbitemId = questionAnswerAsbitem.AsbitemId, + AsbitemName = questionAnswerAsbitem.AsbitemName, + DisplayOrder = questionAnswerAsbitem.DisplayOrder + }); + } + } + + questionRegisterDiseaseRiskSingleDto.Answers.Add(new QuestionRegisterItemResultAnswer() + { + Answer = overweightQuestionAnswer.QuestionAnswerName, + DisplayOrder = overweightQuestionAnswer.DisplayOrder, + }); + } + } + var questionRegisterItems = (from questionRegisterItem in await _questionRegisterItemRepository.GetQueryableAsync() join questionRegisterAnswer in await _questionRegisterAnswerRrepository.GetQueryableAsync() on questionRegisterItem.QuestionRegisterItemId equals questionRegisterAnswer.QuestionRegisterItemId @@ -800,7 +899,7 @@ namespace Shentun.WebPeis.QuestionRegisters { return false; } - + var tzzs = (weight / ((height / 100) * (height / 100))); var sysTzzsStr = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "question_overweight"); decimal sysTzzs; diff --git a/src/Shentun.WebPeis.Domain/Models/Person.cs b/src/Shentun.WebPeis.Domain/Models/Person.cs index 3ff4d37..025f96f 100644 --- a/src/Shentun.WebPeis.Domain/Models/Person.cs +++ b/src/Shentun.WebPeis.Domain/Models/Person.cs @@ -95,6 +95,11 @@ public partial class Person: AuditedEntity,IHasConcurrencyStamp /// public decimal? Weight { get; set; } + + /// + /// 备孕标志 + /// + public char PregnantFlag { get; set; } public virtual ICollection QuestionRegisters { get; set; } = new List(); public override object?[] GetKeys() diff --git a/src/Shentun.WebPeis.Domain/Persons/PersonManager.cs b/src/Shentun.WebPeis.Domain/Persons/PersonManager.cs index 51a0799..3ef9ac3 100644 --- a/src/Shentun.WebPeis.Domain/Persons/PersonManager.cs +++ b/src/Shentun.WebPeis.Domain/Persons/PersonManager.cs @@ -2,6 +2,7 @@ using NPOI.POIFS.FileSystem; using Shentun.Utilities; using Shentun.Utilities.Enums; +using Shentun.WebPeis.Enums; using Shentun.WebPeis.Models; using Shentun.WebPeis.SysParmValues; using System; @@ -110,7 +111,7 @@ namespace Shentun.WebPeis.Persons entity.PersonId = user.Id; entity.SimpleCode = LanguageConverter.GetPYSimpleCode(name); - + var userWithPerson = new UserWithPerson() { User = user, @@ -138,6 +139,7 @@ namespace Shentun.WebPeis.Persons targetEntity.IsAllowBind = sourceEntity.IsAllowBind; targetEntity.Height = sourceEntity.Height; targetEntity.Weight = sourceEntity.Weight; + targetEntity.PregnantFlag = sourceEntity.PregnantFlag; } @@ -198,7 +200,11 @@ namespace Shentun.WebPeis.Persons } } - + if (entity.PregnantFlag != PregnantFlag.None && entity.PregnantFlag != PregnantFlag.PreparePregnancy + && entity.PregnantFlag != PregnantFlag.Pregnancy) + { + throw new UserFriendlyException("备孕标志错误"); + } } @@ -252,5 +258,35 @@ namespace Shentun.WebPeis.Persons return person_id_rule_prefix + maxnum.PadLeft(Convert.ToInt32(person_id_rule_tail_len), '0'); } + + + public async Task IsOverweight(Guid personId) + { + decimal? height; + decimal? weight; + var person = await _repository.GetAsync(o => o.PersonId == personId); + + height = person.Height; + weight = person.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/src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs b/src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs index b0ae829..f3b16b9 100644 --- a/src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs +++ b/src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs @@ -61,5 +61,8 @@ namespace Shentun.WebPeis.QuestionRegisters } return entity; } + + + } } diff --git a/src/Shentun.WebPeis.EntityFrameworkCore/Configures/AppointPatientRegisterConfigure.cs b/src/Shentun.WebPeis.EntityFrameworkCore/Configures/AppointPatientRegisterConfigure.cs index 98dae55..75661c0 100644 --- a/src/Shentun.WebPeis.EntityFrameworkCore/Configures/AppointPatientRegisterConfigure.cs +++ b/src/Shentun.WebPeis.EntityFrameworkCore/Configures/AppointPatientRegisterConfigure.cs @@ -57,6 +57,21 @@ namespace Shentun.WebPeis.Configures entity.Property(e => e.Remark) .HasMaxLength(200) .HasColumnName("remark"); + + entity.Property(e => e.Height) + .HasComment("身高") + .HasPrecision(4, 1) + .HasColumnName("height"); + + entity.Property(e => e.Weight) + .HasComment("体重") + .HasPrecision(5, 2) + .HasColumnName("weight"); + + entity.Property(e => e.PregnantFlag) + .HasComment("备孕标志") + .HasDefaultValueSql("'0'::bpchar") + .HasColumnName("pregnant_flag"); } } } diff --git a/src/Shentun.WebPeis.EntityFrameworkCore/Configures/PersonConfigure.cs b/src/Shentun.WebPeis.EntityFrameworkCore/Configures/PersonConfigure.cs index b803cbd..4a71043 100644 --- a/src/Shentun.WebPeis.EntityFrameworkCore/Configures/PersonConfigure.cs +++ b/src/Shentun.WebPeis.EntityFrameworkCore/Configures/PersonConfigure.cs @@ -97,6 +97,22 @@ namespace Shentun.WebPeis.Configures entity.Property(e => e.WechatOpenId) .HasMaxLength(50) .HasColumnName("wechat_open_id"); + + entity.Property(e => e.Height) + .HasComment("身高") + .HasPrecision(4, 1) + .HasColumnName("height"); + + entity.Property(e => e.Weight) + .HasComment("体重") + .HasPrecision(5, 2) + .HasColumnName("weight"); + + entity.Property(e => e.PregnantFlag) + .HasComment("备孕标志") + .HasDefaultValueSql("'0'::bpchar") + .HasColumnName("pregnant_flag"); + } } } diff --git a/test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs b/test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs index ab67c93..23a9ebc 100644 --- a/test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs +++ b/test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs @@ -101,7 +101,7 @@ namespace Shentun.WebPeis using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true)) { - var entity = await _appService.GetQuestionRegisterListByPersonIdAsync(new PersonAppointInputDto() + var entity = await _appService.GetQuestionRegisterListByPersonIdAsync(new PersonIdInputDto() { PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191") // 3a12d7fa-63f1-d549-c2f8-01123e5b7a8a }); @@ -127,7 +127,7 @@ namespace Shentun.WebPeis using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true)) { - var entity = await _appService.GetDiseaseRiskListByPersonIdAsync(new PersonAppointInputDto() + var entity = await _appService.GetDiseaseRiskListByPersonIdAsync(new PersonIdInputDto() { PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191") // 3a12d7fa-63f1-d549-c2f8-01123e5b7a8a });