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();
+            }
+        }
+
     }
 }