Browse Source

团检推荐

master
DESKTOP-G961P6V\Zhh 1 year ago
parent
commit
9ef271476e
  1. 10
      src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendCustomerOrgGroupDto.cs
  2. 24
      src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterAndRecommendIdInputDto.cs
  3. 19
      src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterIdInputDto.cs
  4. 142
      src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
  5. 6
      src/Shentun.WebPeis.Domain/CacheService.cs
  6. 51
      test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs

10
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
{
}
}

24
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
{
/// <summary>
/// 人员登记ID
/// </summary>
public Guid PatientRegisterId { get; set; }
/// <summary>
/// 人员ID
/// </summary>
public Guid PersonId { get; set; }
/// <summary>
/// 推荐ID
/// </summary>
public int RecommendId { get; set; }
}
}

19
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
{
/// <summary>
/// 人员登记ID
/// </summary>
public Guid PatientRegisterId { get; set; }
/// <summary>
/// 人员ID
/// </summary>
public Guid PersonId { get; set; }
}
}

142
src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs

@ -606,7 +606,149 @@ namespace Shentun.WebPeis.AppointPatientRegisters
} }
/// <summary>
/// 获取团检推荐套餐列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/AppointPatientRegister/GetCustomerOrgRecommendMedicalPackageListByPatientRegisterId")]
public async Task<List<RecommendMedicalPackageDto>> 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<RecommendMedicalPackageDto>();
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;
}
/// <summary> /// <summary>
/// 获取团检预约推荐项目
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/AppointPatientRegister/GetCustomerOrgRecommendMedicalPackageByPersonAndRecommendId")]
public async Task<RecommendMedicalPackageDto> 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<PersonDiseaseRiskLevelDto>();
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;
}
/// 获取推荐个人套餐按优先级 /// 获取推荐个人套餐按优先级
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>

6
src/Shentun.WebPeis.Domain/CacheService.cs

@ -144,7 +144,11 @@ namespace Shentun.WebPeis
private async Task<MaritalStatus> GetMaritalStatusAsync(char id) private async Task<MaritalStatus> GetMaritalStatusAsync(char id)
{ {
await _maritalStatusCache.SetAsync('A', new MaritalStatus()
{
MaritalStatusId = id,
MaritalStatusName = "全部"
});
var entity = await _maritalStatusCache.GetOrAddAsync( var entity = await _maritalStatusCache.GetOrAddAsync(
id, //缓存键 id, //缓存键
async () => (await _maritalStatusRepository.GetQueryableAsync()).Where(o => o.MaritalStatusId == id).Single() async () => (await _maritalStatusRepository.GetQueryableAsync()).Where(o => o.MaritalStatusId == id).Single()

51
test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs

@ -2,6 +2,7 @@
using Shentun.WebPeis.AppointRegisterAsbitems; using Shentun.WebPeis.AppointRegisterAsbitems;
using Shentun.WebPeis.Enums; using Shentun.WebPeis.Enums;
using Shentun.WebPeis.Models; using Shentun.WebPeis.Models;
using Shentun.WebPeis.PatientRegisters;
using Shentun.WebPeis.Persons; using Shentun.WebPeis.Persons;
using System; using System;
using System.Collections.Generic; 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();
}
}
} }
} }
Loading…
Cancel
Save