From a929513ad43261fa2701f92ab98967be5fc884e5 Mon Sep 17 00:00:00 2001
From: "DESKTOP-G961P6V\\Zhh" <839860190@qq.com>
Date: Sun, 16 Jun 2024 22:54:34 +0800
Subject: [PATCH 1/4] =?UTF-8?q?=E9=A2=84=E7=BA=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
 .../AppointPatientRegisterAppService.cs                    | 2 +-
 .../QuestionRegisters/QuestionRegisterAppService.cs        | 7 -------
 2 files changed, 1 insertion(+), 8 deletions(-)
diff --git a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
index b323d06..0802398 100644
--- a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
+++ b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
@@ -91,7 +91,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
 
         }
         /// 
-        /// 预约,小程序使用
+        /// 创建预约,小程序使用
         /// 
         /// 
         /// 
diff --git a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
index c23b52d..dd5abb2 100644
--- a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
+++ b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
@@ -77,13 +77,6 @@ namespace Shentun.WebPeis.QuestionRegisters
             questionRegisterDto = await GetBasicDataAsync(input);
             if (questionRegister == null)
             {
-                //没有登记过
-                //questionRegister = new QuestionRegister();
-                //questionRegister.PersonId = input.PersonId;
-                //questionRegister = await _questionRegisterManager.CreateAsync(questionRegister);
-                //await _repository.InsertAsync(questionRegister);
-                //questionRegisterDto.QuestionRegisterId = questionRegister.QuestionRegisterId;
-                //await _unitOfWorkManager.Current.SaveChangesAsync();
                 return questionRegisterDto;
             }
             questionRegisterDto.QuestionRegisterId = questionRegister.QuestionRegisterId;
From 5266753523f16fda0c1912b773263b45127f50c7 Mon Sep 17 00:00:00 2001
From: "DESKTOP-G961P6V\\Zhh" <839860190@qq.com>
Date: Mon, 17 Jun 2024 01:25:53 +0800
Subject: [PATCH 2/4] =?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              |  75 ++++
 .../RecommendMedicalPackageDto.cs             |  87 +++++
 ...icalPackagePersonAndRecommendIdInputDto.cs |  18 +
 .../QuestionRegisterDiseaseRiskDto.cs         |   7 +-
 .../AppointPatientRegisterAppService.cs       | 332 +++++++++++++++++-
 .../QuestionRegisterAppService.cs             |   1 +
 .../Models/MedicalPackage.cs                  |   9 +-
 .../Configures/MedicalPackageConfigure.cs     |   6 +
 .../AppointPatientRegisterAppServiceTest.cs   |  26 ++
 9 files changed, 547 insertions(+), 14 deletions(-)
 create mode 100644 src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs
 create mode 100644 src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackageDto.cs
 create mode 100644 src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePersonAndRecommendIdInputDto.cs
diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs
new file mode 100644
index 0000000..251278b
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.AppointPatientRegisters
+{
+    public class PersonDiseaseRiskLevelDto
+    {
+        /// 
+        /// 主键
+        /// 
+        public Guid DiseaseRiskId { get; set; }
+        /// 
+        /// 名称
+        /// 
+
+        public string DiseaseRiskName { get; set; } = null!;
+
+        /// 
+        /// 显示顺序
+        /// 
+
+        public int DisplayOrder { get; set; }
+
+        /// 
+        /// 风险级别ID
+        /// 
+        public Guid? DiseaseRiskLevelId { get; set; }
+        /// 
+        /// 风险级别名称
+        /// 
+
+        public string DiseaseRiskLevelName { get; set; }
+
+        public List Asbitems { get; set; } = new List();
+    }
+
+    public class PersonDiseaseRiskLevelAsbitem
+    {
+        /// 
+        /// 编号
+        /// 
+        public Guid AsbitemId { get; set; }
+
+        /// 
+        /// 名称
+        /// 
+        public string AsbitemName { get; set; } = null!;
+
+        /// 
+        /// 简称
+        /// 
+        public string? ShortName { get; set; }
+
+        /// 
+        /// 价格
+        /// 
+        public decimal Price { get; set; }
+        /// 
+        /// 临床意义
+        /// 
+        public string? ClinicalMeaning { get; set; }
+
+        /// 
+        /// 警告事项
+        /// 
+        public string? Warn { get; set; }
+
+        public char IsBelongMedicalPackage { get; set; }
+
+        public int AsbitemRecommendLevelId { get; set; }
+
+        public int DisplayOrder { get; set; }
+    }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackageDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackageDto.cs
new file mode 100644
index 0000000..febbcfe
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackageDto.cs
@@ -0,0 +1,87 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.AppointPatientRegisters
+{
+    public class RecommendMedicalPackageDto
+    {
+        /// 
+        /// 套餐主档编号
+        /// 
+        public Guid MedicalPackageId { get; set; }
+
+        /// 
+        /// 名称
+        /// 
+        public string MedicalPackageName { get; set; } = null!;
+
+        /// 
+        /// 价格
+        /// 
+        public decimal Price { get; set; }
+
+        /// 
+        /// 套餐和推荐项目总价格
+        /// 
+        public decimal SumPrice { get; set; }
+
+        /// 
+        /// 备注
+        /// 
+        public string? Remark { get; set; }
+
+        /// 
+        /// 显示顺序
+        /// 
+        public int DisplayOrder { get; set; }
+
+        /// 
+        /// 套餐组合项目
+        /// 
+        public List Asbitems { get; set; } = new List();
+
+        /// 
+        /// 风险级别推荐组合项目
+        /// 
+        public List DiseaseRiskLevelAsbitems { get; set; } = new List();
+
+
+    }
+
+    public class RecommendMedicalPackageAsbitem
+    {
+        /// 
+        /// 编号
+        /// 
+        public Guid AsbitemId { get; set; }
+
+        /// 
+        /// 名称
+        /// 
+        public string AsbitemName { get; set; } = null!;
+
+        /// 
+        /// 简称
+        /// 
+        public string? ShortName { get; set; }
+
+        /// 
+        /// 价格
+        /// 
+        public decimal Price { get; set; }
+        /// 
+        /// 临床意义
+        /// 
+        public string? ClinicalMeaning { get; set; }
+
+        /// 
+        /// 警告事项
+        /// 
+        public string? Warn { get; set; }
+
+        public char IsBelongMedicalPackage { get; set; }
+
+        public int DisplayOrder { get; set; }
+    }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePersonAndRecommendIdInputDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePersonAndRecommendIdInputDto.cs
new file mode 100644
index 0000000..a53903c
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePersonAndRecommendIdInputDto.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.AppointPatientRegisters
+{
+    public class RecommendMedicalPackagePersonAndRecommendIdInputDto
+    {
+        /// 
+        /// 人员ID
+        /// 
+        public Guid PersonId { get; set; }
+        /// 
+        /// 推荐ID
+        /// 
+        public int RecommendId { get; set; }
+    }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterDiseaseRiskDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterDiseaseRiskDto.cs
index f39013f..a7b8804 100644
--- a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterDiseaseRiskDto.cs
+++ b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterDiseaseRiskDto.cs
@@ -21,8 +21,13 @@ namespace Shentun.WebPeis.QuestionRegisters
         /// 
 
         public int DisplayOrder { get; set; }
+
+        /// 
+        /// 风险级别ID
+        /// 
+        public Guid? DiseaseRiskLevelId { get; set; }
         /// 
-        /// 风险级别
+        /// 风险级别名称
         /// 
 
         public string DiseaseRiskLevelName { get; set; }
diff --git a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
index 0802398..f9e20fd 100644
--- a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
+++ b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
@@ -8,16 +8,19 @@ using Shentun.WebPeis.Models;
 using Shentun.WebPeis.OrganizationUnits;
 using Shentun.WebPeis.PatientRegisters;
 using Shentun.WebPeis.Persons;
+using Shentun.WebPeis.QuestionRegisters;
 using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
+using System.Security.Cryptography.X509Certificates;
 using System.Text;
 using System.Threading.Tasks;
 using Volo.Abp;
 using Volo.Abp.Application.Services;
 using Volo.Abp.Domain.Repositories;
 using Volo.Abp.Identity;
+using Volo.Abp.Uow;
 using static Volo.Abp.Identity.Settings.IdentitySettingNames;
 
 namespace Shentun.WebPeis.AppointPatientRegisters
@@ -48,6 +51,17 @@ namespace Shentun.WebPeis.AppointPatientRegisters
         private readonly IRepository _patientRepository;
         private readonly IRepository _registerCheckRepository;
         private readonly IRepository _registerCheckAsbitemRepository;
+
+        private readonly IRepository _questionRegisterRepository;
+        private readonly IRepository _questionRegisterItemRepository;
+        private readonly IRepository _questionRegisterAnswerRrepository;
+        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 IRepository _diseaseRiskLevelAsbitemRepository;
         public AppointPatientRegisterAppService(IRepository repository,
              CacheService cacheService,
              IRepository itemTypeRepository,
@@ -66,7 +80,19 @@ namespace Shentun.WebPeis.AppointPatientRegisters
              IRepository patientRegisterRepository,
              IRepository patientRepository,
              IRepository registerCheckRepository,
-             IRepository registerCheckAsbitemRepository
+             IRepository registerCheckAsbitemRepository,
+
+             IRepository questionRegisterRepository,
+            IRepository questionRegisterItemRepository,
+            IRepository questionRegisterAnswerRrepository,
+            IRepository questionRepository,
+            IRepository questionAnswerRepository,
+            IRepository questionSubjectTypeRepository,
+            IRepository diseaseRiskRepository,
+            IRepository diseaseRiskLevelRepository,
+            IRepository diseaseRiskLevelAnswerRepository,
+            IRepository diseaseRiskLevelAsbitemRepository
+
            )
         {
             _repository = repository;
@@ -89,6 +115,18 @@ namespace Shentun.WebPeis.AppointPatientRegisters
             _registerCheckAsbitemRepository = registerCheckAsbitemRepository;
             _registerCheckRepository = registerCheckRepository;
 
+            _questionRegisterRepository = questionRegisterRepository;
+            _questionRegisterItemRepository = questionRegisterItemRepository;
+            _questionRegisterAnswerRrepository = questionRegisterAnswerRrepository;
+            _questionRepository = questionRepository;
+            _questionAnswerRepository = questionAnswerRepository;
+            _questionSubjectTypeRepository = questionSubjectTypeRepository;
+            _diseaseRiskRepository = diseaseRiskRepository;
+            _diseaseRiskLevelRepository = diseaseRiskLevelRepository;
+            _diseaseRiskLevelAnswerRepository = diseaseRiskLevelAnswerRepository;
+            _diseaseRiskLevelAsbitemRepository = diseaseRiskLevelAsbitemRepository;
+
+
         }
         /// 
         /// 创建预约,小程序使用
@@ -226,7 +264,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
                 query = query.Where(o => o.user.PhoneNumber == input.MobilePhone);
             }
 
-            if(input.CompleteFlag != null)
+            if (input.CompleteFlag != null)
             {
                 query = query.Where(o => o.appointPatientRegister.CompleteFlag == input.CompleteFlag);
             }
@@ -280,7 +318,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
         {
             if (input == null) throw new UserFriendlyException("参数不能为空");
 
-           
+
             var query = (from user in await _identityUserRepository.GetQueryableAsync()
                          join person in await _personRepository.GetQueryableAsync()
                          on user.Id equals person.PersonId
@@ -298,7 +336,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
                          on appointRegisterAsbitem.AsbitemId equals asbitem.AsbitemId
                          join customerOrg in await _customerOrgRepository.GetQueryableAsync()
                          on appointPatientRegister.CustomerOrgId equals customerOrg.CustomerOrgId
-                         where appointPatientRegister.PersonId == input.PersonId && 
+                         where appointPatientRegister.PersonId == input.PersonId &&
                                appointPatientRegister.CompleteFlag != AppointPatientRegisterCompleteFlag.CancelAppoint
                          orderby appointPatientRegister.AppointDate
                          select new
@@ -335,7 +373,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
                       MedicalPackageName = o.FirstOrDefault().haveMedicalPackage == null ? "" : o.FirstOrDefault().haveMedicalPackage.MedicalPackageName,
                       MedicalCenterId = o.FirstOrDefault().appointPatientRegister.MedicalCenterId,
                       CompleteFlag = o.FirstOrDefault().appointPatientRegister.CompleteFlag,
-                      
+
                       AppointDate = o.FirstOrDefault().appointPatientRegister.AppointDate,
                       Remark = o.FirstOrDefault().appointPatientRegister.Remark,
                       PregnantFlag = o.FirstOrDefault().appointPatientRegister.PregnantFlag,
@@ -344,7 +382,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
                       SexName = _cacheService.GetSexNameAsync(o.FirstOrDefault().person.SexId).Result,
                       MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(o.FirstOrDefault().person.MaritalStatusId).Result,
                       CustomerOrgName = _customerOrgManager.GetTopCustomerOrgAsync(o.FirstOrDefault().appointPatientRegister.CustomerOrgId).Result.CustomerOrgName
-                      
+
                   }).ToList();
 
 
@@ -360,8 +398,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters
         [HttpPost("api/app/AppointPatientRegister/CancelAppoint")]
         public async Task CancelAppointAsync(AppointPatientRegisterIdInputDto input)
         {
-           var appointPatientRegister = await _repository.GetAsync(o => o.AppointPatientRegisterId == input.AppointPatientRegisterId);
-           if(appointPatientRegister.IsCharge == 'Y')
+            var appointPatientRegister = await _repository.GetAsync(o => o.AppointPatientRegisterId == input.AppointPatientRegisterId);
+            if (appointPatientRegister.IsCharge == 'Y')
             {
                 throw new UserFriendlyException("已收费不能取消");
             }
@@ -453,7 +491,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
         [HttpPost("api/app/AppointPatientRegister/GetCustomerOrgAppointPatientRegisterByPersonId")]
         public async Task GetCustomerOrgAppointPatientRegisterByPersonIdAsync(PersonIdInputDto input)
         {
-          
+
             var patientRegisterDto = (from user in await _identityUserRepository.GetQueryableAsync()
                                       join person in await _personRepository.GetQueryableAsync()
                                       on user.Id equals person.PersonId
@@ -478,8 +516,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters
                                           ChildCustomerOrgName = customerOrg.CustomerOrgName,
                                           CustomerOrgRegisterId = patientRegister.CustomerOrgRegisterId,
                                           CustomerOrgGroupId = patientRegister.CustomerOrgGroupId,
-                                          CustomerOrgGroupName = haveCustomerOrgGroup == null?"": haveCustomerOrgGroup.CustomerOrgGroupName,
-                                          Price = haveCustomerOrgGroup == null ? 0:haveCustomerOrgGroup.Price,
+                                          CustomerOrgGroupName = haveCustomerOrgGroup == null ? "" : haveCustomerOrgGroup.CustomerOrgGroupName,
+                                          Price = haveCustomerOrgGroup == null ? 0 : haveCustomerOrgGroup.Price,
                                           CanAddMoney = haveCustomerOrgGroup == null ? 0 : haveCustomerOrgGroup.CanAddMoney,
                                       }).FirstOrDefault();
             if (patientRegisterDto == null)
@@ -493,7 +531,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
             var appointPatientRegisters = await _repository.GetListAsync(o => o.PersonId == input.PersonId &&
             o.AppointDate >= DateTime.Now.Date && o.CustomerOrgRegisterId == patientRegisterDto.CustomerOrgRegisterId
             && o.CompleteFlag != AppointPatientRegisterCompleteFlag.CancelAppoint);
-            if (appointPatientRegisters .Any())
+            if (appointPatientRegisters.Any())
             {
                 throw new UserFriendlyException("已有今天及之后的团检预约订单,必须先取消订单才能重新预约");
             }
@@ -568,7 +606,277 @@ namespace Shentun.WebPeis.AppointPatientRegisters
 
 
         }
+        /// 
+        /// 获取推荐个人套餐按优先级
+        /// 
+        /// 
+        /// 
+        [HttpPost("api/app/AppointPatientRegister/GetRecommendMedicalPackageByPersonAndRecommendId")]
+        public async Task GetRecommendMedicalPackageByPersonAndRecommendIdAsync(RecommendMedicalPackagePersonAndRecommendIdInputDto input)
+        {
+            var person = await _personRepository.GetAsync(o => o.PersonId == input.PersonId);
+            var medicalPackages = await _medicalPackageRepository.GetListAsync(o => o.IsActive == 'Y' &&
+                  o.IsWebAppoint == 'Y' && o.IsBasicRecommend == 'Y' &&
+                  (o.ForSexId == ForSexFlag.All || o.ForSexId == person.SexId));
+            if (person.MaritalStatusId == MaritalStatusFlag.UnMarried)
+            {
+                //未婚
+                if (medicalPackages.Where(o => o.MaritalStatusId == MaritalStatusFlag.Married).Any())
+                {
+                    medicalPackages = medicalPackages.Where(o =>
+                     o.MaritalStatusId == MaritalStatusFlag.UnMarried).ToList();
+                }
+                else
+                {
+                    medicalPackages = medicalPackages.Where(o => o.MaritalStatusId == MaritalStatusFlag.All).ToList();
+                }
+
+
+            }
+            else if (person.MaritalStatusId != MaritalStatusFlag.UnKnown)
+            {
+                //已婚
+                if (medicalPackages.Where(o => o.MaritalStatusId == MaritalStatusFlag.Married).Any())
+                {
+                    medicalPackages = medicalPackages.Where(o => o.MaritalStatusId == MaritalStatusFlag.Married).ToList();
+                }
+                else
+                {
+                    medicalPackages = medicalPackages.Where(o => o.MaritalStatusId == MaritalStatusFlag.All).ToList();
+                }
+            }
+
+
+            var medicalPackage = medicalPackages.FirstOrDefault();
+            if (medicalPackage == null)
+            {
+                return null;
+            }
+
+            var recommendMedicalPackageDto = new RecommendMedicalPackageDto()
+            {
+                MedicalPackageId = medicalPackage.MedicalPackageId,
+                MedicalPackageName = medicalPackage.MedicalPackageName,
+                DisplayOrder = medicalPackage.DisplayOrder
+            };
 
 
+            var medicalPackageAsbitems = (from medicalPackageDetail in await _medicalPackageDetailRepository.GetQueryableAsync()
+                                          join asbitem in await _asbitemRepository.GetQueryableAsync()
+                                          on medicalPackageDetail.AsbitemId equals asbitem.AsbitemId
+                                          where medicalPackageDetail.MedicalPackageId == medicalPackage.MedicalPackageId
+                                          select new RecommendMedicalPackageAsbitem()
+                                          {
+                                              AsbitemId = medicalPackageDetail.AsbitemId,
+                                              AsbitemName = asbitem.AsbitemName,
+                                              ShortName = asbitem.ShortName,
+                                              Price = asbitem.Price,
+                                              ClinicalMeaning = asbitem.ClinicalMeaning,
+                                              Warn = asbitem.Warn,
+                                              IsBelongMedicalPackage = 'Y',
+                                              DisplayOrder = asbitem.DisplayOrder
+                                          }).ToList();
+
+            recommendMedicalPackageDto.Asbitems.AddRange(medicalPackageAsbitems);
+
+            var questionRegister = (await _repository.GetQueryableAsync())
+             .Where(o => o.PersonId == input.PersonId)
+             .OrderByDescending(o => o.CreationTime)
+             .FirstOrDefault();
+
+            if (questionRegister == null)
+            {
+                return recommendMedicalPackageDto;
+            }
+
+            //----推荐组合项目
+            var personDiseaseRiskLevelDtos = await GetDiseaseRiskListByPersonIdAsync(input.PersonId);
+            foreach (var personDiseaseRiskLevelDto in personDiseaseRiskLevelDtos)
+            {
+                foreach (var personDiseaseRiskLevelAsbitem in personDiseaseRiskLevelDto.Asbitems)
+                {
+                    if (medicalPackageAsbitems.Where(o => o.AsbitemId == personDiseaseRiskLevelAsbitem.AsbitemId).Any())
+                    {
+                        personDiseaseRiskLevelAsbitem.IsBelongMedicalPackage = 'Y';
+                    }
+                }
+            }
+
+            var personDiseaseRiskLevelResultDtos = new List();
+            foreach (var personDiseaseRiskLevelDto in personDiseaseRiskLevelDtos)
+            {
+                var personDiseaseRiskLevelResultDto = new PersonDiseaseRiskLevelDto()
+                {
+                    DiseaseRiskId = personDiseaseRiskLevelDto.DiseaseRiskId,
+                    DiseaseRiskName = personDiseaseRiskLevelDto.DiseaseRiskName,
+                    DisplayOrder = personDiseaseRiskLevelDto.DisplayOrder,
+                    DiseaseRiskLevelId = personDiseaseRiskLevelDto.DiseaseRiskLevelId,
+                    DiseaseRiskLevelName = personDiseaseRiskLevelDto.DiseaseRiskLevelName
+                };
+                personDiseaseRiskLevelResultDtos.Add(personDiseaseRiskLevelResultDto);
+            }
+            //一级推荐组合项目
+            foreach (var personDiseaseRiskLevelResultDto in personDiseaseRiskLevelResultDtos)
+            {
+                var personDiseaseRiskLevelDto = personDiseaseRiskLevelDtos.Where(o =>
+                o.DiseaseRiskLevelId == personDiseaseRiskLevelResultDto.DiseaseRiskLevelId
+                   ).First();
+                var asbitems = personDiseaseRiskLevelDto.Asbitems.Where(o => o.AsbitemRecommendLevelId == input.RecommendId
+                || o.IsBelongMedicalPackage == 'Y')
+                     .ToList();
+                personDiseaseRiskLevelResultDto.Asbitems.AddRange(asbitems);
+            }
+
+            recommendMedicalPackageDto.DiseaseRiskLevelAsbitems.AddRange(personDiseaseRiskLevelResultDtos);
+            return recommendMedicalPackageDto;
+
+        }
+        /// 
+        /// 获取推荐个人套餐列表
+        /// 
+        /// 
+        /// 
+        [HttpPost("api/app/AppointPatientRegister/GetRecommendMedicalPackageListByPersonId")]
+        public async Task> GetRecommendMedicalPackageListByPersonIdAsync(PersonIdInputDto input)
+        {
+            var recommendMedicalPackageDtos = new List();
+            for (var i = 0; i < 3; i++)
+            {
+
+                var recommendMedicalPackageDto = await GetRecommendMedicalPackageByPersonAndRecommendIdAsync(new RecommendMedicalPackagePersonAndRecommendIdInputDto()
+                {
+                    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;
+        }
+        /// 
+        /// 获取疾病风险和对应的组合项目列表
+        /// 
+        /// 
+        /// 
+        private async Task> GetDiseaseRiskListByPersonIdAsync(Guid personId)
+        {
+            var questionRegister = (await _questionRegisterRepository.GetQueryableAsync())
+               .Where(o => o.PersonId == 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 PersonDiseaseRiskLevelDto()
+                {
+                    DiseaseRiskId = o.Key.DiseaseRiskId,
+                    DiseaseRiskName = o.Key.DiseaseRiskName,
+                    DisplayOrder = o.Key.DisplayOrder
+                }).ToList();
+
+            foreach (var diseaseRisk in questionRegisterDiseaseRiskDtos)
+            {
+                //疾病级别必须按优先级别排序,取顺序最高的作为最高风险级
+                var diseaseRiskLevels = diseaseRisks.Where(o => o.diseaseRisk.DiseaseRiskId == diseaseRisk.DiseaseRiskId
+                && o.haveDiseaseRiskLevel != null)
+                     .OrderByDescending(o => o.haveDiseaseRiskLevel == null ? 1 : o.haveDiseaseRiskLevel.DisplayOrder).ToList();
+                DiseaseRiskLevel matchDiseaseRiskLevel = null;
+                foreach (var diseaseRiskLevel in diseaseRiskLevels)
+                {
+                    if (questionRegisterItems.Where(o => diseaseRiskLevel.haveDiseaseRiskLevelAnswer != null &&
+                        o.questionRegisterAnswer.QuestionAnswerId ==
+                       diseaseRiskLevel.haveDiseaseRiskLevelAnswer.QuestionAnswerId).Any())
+                    {
+                        if (diseaseRiskLevel.haveDiseaseRiskLevel != null)
+                        {
+                            matchDiseaseRiskLevel = diseaseRiskLevel.haveDiseaseRiskLevel;
+                            break;
+                        }
+
+                    }
+                }
+                if (matchDiseaseRiskLevel == null)
+                {
+                    matchDiseaseRiskLevel = diseaseRiskLevels.LastOrDefault() == null ? null : diseaseRiskLevels.LastOrDefault().haveDiseaseRiskLevel;
+                }
+                if (matchDiseaseRiskLevel != null)
+                {
+                    diseaseRisk.DiseaseRiskLevelId = matchDiseaseRiskLevel.DiseaseRiskLevelId;
+                    diseaseRisk.DiseaseRiskLevelName = matchDiseaseRiskLevel.DiseaseRiskLevelName;
+
+                    var personDiseaseRiskLevelAsbitems = (from diseaseRiskLevelAsbitem in await _diseaseRiskLevelAsbitemRepository.GetQueryableAsync()
+                                                          join asbitem in await _asbitemRepository.GetQueryableAsync()
+                                                          on diseaseRiskLevelAsbitem.AsbitemId equals asbitem.AsbitemId
+                                                          where diseaseRiskLevelAsbitem.DiseaseRiskLevelId == diseaseRisk.DiseaseRiskLevelId
+                                                          select new PersonDiseaseRiskLevelAsbitem()
+                                                          {
+                                                              AsbitemId = asbitem.AsbitemId,
+                                                              AsbitemName = asbitem.AsbitemName,
+                                                              ShortName = asbitem.ShortName,
+                                                              Price = asbitem.Price,
+                                                              ClinicalMeaning = asbitem.ClinicalMeaning,
+                                                              Warn = asbitem.Warn,
+                                                              DisplayOrder = asbitem.DisplayOrder,
+                                                              AsbitemRecommendLevelId = diseaseRiskLevelAsbitem.AsbitemRecommendLevelId
+                                                          }).ToList();
+                    diseaseRisk.Asbitems.AddRange(personDiseaseRiskLevelAsbitems);
+                }
+
+
+
+            }
+
+            return questionRegisterDiseaseRiskDtos;
+        }
     }
 }
diff --git a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
index dd5abb2..f954e8b 100644
--- a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
+++ b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
@@ -387,6 +387,7 @@ namespace Shentun.WebPeis.QuestionRegisters
                 }
                 else
                 {
+                    diseaseRisk.DiseaseRiskLevelId = matchDiseaseRiskLevel.DiseaseRiskLevelId;
                     diseaseRisk.DiseaseRiskLevelName = matchDiseaseRiskLevel.DiseaseRiskLevelName;
                 }
                     
diff --git a/src/Shentun.WebPeis.Domain/Models/MedicalPackage.cs b/src/Shentun.WebPeis.Domain/Models/MedicalPackage.cs
index cc4deeb..3049bec 100644
--- a/src/Shentun.WebPeis.Domain/Models/MedicalPackage.cs
+++ b/src/Shentun.WebPeis.Domain/Models/MedicalPackage.cs
@@ -50,8 +50,15 @@ public partial class MedicalPackage: AuditedEntity, IHasConcurrencyStamp
     public string? ConcurrencyStamp { get; set; }
 
   
-
+    /// 
+    /// 支持WEB预约
+    /// 
     public char? IsWebAppoint { get; set; }
+    /// 
+    /// 是基础套餐
+    /// 
+
+    public char? IsBasicRecommend { get; set; }
 
     /// 
     /// 适用婚姻状况
diff --git a/src/Shentun.WebPeis.EntityFrameworkCore/Configures/MedicalPackageConfigure.cs b/src/Shentun.WebPeis.EntityFrameworkCore/Configures/MedicalPackageConfigure.cs
index e4359ca..6cac438 100644
--- a/src/Shentun.WebPeis.EntityFrameworkCore/Configures/MedicalPackageConfigure.cs
+++ b/src/Shentun.WebPeis.EntityFrameworkCore/Configures/MedicalPackageConfigure.cs
@@ -69,6 +69,12 @@ namespace Shentun.WebPeis.Configures
                .HasMaxLength(1)
                .IsRequired()
                .HasColumnName("marital_status_id");
+
+            entity.Property(e => e.IsBasicRecommend)
+              .HasMaxLength(1)
+              .IsRequired()
+              .HasDefaultValueSql("'N'::bpchar")
+              .HasColumnName("is_basic_recommend");
         }
     }
 }
diff --git a/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs b/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs
index ddd788a..147de38 100644
--- a/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs
+++ b/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs
@@ -110,5 +110,31 @@ namespace Shentun.WebPeis
                 await unitOfWork.CompleteAsync();
             }
         }
+
+
+        [Fact]
+        public async Task GetRecommendMedicalPackageListByPersonIdAsync()
+        {
+            using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
+            {
+
+                var entity = new PersonIdInputDto()
+                {
+                    PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191")
+                };
+                var list = await _appService.GetRecommendMedicalPackageListByPersonIdAsync(entity);
+                foreach (var item in list)
+                {
+                    _output.WriteLine(item.MedicalPackageName);
+                    foreach(var item2 in item.Asbitems)
+                    {
+                        _output.WriteLine(item2.AsbitemName + "-" + item2.IsBelongMedicalPackage);
+                    }
+
+                }
+                await unitOfWork.CompleteAsync();
+            }
+        }
+
     }
 }
From f400453ae23a35f76442878a611eaa22b3c69b51 Mon Sep 17 00:00:00 2001
From: "DESKTOP-G961P6V\\Zhh" <839860190@qq.com>
Date: Mon, 17 Jun 2024 02:42:47 +0800
Subject: [PATCH 3/4] =?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              | 62 +++++++++----------
 .../RecommendMedicalPackageDto.cs             | 11 ++++
 .../AppointPatientRegisterAppService.cs       | 55 ++++++++--------
 .../AppointPatientRegisterAppServiceTest.cs   | 11 +++-
 4 files changed, 81 insertions(+), 58 deletions(-)
diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs
index 251278b..b08a70b 100644
--- a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs
+++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs
@@ -32,44 +32,44 @@ namespace Shentun.WebPeis.AppointPatientRegisters
 
         public string DiseaseRiskLevelName { get; set; }
 
-        public List Asbitems { get; set; } = new List();
+        public List Asbitems { get; set; } = new List();
     }
 
-    public class PersonDiseaseRiskLevelAsbitem
-    {
-        /// 
-        /// 编号
-        /// 
-        public Guid AsbitemId { get; set; }
+    //public class PersonDiseaseRiskLevelAsbitem
+    //{
+    //    /// 
+    //    /// 编号
+    //    /// 
+    //    public Guid AsbitemId { get; set; }
 
-        /// 
-        /// 名称
-        /// 
-        public string AsbitemName { get; set; } = null!;
+    //    /// 
+    //    /// 名称
+    //    /// 
+    //    public string AsbitemName { get; set; } = null!;
 
-        /// 
-        /// 简称
-        /// 
-        public string? ShortName { get; set; }
+    //    /// 
+    //    /// 简称
+    //    /// 
+    //    public string? ShortName { get; set; }
 
-        /// 
-        /// 价格
-        /// 
-        public decimal Price { get; set; }
-        /// 
-        /// 临床意义
-        /// 
-        public string? ClinicalMeaning { get; set; }
+    //    /// 
+    //    /// 价格
+    //    /// 
+    //    public decimal Price { get; set; }
+    //    /// 
+    //    /// 临床意义
+    //    /// 
+    //    public string? ClinicalMeaning { get; set; }
 
-        /// 
-        /// 警告事项
-        /// 
-        public string? Warn { get; set; }
+    //    /// 
+    //    /// 警告事项
+    //    /// 
+    //    public string? Warn { get; set; }
 
-        public char IsBelongMedicalPackage { get; set; }
+    //    public char IsBelongMedicalPackage { get; set; }
 
-        public int AsbitemRecommendLevelId { get; set; }
+    //    public int AsbitemRecommendLevelId { get; set; }
 
-        public int DisplayOrder { get; set; }
-    }
+    //    public int DisplayOrder { get; set; }
+    //}
 }
diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackageDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackageDto.cs
index febbcfe..709a2b5 100644
--- a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackageDto.cs
+++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackageDto.cs
@@ -80,8 +80,19 @@ namespace Shentun.WebPeis.AppointPatientRegisters
         /// 
         public string? Warn { get; set; }
 
+        /// 
+        /// 是否属于套餐
+        /// 
         public char IsBelongMedicalPackage { get; set; }
 
+        /// 
+        /// 显示顺序
+        /// 
         public int DisplayOrder { get; set; }
+        /// 
+        /// 组合项目推荐级别
+        /// 
+
+        public int AsbitemRecommendLevelId { get; set; }
     }
 }
diff --git a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
index f9e20fd..fb23977 100644
--- a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
+++ b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
@@ -657,6 +657,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters
             {
                 MedicalPackageId = medicalPackage.MedicalPackageId,
                 MedicalPackageName = medicalPackage.MedicalPackageName,
+                Price = medicalPackage.Price,
+                SumPrice = medicalPackage.Price,
                 DisplayOrder = medicalPackage.DisplayOrder
             };
 
@@ -664,6 +666,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters
             var medicalPackageAsbitems = (from medicalPackageDetail in await _medicalPackageDetailRepository.GetQueryableAsync()
                                           join asbitem in await _asbitemRepository.GetQueryableAsync()
                                           on medicalPackageDetail.AsbitemId equals asbitem.AsbitemId
+                                          join itemType in await _itemTypeRepository.GetQueryableAsync()
+                                          on asbitem.ItemTypeId equals itemType.ItemTypeId
                                           where medicalPackageDetail.MedicalPackageId == medicalPackage.MedicalPackageId
                                           select new RecommendMedicalPackageAsbitem()
                                           {
@@ -674,7 +678,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
                                               ClinicalMeaning = asbitem.ClinicalMeaning,
                                               Warn = asbitem.Warn,
                                               IsBelongMedicalPackage = 'Y',
-                                              DisplayOrder = asbitem.DisplayOrder
+                                              DisplayOrder = itemType.DisplayOrder * 100 +  asbitem.DisplayOrder
                                           }).ToList();
 
             recommendMedicalPackageDto.Asbitems.AddRange(medicalPackageAsbitems);
@@ -690,14 +694,18 @@ namespace Shentun.WebPeis.AppointPatientRegisters
             }
 
             //----推荐组合项目
+
             var personDiseaseRiskLevelDtos = await GetDiseaseRiskListByPersonIdAsync(input.PersonId);
+            //去掉基本套餐中已经包含的组合项目
             foreach (var personDiseaseRiskLevelDto in personDiseaseRiskLevelDtos)
             {
-                foreach (var personDiseaseRiskLevelAsbitem in personDiseaseRiskLevelDto.Asbitems)
+                for (var i = 0;  i< personDiseaseRiskLevelDto.Asbitems.Count; i++ )
                 {
+                    var personDiseaseRiskLevelAsbitem = personDiseaseRiskLevelDto.Asbitems[i];
                     if (medicalPackageAsbitems.Where(o => o.AsbitemId == personDiseaseRiskLevelAsbitem.AsbitemId).Any())
                     {
-                        personDiseaseRiskLevelAsbitem.IsBelongMedicalPackage = 'Y';
+                        personDiseaseRiskLevelDto.Asbitems.Remove(personDiseaseRiskLevelAsbitem);
+                        i --;
                     }
                 }
             }
@@ -705,29 +713,25 @@ namespace Shentun.WebPeis.AppointPatientRegisters
             var personDiseaseRiskLevelResultDtos = new List();
             foreach (var personDiseaseRiskLevelDto in personDiseaseRiskLevelDtos)
             {
-                var personDiseaseRiskLevelResultDto = new PersonDiseaseRiskLevelDto()
+                if(personDiseaseRiskLevelDto.Asbitems.Where(o=>o.AsbitemRecommendLevelId == input.RecommendId).Count() > 0)
                 {
-                    DiseaseRiskId = personDiseaseRiskLevelDto.DiseaseRiskId,
-                    DiseaseRiskName = personDiseaseRiskLevelDto.DiseaseRiskName,
-                    DisplayOrder = personDiseaseRiskLevelDto.DisplayOrder,
-                    DiseaseRiskLevelId = personDiseaseRiskLevelDto.DiseaseRiskLevelId,
-                    DiseaseRiskLevelName = personDiseaseRiskLevelDto.DiseaseRiskLevelName
-                };
-                personDiseaseRiskLevelResultDtos.Add(personDiseaseRiskLevelResultDto);
-            }
-            //一级推荐组合项目
-            foreach (var personDiseaseRiskLevelResultDto in personDiseaseRiskLevelResultDtos)
-            {
-                var personDiseaseRiskLevelDto = personDiseaseRiskLevelDtos.Where(o =>
-                o.DiseaseRiskLevelId == personDiseaseRiskLevelResultDto.DiseaseRiskLevelId
-                   ).First();
-                var asbitems = personDiseaseRiskLevelDto.Asbitems.Where(o => o.AsbitemRecommendLevelId == input.RecommendId
-                || o.IsBelongMedicalPackage == 'Y')
-                     .ToList();
-                personDiseaseRiskLevelResultDto.Asbitems.AddRange(asbitems);
+                    //只有有推荐的项目才进入推荐风险项目列表
+                    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.AddRange(personDiseaseRiskLevelResultDtos);
+            recommendMedicalPackageDto.DiseaseRiskLevelAsbitems = personDiseaseRiskLevelResultDtos;
             return recommendMedicalPackageDto;
 
         }
@@ -858,7 +862,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters
                                                           join asbitem in await _asbitemRepository.GetQueryableAsync()
                                                           on diseaseRiskLevelAsbitem.AsbitemId equals asbitem.AsbitemId
                                                           where diseaseRiskLevelAsbitem.DiseaseRiskLevelId == diseaseRisk.DiseaseRiskLevelId
-                                                          select new PersonDiseaseRiskLevelAsbitem()
+                                                          orderby asbitem.DisplayOrder
+                                                          select new RecommendMedicalPackageAsbitem()
                                                           {
                                                               AsbitemId = asbitem.AsbitemId,
                                                               AsbitemName = asbitem.AsbitemName,
diff --git a/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs b/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs
index 147de38..898d519 100644
--- a/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs
+++ b/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs
@@ -125,12 +125,19 @@ namespace Shentun.WebPeis
                 var list = await _appService.GetRecommendMedicalPackageListByPersonIdAsync(entity);
                 foreach (var item in list)
                 {
-                    _output.WriteLine(item.MedicalPackageName);
+                    _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();
             }
From 46697027abf9dc22b2a4ce1c2223c2b12fde9c1b Mon Sep 17 00:00:00 2001
From: "DESKTOP-G961P6V\\Zhh" <839860190@qq.com>
Date: Mon, 17 Jun 2024 22:35:30 +0800
Subject: [PATCH 4/4] =?UTF-8?q?=E5=A5=97=E9=A4=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
 src/Shentun.WebPeis.Domain/Models/MedicalPackage.cs  | 10 ++++++++++
 .../Configures/MedicalPackageConfigure.cs            | 12 ++++++++++++
 2 files changed, 22 insertions(+)
diff --git a/src/Shentun.WebPeis.Domain/Models/MedicalPackage.cs b/src/Shentun.WebPeis.Domain/Models/MedicalPackage.cs
index 3049bec..241f175 100644
--- a/src/Shentun.WebPeis.Domain/Models/MedicalPackage.cs
+++ b/src/Shentun.WebPeis.Domain/Models/MedicalPackage.cs
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using Volo.Abp.Domain.Entities.Auditing;
 using Volo.Abp.Domain.Entities;
+using System.ComponentModel.DataAnnotations.Schema;
 
 namespace Shentun.WebPeis.Models;
 
@@ -65,6 +66,15 @@ public partial class MedicalPackage: AuditedEntity, IHasConcurrencyStamp
     /// 
     public char MaritalStatusId { get; set; }
 
+    /// 
+    /// 适用年龄下限
+    /// 
+    public short AgeLowerLimit { get; set; }
+    /// 
+    /// 适用年龄上限
+    /// 
+    public short AgeUpperLimit { get; set; }
+
     public virtual ICollection MedicalPackageDetails { get; set; } = new List();
 
     public override object?[] GetKeys()
diff --git a/src/Shentun.WebPeis.EntityFrameworkCore/Configures/MedicalPackageConfigure.cs b/src/Shentun.WebPeis.EntityFrameworkCore/Configures/MedicalPackageConfigure.cs
index 6cac438..9ccc031 100644
--- a/src/Shentun.WebPeis.EntityFrameworkCore/Configures/MedicalPackageConfigure.cs
+++ b/src/Shentun.WebPeis.EntityFrameworkCore/Configures/MedicalPackageConfigure.cs
@@ -75,6 +75,18 @@ namespace Shentun.WebPeis.Configures
               .IsRequired()
               .HasDefaultValueSql("'N'::bpchar")
               .HasColumnName("is_basic_recommend");
+
+            entity.Property(e => e.AgeLowerLimit)
+                .HasComment("适用年龄下限")
+                .IsRequired()
+                .HasColumnName("age_lower_limit")
+                .HasDefaultValueSql("0");
+
+            entity.Property(e => e.AgeUpperLimit)
+                .HasColumnName("age_upper_limit")
+                .HasDefaultValueSql("200")
+                .HasComment("适用年龄上限")
+                .IsRequired();
         }
     }
 }