Browse Source

问卷

master
DESKTOP-G961P6V\Zhh 1 year ago
parent
commit
9e11b8120d
  1. 10
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs
  2. 10
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemDto.cs
  3. 144
      src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
  4. 6
      src/Shentun.WebPeis.Domain/Models/QuestionAnswer.cs
  5. 9
      src/Shentun.WebPeis.Domain/Models/QuestionRegister.cs
  6. 65
      src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs
  7. 59
      test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs
  8. 14
      test/Shentun.WebPeis.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfcoreQuestionRegisterAppServiceTest.cs

10
src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs

@ -46,6 +46,16 @@ namespace Shentun.WebPeis.QuestionRegisters
public char IsSelected { get; set; } = 'N';
/// <summary>
/// 父答案ID
/// </summary>
public Guid? ParentId { get; set; }
/// <summary>
/// 编码路径
/// </summary>
public string? PathCode { get; set; }
public List<QuestionRegisterAnswerDto> Childs = new List<QuestionRegisterAnswerDto>();
}

10
src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemDto.cs

@ -29,6 +29,16 @@ namespace Shentun.WebPeis.QuestionRegisters
public char? AnswerType { get; set; }
/// <summary>
/// 父问题ID
/// </summary>
public Guid? ParentId { get; set; }
/// <summary>
/// 编码路径
/// </summary>
public string? PathCode { get; set; }
public virtual ICollection<QuestionRegisterAnswerDto> QuestionRegisterAnswers { get; set; } = new List<QuestionRegisterAnswerDto>();
}
}

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

@ -1,4 +1,6 @@
using Shentun.WebPeis.Enums;
using Microsoft.AspNetCore.Mvc;
using Org.BouncyCastle.Math.EC.Rfc7748;
using Shentun.WebPeis.Enums;
using Shentun.WebPeis.Models;
using Shentun.WebPeis.Persons;
using System;
@ -7,6 +9,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
namespace Shentun.WebPeis.QuestionRegisters
@ -18,21 +21,148 @@ namespace Shentun.WebPeis.QuestionRegisters
private readonly IRepository<QuestionRegisterAnswer> _questionRegisterAnswerRrepository;
private readonly IRepository<Question> _questionRepository;
private readonly IRepository<QuestionAnswer> _questionAnswerRepository;
public QuestionRegisterAppService(IRepository<QuestionRegister> repository,
private readonly QuestionRegisterManager _questionRegisterManager;
public QuestionRegisterAppService(IRepository<QuestionRegister> repository,
IRepository<QuestionRegisterItem> questionRegisterItemRepository,
IRepository<QuestionRegisterAnswer> questionRegisterAnswerRrepository,
IRepository<Question> questionRepository,
IRepository<QuestionAnswer> questionAnswerRepository)
IRepository<QuestionAnswer> questionAnswerRepository,
QuestionRegisterManager questionRegisterManager)
{
_repository = repository;
_questionRegisterItemRepository = questionRegisterItemRepository;
_questionRegisterAnswerRrepository = questionRegisterAnswerRrepository;
_questionRepository = questionRepository;
_questionAnswerRepository = questionAnswerRepository;
_questionRegisterManager = questionRegisterManager;
}
/// <summary>
/// 获取人员问卷
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/QuestionRegister/GetByPersonId")]
public async Task<QuestionRegisterDto> GetByPersonIdAsync(PersonIdInputDto input)
{
var questions = await _questionRepository.GetListAsync(o => o.IsActive == 'Y');
var questionAnswers = await _questionAnswerRepository.GetListAsync();
var questionRegister = (await _repository.GetQueryableAsync())
.Where(o => o.PersonId == input.PersonId)
.OrderByDescending(o => o.CreationTime)
.FirstOrDefault();
QuestionRegisterDto questionRegisterDto;
questionRegisterDto = await GetBasicDataAsync(input);
if (questionRegister == null)
{
var questionRegisterEntity = new QuestionRegister();
questionRegisterEntity.PersonId = input.PersonId;
questionRegisterEntity = await _questionRegisterManager.CreateAsync(questionRegisterEntity);
questionRegisterDto.QuestionRegisterId = questionRegisterEntity.QuestionRegisterId;
return questionRegisterDto;
}
var questionRegisterItems = (from questionRegisterItem in await _questionRegisterItemRepository.GetQueryableAsync()
join questionRegisterAnswer in await _questionRegisterAnswerRrepository.GetQueryableAsync()
on questionRegisterItem.QuestionRegisterItemId equals questionRegisterAnswer.QuestionRegisterItemId
where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId
select new
{
questionRegisterItem,
questionRegisterAnswer,
}).ToList();
foreach (var questionRegisterItem in questionRegisterDto.QuestionRegisterItems)
{
foreach (var questionRegisterAnswer in questionRegisterItem.QuestionRegisterAnswers)
{
var answer = questionRegisterItems.Where(
o=>o.questionRegisterAnswer.QuestionRegisterAnswerId == questionRegisterAnswer.QuestionRegisterAnswerId)
.SingleOrDefault();
if(answer != null)
{
questionRegisterAnswer.IsSelected = 'Y';
}
}
}
return questionRegisterDto;
}
private async Task<QuestionRegisterDto> GetBasicDataAsync(PersonIdInputDto input)
{
var questions = await _questionRepository.GetListAsync(o => o.IsActive == 'Y');
var questionAnswers = await _questionAnswerRepository.GetListAsync();
var questionRegisterDto = new QuestionRegisterDto()
{
QuestionRegisterId = Guid.NewGuid(),
PersonId = input.PersonId,
};
//问卷
foreach (var question in questions)
{
var questionRegisterItem = new QuestionRegisterItemDto()
{
QuestionRegisterItemId = GuidGenerator.Create(),
QuestionId = question.QuestionId,
QuestionName = question.QuestionName,
AnswerType = question.AnswerType,
DisplayOrder = question.DisplayOrder,
ParentId = question.ParentId,
PathCode = question.PathCode,
};
//一级答案
var firstLevelQuestionAnswers = questionAnswers.Where(o => o.QuestionId == question.QuestionId &&
o.PathCode.Length == 5).ToList();
foreach (var questionAnswer in firstLevelQuestionAnswers)
{
var questionRegisterAnswer = new QuestionRegisterAnswerDto()
{
QuestionRegisterAnswerId = GuidGenerator.Create(),
QuestionAnswerId = questionAnswer.QuestionAnswerId,
QuestionAnswerName = questionAnswer.QuestionAnswerName,
ChildAnswerType = questionAnswer.ChildAnswerType,
AnswerResultType = questionAnswer.AnswerResultType,
IsSelected = 'N',
DisplayOrder = questionAnswer.DisplayOrder,
ParentId = questionAnswer.ParentId,
PathCode = questionAnswer.PathCode,
};
//二级答案
var childQuestionAnswers = questionAnswers.Where(o => o.ParentId == questionAnswer.QuestionAnswerId).ToList();
foreach (var ChilduestionAnswer in childQuestionAnswers)
{
var childQuestionRegisterAnswer = new QuestionRegisterAnswerDto()
{
QuestionRegisterAnswerId = GuidGenerator.Create(),
QuestionAnswerId = ChilduestionAnswer.QuestionAnswerId,
QuestionAnswerName = ChilduestionAnswer.QuestionAnswerName,
ChildAnswerType = ChilduestionAnswer.ChildAnswerType,
AnswerResultType = ChilduestionAnswer.AnswerResultType,
IsSelected = 'N',
DisplayOrder = ChilduestionAnswer.DisplayOrder,
ParentId = ChilduestionAnswer.ParentId,
PathCode= ChilduestionAnswer.PathCode,
public async Task GetByPersonId(PersonIdInputDto input)
};
questionRegisterAnswer.Childs.Add(childQuestionRegisterAnswer);
}
questionRegisterItem.QuestionRegisterAnswers.Add(questionRegisterAnswer);
}
questionRegisterDto.QuestionRegisterItems.Add(questionRegisterItem);
}
return questionRegisterDto;
}
private async Task GetTest(PersonIdInputDto input)
{
var questionRegisterDto = new QuestionRegisterDto()
{
@ -118,7 +248,7 @@ namespace Shentun.WebPeis.QuestionRegisters
DisplayOrder = 1,
AnswerResultType = '0',
ChildAnswerType = AnswerTypeFlag.MultipleChoice,
};
questionRegisterAnswerDto.Childs.Add(new QuestionRegisterAnswerDto()
{
@ -166,8 +296,6 @@ namespace Shentun.WebPeis.QuestionRegisters
AnswerResultType = '0'
};
questionRegisterItemDto.QuestionRegisterAnswers.Add(questionRegisterAnswerDto);
}
}
}

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

@ -49,15 +49,15 @@ public partial class QuestionAnswer : AuditedEntity, IHasConcurrencyStamp
/// 概述
/// </summary>
public string Overview { get; set; }
public string? Overview { get; set; }
/// <summary>
/// 可能原因
/// </summary>
public string Reason { get; set; }
public string? Reason { get; set; }
/// <summary>
/// 健康指导
/// </summary>
public string HealthGuidance { get; set; }
public string? HealthGuidance { get; set; }
/// <summary>
/// 父答案ID

9
src/Shentun.WebPeis.Domain/Models/QuestionRegister.cs

@ -10,6 +10,15 @@ namespace Shentun.WebPeis.Models;
/// </summary>
public partial class QuestionRegister: AuditedEntity, IHasConcurrencyStamp
{
public QuestionRegister()
{
}
public QuestionRegister(Guid id)
{
QuestionRegisterId = id;
}
/// <summary>
/// 主键
/// </summary>

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

@ -0,0 +1,65 @@
using Shentun.WebPeis.Models;
using Shentun.WebPeis.Persons;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Domain.Services;
namespace Shentun.WebPeis.QuestionRegisters
{
public class QuestionRegisterManager : DomainService
{
private readonly IRepository<QuestionRegisterItem> _questionRegisterItemRepository;
private readonly IRepository<QuestionRegisterAnswer> _questionRegisterAnswerRrepository;
private readonly IRepository<Question> _questionRepository;
private readonly IRepository<QuestionAnswer> _questionAnswerRepository;
public QuestionRegisterManager(IRepository<QuestionRegisterItem> questionRegisterItemRepository,
IRepository<QuestionRegisterAnswer> questionRegisterAnswerRrepository,
IRepository<Question> questionRepository,
IRepository<QuestionAnswer> questionAnswerRepository)
{
_questionRegisterItemRepository = questionRegisterItemRepository;
_questionRegisterAnswerRrepository = questionRegisterAnswerRrepository;
_questionRepository = questionRepository;
_questionAnswerRepository = questionAnswerRepository;
}
public async Task<QuestionRegister> CreateAsync(
QuestionRegister entity)
{
if (entity.PersonId == Guid.Empty)
{
throw new UserFriendlyException("PersonId不能为空");
}
entity.QuestionRegisterId = GuidGenerator.Create();
//var questions = await _questionRepository.GetListAsync(o => o.IsActive == 'Y');
//var questionAnswers = await _questionAnswerRepository.GetListAsync();
//foreach (var question in questions)
//{
// var questionRegisterItem = new QuestionRegisterItem()
// {
// QuestionRegisterItemId = GuidGenerator.Create(),
// QuestionRegisterId = entity.QuestionRegisterId,
// QuestionId = question.QuestionId,
// };
// foreach (var questionAnswer in questionAnswers)
// {
// var questionRegisterAnswer = new QuestionRegisterAnswer()
// {
// QuestionRegisterAnswerId = GuidGenerator.Create(),
// QuestionRegisterItemId = questionRegisterItem.QuestionRegisterItemId,
// QuestionAnswerId = questionAnswer.QuestionAnswerId,
// };
// questionRegisterItem.QuestionRegisterAnswers.Add(questionRegisterAnswer);
// }
// entity.QuestionRegisterItems.Add(questionRegisterItem);
//}
return entity;
}
}
}

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

@ -0,0 +1,59 @@
using Shentun.WebPeis.Asbitems;
using Shentun.WebPeis.Models;
using Shentun.WebPeis.Persons;
using Shentun.WebPeis.QuestionRegisters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Modularity;
using Volo.Abp.Uow;
using Xunit;
using Xunit.Abstractions;
namespace Shentun.WebPeis
{
public class QuestionRegisterAppServiceTest<TStartupModule> : WebPeisApplicationTestBase<TStartupModule>
where TStartupModule : IAbpModule
{
private readonly IRepository<QuestionRegister> _repository;
private readonly QuestionRegisterAppService _appService;
private readonly ITestOutputHelper _output;
private readonly IUnitOfWorkManager _unitOfWorkManager;
public QuestionRegisterAppServiceTest(ITestOutputHelper output)
{
_unitOfWorkManager = GetRequiredService<IUnitOfWorkManager>();
_repository = GetRequiredService<IRepository<QuestionRegister>>();
_appService = GetRequiredService<QuestionRegisterAppService>();
_output = output;
}
[Fact]
public async Task GetByPersonId()
{
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
{
var entity = await _appService.GetByPersonIdAsync(new PersonIdInputDto()
{
PersonId = new Guid("3a12d7fa-63f1-d549-c2f8-01123e5b7a8a")
});
foreach (var item in entity.QuestionRegisterItems)
{
_output.WriteLine("-----------" + item.QuestionName);
foreach (var answer in item.QuestionRegisterAnswers)
{
_output.WriteLine(answer.QuestionAnswerName);
foreach(var childAnswer in answer.Childs)
{
_output.WriteLine("----"+childAnswer.QuestionAnswerName);
}
}
}
await unitOfWork.CompleteAsync();
}
}
}
}

14
test/Shentun.WebPeis.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfcoreQuestionRegisterAppServiceTest.cs

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xunit.Abstractions;
namespace Shentun.WebPeis.EntityFrameworkCore.Applications
{
public class EfcoreQuestionRegisterAppServiceTest : QuestionRegisterAppServiceTest<WebPeisEntityFrameworkCoreTestModule>
{
public EfcoreQuestionRegisterAppServiceTest(ITestOutputHelper output) : base(output) { }
}
}
Loading…
Cancel
Save