diff --git a/src/Shentun.WebPeis.Application.Contracts/Persons/CreatePersonDto.cs b/src/Shentun.WebPeis.Application.Contracts/Persons/CreatePersonDto.cs index 84d1fcf..c4dcae1 100644 --- a/src/Shentun.WebPeis.Application.Contracts/Persons/CreatePersonDto.cs +++ b/src/Shentun.WebPeis.Application.Contracts/Persons/CreatePersonDto.cs @@ -84,6 +84,16 @@ namespace Shentun.WebPeis.Persons /// 允许绑定 /// public char? IsAllowBind { get; set; } + /// + /// 身高 + /// + public decimal? Height { get; set; } + /// + /// 体重 + /// + + public decimal? Weight { get; set; } + /// /// 微信JsCode /// diff --git a/src/Shentun.WebPeis.Application.Contracts/Persons/PersonDto.cs b/src/Shentun.WebPeis.Application.Contracts/Persons/PersonDto.cs index fb50ed0..2415a50 100644 --- a/src/Shentun.WebPeis.Application.Contracts/Persons/PersonDto.cs +++ b/src/Shentun.WebPeis.Application.Contracts/Persons/PersonDto.cs @@ -94,6 +94,9 @@ namespace Shentun.WebPeis.Persons public char? IsActive { get; set; } public int DisplayOrder { get; set; } - + + public char IsHaveQuestionRegister { get; set; } + + } } diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionRegisters/QuestionRegisterAnswerDto.cs index 9d91db4..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 /// @@ -61,7 +74,7 @@ namespace Shentun.WebPeis.QuestionRegisters public string? PathCode { get; set; } - public List Childs = new List(); + public List Childs { get; set; } = new List(); } } 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/Persons/PersonAppService.cs b/src/Shentun.WebPeis.Application/Persons/PersonAppService.cs index 78495bc..116ffaa 100644 --- a/src/Shentun.WebPeis.Application/Persons/PersonAppService.cs +++ b/src/Shentun.WebPeis.Application/Persons/PersonAppService.cs @@ -46,7 +46,7 @@ namespace Shentun.WebPeis.Persons [Authorize] public class PersonAppService : ApplicationService { - + private readonly IRepository _questionRegisterRepository; private readonly IConfiguration _configuration; private readonly IRepository _identityUserRepository; private readonly IdentityUserManager _userManager; @@ -72,7 +72,8 @@ namespace Shentun.WebPeis.Persons IRepository patientRepository, CacheService cacheService, IHttpContextAccessor httpContextAccessor, - IRepository customerOrgRepository) + IRepository customerOrgRepository, + IRepository questionRegisterRepository) { _repository = repository; _configuration = configuration; @@ -87,6 +88,7 @@ namespace Shentun.WebPeis.Persons _cacheService = cacheService; _httpContextAccessor = httpContextAccessor; _customerOrgRepository = customerOrgRepository; + _questionRegisterRepository = questionRegisterRepository; } public async Task 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; diff --git a/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs b/src/Shentun.WebPeis.Application/QuestionRegisters/QuestionRegisterAppService.cs index 95ba8b0..cfaf6d7 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; - 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; } + + /// + /// 更新 + /// + /// + /// + [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/Models/Person.cs b/src/Shentun.WebPeis.Domain/Models/Person.cs index b1fbccf..3ff4d37 100644 --- a/src/Shentun.WebPeis.Domain/Models/Person.cs +++ b/src/Shentun.WebPeis.Domain/Models/Person.cs @@ -21,9 +21,6 @@ public partial class Person: AuditedEntity,IHasConcurrencyStamp /// 组织单位ID /// public Guid MedicalCenterId { get; set; } - - - /// /// 性别 /// @@ -58,10 +55,6 @@ public partial class Person: AuditedEntity,IHasConcurrencyStamp /// 邮政编码 /// public string? PostalCode { get; set; } - - - - /// /// 地址 /// @@ -74,16 +67,32 @@ public partial class Person: AuditedEntity,IHasConcurrencyStamp public string? ConcurrencyStamp { get; set; } - + /// + /// 微信openid + /// public string? WechatOpenId { get; set; } - + /// + /// 证件类别 + /// public string? IdTypeId { get; set; } + /// + /// 国家码 + /// public string? CountryCode { get; set; } + /// + /// 允许绑定 + /// public char? IsAllowBind { get; set; } + /// + /// 身高 + /// public decimal? Height { get; set; } + /// + /// 体重 + /// public decimal? Weight { get; set; } public virtual ICollection QuestionRegisters { get; set; } = new List(); 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(); } }