Browse Source

预约

master
DESKTOP-G961P6V\Zhh 2 years ago
parent
commit
54bd7795be
  1. 13
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonSubjectTypeDto.cs
  2. 27
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterDiseaseRiskDto.cs
  3. 37
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemResultDto.cs
  4. 209
      src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
  5. 6
      src/Shentun.WebPeis.Domain/Models/DiseaseRiskLevel.cs
  6. 3
      src/Shentun.WebPeis.Domain/Models/DiseaseRiskLevelAnswer.cs
  7. 2
      src/Shentun.WebPeis.EntityFrameworkCore/EntityFrameworkCore/WebPeisDbContext.cs
  8. 26
      test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs

13
src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonSubjectTypeDto.cs

@ -15,8 +15,13 @@ namespace Shentun.WebPeis.QuestionRegisters
/// </summary>
public string QuestionSubjectTypeName { get; set; } = null!;
/// <summary>
/// 显示顺序
/// </summary>
public int DisplayOrder { get; set; }
/// <summary>
/// 答案集合
/// </summary>
public List<PersonSubjectTypeQuestionAnswer> Answers { get; set; } = new List<PersonSubjectTypeQuestionAnswer>();
@ -24,7 +29,13 @@ namespace Shentun.WebPeis.QuestionRegisters
public class PersonSubjectTypeQuestionAnswer
{
/// <summary>
/// 答案
/// </summary>
public string QuestionAnswerName { get; set; }
/// <summary>
/// 显示顺序
/// </summary>
public int DisplayOrder { get; set; }
}
}

27
src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterDiseaseRiskDto.cs

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.WebPeis.QuestionRegisters
{
public class QuestionRegisterDiseaseRiskDto
{
/// <summary>
/// 主键
/// </summary>
public Guid DiseaseRiskId { get; set; }
/// <summary>
/// 名称
/// </summary>
public string DiseaseRiskName { get; set; } = null!;
/// <summary>
/// 显示顺序
/// </summary>
public int DisplayOrder { get; set; }
public string DiseaseRiskLevelName { get; set; }
}
}

37
src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemResultDto.cs

@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.WebPeis.QuestionRegisters
{
public class QuestionRegisterItemResultDto
{
/// <summary>
/// 主键
/// </summary>
public Guid QuestionRegisterItemId { get; set; }
/// <summary>
/// 问卷ID
/// </summary>
public Guid QuestionId { get; set; }
/// <summary>
/// 题目
/// </summary>
public string QuestionName { get; set; } = null!;
/// <summary>
/// 显示顺序
/// </summary>
public int DisplayOrder { get; set; }
public List<QuestionRegisterItemResultAnswer> Answers { get; set; } = new List<QuestionRegisterItemResultAnswer>();
}
public class QuestionRegisterItemResultAnswer
{
public string Answer { get; set; }
public int DisplayOrder { get; set; }
}
}

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

@ -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);
}
}
}

6
src/Shentun.WebPeis.Domain/Models/DiseaseRiskLevel.cs

@ -10,6 +10,10 @@ namespace Shentun.WebPeis.Models;
/// </summary>
public partial class DiseaseRiskLevel : AuditedEntity, IHasConcurrencyStamp, IDisplayOrder
{
public DiseaseRiskLevel()
{
}
/// <summary>
/// 风险级别ID
/// </summary>
@ -45,7 +49,7 @@ public partial class DiseaseRiskLevel : AuditedEntity, IHasConcurrencyStamp, IDi
public string? Suggestion { get; set; }
public string DiagnosisFunction { get; set; }
public string? DiagnosisFunction { get; set; }
public virtual DiseaseRisk DiseaseRisk { get; set; } = null!;

3
src/Shentun.WebPeis.Domain/Models/DiseaseRiskLevelAnswer.cs

@ -13,11 +13,12 @@ namespace Shentun.WebPeis.Models
/// </summary>
public class DiseaseRiskLevelAnswer : Entity, IHasConcurrencyStamp
{
//public DiseaseRiskLevelAnswer() { }
public Guid DiseaseRiskLevelId { get; set; }
public Guid QuestionAnswerId { get; set; }
public string ConcurrencyStamp { get; set; }
public string? ConcurrencyStamp { get; set; }
public override object?[] GetKeys()
{

2
src/Shentun.WebPeis.EntityFrameworkCore/EntityFrameworkCore/WebPeisDbContext.cs

@ -152,6 +152,8 @@ public partial class WebPeisDbContext : AbpDbContext<WebPeisDbContext>,
public virtual DbSet<DiseaseRiskLevelAsbitem> DiseaseRiskLevelAsbitems { get; set; }
public virtual DbSet<DiseaseRiskLevelAnswer> DiseaseRiskLevelAnswers { get; set; }
public virtual DbSet<DiseaseRiskNormalLevel> DiseaseRiskNormalLevels { get; set; }

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

@ -90,6 +90,32 @@ namespace Shentun.WebPeis
}
await unitOfWork.CompleteAsync();
}
}
[Fact]
public async Task GetQuestionRegisterListByPersonIdAsync()
{
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
{
var entity = await _appService.GetQuestionRegisterListByPersonIdAsync(new PersonIdInputDto()
{
PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191") // 3a12d7fa-63f1-d549-c2f8-01123e5b7a8a
});
foreach (var item in entity)
{
_output.WriteLine("-----------" + item.QuestionName);
foreach (var answer in item.Answers)
{
_output.WriteLine(answer.Answer);
}
}
await unitOfWork.CompleteAsync();
}
}

Loading…
Cancel
Save