wxd 1 year ago
parent
commit
1818b464c4
  1. 10
      src/Shentun.WebPeis.Application.Contracts/Persons/CreatePersonDto.cs
  2. 3
      src/Shentun.WebPeis.Application.Contracts/Persons/PersonDto.cs
  3. 19
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs
  4. 7
      src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterItemDto.cs
  5. 14
      src/Shentun.WebPeis.Application/Persons/PersonAppService.cs
  6. 142
      src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs
  7. 27
      src/Shentun.WebPeis.Domain/Models/Person.cs
  8. 44
      src/Shentun.WebPeis.Domain/QuestionRegisters/QuestionRegisterManager.cs
  9. 9
      test/Shentun.WebPeis.Application.Tests/QuestionRegisterAppServiceTest.cs

10
src/Shentun.WebPeis.Application.Contracts/Persons/CreatePersonDto.cs

@ -84,6 +84,16 @@ namespace Shentun.WebPeis.Persons
/// 允许绑定
/// </summary>
public char? IsAllowBind { get; set; }
/// <summary>
/// 身高
/// </summary>
public decimal? Height { get; set; }
/// <summary>
/// 体重
/// </summary>
public decimal? Weight { get; set; }
/// <summary>
/// 微信JsCode
/// </summary>

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

@ -95,5 +95,8 @@ namespace Shentun.WebPeis.Persons
public int DisplayOrder { get; set; }
public char IsHaveQuestionRegister { get; set; }
}
}

19
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>
@ -61,7 +74,7 @@ namespace Shentun.WebPeis.QuestionRegisters
public string? PathCode { get; set; }
public List<QuestionRegisterAnswerDto> Childs = new List<QuestionRegisterAnswerDto>();
public List<QuestionRegisterAnswerDto> Childs { get; set; } = new List<QuestionRegisterAnswerDto>();
}
}

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

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

@ -46,7 +46,7 @@ namespace Shentun.WebPeis.Persons
[Authorize]
public class PersonAppService : ApplicationService
{
private readonly IRepository<QuestionRegister> _questionRegisterRepository;
private readonly IConfiguration _configuration;
private readonly IRepository<IdentityUser, Guid> _identityUserRepository;
private readonly IdentityUserManager _userManager;
@ -72,7 +72,8 @@ namespace Shentun.WebPeis.Persons
IRepository<Patient> patientRepository,
CacheService cacheService,
IHttpContextAccessor httpContextAccessor,
IRepository<CustomerOrg> customerOrgRepository)
IRepository<CustomerOrg> customerOrgRepository,
IRepository<QuestionRegister> questionRegisterRepository)
{
_repository = repository;
_configuration = configuration;
@ -87,6 +88,7 @@ namespace Shentun.WebPeis.Persons
_cacheService = cacheService;
_httpContextAccessor = httpContextAccessor;
_customerOrgRepository = customerOrgRepository;
_questionRegisterRepository = questionRegisterRepository;
}
public async Task<PersonDto> GetByIdAsync(PersonIdInputDto input)
@ -356,6 +358,9 @@ namespace Shentun.WebPeis.Persons
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
@ -367,10 +372,11 @@ namespace Shentun.WebPeis.Persons
MaritalStatusId = person.MaritalStatusId,
MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(person.MaritalStatusId).Result,
IdNo = person.IdNo,
MobileTelephone = user.PhoneNumber
MobileTelephone = user.PhoneNumber,
IsHaveQuestionRegister = haveQuestionRegister==null? 'N':'Y'
}).ToList();
}).Distinct().ToList();
for (var i = 0; i < personList.Count; i++)
{
personList[i].DisplayOrder = i + 1;

142
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;
return questionRegisterDto;
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,
};

27
src/Shentun.WebPeis.Domain/Models/Person.cs

@ -21,9 +21,6 @@ public partial class Person: AuditedEntity,IHasConcurrencyStamp
/// 组织单位ID
/// </summary>
public Guid MedicalCenterId { get; set; }
/// <summary>
/// 性别
/// </summary>
@ -58,10 +55,6 @@ public partial class Person: AuditedEntity,IHasConcurrencyStamp
/// 邮政编码
/// </summary>
public string? PostalCode { get; set; }
/// <summary>
/// 地址
/// </summary>
@ -74,16 +67,32 @@ public partial class Person: AuditedEntity,IHasConcurrencyStamp
public string? ConcurrencyStamp { get; set; }
/// <summary>
/// 微信openid
/// </summary>
public string? WechatOpenId { get; set; }
/// <summary>
/// 证件类别
/// </summary>
public string? IdTypeId { get; set; }
/// <summary>
/// 国家码
/// </summary>
public string? CountryCode { get; set; }
/// <summary>
/// 允许绑定
/// </summary>
public char? IsAllowBind { get; set; }
/// <summary>
/// 身高
/// </summary>
public decimal? Height { get; set; }
/// <summary>
/// 体重
/// </summary>
public decimal? Weight { get; set; }
public virtual ICollection<QuestionRegister> QuestionRegisters { get; set; } = new List<QuestionRegister>();

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