|
|
|
@ -26,6 +26,9 @@ namespace Shentun.WebPeis.QuestionRegisters |
|
|
|
private readonly IRepository<Question> _questionRepository; |
|
|
|
private readonly IRepository<QuestionAnswer> _questionAnswerRepository; |
|
|
|
private readonly IRepository<QuestionSubjectType> _questionSubjectTypeRepository; |
|
|
|
private readonly IRepository<DiseaseRisk> _diseaseRiskRepository; |
|
|
|
private readonly IRepository<DiseaseRiskLevel> _diseaseRiskLevelRepository; |
|
|
|
private readonly IRepository<DiseaseRiskLevelAnswer> _diseaseRiskLevelAnswerRepository; |
|
|
|
private readonly QuestionRegisterManager _questionRegisterManager; |
|
|
|
private readonly IUnitOfWorkManager _unitOfWorkManager; |
|
|
|
public QuestionRegisterAppService(IRepository<QuestionRegister> repository, |
|
|
|
@ -35,7 +38,10 @@ namespace Shentun.WebPeis.QuestionRegisters |
|
|
|
IRepository<QuestionAnswer> questionAnswerRepository, |
|
|
|
QuestionRegisterManager questionRegisterManager, |
|
|
|
IUnitOfWorkManager unitOfWorkManager, |
|
|
|
IRepository<QuestionSubjectType> questionSubjectTypeRepository) |
|
|
|
IRepository<QuestionSubjectType> questionSubjectTypeRepository, |
|
|
|
IRepository<DiseaseRisk> diseaseRiskRepository, |
|
|
|
IRepository<DiseaseRiskLevel> diseaseRiskLevelRepository, |
|
|
|
IRepository<DiseaseRiskLevelAnswer> diseaseRiskLevelAnswerRepository) |
|
|
|
{ |
|
|
|
_repository = repository; |
|
|
|
_questionRegisterItemRepository = questionRegisterItemRepository; |
|
|
|
@ -45,6 +51,9 @@ namespace Shentun.WebPeis.QuestionRegisters |
|
|
|
_questionRegisterManager = questionRegisterManager; |
|
|
|
_unitOfWorkManager = unitOfWorkManager; |
|
|
|
_questionSubjectTypeRepository = questionSubjectTypeRepository; |
|
|
|
_diseaseRiskRepository = diseaseRiskRepository; |
|
|
|
_diseaseRiskLevelRepository = diseaseRiskLevelRepository; |
|
|
|
_diseaseRiskLevelAnswerRepository = diseaseRiskLevelAnswerRepository; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -163,25 +172,28 @@ namespace Shentun.WebPeis.QuestionRegisters |
|
|
|
questionAnswer |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
var personSubjectTypeDtos = questionRegisterItems.GroupBy(o=>o.questionSubjectType) |
|
|
|
.Select(o=>new PersonSubjectTypeDto() |
|
|
|
{ |
|
|
|
QuestionSubjectTypeId = o.Key.QuestionSubjectTypeId, |
|
|
|
QuestionSubjectTypeName = o.Key.QuestionSubjectTypeName, |
|
|
|
DisplayOrder = o.Key.DisplayOrder |
|
|
|
}).ToList(); |
|
|
|
var personSubjectTypeDtos = questionRegisterItems.GroupBy(o => o.questionSubjectType) |
|
|
|
.Select(o => new PersonSubjectTypeDto() |
|
|
|
{ |
|
|
|
QuestionSubjectTypeId = o.Key.QuestionSubjectTypeId, |
|
|
|
QuestionSubjectTypeName = o.Key.QuestionSubjectTypeName, |
|
|
|
DisplayOrder = o.Key.DisplayOrder |
|
|
|
}).ToList(); |
|
|
|
foreach (var personSubjectTypeDto in personSubjectTypeDtos) |
|
|
|
{ |
|
|
|
var questionSubjectTypeItems = questionRegisterItems.Where(o => |
|
|
|
o.questionSubjectType.QuestionSubjectTypeId == personSubjectTypeDto.QuestionSubjectTypeId |
|
|
|
) |
|
|
|
.OrderBy(o=>o.questionAnswer.DisplayOrder).ToList(); |
|
|
|
foreach(var questionRegisterItem in questionSubjectTypeItems) |
|
|
|
var questionSubjectTypeItems = questionRegisterItems.Where(o => |
|
|
|
o.questionSubjectType.QuestionSubjectTypeId == personSubjectTypeDto.QuestionSubjectTypeId) |
|
|
|
.OrderBy(o => o.questionAnswer.DisplayOrder).ToList(); |
|
|
|
foreach (var questionRegisterItem in questionSubjectTypeItems) |
|
|
|
{ |
|
|
|
if (questionRegisterItem.questionAnswer.IsNone == 'Y') |
|
|
|
{ |
|
|
|
continue; |
|
|
|
} |
|
|
|
string answer; |
|
|
|
if(questionRegisterItem.questionAnswer.AnswerResultType == AnswerResultTypeFlag.Choice) |
|
|
|
if (questionRegisterItem.questionAnswer.AnswerResultType == AnswerResultTypeFlag.Choice) |
|
|
|
{ |
|
|
|
if(string.IsNullOrWhiteSpace(questionRegisterItem.questionAnswer.Aliases)) |
|
|
|
if (string.IsNullOrWhiteSpace(questionRegisterItem.questionAnswer.Aliases)) |
|
|
|
{ |
|
|
|
answer = questionRegisterItem.questionAnswer.QuestionAnswerName; |
|
|
|
} |
|
|
|
@ -194,7 +206,7 @@ namespace Shentun.WebPeis.QuestionRegisters |
|
|
|
{ |
|
|
|
answer = questionRegisterItem.questionRegisterAnswer.Content; |
|
|
|
} |
|
|
|
if(string.IsNullOrWhiteSpace(answer)) |
|
|
|
if (string.IsNullOrWhiteSpace(answer)) |
|
|
|
{ |
|
|
|
continue; |
|
|
|
} |
|
|
|
@ -208,6 +220,163 @@ namespace Shentun.WebPeis.QuestionRegisters |
|
|
|
|
|
|
|
return personSubjectTypeDtos; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
///
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpPost("api/app/QuestionRegister/GetQuestionRegisterListByPersonId")] |
|
|
|
public async Task<List<QuestionRegisterItemResultDto>> GetQuestionRegisterListByPersonIdAsync(PersonIdInputDto input) |
|
|
|
{ |
|
|
|
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 |
|
|
|
where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId |
|
|
|
orderby questionSubjectType.DisplayOrder, question.DisplayOrder |
|
|
|
select new |
|
|
|
{ |
|
|
|
questionSubjectType, |
|
|
|
question, |
|
|
|
questionRegisterItem, |
|
|
|
questionRegisterAnswer, |
|
|
|
questionAnswer |
|
|
|
}).ToList(); |
|
|
|
var questions = questionRegisterItems.GroupBy(o => o.question) |
|
|
|
.Select(o => new QuestionRegisterItemResultDto() |
|
|
|
{ |
|
|
|
QuestionId = o.Key.QuestionId, |
|
|
|
QuestionName = o.Key.QuestionName, |
|
|
|
DisplayOrder = o.Key.DisplayOrder |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
foreach (var question in questions) |
|
|
|
{ |
|
|
|
var questionAnswers = questionRegisterItems.Where(o => |
|
|
|
o.question.QuestionId == question.QuestionId) |
|
|
|
.OrderBy(o => o.questionAnswer.DisplayOrder).ToList(); |
|
|
|
foreach (var questionRegisterItem in questionAnswers) |
|
|
|
{ |
|
|
|
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; |
|
|
|
} |
|
|
|
question.Answers.Add(new QuestionRegisterItemResultAnswer() |
|
|
|
{ |
|
|
|
Answer = answer, |
|
|
|
DisplayOrder = questionRegisterItem.questionAnswer.DisplayOrder, |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return questions; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
///
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpPost("api/app/QuestionRegister/GetDiseaseRiskListByPersonId")] |
|
|
|
public async Task<List<QuestionRegisterDiseaseRiskDto>> GetDiseaseRiskListByPersonIdAsync(PersonIdInputDto input) |
|
|
|
{ |
|
|
|
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 |
|
|
|
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 QuestionRegisterDiseaseRiskDto() |
|
|
|
{ |
|
|
|
DiseaseRiskId = o.Key.DiseaseRiskId, |
|
|
|
DiseaseRiskLevelName = o.Key.DiseaseRiskName, |
|
|
|
DisplayOrder = o.Key.DisplayOrder |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
foreach (var diseaseRisk in questionRegisterDiseaseRiskDtos) |
|
|
|
{ |
|
|
|
var diseaseRiskLevels = diseaseRisks.Where(o=>o.diseaseRisk.DiseaseRiskId == diseaseRisk.DiseaseRiskId) |
|
|
|
.OrderBy(o=>o.haveDiseaseRiskLevel.DisplayOrder).ToList(); |
|
|
|
foreach(var diseaseRiskLevel in diseaseRiskLevels) |
|
|
|
{ |
|
|
|
var cnt = questionRegisterItems.Where(o => o.questionRegisterAnswer.QuestionAnswerId == |
|
|
|
diseaseRiskLevel.haveDiseaseRiskLevelAnswer.QuestionAnswerId).Count(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return questionRegisterDiseaseRiskDtos; |
|
|
|
} |
|
|
|
/// <summary>
|
|
|
|
///
|
|
|
|
/// </summary>
|
|
|
|
@ -254,7 +423,7 @@ namespace Shentun.WebPeis.QuestionRegisters |
|
|
|
|
|
|
|
foreach (var childQuestionRegisterAnswer in questionRegisterAnswerDto.Childs) |
|
|
|
{ |
|
|
|
if(childQuestionRegisterAnswer.IsSelected == 'Y') |
|
|
|
if (childQuestionRegisterAnswer.IsSelected == 'Y') |
|
|
|
{ |
|
|
|
questionRegisterAnswer = new QuestionRegisterAnswer() |
|
|
|
{ |
|
|
|
@ -266,7 +435,7 @@ namespace Shentun.WebPeis.QuestionRegisters |
|
|
|
}; |
|
|
|
questionRegisterItem.QuestionRegisterAnswers.Add(questionRegisterAnswer); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
@ -330,7 +499,7 @@ namespace Shentun.WebPeis.QuestionRegisters |
|
|
|
QuestionId = questionRegisterItemDto.QuestionId, |
|
|
|
}; |
|
|
|
questionRegister.QuestionRegisterItems.Add(questionRegisterItem); |
|
|
|
// await _questionRegisterItemRepository.InsertAsync(questionRegisterItem);
|
|
|
|
// await _questionRegisterItemRepository.InsertAsync(questionRegisterItem);
|
|
|
|
} |
|
|
|
var questionRegisterAnswer = new QuestionRegisterAnswer() |
|
|
|
{ |
|
|
|
@ -356,7 +525,7 @@ namespace Shentun.WebPeis.QuestionRegisters |
|
|
|
}; |
|
|
|
questionRegisterItem.QuestionRegisterAnswers.Add(questionRegisterAnswer); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|