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