Browse Source

预约

master
DESKTOP-G961P6V\Zhh 1 year ago
parent
commit
3cf8f587f5
  1. 2
      src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs
  2. 1
      src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterIdInputDto.cs
  3. 5
      src/Shentun.WebPeis.Application.Contracts/Persons/CreatePersonDto.cs
  4. 13
      src/Shentun.WebPeis.Application.Contracts/Persons/UpdatePersonDto.cs
  5. 24
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonDiseaseRiskIdInputDto.cs
  6. 148
      src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
  7. 32
      src/Shentun.WebPeis.Application/Persons/PersonAppService.cs
  8. 125
      src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
  9. 5
      src/Shentun.WebPeis.Domain/Models/Person.cs
  10. 38
      src/Shentun.WebPeis.Domain/Persons/PersonManager.cs
  11. 3
      src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs
  12. 15
      src/Shentun.WebPeis.EntityFrameworkCore/Configures/AppointPatientRegisterConfigure.cs
  13. 16
      src/Shentun.WebPeis.EntityFrameworkCore/Configures/PersonConfigure.cs
  14. 4
      test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs

2
src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonDiseaseRiskLevelDto.cs

@ -32,6 +32,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters
public string DiseaseRiskLevelName { get; set; }
public int DiseaseRiskLevelDisplayOrder { get; set; }
public List<RecommendMedicalPackageAsbitem> Asbitems { get; set; } = new List<RecommendMedicalPackageAsbitem>();
}

1
src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/RecommendMedicalPackagePatientRegisterIdInputDto.cs

@ -15,5 +15,6 @@ namespace Shentun.WebPeis.AppointPatientRegisters
/// 人员ID
/// </summary>
public Guid PersonId { get; set; }
}
}

5
src/Shentun.WebPeis.Application.Contracts/Persons/CreatePersonDto.cs

@ -91,6 +91,11 @@ namespace Shentun.WebPeis.Persons
public decimal? Weight { get; set; }
/// <summary>
/// 备孕标志
/// </summary>
public char? PregnantFlag { get; set; } = '0';
/// <summary>
/// 微信JsCode
/// </summary>

13
src/Shentun.WebPeis.Application.Contracts/Persons/UpdatePersonDto.cs

@ -88,24 +88,29 @@ namespace Shentun.WebPeis.Persons
public decimal? Weight { get; set; }
/// <summary>
/// 备孕标志
/// </summary>
public char? PregnantFlag { get; set; } = '0';
/// <summary>
/// 短信校验码
/// </summary>
public string SmsVerifyCode { get; set; }
public string? SmsVerifyCode { get; set; }
/// <summary>
/// 短信校验码键
/// </summary>
public string SmsVerifyCodeKey { get; set; }
public string? SmsVerifyCodeKey { get; set; }
/// <summary>
/// 会话键
/// </summary>
public string SessionKey { get; set; }
public string? SessionKey { get; set; }
/// <summary>
/// 会话键值
/// </summary>
public string SessionKeyValue { get; set; }
public string? SessionKeyValue { get; set; }
}
}

24
src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonDiseaseRiskIdInputDto.cs

@ -15,19 +15,19 @@ namespace Shentun.WebPeis.QuestionRegisters
/// </summary>
public Guid DiseaseRiskId { get; set; }
/// <summary>
/// 备孕标志
/// </summary>
public char PregnantFlag { get; set; }
/// <summary>
/// 身高
/// </summary>
///// <summary>
///// 备孕标志
///// </summary>
//public char PregnantFlag { get; set; }
///// <summary>
///// 身高
///// </summary>
public decimal? Height { get; set; }
/// <summary>
/// 体重
/// </summary>
//public decimal? Height { get; set; }
///// <summary>
///// 体重
///// </summary>
public decimal? Weight { get; set; }
//public decimal? Weight { get; set; }
}
}

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

@ -690,7 +690,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
};
var medicalPackageAsbitems = asbitems.Select(o=>
var medicalPackageAsbitems = asbitems.Select(o =>
new RecommendMedicalPackageAsbitem()
{
AsbitemId = o.asbitem.AsbitemId,
@ -839,19 +839,19 @@ namespace Shentun.WebPeis.AppointPatientRegisters
//----推荐组合项目
var personDiseaseRiskLevelDtos = await GetDiseaseRiskListByPersonIdAsync(input.PersonId);
var personDiseaseRiskLevelDtos = await GetDiseaseRiskListByPersonIdAsync(input.PersonId, input.RecommendId);
//var pregnancyAsbitems = await _asbitemRepository.GetListAsync(o =>
//o.ForPregnantFlag == ForPregnantFlag.PreparePregnancy || o.ForPregnantFlag == ForPregnantFlag.Pregnancy);
//去掉基本套餐已经包含的组合项目和和怀孕禁止检查的项目
foreach (var personDiseaseRiskLevelDto in personDiseaseRiskLevelDtos)
{
for (var i = 0; i< personDiseaseRiskLevelDto.Asbitems.Count; i++ )
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 --;
i--;
}
}
@ -860,7 +860,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
var personDiseaseRiskLevelResultDtos = new List<PersonDiseaseRiskLevelDto>();
foreach (var personDiseaseRiskLevelDto in personDiseaseRiskLevelDtos)
{
if(personDiseaseRiskLevelDto.Asbitems.Where(o=>o.AsbitemRecommendLevelId == input.RecommendId).Count() > 0)
if (personDiseaseRiskLevelDto.Asbitems.Where(o => o.AsbitemRecommendLevelId == input.RecommendId).Count() > 0)
{
//只有有推荐的项目才进入推荐风险项目列表
var personDiseaseRiskLevelResultDto = new PersonDiseaseRiskLevelDto()
@ -899,15 +899,15 @@ namespace Shentun.WebPeis.AppointPatientRegisters
PersonId = input.PersonId,
RecommendId = i + 1
});
if(i == 0)
if (i == 0)
{
recommendMedicalPackageDto.MedicalPackageName = "推荐必查方案";
}
else if(i == 1)
else if (i == 1)
{
recommendMedicalPackageDto.MedicalPackageName = "精准筛查方案";
}
else if(i == 2)
else if (i == 2)
{
recommendMedicalPackageDto.MedicalPackageName = "深入检查方案";
}
@ -920,7 +920,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private async Task<List<PersonDiseaseRiskLevelDto>> GetDiseaseRiskListByPersonIdAsync(Guid personId)
private async Task<List<PersonDiseaseRiskLevelDto>> GetDiseaseRiskListByPersonIdAsync(Guid personId, int recommendId = 1)
{
var questionRegister = (await _questionRegisterRepository.GetQueryableAsync())
.Where(o => o.PersonId == personId)
@ -931,7 +931,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
{
return null;
}
//获取人员所有答案和对应的组合项目
var questionRegisterItems = (from questionRegisterItem in await _questionRegisterItemRepository.GetQueryableAsync()
join questionRegisterAnswer in await _questionRegisterAnswerRrepository.GetQueryableAsync()
on questionRegisterItem.QuestionRegisterItemId equals questionRegisterAnswer.QuestionRegisterItemId
@ -941,7 +941,13 @@ namespace Shentun.WebPeis.AppointPatientRegisters
on questionRegisterItem.QuestionId equals question.QuestionId
join questionSubjectType in await _questionSubjectTypeRepository.GetQueryableAsync()
on question.QuestionSubjectTypeId equals questionSubjectType.QuestionSubjectTypeId
where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId
join questionAnswerAsbitem in await _questionAnswerAsbitemRepository.GetQueryableAsync()
on questionRegisterAnswer.QuestionAnswerId equals questionAnswerAsbitem.QuestionAnswerId
join asbitem in await _asbitemRepository.GetQueryableAsync()
on questionAnswerAsbitem.AsbitemId equals asbitem.AsbitemId
where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId &&
questionAnswerAsbitem.AsbitemRecommendLevelId == recommendId
orderby questionSubjectType.DisplayOrder, question.DisplayOrder
select new
{
@ -949,9 +955,12 @@ namespace Shentun.WebPeis.AppointPatientRegisters
question,
questionRegisterItem,
questionRegisterAnswer,
questionAnswer
questionAnswerAsbitem,
questionAnswer,
asbitem,
}).ToList();
//获取所有疾病风险基础字典
var diseaseRisks = (from diseaseRisk in await _diseaseRiskRepository.GetQueryableAsync()
join diseaseRiskLevel in await _diseaseRiskLevelRepository.GetQueryableAsync()
on diseaseRisk.DiseaseRiskId equals diseaseRiskLevel.DiseaseRiskId into emptyDiseaseRiskLevel
@ -967,6 +976,121 @@ namespace Shentun.WebPeis.AppointPatientRegisters
haveQuestionAnswerRiskLevel
}).ToList();
//获取人员所有答案
var questionAnswers = questionRegisterItems.GroupBy(o => o.questionAnswer)
.Select(x => new QuestionAnswer
{
QuestionAnswerId = x.Key.QuestionAnswerId,
QuestionAnswerName = x.Key.QuestionAnswerName,
DisplayOrder = x.Key.DisplayOrder,
}).OrderBy(m => m.DisplayOrder).ToList();
//获取答案对应的所有风险级别和组合项目
var personDiseaseRiskLevels = new List<PersonDiseaseRiskLevelDto>();
foreach (var questionAnswer in questionAnswers)
{
//获取答案对应的所有组合项目
var questionAnswerAsbitems = questionRegisterItems.Where(o => o.questionAnswer.QuestionAnswerId == questionAnswer.QuestionAnswerId)
.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,
DisplayOrder = o.asbitem.DisplayOrder,
AsbitemRecommendLevelId = o.questionAnswerAsbitem.AsbitemRecommendLevelId
}
).ToList();
//获取答案对应的所有风险级别
var personDiseaseRiskLevelDtos = diseaseRisks.Where(o => o.haveQuestionAnswerRiskLevel != null &&
o.haveQuestionAnswerRiskLevel.QuestionAnswerId == questionAnswer.QuestionAnswerId)
.Select(o => new PersonDiseaseRiskLevelDto()
{
DiseaseRiskId = o.diseaseRisk.DiseaseRiskId,
DiseaseRiskName = o.diseaseRisk.DiseaseRiskName,
DisplayOrder = o.diseaseRisk.DisplayOrder,
DiseaseRiskLevelId = o.haveDiseaseRiskLevel.DiseaseRiskLevelId,
DiseaseRiskLevelName = o.haveDiseaseRiskLevel.DiseaseRiskLevelName,
DiseaseRiskLevelDisplayOrder = o.haveDiseaseRiskLevel.DisplayOrder,
Asbitems = questionAnswerAsbitems
}).DistinctBy(o => o.DiseaseRiskId).ToList();
if(!personDiseaseRiskLevelDtos.Any())
{
//如果答案没有对应的风险级别则虚拟一个,用答案名称作为风险级别
var personDiseaseRiskLevelDto = new PersonDiseaseRiskLevelDto()
{
DiseaseRiskId = questionAnswer.QuestionAnswerId,
DiseaseRiskName = questionAnswer.QuestionAnswerName,
DisplayOrder = 1000,
DiseaseRiskLevelId = questionAnswer.QuestionAnswerId,
DiseaseRiskLevelName = questionAnswer.QuestionAnswerName,
DiseaseRiskLevelDisplayOrder = 1000,
Asbitems = questionAnswerAsbitems
};
personDiseaseRiskLevels.Add(personDiseaseRiskLevelDto);
}
else
{
personDiseaseRiskLevels.AddRange(personDiseaseRiskLevelDtos);
}
}
//合并同一个疾病风险中的不同组合项目,将低级别风险中的组合项目合并到高风险级别中
personDiseaseRiskLevels = personDiseaseRiskLevels.OrderBy(o => o.DisplayOrder).ThenByDescending(o => o.DiseaseRiskLevelDisplayOrder).ToList();
for (var i = 0; i < personDiseaseRiskLevels.Count; i++)
{
var loweriseaseRiskLevels = personDiseaseRiskLevels.Where(o => o.DiseaseRiskId == personDiseaseRiskLevels[i].DiseaseRiskId &&
o.DiseaseRiskLevelDisplayOrder < personDiseaseRiskLevels[i].DiseaseRiskLevelDisplayOrder).ToList();
foreach (var loweriseaseRiskLevel in loweriseaseRiskLevels)
{
personDiseaseRiskLevels[i].Asbitems.AddRange(loweriseaseRiskLevel.Asbitems);
}
personDiseaseRiskLevels.RemoveAll(loweriseaseRiskLevels);
}
//去掉相同级别的相同组合项目
foreach (var personDiseaseRiskLevel in personDiseaseRiskLevels)
{
personDiseaseRiskLevel.Asbitems = personDiseaseRiskLevel.Asbitems.GroupBy(o => new { o.AsbitemId, o.AsbitemRecommendLevelId })
.Select(o => new RecommendMedicalPackageAsbitem()
{
AsbitemId = o.FirstOrDefault().AsbitemId,
AsbitemName = o.FirstOrDefault().AsbitemName,
ShortName = o.FirstOrDefault().ShortName,
Price = o.FirstOrDefault().Price,
ClinicalMeaning = o.FirstOrDefault().ClinicalMeaning,
Warn = o.FirstOrDefault().Warn,
DisplayOrder = o.FirstOrDefault().DisplayOrder,
AsbitemRecommendLevelId = o.FirstOrDefault().AsbitemRecommendLevelId
}).ToList();
}
//获取有共同组合项目的风险级别
var newPersonDiseaseRiskLevelDtos = new List<PersonDiseaseRiskLevelDto>();
foreach (var personDiseaseRiskLevel in personDiseaseRiskLevels)
{
foreach (var personDiseaseRiskLevel2 in personDiseaseRiskLevels)
{
if (personDiseaseRiskLevel == personDiseaseRiskLevel2)
{
continue;
}
for (var i = 0; i < personDiseaseRiskLevel2.Asbitems.Count(); i++)
{
if (personDiseaseRiskLevel.Asbitems.Where(o => o.AsbitemId == personDiseaseRiskLevel2.Asbitems[i].AsbitemId).Any())
{
personDiseaseRiskLevel.DiseaseRiskName += "," + personDiseaseRiskLevel2.DiseaseRiskName;
personDiseaseRiskLevel2.Asbitems.Remove(personDiseaseRiskLevel2.Asbitems[i]);
i--;
}
}
}
}
return personDiseaseRiskLevels;
var questionRegisterDiseaseRiskDtos = diseaseRisks.GroupBy(o => o.diseaseRisk)
.Select(o => new PersonDiseaseRiskLevelDto()
{

32
src/Shentun.WebPeis.Application/Persons/PersonAppService.cs

@ -37,6 +37,7 @@ using Shentun.WebPeis.CustomerOrgs;
using Shentun.Utilities.Enums;
using Shentun.Sms.Client;
using Shentun.Utilities;
using IdentityModel;
namespace Shentun.WebPeis.Persons
{
/// <summary>
@ -95,7 +96,21 @@ namespace Shentun.WebPeis.Persons
{
var entity = await _repository.GetAsync(o => o.PersonId == input.PersonId);
var entityDto = ObjectMapper.Map<Person, PersonDto>(entity);
var user = await _identityUserRepository.GetAsync(input.PersonId);
entityDto.MobileTelephone = user.PhoneNumber;
entityDto.PersonName = user.Name;
entityDto.SexName = await _cacheService.GetSexNameAsync(entityDto.SexId);
entityDto.MaritalStatusName = await _cacheService.GetMaritalStatusNameAsync(entityDto.MaritalStatusId);
entityDto.NationName = await _cacheService.GetNationNameAsync(entityDto.NationId);
var questionRegister = await _questionRegisterRepository.FindAsync(o=>o.PersonId == input.PersonId);
if(questionRegister != null)
{
entityDto.IsHaveQuestionRegister = 'Y';
}
else
{
entityDto.IsHaveQuestionRegister = 'N';
}
return entityDto;
}
@ -185,6 +200,7 @@ namespace Shentun.WebPeis.Persons
throw new UserFriendlyException("无效的短信校验码或已过期");
}
var person = await _repository.FindAsync(o => o.IdNo == input.IdNo);
if (person != null)
{
@ -307,14 +323,22 @@ namespace Shentun.WebPeis.Persons
var person = await _repository.GetAsync(o => o.PersonId == input.PersonId);
await _personManager.UpdateAsync(entity, person);
await _repository.UpdateAsync(person);
await _repository.UpdateAsync(person,true);
//更新用户信息
var user = await _identityUserRepository.GetAsync(person.PersonId);
user.Name = input.PersonName;
await _identityUserRepository.UpdateAsync(user);
await _identityUserRepository.UpdateAsync(user,true);
return ObjectMapper.Map<Person, PersonDto>(person);
var personDto = await GetByIdAsync(new PersonIdInputDto() { PersonId = input.PersonId });
//personDto.MobileTelephone = user.PhoneNumber;
//personDto.PersonName = user.Name;
return personDto;
}
/// <summary>

125
src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs

@ -36,9 +36,11 @@ namespace Shentun.WebPeis.QuestionRegisters
private readonly IRepository<QuestionAnswerRiskLevel> _questionAnswerRiskLevelRepository;
private readonly IRepository<QuestionAnswerAsbitem> _questionAnswerAsbitemRepository;
private readonly IRepository<Asbitem> _asbitemRepository;
private readonly IRepository<Person> _personRepository;
private readonly QuestionRegisterManager _questionRegisterManager;
private readonly IUnitOfWorkManager _unitOfWorkManager;
private readonly SysParmValueManager _sysParmValueManager;
private readonly PersonManager _personManager;
public QuestionRegisterAppService(IRepository<QuestionRegister> repository,
IRepository<QuestionRegisterItem> questionRegisterItemRepository,
IRepository<QuestionRegisterAnswer> questionRegisterAnswerRrepository,
@ -52,7 +54,9 @@ namespace Shentun.WebPeis.QuestionRegisters
IRepository<QuestionAnswerRiskLevel> questionAnswerRiskLevelRepository,
IRepository<QuestionAnswerAsbitem> questionAnswerAsbitemRepository,
IRepository<Asbitem> asbitemRepository,
SysParmValueManager sysParmValueManager)
SysParmValueManager sysParmValueManager,
IRepository<Person> personRepository,
PersonManager personManager)
{
_repository = repository;
_questionRegisterItemRepository = questionRegisterItemRepository;
@ -68,6 +72,8 @@ namespace Shentun.WebPeis.QuestionRegisters
_questionAnswerAsbitemRepository = questionAnswerAsbitemRepository;
_asbitemRepository = asbitemRepository;
_sysParmValueManager = sysParmValueManager;
_personRepository = personRepository;
_personManager = personManager;
}
@ -231,6 +237,26 @@ namespace Shentun.WebPeis.QuestionRegisters
}
}
//超重信息
//var person = await _personRepository.GetAsync(o => o.PersonId == input.PersonId);
_personManager.IsOverweight(input.PersonId);
var isOverweight = await _personManager.IsOverweight(input.PersonId); //await IsOverweight(person.Height, person.Weight);
if (isOverweight)
{
//危险因素编码是03
var personSubjectTypeDto = personSubjectTypeDtos.Where(o => o.QuestionSubjectTypeId == "03").Single();
var questionAnswerOverweightCodeStr = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "question_answer_overweight_code");
if (!Guid.TryParse(questionAnswerOverweightCodeStr, out var questionAnswerOverweightCode))
{
throw new UserFriendlyException("在系统参数中超重编码维护不正确");
}
var questionAnswer = await _questionAnswerRepository.GetAsync(o => o.QuestionAnswerId == questionAnswerOverweightCode);
personSubjectTypeDto.Answers.Add(new PersonSubjectTypeQuestionAnswer()
{
QuestionAnswerName = questionAnswer.QuestionAnswerName,
DisplayOrder = questionAnswer.DisplayOrder,
});
}
return personSubjectTypeDtos;
}
@ -240,7 +266,7 @@ namespace Shentun.WebPeis.QuestionRegisters
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/QuestionRegister/GetQuestionRegisterListByPersonId")]
public async Task<List<QuestionRegisterItemResultDto>> GetQuestionRegisterListByPersonIdAsync(PersonAppointInputDto input)
public async Task<List<QuestionRegisterItemResultDto>> GetQuestionRegisterListByPersonIdAsync(PersonIdInputDto input)
{
var questionRegister = (await _repository.GetQueryableAsync())
.Where(o => o.PersonId == input.PersonId)
@ -328,7 +354,7 @@ namespace Shentun.WebPeis.QuestionRegisters
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/QuestionRegister/GetDiseaseRiskListByPersonId")]
public async Task<List<QuestionRegisterDiseaseRiskDto>> GetDiseaseRiskListByPersonIdAsync(PersonAppointInputDto input)
public async Task<List<QuestionRegisterDiseaseRiskDto>> GetDiseaseRiskListByPersonIdAsync(PersonIdInputDto input)
{
var questionRegister = (await _repository.GetQueryableAsync())
.Where(o => o.PersonId == input.PersonId)
@ -383,6 +409,20 @@ namespace Shentun.WebPeis.QuestionRegisters
DisplayOrder = o.Key.DisplayOrder
}).ToList();
//超重信息
var isOverweight = await _personManager.IsOverweight(input.PersonId);
QuestionAnswer overweightQuestionAnswer = null;
if (isOverweight)
{
var questionAnswerOverweightCodeStr = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "question_answer_overweight_code");
if (!Guid.TryParse(questionAnswerOverweightCodeStr, out var questionAnswerOverweightCode))
{
throw new UserFriendlyException("在系统参数中超重编码维护不正确");
}
overweightQuestionAnswer = await _questionAnswerRepository.GetAsync(o => o.QuestionAnswerId == questionAnswerOverweightCode);
}
foreach (var diseaseRisk in questionRegisterDiseaseRiskDtos)
{
//疾病级别必须按优先级别排序,取顺序最高的作为最高风险级
@ -403,6 +443,15 @@ namespace Shentun.WebPeis.QuestionRegisters
}
}
//超重
if (overweightQuestionAnswer != null && diseaseRiskLevel.haveQuestionAnswerRiskLevel != null)
{
if (diseaseRiskLevel.haveQuestionAnswerRiskLevel.QuestionAnswerId == overweightQuestionAnswer.QuestionAnswerId)
{
matchDiseaseRiskLevel = diseaseRiskLevel.haveDiseaseRiskLevel;
break;
}
}
}
if (matchDiseaseRiskLevel == null)
{
@ -435,23 +484,38 @@ namespace Shentun.WebPeis.QuestionRegisters
{
if (input == null) { throw new UserFriendlyException("input参数不能为空"); }
var questionRegister = (await _repository.GetQueryableAsync())
.Where(o => o.PersonId == input.PersonId)
.OrderByDescending(o => o.CreationTime)
.FirstOrDefault();
if (questionRegister == null)
{
return null;
}
var diseaseRisk = await _diseaseRiskRepository.GetAsync(o => o.DiseaseRiskId == input.DiseaseRiskId);
var diseaseRiskLevels = (await _diseaseRiskLevelRepository.GetListAsync(o => o.DiseaseRiskId == input.DiseaseRiskId))
.OrderBy(o => o.DisplayOrder);
//获取人员疾病风险列表
var diseaseRiskList = await GetDiseaseRiskListByPersonIdAsync(new PersonAppointInputDto() { PersonId = input.PersonId });
var diseaseRiskList = await GetDiseaseRiskListByPersonIdAsync(new PersonIdInputDto() { PersonId = input.PersonId });
var personDiseaseRisk = diseaseRiskList.Where(o => o.DiseaseRiskId == input.DiseaseRiskId).First();
var diseaseRiskLevel = diseaseRiskLevels.Where(o => o.DiseaseRiskLevelId == personDiseaseRisk.DiseaseRiskLevelId).FirstOrDefault();
var asbitems = (from questionAnswerAsbitem in await _questionAnswerAsbitemRepository.GetQueryableAsync()
var asbitems = (from questionRegisterItem in await _questionRegisterItemRepository.GetQueryableAsync()
join questionRegisterAnswer in await _questionRegisterAnswerRrepository.GetQueryableAsync()
on questionRegisterItem.QuestionRegisterItemId equals questionRegisterAnswer.QuestionRegisterItemId
join questionAnswerAsbitem in await _questionAnswerAsbitemRepository.GetQueryableAsync()
on questionRegisterAnswer.QuestionAnswerId equals questionAnswerAsbitem.QuestionAnswerId
join asbitem in await _asbitemRepository.GetQueryableAsync()
on questionAnswerAsbitem.AsbitemId equals asbitem.AsbitemId
join questionAnswerRiskLevel in await _questionAnswerRiskLevelRepository.GetQueryableAsync()
on questionAnswerAsbitem.QuestionAnswerId equals questionAnswerRiskLevel.QuestionAnswerId
where questionAnswerRiskLevel.DiseaseRiskLevelId == diseaseRiskLevel.DiseaseRiskLevelId
where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId &&
questionAnswerRiskLevel.DiseaseRiskLevelId == diseaseRiskLevel.DiseaseRiskLevelId
orderby asbitem.DisplayOrder
select asbitem).ToList();
select asbitem).Distinct().ToList();
var questionRegisterDiseaseRiskSingleDto = new QuestionRegisterDiseaseRiskSingleDto()
{
@ -475,15 +539,50 @@ namespace Shentun.WebPeis.QuestionRegisters
}).ToList()
};
//超重信息
var questionRegister = (await _repository.GetQueryableAsync())
.Where(o => o.PersonId == input.PersonId)
.OrderByDescending(o => o.CreationTime)
.FirstOrDefault();
if (questionRegister == null)
var isOverweight = await _personManager.IsOverweight(input.PersonId);
QuestionAnswer overweightQuestionAnswer = null;
if (isOverweight)
{
return null;
var questionAnswerOverweightCodeStr = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "question_answer_overweight_code");
if (!Guid.TryParse(questionAnswerOverweightCodeStr, out var questionAnswerOverweightCode))
{
throw new UserFriendlyException("在系统参数中超重编码维护不正确");
}
overweightQuestionAnswer = await _questionAnswerRepository.GetAsync(o => o.QuestionAnswerId == questionAnswerOverweightCode);
var questionAnswerRiskLevel = await _questionAnswerRiskLevelRepository.FindAsync(o => o.QuestionAnswerId == overweightQuestionAnswer.QuestionAnswerId &&
o.DiseaseRiskLevelId == diseaseRiskLevel.DiseaseRiskLevelId);
if (questionAnswerRiskLevel != null)
{
var questionAnswerAsbitems = (from questionAnswerAsbitem in await _questionAnswerAsbitemRepository.GetQueryableAsync()
join asbitem in await _asbitemRepository.GetQueryableAsync()
on questionAnswerAsbitem.AsbitemId equals asbitem.AsbitemId
where questionAnswerAsbitem.QuestionAnswerId == overweightQuestionAnswer.QuestionAnswerId
select asbitem).ToList();
foreach (var questionAnswerAsbitem in questionAnswerAsbitems)
{
if (!questionRegisterDiseaseRiskSingleDto.Asbitems.Where(o => o.AsbitemId == questionAnswerAsbitem.AsbitemId).Any())
{
questionRegisterDiseaseRiskSingleDto.Asbitems.Add(new QuestionRegisterDiseaseRiskAsbitem()
{
AsbitemId = questionAnswerAsbitem.AsbitemId,
AsbitemName = questionAnswerAsbitem.AsbitemName,
DisplayOrder = questionAnswerAsbitem.DisplayOrder
});
}
}
questionRegisterDiseaseRiskSingleDto.Answers.Add(new QuestionRegisterItemResultAnswer()
{
Answer = overweightQuestionAnswer.QuestionAnswerName,
DisplayOrder = overweightQuestionAnswer.DisplayOrder,
});
}
}
var questionRegisterItems = (from questionRegisterItem in await _questionRegisterItemRepository.GetQueryableAsync()
join questionRegisterAnswer in await _questionRegisterAnswerRrepository.GetQueryableAsync()

5
src/Shentun.WebPeis.Domain/Models/Person.cs

@ -95,6 +95,11 @@ public partial class Person: AuditedEntity,IHasConcurrencyStamp
/// </summary>
public decimal? Weight { get; set; }
/// <summary>
/// 备孕标志
/// </summary>
public char PregnantFlag { get; set; }
public virtual ICollection<QuestionRegister> QuestionRegisters { get; set; } = new List<QuestionRegister>();
public override object?[] GetKeys()

38
src/Shentun.WebPeis.Domain/Persons/PersonManager.cs

@ -2,6 +2,7 @@
using NPOI.POIFS.FileSystem;
using Shentun.Utilities;
using Shentun.Utilities.Enums;
using Shentun.WebPeis.Enums;
using Shentun.WebPeis.Models;
using Shentun.WebPeis.SysParmValues;
using System;
@ -138,6 +139,7 @@ namespace Shentun.WebPeis.Persons
targetEntity.IsAllowBind = sourceEntity.IsAllowBind;
targetEntity.Height = sourceEntity.Height;
targetEntity.Weight = sourceEntity.Weight;
targetEntity.PregnantFlag = sourceEntity.PregnantFlag;
}
@ -198,7 +200,11 @@ namespace Shentun.WebPeis.Persons
}
}
if (entity.PregnantFlag != PregnantFlag.None && entity.PregnantFlag != PregnantFlag.PreparePregnancy
&& entity.PregnantFlag != PregnantFlag.Pregnancy)
{
throw new UserFriendlyException("备孕标志错误");
}
}
@ -252,5 +258,35 @@ namespace Shentun.WebPeis.Persons
return person_id_rule_prefix + maxnum.PadLeft(Convert.ToInt32(person_id_rule_tail_len), '0');
}
public async Task<bool> IsOverweight(Guid personId)
{
decimal? height;
decimal? weight;
var person = await _repository.GetAsync(o => o.PersonId == personId);
height = person.Height;
weight = person.Weight;
if (height == null || weight == null || height <= 0 || weight <= 0)
{
return false;
}
var tzzs = (weight / ((height / 100) * (height / 100)));
var sysTzzsStr = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "question_overweight");
decimal sysTzzs;
if (!decimal.TryParse(sysTzzsStr, out sysTzzs))
{
sysTzzs = (decimal)24.5;
}
if (tzzs >= sysTzzs)
{
return true;
}
return false;
}
}
}

3
src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs

@ -61,5 +61,8 @@ namespace Shentun.WebPeis.QuestionRegisters
}
return entity;
}
}
}

15
src/Shentun.WebPeis.EntityFrameworkCore/Configures/AppointPatientRegisterConfigure.cs

@ -57,6 +57,21 @@ namespace Shentun.WebPeis.Configures
entity.Property(e => e.Remark)
.HasMaxLength(200)
.HasColumnName("remark");
entity.Property(e => e.Height)
.HasComment("身高")
.HasPrecision(4, 1)
.HasColumnName("height");
entity.Property(e => e.Weight)
.HasComment("体重")
.HasPrecision(5, 2)
.HasColumnName("weight");
entity.Property(e => e.PregnantFlag)
.HasComment("备孕标志")
.HasDefaultValueSql("'0'::bpchar")
.HasColumnName("pregnant_flag");
}
}
}

16
src/Shentun.WebPeis.EntityFrameworkCore/Configures/PersonConfigure.cs

@ -97,6 +97,22 @@ namespace Shentun.WebPeis.Configures
entity.Property(e => e.WechatOpenId)
.HasMaxLength(50)
.HasColumnName("wechat_open_id");
entity.Property(e => e.Height)
.HasComment("身高")
.HasPrecision(4, 1)
.HasColumnName("height");
entity.Property(e => e.Weight)
.HasComment("体重")
.HasPrecision(5, 2)
.HasColumnName("weight");
entity.Property(e => e.PregnantFlag)
.HasComment("备孕标志")
.HasDefaultValueSql("'0'::bpchar")
.HasColumnName("pregnant_flag");
}
}
}

4
test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs

@ -101,7 +101,7 @@ namespace Shentun.WebPeis
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
{
var entity = await _appService.GetQuestionRegisterListByPersonIdAsync(new PersonAppointInputDto()
var entity = await _appService.GetQuestionRegisterListByPersonIdAsync(new PersonIdInputDto()
{
PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191") // 3a12d7fa-63f1-d549-c2f8-01123e5b7a8a
});
@ -127,7 +127,7 @@ namespace Shentun.WebPeis
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
{
var entity = await _appService.GetDiseaseRiskListByPersonIdAsync(new PersonAppointInputDto()
var entity = await _appService.GetDiseaseRiskListByPersonIdAsync(new PersonIdInputDto()
{
PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191") // 3a12d7fa-63f1-d549-c2f8-01123e5b7a8a
});

Loading…
Cancel
Save