diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs
index 2792a3e..8857593 100644
--- a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs
+++ b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs
@@ -46,6 +46,16 @@ namespace Shentun.WebPeis.QuestionRegisters
public char IsSelected { get; set; } = 'N';
+ ///
+ /// 父答案ID
+ ///
+ public Guid? ParentId { get; set; }
+ ///
+ /// 编码路径
+ ///
+
+ public string? PathCode { get; set; }
+
public List Childs = new List();
}
diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemDto.cs
index 73e0465..b4cd63c 100644
--- a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemDto.cs
+++ b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemDto.cs
@@ -29,6 +29,16 @@ namespace Shentun.WebPeis.QuestionRegisters
public char? AnswerType { get; set; }
+ ///
+ /// 父问题ID
+ ///
+ public Guid? ParentId { get; set; }
+ ///
+ /// 编码路径
+ ///
+
+ public string? PathCode { get; set; }
+
public virtual ICollection QuestionRegisterAnswers { get; set; } = new List();
}
}
diff --git a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
index 324623f..b51d035 100644
--- a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
+++ b/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 _questionRegisterAnswerRrepository;
private readonly IRepository _questionRepository;
private readonly IRepository _questionAnswerRepository;
-
- public QuestionRegisterAppService(IRepository repository,
+ private readonly QuestionRegisterManager _questionRegisterManager;
+ public QuestionRegisterAppService(IRepository repository,
IRepository questionRegisterItemRepository,
IRepository questionRegisterAnswerRrepository,
IRepository questionRepository,
- IRepository questionAnswerRepository)
+ IRepository questionAnswerRepository,
+ QuestionRegisterManager questionRegisterManager)
{
_repository = repository;
_questionRegisterItemRepository = questionRegisterItemRepository;
_questionRegisterAnswerRrepository = questionRegisterAnswerRrepository;
_questionRepository = questionRepository;
_questionAnswerRepository = questionAnswerRepository;
+ _questionRegisterManager = questionRegisterManager;
}
+ ///
+ /// 获取人员问卷
+ ///
+ ///
+ ///
+ [HttpPost("api/app/QuestionRegister/GetByPersonId")]
+ public async Task 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 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);
-
-
}
}
}
diff --git a/src/Shentun.WebPeis.Domain/Models/QuestionAnswer.cs b/src/Shentun.WebPeis.Domain/Models/QuestionAnswer.cs
index 01db6bb..840f437 100644
--- a/src/Shentun.WebPeis.Domain/Models/QuestionAnswer.cs
+++ b/src/Shentun.WebPeis.Domain/Models/QuestionAnswer.cs
@@ -49,15 +49,15 @@ public partial class QuestionAnswer : AuditedEntity, IHasConcurrencyStamp
/// 概述
///
- public string Overview { get; set; }
+ public string? Overview { get; set; }
///
/// 可能原因
///
- public string Reason { get; set; }
+ public string? Reason { get; set; }
///
/// 健康指导
///
- public string HealthGuidance { get; set; }
+ public string? HealthGuidance { get; set; }
///
/// 父答案ID
diff --git a/src/Shentun.WebPeis.Domain/Models/QuestionRegister.cs b/src/Shentun.WebPeis.Domain/Models/QuestionRegister.cs
index a2c4a83..9c544ad 100644
--- a/src/Shentun.WebPeis.Domain/Models/QuestionRegister.cs
+++ b/src/Shentun.WebPeis.Domain/Models/QuestionRegister.cs
@@ -10,6 +10,15 @@ namespace Shentun.WebPeis.Models;
///
public partial class QuestionRegister: AuditedEntity, IHasConcurrencyStamp
{
+ public QuestionRegister()
+ {
+
+ }
+
+ public QuestionRegister(Guid id)
+ {
+ QuestionRegisterId = id;
+ }
///
/// 主键
///
diff --git a/src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs b/src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs
new file mode 100644
index 0000000..3cfc8e5
--- /dev/null
+++ b/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 _questionRegisterItemRepository;
+ private readonly IRepository _questionRegisterAnswerRrepository;
+ private readonly IRepository _questionRepository;
+ private readonly IRepository _questionAnswerRepository;
+ public QuestionRegisterManager(IRepository questionRegisterItemRepository,
+ IRepository questionRegisterAnswerRrepository,
+ IRepository questionRepository,
+ IRepository questionAnswerRepository)
+ {
+ _questionRegisterItemRepository = questionRegisterItemRepository;
+ _questionRegisterAnswerRrepository = questionRegisterAnswerRrepository;
+ _questionRepository = questionRepository;
+ _questionAnswerRepository = questionAnswerRepository;
+ }
+
+ public async Task 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;
+ }
+ }
+}
diff --git a/test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs b/test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs
new file mode 100644
index 0000000..fa10199
--- /dev/null
+++ b/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 : WebPeisApplicationTestBase
+ where TStartupModule : IAbpModule
+ {
+ private readonly IRepository _repository;
+ private readonly QuestionRegisterAppService _appService;
+ private readonly ITestOutputHelper _output;
+ private readonly IUnitOfWorkManager _unitOfWorkManager;
+ public QuestionRegisterAppServiceTest(ITestOutputHelper output)
+ {
+ _unitOfWorkManager = GetRequiredService();
+ _repository = GetRequiredService>();
+ _appService = GetRequiredService();
+ _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();
+ }
+ }
+ }
+}
diff --git a/test/Shentun.WebPeis.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfcoreQuestionRegisterAppServiceTest.cs b/test/Shentun.WebPeis.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfcoreQuestionRegisterAppServiceTest.cs
new file mode 100644
index 0000000..87ccc72
--- /dev/null
+++ b/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
+ {
+ public EfcoreQuestionRegisterAppServiceTest(ITestOutputHelper output) : base(output) { }
+ }
+}