Browse Source

预约

master
DESKTOP-G961P6V\Zhh 1 year ago
parent
commit
c5b8f41a1c
  1. 2
      src/Shentun.WebPeis.Application.Contracts/Persons/PersonDto.cs
  2. 30
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/PersonSubjectTypeDto.cs
  3. 2
      src/Shentun.WebPeis.Application/Persons/PersonAppService.cs
  4. 176
      src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
  5. 58
      test/Shentun.WebPeis.Application.Tests/PersonAppServiceTest.cs
  6. 44
      test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs

2
src/Shentun.WebPeis.Application.Contracts/Persons/PersonDto.cs

@ -98,5 +98,7 @@ namespace Shentun.WebPeis.Persons
public char IsHaveQuestionRegister { get; set; }
}
}

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

@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.WebPeis.QuestionRegisters
{
public class PersonSubjectTypeDto
{
/// <summary>
/// 题目类别ID
/// </summary>
public string QuestionSubjectTypeId { get; set; }
/// <summary>
/// 名称
/// </summary>
public string QuestionSubjectTypeName { get; set; } = null!;
public int DisplayOrder { get; set; }
public List<PersonSubjectTypeQuestionAnswer> Answers { get; set; } = new List<PersonSubjectTypeQuestionAnswer>();
}
public class PersonSubjectTypeQuestionAnswer
{
public string QuestionAnswerName { get; set; }
public int DisplayOrder { get; set; }
}
}

2
src/Shentun.WebPeis.Application/Persons/PersonAppService.cs

@ -371,7 +371,7 @@ namespace Shentun.WebPeis.Persons
MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(person.MaritalStatusId).Result,
IdNo = person.IdNo,
MobileTelephone = user.PhoneNumber,
IsHaveQuestionRegister = haveQuestionRegister.QuestionRegisterId == Guid.Empty ? 'N':'Y'
IsHaveQuestionRegister = haveQuestionRegister == null ? 'N':'Y'
}).Distinct().ToList();

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

@ -25,6 +25,7 @@ namespace Shentun.WebPeis.QuestionRegisters
private readonly IRepository<QuestionRegisterAnswer> _questionRegisterAnswerRrepository;
private readonly IRepository<Question> _questionRepository;
private readonly IRepository<QuestionAnswer> _questionAnswerRepository;
private readonly IRepository<QuestionSubjectType> _questionSubjectTypeRepository;
private readonly QuestionRegisterManager _questionRegisterManager;
private readonly IUnitOfWorkManager _unitOfWorkManager;
public QuestionRegisterAppService(IRepository<QuestionRegister> repository,
@ -33,7 +34,8 @@ namespace Shentun.WebPeis.QuestionRegisters
IRepository<Question> questionRepository,
IRepository<QuestionAnswer> questionAnswerRepository,
QuestionRegisterManager questionRegisterManager,
IUnitOfWorkManager unitOfWorkManager)
IUnitOfWorkManager unitOfWorkManager,
IRepository<QuestionSubjectType> questionSubjectTypeRepository)
{
_repository = repository;
_questionRegisterItemRepository = questionRegisterItemRepository;
@ -42,7 +44,10 @@ namespace Shentun.WebPeis.QuestionRegisters
_questionAnswerRepository = questionAnswerRepository;
_questionRegisterManager = questionRegisterManager;
_unitOfWorkManager = unitOfWorkManager;
_questionSubjectTypeRepository = questionSubjectTypeRepository;
}
/// <summary>
/// 获取人员问卷
/// </summary>
@ -64,13 +69,13 @@ namespace Shentun.WebPeis.QuestionRegisters
if (questionRegister == null)
{
//没有登记过
questionRegister = new QuestionRegister();
questionRegister.PersonId = input.PersonId;
questionRegister = await _questionRegisterManager.CreateAsync(questionRegister);
await _repository.InsertAsync(questionRegister);
questionRegisterDto.QuestionRegisterId = questionRegister.QuestionRegisterId;
await _unitOfWorkManager.Current.SaveChangesAsync();
//return questionRegisterDto;
//questionRegister = new QuestionRegister();
//questionRegister.PersonId = input.PersonId;
//questionRegister = await _questionRegisterManager.CreateAsync(questionRegister);
//await _repository.InsertAsync(questionRegister);
//questionRegisterDto.QuestionRegisterId = questionRegister.QuestionRegisterId;
//await _unitOfWorkManager.Current.SaveChangesAsync();
return questionRegisterDto;
}
questionRegisterDto.QuestionRegisterId = questionRegister.QuestionRegisterId;
//已登记过
@ -96,7 +101,7 @@ namespace Shentun.WebPeis.QuestionRegisters
foreach (var questionRegisterAnswer in questionRegisterItemDto.QuestionRegisterAnswers)
{
var answer = questionRegisterItems.Where(
o => o.questionRegisterAnswer.QuestionRegisterAnswerId == questionRegisterAnswer.QuestionRegisterAnswerId)
o => o.questionRegisterAnswer.QuestionAnswerId == questionRegisterAnswer.QuestionAnswerId)
.SingleOrDefault();
if (answer != null)
{
@ -107,7 +112,7 @@ namespace Shentun.WebPeis.QuestionRegisters
foreach (var childQuestionRegisterAnswer in questionRegisterAnswer.Childs)
{
answer = questionRegisterItems.Where(
o => o.questionRegisterAnswer.QuestionRegisterAnswerId == childQuestionRegisterAnswer.QuestionRegisterAnswerId)
o => o.questionRegisterAnswer.QuestionAnswerId == childQuestionRegisterAnswer.QuestionAnswerId)
.SingleOrDefault();
if (answer != null)
{
@ -122,6 +127,147 @@ namespace Shentun.WebPeis.QuestionRegisters
}
/// <summary>
///
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/QuestionRegister/GetSubjectTypeListByPersonId")]
public async Task<List<PersonSubjectTypeDto>> GetSubjectTypeListByPersonIdAsync(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
select new
{
questionSubjectType,
questionRegisterItem,
questionRegisterAnswer,
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();
foreach (var personSubjectTypeDto in personSubjectTypeDtos)
{
questionRegisterItems.Where(o => o.questionSubjectType.QuestionSubjectTypeId == personSubjectTypeDto.QuestionSubjectTypeId
).ToList();
foreach(var questionRegisterItem in questionRegisterItems)
{
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;
}
personSubjectTypeDto.Answers.Add(new PersonSubjectTypeQuestionAnswer()
{
QuestionAnswerName = answer,
DisplayOrder = questionRegisterItem.questionAnswer.DisplayOrder,
});
}
}
return personSubjectTypeDtos;
}
/// <summary>
///
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/QuestionRegister/Create")]
public async Task CreateAsync(QuestionRegisterDto input)
{
var questionRegister = new QuestionRegister();
questionRegister.PersonId = input.PersonId;
questionRegister = await _questionRegisterManager.CreateAsync(questionRegister);
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 = GuidGenerator.Create(),
QuestionRegisterItemId = questionRegisterItem.QuestionRegisterItemId,
QuestionAnswerId = questionRegisterAnswerDto.QuestionAnswerId,
Content = questionRegisterAnswerDto.Content,
};
questionRegisterItem.QuestionRegisterAnswers.Add(questionRegisterAnswer);
foreach (var childQuestionRegisterAnswer in questionRegisterAnswerDto.Childs)
{
if(childQuestionRegisterAnswer.IsSelected == 'Y')
{
questionRegisterAnswer = new QuestionRegisterAnswer()
{
QuestionRegisterAnswerId = GuidGenerator.Create(),
QuestionRegisterItemId = questionRegisterItem.QuestionRegisterItemId,
QuestionAnswerId = childQuestionRegisterAnswer.QuestionAnswerId,
Content = childQuestionRegisterAnswer.Content,
};
questionRegisterItem.QuestionRegisterAnswers.Add(questionRegisterAnswer);
}
}
}
}
}
await _repository.InsertAsync(questionRegister);
}
/// <summary>
/// 更新
/// </summary>
@ -181,7 +327,7 @@ namespace Shentun.WebPeis.QuestionRegisters
}
var questionRegisterAnswer = new QuestionRegisterAnswer()
{
QuestionRegisterAnswerId = Guid.NewGuid(),
QuestionRegisterAnswerId = GuidGenerator.Create(),
QuestionRegisterItemId = questionRegisterItem.QuestionRegisterItemId,
QuestionAnswerId = questionRegisterAnswerDto.QuestionAnswerId,
Content = questionRegisterAnswerDto.Content,
@ -190,10 +336,12 @@ namespace Shentun.WebPeis.QuestionRegisters
questionRegisterItem.QuestionRegisterAnswers.Add(questionRegisterAnswer);
foreach (var childQuestionRegisterAnswer in questionRegisterAnswerDto.Childs)
{
if (childQuestionRegisterAnswer.IsSelected == 'Y')
{
questionRegisterAnswer = new QuestionRegisterAnswer()
{
QuestionRegisterAnswerId = Guid.NewGuid(),
QuestionRegisterAnswerId = GuidGenerator.Create(),
QuestionRegisterItemId = questionRegisterItem.QuestionRegisterItemId,
QuestionAnswerId = childQuestionRegisterAnswer.QuestionAnswerId,
Content = childQuestionRegisterAnswer.Content,
@ -203,6 +351,8 @@ namespace Shentun.WebPeis.QuestionRegisters
}
}
}
}
}
await _repository.UpdateAsync(questionRegister);
@ -213,7 +363,7 @@ namespace Shentun.WebPeis.QuestionRegisters
var questionAnswers = await _questionAnswerRepository.GetListAsync();
var questionRegisterDto = new QuestionRegisterDto()
{
QuestionRegisterId = Guid.NewGuid(),
QuestionRegisterId = GuidGenerator.Create(),
PersonId = input.PersonId,
};
//问卷

58
test/Shentun.WebPeis.Application.Tests/PersonAppServiceTest.cs

@ -9,8 +9,10 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Identity;
using Volo.Abp.Modularity;
using Volo.Abp.Uow;
using Volo.Abp.Users;
using Xunit;
using Xunit.Abstractions;
@ -23,13 +25,21 @@ namespace Shentun.WebPeis
private readonly PersonAppService _appService;
private readonly ITestOutputHelper _output;
private readonly IUnitOfWorkManager _unitOfWorkManager;
private readonly IRepository<IdentityUser, Guid> _identityUserRepository;
private readonly IRepository<QuestionRegister> _questionRegisterRepository;
private readonly IRepository<PersonKinship> _personKinshipRepository;
public PersonAppServiceTest(ITestOutputHelper output)
{
//ITestOutputHelper testOutputHelper
//_output = testOutputHelper;
_unitOfWorkManager = GetRequiredService<IUnitOfWorkManager>();
_repository = GetRequiredService<IRepository<Person>>();
_appService = GetRequiredService<PersonAppService>();
//_appService = GetRequiredService<PersonAppService>();
_identityUserRepository = GetRequiredService<IRepository<IdentityUser, Guid>>();
_questionRegisterRepository = GetRequiredService<IRepository<QuestionRegister>>();
_personKinshipRepository = GetRequiredService<IRepository<PersonKinship>>();
_output = output;
}
[Fact]
@ -87,6 +97,52 @@ namespace Shentun.WebPeis
await unitOfWork.CompleteAsync();
}
}
[Fact]
public async Task GetPersonKinshipListByEfcore()
{
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
{
var personId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191");
var personKinshipIds = (await _personKinshipRepository.GetQueryableAsync())
.Where(o => o.ParentPersonId == personId)
.Select(o => o.PersonId).ToList();
personKinshipIds.Add(personId);
var personList = (from user in await _identityUserRepository.GetQueryableAsync()
join person in await _repository.GetQueryableAsync()
on user.Id equals person.PersonId
join questionRegister in await _questionRegisterRepository.GetQueryableAsync()
on person.PersonId equals questionRegister.PersonId into emptyQuestionRegister
from haveQuestionRegister in emptyQuestionRegister.DefaultIfEmpty()
where personKinshipIds.Contains(user.Id)
orderby user.CreationTime
select new PersonDto
{
PersonId = user.Id,
PersonName = user.Name,
SexId = person.SexId,
MaritalStatusId = person.MaritalStatusId,
IdNo = person.IdNo,
MobileTelephone = user.PhoneNumber,
IsHaveQuestionRegister = haveQuestionRegister == null? 'N' : 'Y'
}).Distinct().ToList();
foreach (var person in personList)
{
_output.WriteLine(person.PersonName + "," + person.IsHaveQuestionRegister );
var cnt = (await _questionRegisterRepository.GetQueryableAsync()).Where(o=>o.PersonId == personId).Count();
_output.WriteLine(cnt.ToString());
}
await unitOfWork.CompleteAsync();
}
}
[Fact]
public async Task SendVerifySms()
{

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

@ -45,16 +45,50 @@ namespace Shentun.WebPeis
_output.WriteLine("-----------" + item.QuestionName + "-" + item.AnswerType );
foreach (var answer in item.QuestionRegisterAnswers)
{
_output.WriteLine(answer.QuestionAnswerName + "-" + answer.ChildAnswerType );
answer.IsSelected = 'Y';
_output.WriteLine(answer.QuestionAnswerName + "-" + answer.ChildAnswerType + answer.IsSelected);
//answer.IsSelected = 'Y';
foreach(var childAnswer in answer.Childs)
{
_output.WriteLine("----"+childAnswer.QuestionAnswerName );
childAnswer.IsSelected = 'Y';
_output.WriteLine("----"+childAnswer.QuestionAnswerName + childAnswer.IsSelected);
//childAnswer.IsSelected = 'Y';
}
}
}
await _appService.UpdateAsync( entity );
//var questionRegister = await _repository.FindAsync(o=>o.QuestionRegisterId == entity.QuestionRegisterId);
//if(questionRegister == null)
//{
// await _appService.CreateAsync(entity);
//}
//else
//{
// await _appService.UpdateAsync(entity);
//}
await unitOfWork.CompleteAsync();
}
}
[Fact]
public async Task GetSubjectTypeListByPersonIdAsync()
{
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
{
var entity = await _appService.GetSubjectTypeListByPersonIdAsync(new PersonIdInputDto()
{
PersonId = new Guid("3a12d72c-19d9-e8b2-71f6-cf283103e191") // 3a12d7fa-63f1-d549-c2f8-01123e5b7a8a
});
foreach (var item in entity)
{
_output.WriteLine("-----------" + item.QuestionSubjectTypeName );
foreach (var answer in item.Answers)
{
_output.WriteLine(answer.QuestionAnswerName );
}
}
await unitOfWork.CompleteAsync();
}
}

Loading…
Cancel
Save