Browse Source

问卷

master
DESKTOP-G961P6V\Zhh 2 years ago
parent
commit
6e6d4b9759
  1. 29
      src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonAppointInputDto.cs
  2. 33
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonDiseaseRiskIdInputDto.cs
  3. 64
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterDiseaseRiskSingleDto.cs
  4. 5
      src/Shentun.WebPeis.Application.Contracts/Questions/CreateQuestionDto.cs
  5. 6
      src/Shentun.WebPeis.Application.Contracts/Questions/QuestionTreeListDto.cs
  6. 5
      src/Shentun.WebPeis.Application.Contracts/Questions/UpdateQuestionDto.cs
  7. 5
      src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
  8. 357
      src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
  9. 2
      src/Shentun.WebPeis.Application/Questions/QuestionAppService.cs
  10. 50
      src/Shentun.WebPeis.Domain/AppointPatientRegisters/AppointPatientRegisterManager.cs
  11. 5
      src/Shentun.WebPeis.Domain/Models/Question.cs
  12. 2
      src/Shentun.WebPeis.Domain/Questions/QuestionManager.cs
  13. 6
      src/Shentun.WebPeis.EntityFrameworkCore/Configures/QuestionConfigure.cs
  14. 41
      test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs

29
src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/PersonAppointInputDto.cs

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.WebPeis.AppointPatientRegisters
{
public class PersonAppointInputDto
{
/// <summary>
/// 人员ID
/// </summary>
public Guid PersonId { get; set; }
/// <summary>
/// 备孕标志
/// </summary>
public char PregnantFlag { get; set; }
/// <summary>
/// 身高
/// </summary>
public decimal? Height { get; set; }
/// <summary>
/// 体重
/// </summary>
public decimal? Weight { get; set; }
}
}

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

@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.WebPeis.QuestionRegisters
{
public class PersonDiseaseRiskIdInputDto
{
/// <summary>
/// 人员ID
/// </summary>
public Guid PersonId { get; set; }
/// <summary>
/// 疾病风险ID
/// </summary>
public Guid DiseaseRiskId { get; set; }
/// <summary>
/// 备孕标志
/// </summary>
public char PregnantFlag { get; set; }
/// <summary>
/// 身高
/// </summary>
public decimal? Height { get; set; }
/// <summary>
/// 体重
/// </summary>
public decimal? Weight { get; set; }
}
}

64
src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterDiseaseRiskSingleDto.cs

@ -0,0 +1,64 @@
using Shentun.WebPeis.DiseaseRiskLevels;
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.WebPeis.QuestionRegisters
{
public class QuestionRegisterDiseaseRiskSingleDto
{
/// <summary>
/// 主键
/// </summary>
public Guid DiseaseRiskId { get; set; }
/// <summary>
/// 名称
/// </summary>
public string DiseaseRiskName { get; set; } = null!;
/// <summary>
/// 风险级别ID
/// </summary>
public Guid? DiseaseRiskLevelId { get; set; }
/// <summary>
/// 风险级别名称
/// </summary>
public string DiseaseRiskLevelName { get; set; }
/// <summary>
/// 解释
/// </summary>
public string? Explain { get; set; }
/// <summary>
/// 建议
/// </summary>
public string? Suggestion { get; set; }
/// <summary>
/// 推荐组合项目列表
/// </summary>
public List<QuestionRegisterDiseaseRiskAsbitem> Asbitems { get; set; } = new List<QuestionRegisterDiseaseRiskAsbitem>();
/// <summary>
/// 疾病风险级别列表
/// </summary>
public List<DiseaseRiskLevelDto> DiseaseRiskLevels { get; set; } = new List<DiseaseRiskLevelDto>();
/// <summary>
/// 风险因素
/// </summary>
public List<QuestionRegisterItemResultAnswer> Answers { get; set; } = new List<QuestionRegisterItemResultAnswer>();
}
public class QuestionRegisterDiseaseRiskAsbitem
{
public Guid AsbitemId { get; set; }
public string AsbitemName { get; set; }
public int DisplayOrder { get; set; }
}
}

5
src/Shentun.WebPeis.Application.Contracts/Questions/CreateQuestionDto.cs

@ -39,6 +39,11 @@ namespace Shentun.WebPeis.Questions
/// </summary>
public Guid? ParentId { get; set; }
/// <summary>
/// 是否显示
/// </summary>
public char IsShow { get; set; }
}

6
src/Shentun.WebPeis.Application.Contracts/Questions/QuestionTreeListDto.cs

@ -37,6 +37,12 @@ namespace Shentun.WebPeis.Questions
/// </summary>
public char? IsActive { get; set; }
/// <summary>
/// 是否显示
/// </summary>
public char IsShow { get; set; }
/// <summary>
/// 父问卷ID
/// </summary>

5
src/Shentun.WebPeis.Application.Contracts/Questions/UpdateQuestionDto.cs

@ -37,6 +37,11 @@ namespace Shentun.WebPeis.Questions
/// </summary>
public char? IsActive { get; set; }
/// <summary>
/// 是否显示
/// </summary>
public char IsShow { get; set; }
}

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

@ -840,7 +840,9 @@ namespace Shentun.WebPeis.AppointPatientRegisters
//----推荐组合项目
var personDiseaseRiskLevelDtos = await GetDiseaseRiskListByPersonIdAsync(input.PersonId);
//去掉基本套餐中已经包含的组合项目
//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++ )
@ -851,6 +853,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
personDiseaseRiskLevelDto.Asbitems.Remove(personDiseaseRiskLevelAsbitem);
i --;
}
}
}

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

@ -1,14 +1,19 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions;
using Org.BouncyCastle.Math.EC.Rfc7748;
using Shentun.WebPeis.AppointPatientRegisters;
using Shentun.WebPeis.DiseaseRiskLevels;
using Shentun.WebPeis.Enums;
using Shentun.WebPeis.Models;
using Shentun.WebPeis.Persons;
using Shentun.WebPeis.SysParmValues;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
@ -29,8 +34,11 @@ namespace Shentun.WebPeis.QuestionRegisters
private readonly IRepository<DiseaseRisk> _diseaseRiskRepository;
private readonly IRepository<DiseaseRiskLevel> _diseaseRiskLevelRepository;
private readonly IRepository<DiseaseRiskLevelAnswer> _diseaseRiskLevelAnswerRepository;
private readonly IRepository<DiseaseRiskLevelAsbitem> _diseaseRiskLevelAsbitemRepository;
private readonly IRepository<Asbitem> _asbitemRepository;
private readonly QuestionRegisterManager _questionRegisterManager;
private readonly IUnitOfWorkManager _unitOfWorkManager;
private readonly SysParmValueManager _sysParmValueManager;
public QuestionRegisterAppService(IRepository<QuestionRegister> repository,
IRepository<QuestionRegisterItem> questionRegisterItemRepository,
IRepository<QuestionRegisterAnswer> questionRegisterAnswerRrepository,
@ -41,7 +49,10 @@ namespace Shentun.WebPeis.QuestionRegisters
IRepository<QuestionSubjectType> questionSubjectTypeRepository,
IRepository<DiseaseRisk> diseaseRiskRepository,
IRepository<DiseaseRiskLevel> diseaseRiskLevelRepository,
IRepository<DiseaseRiskLevelAnswer> diseaseRiskLevelAnswerRepository)
IRepository<DiseaseRiskLevelAnswer> diseaseRiskLevelAnswerRepository,
IRepository<DiseaseRiskLevelAsbitem> diseaseRiskLevelAsbitemRepository,
IRepository<Asbitem> asbitemRepository,
SysParmValueManager sysParmValueManager)
{
_repository = repository;
_questionRegisterItemRepository = questionRegisterItemRepository;
@ -54,6 +65,9 @@ namespace Shentun.WebPeis.QuestionRegisters
_diseaseRiskRepository = diseaseRiskRepository;
_diseaseRiskLevelRepository = diseaseRiskLevelRepository;
_diseaseRiskLevelAnswerRepository = diseaseRiskLevelAnswerRepository;
_diseaseRiskLevelAsbitemRepository = diseaseRiskLevelAsbitemRepository;
_asbitemRepository = asbitemRepository;
_sysParmValueManager = sysParmValueManager;
}
@ -130,7 +144,7 @@ namespace Shentun.WebPeis.QuestionRegisters
}
/// <summary>
///
/// 获取生育计划、危险因素、疾病等列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
@ -183,6 +197,12 @@ namespace Shentun.WebPeis.QuestionRegisters
{
continue;
}
if (questionRegisterItems.Where(o =>
(o.questionAnswer.PathCode.StartsWith(questionRegisterItem.questionAnswer.PathCode + ".") &&
questionRegisterItem.questionAnswer.PathCode.Length == 5)).Any())
{
continue;
}
string answer;
if (questionRegisterItem.questionAnswer.AnswerResultType == AnswerResultTypeFlag.Choice)
{
@ -215,12 +235,12 @@ namespace Shentun.WebPeis.QuestionRegisters
}
/// <summary>
///
/// 获取问卷结果列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/QuestionRegister/GetQuestionRegisterListByPersonId")]
public async Task<List<QuestionRegisterItemResultDto>> GetQuestionRegisterListByPersonIdAsync(PersonIdInputDto input)
public async Task<List<QuestionRegisterItemResultDto>> GetQuestionRegisterListByPersonIdAsync(PersonAppointInputDto input)
{
var questionRegister = (await _repository.GetQueryableAsync())
.Where(o => o.PersonId == input.PersonId)
@ -264,6 +284,13 @@ namespace Shentun.WebPeis.QuestionRegisters
.OrderBy(o => o.questionAnswer.DisplayOrder).ToList();
foreach (var questionRegisterItem in questionAnswers)
{
if (questionRegisterItems.Where(o =>
(o.questionAnswer.PathCode.StartsWith(questionRegisterItem.questionAnswer.PathCode + ".") &&
questionRegisterItem.questionAnswer.PathCode.Length == 5)).Any())
{
continue;
}
string answer;
if (questionRegisterItem.questionAnswer.AnswerResultType == AnswerResultTypeFlag.Choice)
{
@ -296,12 +323,12 @@ namespace Shentun.WebPeis.QuestionRegisters
}
/// <summary>
///
/// 获取疾病风险列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/QuestionRegister/GetDiseaseRiskListByPersonId")]
public async Task<List<QuestionRegisterDiseaseRiskDto>> GetDiseaseRiskListByPersonIdAsync(PersonIdInputDto input)
public async Task<List<QuestionRegisterDiseaseRiskDto>> GetDiseaseRiskListByPersonIdAsync(PersonAppointInputDto input)
{
var questionRegister = (await _repository.GetQueryableAsync())
.Where(o => o.PersonId == input.PersonId)
@ -312,7 +339,7 @@ namespace Shentun.WebPeis.QuestionRegisters
{
return null;
}
//获取人员登记问卷
var questionRegisterItems = (from questionRegisterItem in await _questionRegisterItemRepository.GetQueryableAsync()
join questionRegisterAnswer in await _questionRegisterAnswerRrepository.GetQueryableAsync()
on questionRegisterItem.QuestionRegisterItemId equals questionRegisterAnswer.QuestionRegisterItemId
@ -332,7 +359,7 @@ namespace Shentun.WebPeis.QuestionRegisters
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
@ -359,27 +386,28 @@ namespace Shentun.WebPeis.QuestionRegisters
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();
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 &&
if (questionRegisterItems.Where(o => diseaseRiskLevel.haveDiseaseRiskLevelAnswer != null &&
o.questionRegisterAnswer.QuestionAnswerId ==
diseaseRiskLevel.haveDiseaseRiskLevelAnswer.QuestionAnswerId).Any())
{
if(diseaseRiskLevel.haveDiseaseRiskLevel != null)
if (diseaseRiskLevel.haveDiseaseRiskLevel != null)
{
matchDiseaseRiskLevel = diseaseRiskLevel.haveDiseaseRiskLevel;
break;
}
}
}
}
if(matchDiseaseRiskLevel == null)
if (matchDiseaseRiskLevel == null)
{
matchDiseaseRiskLevel = diseaseRiskLevels.LastOrDefault()==null?null: diseaseRiskLevels.LastOrDefault().haveDiseaseRiskLevel;
//因为是倒叙排序,所以最后一个疾病风险就是最低级别疾病风险
matchDiseaseRiskLevel = diseaseRiskLevels.LastOrDefault() == null ? null : diseaseRiskLevels.LastOrDefault().haveDiseaseRiskLevel;
}
if (matchDiseaseRiskLevel == null)
{
@ -390,14 +418,135 @@ namespace Shentun.WebPeis.QuestionRegisters
diseaseRisk.DiseaseRiskLevelId = matchDiseaseRiskLevel.DiseaseRiskLevelId;
diseaseRisk.DiseaseRiskLevelName = matchDiseaseRiskLevel.DiseaseRiskLevelName;
}
}
return questionRegisterDiseaseRiskDtos;
}
/// <summary>
/// 获取人员单个疾病风险明细
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/QuestionRegister/GetDiseaseRiskByPersonDiseaseRiskId")]
public async Task<QuestionRegisterDiseaseRiskSingleDto> GetDiseaseRiskByPersonDiseaseRiskIdAsync(PersonDiseaseRiskIdInputDto input)
{
if (input == null) { throw new UserFriendlyException("input参数不能为空"); }
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 personDiseaseRisk = diseaseRiskList.Where(o => o.DiseaseRiskId == input.DiseaseRiskId).First();
var diseaseRiskLevel = diseaseRiskLevels.Where(o => o.DiseaseRiskLevelId == personDiseaseRisk.DiseaseRiskLevelId).FirstOrDefault();
var asbitems = (from diseaseRiskLevelAsbitem in await _diseaseRiskLevelAsbitemRepository.GetQueryableAsync()
join asbitem in await _asbitemRepository.GetQueryableAsync()
on diseaseRiskLevelAsbitem.AsbitemId equals asbitem.AsbitemId
where diseaseRiskLevelAsbitem.DiseaseRiskLevelId == diseaseRiskLevel.DiseaseRiskLevelId
orderby asbitem.DisplayOrder
select asbitem).ToList();
var questionRegisterDiseaseRiskSingleDto = new QuestionRegisterDiseaseRiskSingleDto()
{
DiseaseRiskId = diseaseRisk.DiseaseRiskId,
DiseaseRiskName = diseaseRisk.DiseaseRiskName,
DiseaseRiskLevelId = personDiseaseRisk.DiseaseRiskLevelId,
DiseaseRiskLevelName = personDiseaseRisk.DiseaseRiskLevelName,
Explain = diseaseRiskLevel.Explain,
Suggestion = diseaseRiskLevel.Suggestion,
DiseaseRiskLevels = diseaseRiskLevels.Select(o => new DiseaseRiskLevelDto()
{
DiseaseRiskLevelId = o.DiseaseRiskLevelId,
DiseaseRiskLevelName = o.DiseaseRiskLevelName,
DisplayOrder = o.DisplayOrder,
}).ToList(),
Asbitems = asbitems.Select(o => new QuestionRegisterDiseaseRiskAsbitem()
{
AsbitemId = o.AsbitemId,
AsbitemName = o.AsbitemName,
DisplayOrder = o.DisplayOrder
}).ToList()
};
var questionRegister = (await _repository.GetQueryableAsync())
.Where(o => o.PersonId == input.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
join diseaseRiskLevelAnswer in await _diseaseRiskLevelAnswerRepository.GetQueryableAsync()
on questionAnswer.QuestionAnswerId equals diseaseRiskLevelAnswer.QuestionAnswerId
where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId &&
diseaseRiskLevelAnswer.DiseaseRiskLevelId == diseaseRiskLevel.DiseaseRiskLevelId &&
questionAnswer.IsNone == 'N'
orderby questionSubjectType.DisplayOrder
select new
{
questionSubjectType,
questionRegisterItem,
questionRegisterAnswer,
questionAnswer
}).ToList();
foreach (var questionRegisterItem in questionRegisterItems)
{
if (questionRegisterItems.Where(o =>
(o.questionAnswer.PathCode.StartsWith(questionRegisterItem.questionAnswer.PathCode + ".") &&
questionRegisterItem.questionAnswer.PathCode.Length == 5)).Any())
{
continue;
}
string answer;
if (questionRegisterItem.questionAnswer.AnswerResultType == AnswerResultTypeFlag.Choice)
{
if (string.IsNullOrWhiteSpace(questionRegisterItem.questionAnswer.Aliases))
{
answer = questionRegisterItem.questionAnswer.QuestionAnswerName;
}
else
{
answer = questionRegisterItem.questionAnswer.Aliases;
}
}
else
{
answer = questionRegisterItem.questionRegisterAnswer.Content;
}
if (string.IsNullOrWhiteSpace(answer))
{
continue;
}
questionRegisterDiseaseRiskSingleDto.Answers.Add(new QuestionRegisterItemResultAnswer()
{
Answer = answer,
DisplayOrder = questionRegisterItem.questionAnswer.DisplayOrder,
});
}
return questionRegisterDiseaseRiskSingleDto;
}
/// <summary>
///
/// 创建问卷
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
@ -464,7 +613,7 @@ namespace Shentun.WebPeis.QuestionRegisters
}
/// <summary>
/// 更新
/// 更新问卷
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
@ -552,9 +701,14 @@ namespace Shentun.WebPeis.QuestionRegisters
}
await _repository.UpdateAsync(questionRegister);
}
/// <summary>
/// 获取问卷所有题目
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private async Task<QuestionRegisterDto> GetBasicDataAsync(PersonIdInputDto input)
{
var questions = (await _questionRepository.GetListAsync(o => o.IsActive == 'Y')).OrderBy(o=>o.DisplayOrder);
var questions = (await _questionRepository.GetListAsync(o => o.IsActive == 'Y')).OrderBy(o => o.DisplayOrder);
var questionAnswers = await _questionAnswerRepository.GetListAsync();
var questionRegisterDto = new QuestionRegisterDto()
@ -579,7 +733,7 @@ namespace Shentun.WebPeis.QuestionRegisters
};
//一级答案
var firstLevelQuestionAnswers = questionAnswers.Where(o => o.QuestionId == question.QuestionId &&
o.PathCode.Length == 5).OrderBy(o=>o.DisplayOrder).ToList();
o.PathCode.Length == 5).OrderBy(o => o.DisplayOrder).ToList();
foreach (var questionAnswer in firstLevelQuestionAnswers)
{
var questionRegisterAnswer = new QuestionRegisterAnswerDto()
@ -599,8 +753,8 @@ namespace Shentun.WebPeis.QuestionRegisters
};
//二级答案
var childQuestionAnswers = questionAnswers.Where(o =>
o.ParentId == questionAnswer.QuestionAnswerId).OrderBy(o=>o.DisplayOrder).ToList();
var childQuestionAnswers = questionAnswers.Where(o =>
o.ParentId == questionAnswer.QuestionAnswerId).OrderBy(o => o.DisplayOrder).ToList();
foreach (var ChilduestionAnswer in childQuestionAnswers)
{
var childQuestionRegisterAnswer = new QuestionRegisterAnswerDto()
@ -630,140 +784,33 @@ namespace Shentun.WebPeis.QuestionRegisters
return questionRegisterDto;
}
private async Task GetTest(PersonIdInputDto input)
{
var questionRegisterDto = new QuestionRegisterDto()
{
QuestionRegisterId = Guid.NewGuid(),
PersonId = input.PersonId,
};
//
var questionRegisterItemDto = new QuestionRegisterItemDto()
{
QuestionId = Guid.NewGuid(),
QuestionName = "你最近3-6个月是否有生育计划",
AnswerType = AnswerTypeFlag.SingleChoice,
DisplayOrder = 1
};
questionRegisterDto.QuestionRegisterItems.Add(questionRegisterItemDto);
var questionRegisterAnswerDto = new QuestionRegisterAnswerDto()
{
QuestionAnswerId = Guid.NewGuid(),
QuestionAnswerName = "无",
DisplayOrder = 1,
AnswerResultType = '0'
};
questionRegisterAnswerDto = new QuestionRegisterAnswerDto()
{
QuestionAnswerId = Guid.NewGuid(),
QuestionAnswerName = "有",
DisplayOrder = 2,
AnswerResultType = '0'
};
questionRegisterItemDto.QuestionRegisterAnswers.Add(questionRegisterAnswerDto);
//
questionRegisterItemDto = new QuestionRegisterItemDto()
{
QuestionId = Guid.NewGuid(),
QuestionName = "您的父亲、母亲、兄弟、姐妹、目前或曾经是否有以下明确诊断的病?",
AnswerType = AnswerTypeFlag.MultipleChoice,
DisplayOrder = 2
};
questionRegisterDto.QuestionRegisterItems.Add(questionRegisterItemDto);
questionRegisterAnswerDto = new QuestionRegisterAnswerDto()
{
QuestionAnswerId = Guid.NewGuid(),
QuestionAnswerName = "恶性肿瘤",
DisplayOrder = 1,
AnswerResultType = '0'
};
questionRegisterItemDto.QuestionRegisterAnswers.Add(questionRegisterAnswerDto);
questionRegisterAnswerDto = new QuestionRegisterAnswerDto()
{
QuestionAnswerId = Guid.NewGuid(),
QuestionAnswerName = "心脏病",
DisplayOrder = 2,
AnswerResultType = '0'
};
questionRegisterItemDto.QuestionRegisterAnswers.Add(questionRegisterAnswerDto);
questionRegisterAnswerDto = new QuestionRegisterAnswerDto()
{
QuestionAnswerId = Guid.NewGuid(),
QuestionAnswerName = "脑血管病",
DisplayOrder = 3,
AnswerResultType = '0'
};
questionRegisterItemDto.QuestionRegisterAnswers.Add(questionRegisterAnswerDto);
//
questionRegisterItemDto = new QuestionRegisterItemDto()
{
QuestionId = Guid.NewGuid(),
QuestionName = "您目前或曾经是否有以下明确诊断的疾病",
AnswerType = AnswerTypeFlag.MultipleChoice,
DisplayOrder = 3
};
questionRegisterDto.QuestionRegisterItems.Add(questionRegisterItemDto);
questionRegisterAnswerDto = new QuestionRegisterAnswerDto()
{
QuestionAnswerId = Guid.NewGuid(),
QuestionAnswerName = "头部疾病",
DisplayOrder = 1,
AnswerResultType = '0',
ChildAnswerType = AnswerTypeFlag.MultipleChoice,
};
questionRegisterAnswerDto.Childs.Add(new QuestionRegisterAnswerDto()
{
QuestionAnswerId = Guid.NewGuid(),
QuestionAnswerName = "脑中风",
DisplayOrder = 1,
AnswerResultType = '0',
});
questionRegisterAnswerDto.Childs.Add(new QuestionRegisterAnswerDto()
{
QuestionAnswerId = Guid.NewGuid(),
QuestionAnswerName = "抑郁症",
DisplayOrder = 1,
AnswerResultType = '0',
});
questionRegisterAnswerDto.Childs.Add(new QuestionRegisterAnswerDto()
{
QuestionAnswerId = Guid.NewGuid(),
QuestionAnswerName = "癫痫",
DisplayOrder = 1,
AnswerResultType = '0',
});
questionRegisterAnswerDto.Childs.Add(new QuestionRegisterAnswerDto()
/// <summary>
/// 是否超重
/// </summary>
/// <param name="height"></param>
/// <param name="weight"></param>
/// <returns></returns>
private async Task<bool> IsOverweight(decimal? height, decimal? weight)
{
if (height == null || weight == null || height <= 0 || weight <= 0)
{
QuestionAnswerId = Guid.NewGuid(),
QuestionAnswerName = "其它",
DisplayOrder = 1,
AnswerResultType = '1',
});
questionRegisterItemDto.QuestionRegisterAnswers.Add(questionRegisterAnswerDto);
questionRegisterAnswerDto = new QuestionRegisterAnswerDto()
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))
{
QuestionAnswerId = Guid.NewGuid(),
QuestionAnswerName = "甲状腺疾病",
DisplayOrder = 2,
AnswerResultType = '0'
};
questionRegisterItemDto.QuestionRegisterAnswers.Add(questionRegisterAnswerDto);
questionRegisterAnswerDto = new QuestionRegisterAnswerDto()
sysTzzs = (decimal)24.5;
}
if (tzzs >= sysTzzs)
{
QuestionAnswerId = Guid.NewGuid(),
QuestionAnswerName = "肺部疾病",
DisplayOrder = 3,
AnswerResultType = '0'
};
questionRegisterItemDto.QuestionRegisterAnswers.Add(questionRegisterAnswerDto);
return true;
}
return false;
}
}
}

2
src/Shentun.WebPeis.Application/Questions/QuestionAppService.cs

@ -87,6 +87,7 @@ namespace Shentun.WebPeis.Questions
CreatorId = p.CreatorId,
CreatorName = _cacheService.GetSurnameAsync(p.CreatorId).Result,
IsActive = p.IsActive,
IsShow = p.IsShow,
LastModificationTime = p.LastModificationTime,
LastModifierId = p.LastModifierId,
LastModifierName = _cacheService.GetSurnameAsync(p.LastModifierId).Result,
@ -192,6 +193,7 @@ namespace Shentun.WebPeis.Questions
CreatorId = p.CreatorId,
CreatorName = _cacheService.GetSurnameAsync(p.CreatorId).Result,
IsActive = p.IsActive,
IsShow = p.IsShow,
LastModificationTime = p.LastModificationTime,
LastModifierId = p.LastModifierId,
LastModifierName = _cacheService.GetSurnameAsync(p.LastModifierId).Result,

50
src/Shentun.WebPeis.Domain/AppointPatientRegisters/AppointPatientRegisterManager.cs

@ -85,12 +85,12 @@ namespace Shentun.WebPeis.AppointPatientRegisters
Check.NotNull<Guid>(entity.MedicalCenterId, "体检中心");
Check.NotDefaultOrNull<Guid>(entity.CustomerOrgId, "单位");
Check.NotNull<DateTime>(entity.AppointDate, "体检日期");
var person = await _personRepository.GetAsync(o=>o.PersonId == entity.PersonId);
var person = await _personRepository.GetAsync(o => o.PersonId == entity.PersonId);
if (entity.AppointDate < DateTime.Now.Date)
{
throw new UserFriendlyException("预约日期不能小于当前日期");
}
if (entity.PregnantFlag != PregnantFlag.None && entity.PregnantFlag != PregnantFlag.PreparePregnancy
if (entity.PregnantFlag != PregnantFlag.None && entity.PregnantFlag != PregnantFlag.PreparePregnancy
&& entity.PregnantFlag != PregnantFlag.Pregnancy)
{
throw new UserFriendlyException("备孕标志错误");
@ -105,12 +105,12 @@ namespace Shentun.WebPeis.AppointPatientRegisters
{
throw new UserFriendlyException("单位分组ID不存在");
}
if(customerOrgGroup.ForSexId != ForSexFlag.All &&
customerOrgGroup.ForSexId != person.SexId )
if (customerOrgGroup.ForSexId != ForSexFlag.All &&
customerOrgGroup.ForSexId != person.SexId)
{
throw new UserFriendlyException("套餐的性别和人员性别不一致");
}
if(customerOrgGroup.MaritalStatusId != MaritalStatusFlag.All &&
if (customerOrgGroup.MaritalStatusId != MaritalStatusFlag.All &&
person.MaritalStatusId == MaritalStatusFlag.UnMarried &&
customerOrgGroup.MaritalStatusId != MaritalStatusFlag.UnMarried)
{
@ -163,7 +163,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
{
throw new UserFriendlyException("单位体检不能选套餐");
}
if(entity.PatientRegisterId == null || entity.PatientRegisterId == Guid.Empty)
if (entity.PatientRegisterId == null || entity.PatientRegisterId == Guid.Empty)
{
throw new UserFriendlyException("团检预约必须有人员备案登记编号");
}
@ -189,18 +189,18 @@ namespace Shentun.WebPeis.AppointPatientRegisters
{
throw new UserFriendlyException("必须预约组合项目");
}
if (entity.MedicalPackageId != null)
if (entity.MedicalPackageId != null)
{
var medicalPackageDetails = await _medicalPackageDetailRepository.GetListAsync(o=>o.MedicalPackageId == entity.MedicalPackageId);
var medicalPackageDetails = await _medicalPackageDetailRepository.GetListAsync(o => o.MedicalPackageId == entity.MedicalPackageId);
medicalPackageDetails.ForEach(o =>
{
if (!entity.AppointRegisterAsbitems.Where(x=>x.AsbitemId == o.AsbitemId).Any())
if (!entity.AppointRegisterAsbitems.Where(x => x.AsbitemId == o.AsbitemId).Any())
{
throw new UserFriendlyException("套餐项目不能取消");
}
});
}
if (entity.CustomerOrgGroupId != null)
{
var customerOrgGroupDetails = await _customerOrgGroupDetailRepository
@ -214,20 +214,21 @@ namespace Shentun.WebPeis.AppointPatientRegisters
});
decimal addMoney = 0;
var customerOrgGroup = await _customerOrgGroupRepository.GetAsync(o => o.CustomerOrgGroupId == entity.CustomerOrgGroupId);
foreach (var asbitem in entity.AppointRegisterAsbitems)
foreach (var asbitem in entity.AppointRegisterAsbitems)
{
var customerOrgGroupDetail = customerOrgGroupDetails.Where(o => o.AsbitemId == asbitem.AsbitemId).FirstOrDefault();
if(customerOrgGroupDetail == null)
if (customerOrgGroupDetail == null)
{
addMoney += asbitem.ChargePrice;
}
if(addMoney > 0)
if (addMoney > 0)
{
if(addMoney > customerOrgGroup.CanAddMoney)
if (addMoney > customerOrgGroup.CanAddMoney)
{
throw new UserFriendlyException($"自选的单位支付金额不能超过{customerOrgGroup.CanAddMoney}元");
//暂时屏蔽
//throw new UserFriendlyException($"自选的单位支付金额不能超过{customerOrgGroup.CanAddMoney}元");
}
}
}
@ -235,6 +236,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
var asbitems = await _asbitemRepository.GetListAsync();
foreach (var appointRegisterAsbitem in entity.AppointRegisterAsbitems)
{
@ -268,7 +270,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
if (customerOrg.CustomerOrgId == GuidFlag.PersonCustomerOrgId)
{
appointRegisterAsbitem.PayTypeFlag = PayTypeFlag.PersonPay;
}
else
{
@ -280,16 +282,28 @@ namespace Shentun.WebPeis.AppointPatientRegisters
}
}
if (entity.PregnantFlag == PregnantFlag.PreparePregnancy && asbitem.ForPregnantFlag == ForPregnantFlag.PreparePregnancy)
{
throw new UserFriendlyException($"备孕期间禁检{asbitem.AsbitemName}");
}
if (entity.PregnantFlag == PregnantFlag.Pregnancy &&
(asbitem.ForPregnantFlag == ForPregnantFlag.PreparePregnancy|| asbitem.ForPregnantFlag == ForPregnantFlag.Pregnancy))
{
throw new UserFriendlyException($"怀孕期间禁检{asbitem.AsbitemName}");
}
appointRegisterAsbitem.IsCharge = 'N';
}
var appoentPatientRegisters = await _repository.GetListAsync(o => o.PersonId == entity.PersonId &&
o.AppointDate >= DateTime.Now.Date && o.CompleteFlag != AppointPatientRegisterCompleteFlag.CancelAppoint);
if(appoentPatientRegisters.Count >= 1)
if (appoentPatientRegisters.Count >= 1)
{
throw new UserFriendlyException("已有今天及之后的预约订单,必须先取消订单");
}
}
}
}

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

@ -42,6 +42,11 @@ public partial class Question : AuditedEntity, IHasConcurrencyStamp, IDisplayOrd
public char? IsActive { get; set; }
/// <summary>
/// 是否显示
/// </summary>
public char IsShow { get; set; }
/// <summary>
/// 父问卷ID
/// </summary>

2
src/Shentun.WebPeis.Domain/Questions/QuestionManager.cs

@ -39,6 +39,7 @@ namespace Shentun.WebPeis.Questions
{
AnswerType = entity.AnswerType,
IsActive = entity.IsActive,
IsShow = entity.IsShow,
ParentId = entity.ParentId,
PathCode = await CreatePathCode(entity.ParentId),
QuestionId = entity.QuestionId,
@ -69,6 +70,7 @@ namespace Shentun.WebPeis.Questions
targetEntity.AnswerType = sourceEntity.AnswerType;
targetEntity.IsActive = sourceEntity.IsActive;
targetEntity.IsShow = sourceEntity.IsShow;
targetEntity.QuestionName = sourceEntity.QuestionName;
targetEntity.QuestionSubjectTypeId = sourceEntity.QuestionSubjectTypeId;
targetEntity.SimpleCode = LanguageConverter.GetPYSimpleCode(sourceEntity.QuestionName);

6
src/Shentun.WebPeis.EntityFrameworkCore/Configures/QuestionConfigure.cs

@ -44,6 +44,12 @@ namespace Shentun.WebPeis.Configures
entity.Property(e => e.IsActive)
.HasMaxLength(1)
.HasColumnName("is_active");
entity.Property(e => e.IsShow)
.HasMaxLength(1)
.HasDefaultValueSql("'Y'::bpchar")
.HasColumnName("is_show");
entity.Property(e => e.LastModificationTime)
.HasColumnType("timestamp(6) without time zone")
.HasColumnName("last_modification_time");

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

@ -1,4 +1,5 @@
using Shentun.WebPeis.Asbitems;
using Shentun.WebPeis.AppointPatientRegisters;
using Shentun.WebPeis.Asbitems;
using Shentun.WebPeis.Models;
using Shentun.WebPeis.Persons;
using Shentun.WebPeis.QuestionRegisters;
@ -100,7 +101,7 @@ namespace Shentun.WebPeis
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
{
var entity = await _appService.GetQuestionRegisterListByPersonIdAsync(new PersonIdInputDto()
var entity = await _appService.GetQuestionRegisterListByPersonIdAsync(new PersonAppointInputDto()
{
PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191") // 3a12d7fa-63f1-d549-c2f8-01123e5b7a8a
});
@ -126,7 +127,7 @@ namespace Shentun.WebPeis
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
{
var entity = await _appService.GetDiseaseRiskListByPersonIdAsync(new PersonIdInputDto()
var entity = await _appService.GetDiseaseRiskListByPersonIdAsync(new PersonAppointInputDto()
{
PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191") // 3a12d7fa-63f1-d549-c2f8-01123e5b7a8a
});
@ -138,5 +139,39 @@ namespace Shentun.WebPeis
await unitOfWork.CompleteAsync();
}
}
[Fact]
public async Task GetDiseaseRiskByPersonDiseaseRiskIdAsync()
{
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
{
var entity = await _appService.GetDiseaseRiskByPersonDiseaseRiskIdAsync(new PersonDiseaseRiskIdInputDto()
{
PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191"), // 3a12d7fa-63f1-d549-c2f8-01123e5b7a8a
DiseaseRiskId = new Guid("81c57075-4809-488b-aaa4-7e717c9f74a2")
});
_output.WriteLine(entity.DiseaseRiskName + entity.DiseaseRiskLevelName + entity.Explain + entity.Suggestion);
foreach (var item in entity.DiseaseRiskLevels)
{
_output.WriteLine(item.DiseaseRiskLevelName);
}
_output.WriteLine("----推荐项目----");
foreach (var item in entity.Asbitems)
{
_output.WriteLine(item.AsbitemName );
}
_output.WriteLine("----风险因素----");
foreach (var item in entity.Answers)
{
_output.WriteLine(item.Answer);
}
await unitOfWork.CompleteAsync();
}
}
}
}
Loading…
Cancel
Save