From eb7b9d37a915cbdeb025341caf37546f4f110222 Mon Sep 17 00:00:00 2001
From: "DESKTOP-G961P6V\\Zhh" <839860190@qq.com>
Date: Fri, 14 Jun 2024 23:29:46 +0800
Subject: [PATCH] =?UTF-8?q?=E9=97=AE=E5=8D=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../QuestionRegisterAnswerDto.cs | 17 ++-
.../QuestionRegisterItemDto.cs | 7 +-
.../QuestionRegisterAppService.cs | 140 ++++++++++++++++--
.../QuestionRegisterManager.cs | 44 +++---
.../QuestionRegisterAppServiceTest.cs | 9 +-
5 files changed, 177 insertions(+), 40 deletions(-)
diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs
index 9fd66cf..3fff65f 100644
--- a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs
+++ b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs
@@ -14,6 +14,10 @@ namespace Shentun.WebPeis.QuestionRegisters
///
public Guid QuestionRegisterAnswerId { get; set; }
///
+ /// 问卷ID
+ ///
+ public Guid QuestionId { get; set; }
+ ///
/// 答案ID
///
public Guid QuestionAnswerId { get; set; }
@@ -36,12 +40,12 @@ namespace Shentun.WebPeis.QuestionRegisters
public int DisplayOrder { get; set; }
///
- /// 子答案类别
+ /// 子答案类别 0-单选,1-多选
///
public char? ChildAnswerType { get; set; }
///
- /// 答案结果类别
+ /// 答案结果类别 0-选择,1-自填
///
public char? AnswerResultType { get; set; }
@@ -51,6 +55,15 @@ namespace Shentun.WebPeis.QuestionRegisters
///
public char IsSelected { get; set; } = 'N';
+ ///
+ /// 子答案标题
+ ///
+ public string? ChildAnswerTitle { get; set; }
+
+ ///
+ /// 无类型的答案-和其它答案排斥
+ ///
+ public char IsNone { get; set; }
///
/// 父答案ID
///
diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemDto.cs
index b4cd63c..726f685 100644
--- a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemDto.cs
+++ b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemDto.cs
@@ -10,6 +10,9 @@ namespace Shentun.WebPeis.QuestionRegisters
/// 主键
///
public Guid QuestionRegisterItemId { get; set; }
+ ///
+ /// 问卷ID
+ ///
public Guid QuestionId { get; set; }
///
/// 题目
@@ -24,7 +27,7 @@ namespace Shentun.WebPeis.QuestionRegisters
public int DisplayOrder { get; set; }
///
- /// 答案类别
+ /// 答案类别 0-单选,1-多选
///
public char? AnswerType { get; set; }
@@ -39,6 +42,6 @@ namespace Shentun.WebPeis.QuestionRegisters
public string? PathCode { get; set; }
- public virtual ICollection QuestionRegisterAnswers { get; set; } = new List();
+ public List QuestionRegisterAnswers { get; set; } = new List();
}
}
diff --git a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
index 95ba8b0..7879ddd 100644
--- a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
+++ b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
@@ -12,6 +12,7 @@ using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Uow;
namespace Shentun.WebPeis.QuestionRegisters
{
@@ -25,12 +26,14 @@ namespace Shentun.WebPeis.QuestionRegisters
private readonly IRepository _questionRepository;
private readonly IRepository _questionAnswerRepository;
private readonly QuestionRegisterManager _questionRegisterManager;
+ private readonly IUnitOfWorkManager _unitOfWorkManager;
public QuestionRegisterAppService(IRepository repository,
IRepository questionRegisterItemRepository,
IRepository questionRegisterAnswerRrepository,
IRepository questionRepository,
IRepository questionAnswerRepository,
- QuestionRegisterManager questionRegisterManager)
+ QuestionRegisterManager questionRegisterManager,
+ IUnitOfWorkManager unitOfWorkManager)
{
_repository = repository;
_questionRegisterItemRepository = questionRegisterItemRepository;
@@ -38,6 +41,7 @@ namespace Shentun.WebPeis.QuestionRegisters
_questionRepository = questionRepository;
_questionAnswerRepository = questionAnswerRepository;
_questionRegisterManager = questionRegisterManager;
+ _unitOfWorkManager = unitOfWorkManager;
}
///
/// 获取人员问卷
@@ -59,13 +63,17 @@ namespace Shentun.WebPeis.QuestionRegisters
questionRegisterDto = await GetBasicDataAsync(input);
if (questionRegister == null)
{
+ //没有登记过
var questionRegisterEntity = new QuestionRegister();
questionRegisterEntity.PersonId = input.PersonId;
questionRegisterEntity = await _questionRegisterManager.CreateAsync(questionRegisterEntity);
+ await _repository.InsertAsync(questionRegisterEntity);
questionRegisterDto.QuestionRegisterId = questionRegisterEntity.QuestionRegisterId;
+ await _unitOfWorkManager.Current.SaveChangesAsync();
return questionRegisterDto;
}
-
+ questionRegisterDto.QuestionRegisterId = questionRegister.QuestionRegisterId;
+ //已登记过
var questionRegisterItems = (from questionRegisterItem in await _questionRegisterItemRepository.GetQueryableAsync()
join questionRegisterAnswer in await _questionRegisterAnswerRrepository.GetQueryableAsync()
on questionRegisterItem.QuestionRegisterItemId equals questionRegisterAnswer.QuestionRegisterItemId
@@ -77,24 +85,128 @@ namespace Shentun.WebPeis.QuestionRegisters
}).ToList();
-
-
- foreach (var questionRegisterItem in questionRegisterDto.QuestionRegisterItems)
+ foreach (var questionRegisterItemDto in questionRegisterDto.QuestionRegisterItems)
{
- foreach (var questionRegisterAnswer in questionRegisterItem.QuestionRegisterAnswers)
+ var questionRegisterItemEntity = questionRegisterItems.Where(o =>
+ o.questionRegisterItem.QuestionId == questionRegisterItemDto.QuestionId).FirstOrDefault();
+ if (questionRegisterItemEntity != null)
{
- var answer = questionRegisterItems.Where(
- o=>o.questionRegisterAnswer.QuestionRegisterAnswerId == questionRegisterAnswer.QuestionRegisterAnswerId)
- .SingleOrDefault();
- if(answer != null)
+ questionRegisterItemDto.QuestionRegisterItemId = questionRegisterItemEntity.questionRegisterItem.QuestionRegisterItemId;
+ }
+ foreach (var questionRegisterAnswer in questionRegisterItemDto.QuestionRegisterAnswers)
+ {
+ var answer = questionRegisterItems.Where(
+ o => o.questionRegisterAnswer.QuestionRegisterAnswerId == questionRegisterAnswer.QuestionRegisterAnswerId)
+ .SingleOrDefault();
+ if (answer != null)
{
questionRegisterAnswer.IsSelected = 'Y';
+ questionRegisterAnswer.Content = answer.questionRegisterAnswer.Content;
+
+ }
+ foreach (var childQuestionRegisterAnswer in questionRegisterAnswer.Childs)
+ {
+ answer = questionRegisterItems.Where(
+ o => o.questionRegisterAnswer.QuestionRegisterAnswerId == childQuestionRegisterAnswer.QuestionRegisterAnswerId)
+ .SingleOrDefault();
+ if (answer != null)
+ {
+ childQuestionRegisterAnswer.IsSelected = 'Y';
+ childQuestionRegisterAnswer.Content = answer.questionRegisterAnswer.Content;
+
+ }
}
}
}
return questionRegisterDto;
}
+
+ ///
+ /// 更新
+ ///
+ ///
+ ///
+ [HttpPost("api/app/QuestionRegister/Update")]
+ public async Task UpdateAsync(QuestionRegisterDto input)
+ {
+ var questionRegister = await _repository.GetAsync(o => o.QuestionRegisterId == input.QuestionRegisterId);
+ var questionRegisterItemList = (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();
+ //删除所有答案和项目
+
+ var questionRegisterItems = questionRegisterItemList
+ .GroupBy(o => o.questionRegisterItem)
+ .Select(x => x.FirstOrDefault().questionRegisterItem)
+ .ToList();
+ foreach (var questionRegisterItem in questionRegisterItems)
+ {
+ //删除答案
+ var questionRegisterAnswers = questionRegisterItemList.
+ Where(o => o.questionRegisterItem.QuestionRegisterItemId == questionRegisterItem.QuestionRegisterItemId)
+ .Select(x => x.questionRegisterAnswer)
+ .ToList();
+ await _questionRegisterAnswerRrepository.DeleteManyAsync(questionRegisterAnswers);
+ }
+ //删除问题
+ await _questionRegisterItemRepository.DeleteManyAsync(questionRegisterItems);
+ //重新设置
+ questionRegister.QuestionRegisterItems = new List();
+
+ foreach (var questionRegisterItemDto in input.QuestionRegisterItems)
+ {
+ foreach (var questionRegisterAnswerDto in questionRegisterItemDto.QuestionRegisterAnswers)
+ {
+ if (questionRegisterAnswerDto.IsSelected == 'Y')
+ {
+ var questionRegisterItem = questionRegister.QuestionRegisterItems
+ .Where(o => o.QuestionId == questionRegisterItemDto.QuestionId).FirstOrDefault();
+ if (questionRegisterItem == null)
+ {
+ questionRegisterItem = new QuestionRegisterItem()
+ {
+ QuestionRegisterItemId = questionRegisterItemDto.QuestionRegisterItemId,
+ QuestionRegisterId = questionRegister.QuestionRegisterId,
+ QuestionId = questionRegisterItemDto.QuestionId,
+ };
+ questionRegister.QuestionRegisterItems.Add(questionRegisterItem);
+ // await _questionRegisterItemRepository.InsertAsync(questionRegisterItem);
+ }
+ var questionRegisterAnswer = new QuestionRegisterAnswer()
+ {
+ QuestionRegisterAnswerId = Guid.NewGuid(),
+ QuestionRegisterItemId = questionRegisterItem.QuestionRegisterItemId,
+ QuestionAnswerId = questionRegisterAnswerDto.QuestionAnswerId,
+ Content = questionRegisterAnswerDto.Content,
+
+ };
+ questionRegisterItem.QuestionRegisterAnswers.Add(questionRegisterAnswer);
+
+ foreach (var childQuestionRegisterAnswer in questionRegisterAnswerDto.Childs)
+ {
+ questionRegisterAnswer = new QuestionRegisterAnswer()
+ {
+ QuestionRegisterAnswerId = Guid.NewGuid(),
+ QuestionRegisterItemId = questionRegisterItem.QuestionRegisterItemId,
+ QuestionAnswerId = childQuestionRegisterAnswer.QuestionAnswerId,
+ Content = childQuestionRegisterAnswer.Content,
+
+ };
+ questionRegisterItem.QuestionRegisterAnswers.Add(questionRegisterAnswer);
+ }
+
+ }
+ }
+ }
+ await _repository.UpdateAsync(questionRegister);
+ }
private async Task GetBasicDataAsync(PersonIdInputDto input)
{
var questions = await _questionRepository.GetListAsync(o => o.IsActive == 'Y');
@@ -127,11 +239,14 @@ namespace Shentun.WebPeis.QuestionRegisters
var questionRegisterAnswer = new QuestionRegisterAnswerDto()
{
QuestionRegisterAnswerId = GuidGenerator.Create(),
+ QuestionId = question.QuestionId,
QuestionAnswerId = questionAnswer.QuestionAnswerId,
QuestionAnswerName = questionAnswer.QuestionAnswerName,
ChildAnswerType = questionAnswer.ChildAnswerType,
AnswerResultType = questionAnswer.AnswerResultType,
IsSelected = 'N',
+ ChildAnswerTitle = questionAnswer.ChildAnswerTitle,
+ IsNone = questionAnswer.IsNone,
DisplayOrder = questionAnswer.DisplayOrder,
ParentId = questionAnswer.ParentId,
PathCode = questionAnswer.PathCode,
@@ -144,14 +259,17 @@ namespace Shentun.WebPeis.QuestionRegisters
var childQuestionRegisterAnswer = new QuestionRegisterAnswerDto()
{
QuestionRegisterAnswerId = GuidGenerator.Create(),
+ QuestionId = question.QuestionId,
QuestionAnswerId = ChilduestionAnswer.QuestionAnswerId,
QuestionAnswerName = ChilduestionAnswer.QuestionAnswerName,
ChildAnswerType = ChilduestionAnswer.ChildAnswerType,
AnswerResultType = ChilduestionAnswer.AnswerResultType,
IsSelected = 'N',
+ ChildAnswerTitle = questionAnswer.ChildAnswerTitle,
+ IsNone = questionAnswer.IsNone,
DisplayOrder = ChilduestionAnswer.DisplayOrder,
ParentId = ChilduestionAnswer.ParentId,
- PathCode= ChilduestionAnswer.PathCode,
+ PathCode = ChilduestionAnswer.PathCode,
};
diff --git a/src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs b/src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs
index 3cfc8e5..b0ae829 100644
--- a/src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs
+++ b/src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs
@@ -36,29 +36,29 @@ namespace Shentun.WebPeis.QuestionRegisters
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);
+ 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
index fa10199..7b71c38 100644
--- a/test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs
+++ b/test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs
@@ -42,16 +42,19 @@ namespace Shentun.WebPeis
});
foreach (var item in entity.QuestionRegisterItems)
{
- _output.WriteLine("-----------" + item.QuestionName);
+ _output.WriteLine("-----------" + item.QuestionName + "-" + item.AnswerType );
foreach (var answer in item.QuestionRegisterAnswers)
{
- _output.WriteLine(answer.QuestionAnswerName);
+ _output.WriteLine(answer.QuestionAnswerName + "-" + answer.ChildAnswerType );
+ answer.IsSelected = 'Y';
foreach(var childAnswer in answer.Childs)
{
- _output.WriteLine("----"+childAnswer.QuestionAnswerName);
+ _output.WriteLine("----"+childAnswer.QuestionAnswerName );
+ childAnswer.IsSelected = 'Y';
}
}
}
+ await _appService.UpdateAsync( entity );
await unitOfWork.CompleteAsync();
}
}