diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendCustomerOrgGroupDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendCustomerOrgGroupDto.cs new file mode 100644 index 0000000..76e2613 --- /dev/null +++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendCustomerOrgGroupDto.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.WebPeis.AppointPatientRegisters +{ + public class RecommendCustomerOrgGroupDto + { + } +} diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterAndRecommendIdInputDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterAndRecommendIdInputDto.cs new file mode 100644 index 0000000..3bc1cc1 --- /dev/null +++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterAndRecommendIdInputDto.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.WebPeis.AppointPatientRegisters +{ + public class RecommendMedicalPackagePatientRegisterAndRecommendIdInputDto + { + /// + /// 人员登记ID + /// + public Guid PatientRegisterId { get; set; } + + /// + /// 人员ID + /// + public Guid PersonId { get; set; } + + /// + /// 推荐ID + /// + public int RecommendId { get; set; } + } +} diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterIdInputDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterIdInputDto.cs new file mode 100644 index 0000000..5e65304 --- /dev/null +++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterIdInputDto.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.WebPeis.AppointPatientRegisters +{ + public class RecommendMedicalPackagePatientRegisterIdInputDto + { + /// + /// 人员登记ID + /// + public Guid PatientRegisterId { get; set; } + + /// + /// 人员ID + /// + public Guid PersonId { get; set; } + } +} diff --git a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs index 71fd0e7..d0cc270 100644 --- a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs +++ b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs @@ -606,7 +606,149 @@ namespace Shentun.WebPeis.AppointPatientRegisters } + + /// + /// 获取团检推荐套餐列表 + /// + /// + /// + [HttpPost("api/app/AppointPatientRegister/GetCustomerOrgRecommendMedicalPackageListByPatientRegisterId")] + 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 + ).FirstOrDefault(); + + var recommendMedicalPackageDtos = new List(); + for (var i = 0; i < 3; i++) + { + + var recommendMedicalPackageDto = await GetCustomerOrgRecommendMedicalPackageByPersonAndRecommendIdAsync(new RecommendMedicalPackagePatientRegisterAndRecommendIdInputDto() + { + PatientRegisterId = input.PatientRegisterId, + PersonId = input.PersonId, + RecommendId = i + 1 + }); + + if (i == 0) + { + recommendMedicalPackageDto.MedicalPackageName = "推荐必查方案"; + } + else if (i == 1) + { + recommendMedicalPackageDto.MedicalPackageName = "精准筛查方案"; + } + else if (i == 2) + { + recommendMedicalPackageDto.MedicalPackageName = "深入检查方案"; + } + recommendMedicalPackageDtos.Add(recommendMedicalPackageDto); + } + return recommendMedicalPackageDtos; + } + /// + /// 获取团检预约推荐项目 + /// + /// + /// + [HttpPost("api/app/AppointPatientRegister/GetCustomerOrgRecommendMedicalPackageByPersonAndRecommendId")] + public async Task GetCustomerOrgRecommendMedicalPackageByPersonAndRecommendIdAsync(RecommendMedicalPackagePatientRegisterAndRecommendIdInputDto input) + { + 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() + 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() + on asbitem.ItemTypeId equals itemType.ItemTypeId + where registerCheck.PatientRegisterId == input.PatientRegisterId + select new + { + customerOrgGroup, + asbitem, + itemType + } + ).ToList(); + + + var recommendMedicalPackageDto = new RecommendMedicalPackageDto() + { + MedicalPackageId = asbitems.FirstOrDefault().customerOrgGroup.CustomerOrgGroupId, + MedicalPackageName = asbitems.FirstOrDefault().customerOrgGroup.CustomerOrgGroupName, + Price = asbitems.FirstOrDefault().customerOrgGroup.Price, + SumPrice = asbitems.FirstOrDefault().customerOrgGroup.Price, + DisplayOrder = asbitems.FirstOrDefault().customerOrgGroup.DisplayOrder + }; + + + 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(); + + recommendMedicalPackageDto.Asbitems.AddRange(medicalPackageAsbitems); + + + + //----推荐组合项目 + + var personDiseaseRiskLevelDtos = await GetDiseaseRiskListByPersonIdAsync(input.PersonId); + //去掉基本套餐中已经包含的组合项目 + foreach (var personDiseaseRiskLevelDto in personDiseaseRiskLevelDtos) + { + 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--; + } + } + } + + var personDiseaseRiskLevelResultDtos = new List(); + foreach (var personDiseaseRiskLevelDto in personDiseaseRiskLevelDtos) + { + if (personDiseaseRiskLevelDto.Asbitems.Where(o => o.AsbitemRecommendLevelId == input.RecommendId).Count() > 0) + { + //只有有推荐的项目才进入推荐风险项目列表 + var personDiseaseRiskLevelResultDto = new PersonDiseaseRiskLevelDto() + { + DiseaseRiskId = personDiseaseRiskLevelDto.DiseaseRiskId, + DiseaseRiskName = personDiseaseRiskLevelDto.DiseaseRiskName, + DisplayOrder = personDiseaseRiskLevelDto.DisplayOrder, + DiseaseRiskLevelId = personDiseaseRiskLevelDto.DiseaseRiskLevelId, + DiseaseRiskLevelName = personDiseaseRiskLevelDto.DiseaseRiskLevelName + }; + 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; + + } /// 获取推荐个人套餐按优先级 /// /// diff --git a/src/Shentun.WebPeis.Domain/CacheService.cs b/src/Shentun.WebPeis.Domain/CacheService.cs index 8765023..5c04bc4 100644 --- a/src/Shentun.WebPeis.Domain/CacheService.cs +++ b/src/Shentun.WebPeis.Domain/CacheService.cs @@ -144,7 +144,11 @@ namespace Shentun.WebPeis private async Task GetMaritalStatusAsync(char id) { - + await _maritalStatusCache.SetAsync('A', new MaritalStatus() + { + MaritalStatusId = id, + MaritalStatusName = "全部" + }); var entity = await _maritalStatusCache.GetOrAddAsync( id, //缓存键 async () => (await _maritalStatusRepository.GetQueryableAsync()).Where(o => o.MaritalStatusId == id).Single() diff --git a/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs b/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs index 898d519..891c40f 100644 --- a/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs +++ b/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs @@ -2,6 +2,7 @@ using Shentun.WebPeis.AppointRegisterAsbitems; using Shentun.WebPeis.Enums; using Shentun.WebPeis.Models; +using Shentun.WebPeis.PatientRegisters; using Shentun.WebPeis.Persons; using System; using System.Collections.Generic; @@ -143,5 +144,55 @@ namespace Shentun.WebPeis } } + + [Fact] + public async Task GetCustomerOrgRecommendMedicalPackageListByPatientRegisterIdAsync() + { + using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true)) + { + + var entity = new RecommendMedicalPackagePatientRegisterIdInputDto() + { + PatientRegisterId = new Guid("3a12fb5a-79c2-eea8-4c67-ef101b82287e"), + PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191") + }; + var list = await _appService.GetCustomerOrgRecommendMedicalPackageListByPatientRegisterIdAsync(entity); + foreach (var item in list) + { + _output.WriteLine("---------------" + item.MedicalPackageName); + foreach (var item2 in item.Asbitems) + { + _output.WriteLine(item2.AsbitemName + "-" + item2.IsBelongMedicalPackage); + } + foreach (var item2 in item.DiseaseRiskLevelAsbitems) + { + _output.WriteLine("---" + item2.DiseaseRiskName + "-" + item2.DiseaseRiskLevelName + "---"); + foreach (var item3 in item2.Asbitems) + { + _output.WriteLine(item3.AsbitemName); + } + } + } + await unitOfWork.CompleteAsync(); + } + } + + + [Fact] + public async Task GetCustomerOrgAppointPatientRegisterByPersonIdAsync() + { + using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true)) + { + + var entity = new PersonIdInputDto() + { + PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191") + }; + var item = await _appService.GetCustomerOrgAppointPatientRegisterByPersonIdAsync(entity); + _output.WriteLine(item.PatientRegisterId.ToString()); + await unitOfWork.CompleteAsync(); + } + } + } }