Browse Source

问卷

master
DESKTOP-G961P6V\Zhh 1 year ago
parent
commit
eb7b9d37a9
  1. 17
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs
  2. 7
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemDto.cs
  3. 140
      src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
  4. 44
      src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs
  5. 9
      test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs

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

@ -14,6 +14,10 @@ namespace Shentun.WebPeis.QuestionRegisters
/// </summary>
public Guid QuestionRegisterAnswerId { get; set; }
/// <summary>
/// 问卷ID
/// </summary>
public Guid QuestionId { get; set; }
/// <summary>
/// 答案ID
/// </summary>
public Guid QuestionAnswerId { get; set; }
@ -36,12 +40,12 @@ namespace Shentun.WebPeis.QuestionRegisters
public int DisplayOrder { get; set; }
/// <summary>
/// 子答案类别
/// 子答案类别 0-单选,1-多选
/// </summary>
public char? ChildAnswerType { get; set; }
/// <summary>
/// 答案结果类别
/// 答案结果类别 0-选择,1-自填
/// </summary>
public char? AnswerResultType { get; set; }
@ -51,6 +55,15 @@ namespace Shentun.WebPeis.QuestionRegisters
/// </summary>
public char IsSelected { get; set; } = 'N';
/// <summary>
/// 子答案标题
/// </summary>
public string? ChildAnswerTitle { get; set; }
/// <summary>
/// 无类型的答案-和其它答案排斥
/// </summary>
public char IsNone { get; set; }
/// <summary>
/// 父答案ID
/// </summary>

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

@ -10,6 +10,9 @@ namespace Shentun.WebPeis.QuestionRegisters
/// 主键
/// </summary>
public Guid QuestionRegisterItemId { get; set; }
/// <summary>
/// 问卷ID
/// </summary>
public Guid QuestionId { get; set; }
/// <summary>
/// 题目
@ -24,7 +27,7 @@ namespace Shentun.WebPeis.QuestionRegisters
public int DisplayOrder { get; set; }
/// <summary>
/// 答案类别
/// 答案类别 0-单选,1-多选
/// </summary>
public char? AnswerType { get; set; }
@ -39,6 +42,6 @@ namespace Shentun.WebPeis.QuestionRegisters
public string? PathCode { get; set; }
public virtual ICollection<QuestionRegisterAnswerDto> QuestionRegisterAnswers { get; set; } = new List<QuestionRegisterAnswerDto>();
public List<QuestionRegisterAnswerDto> QuestionRegisterAnswers { get; set; } = new List<QuestionRegisterAnswerDto>();
}
}

140
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<Question> _questionRepository;
private readonly IRepository<QuestionAnswer> _questionAnswerRepository;
private readonly QuestionRegisterManager _questionRegisterManager;
private readonly IUnitOfWorkManager _unitOfWorkManager;
public QuestionRegisterAppService(IRepository<QuestionRegister> repository,
IRepository<QuestionRegisterItem> questionRegisterItemRepository,
IRepository<QuestionRegisterAnswer> questionRegisterAnswerRrepository,
IRepository<Question> questionRepository,
IRepository<QuestionAnswer> 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;
}
/// <summary>
/// 获取人员问卷
@ -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;
}
/// <summary>
/// 更新
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[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<QuestionRegisterItem>();
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<QuestionRegisterDto> 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,
};

44
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;
}
}

9
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();
}
}

Loading…
Cancel
Save