22 changed files with 1053 additions and 16 deletions
-
19src/Shentun.WebPeis.Application.Contracts/QuestionTypes/CreateQuestionTypeDto.cs
-
23src/Shentun.WebPeis.Application.Contracts/QuestionTypes/QuestionTypeDto.cs
-
11src/Shentun.WebPeis.Application.Contracts/QuestionTypes/QuestionTypeIdInputDto.cs
-
19src/Shentun.WebPeis.Application.Contracts/QuestionTypes/UpdateQuestionTypeDto.cs
-
48src/Shentun.WebPeis.Application.Contracts/Questions/CreateQuestionDto.cs
-
55src/Shentun.WebPeis.Application.Contracts/Questions/QuestionDto.cs
-
11src/Shentun.WebPeis.Application.Contracts/Questions/QuestionIdInputDto.cs
-
58src/Shentun.WebPeis.Application.Contracts/Questions/QuestionTreeListDto.cs
-
47src/Shentun.WebPeis.Application.Contracts/Questions/UpdateQuestionDto.cs
-
135src/Shentun.WebPeis.Application/QuestionTypes/QuestionTypeAppService.cs
-
208src/Shentun.WebPeis.Application/Questions/QuestionAppService.cs
-
4src/Shentun.WebPeis.Domain/AppointScheduleTemplates/AppointScheduleTemplateManager.cs
-
4src/Shentun.WebPeis.Domain/EntityHelper.cs
-
16src/Shentun.WebPeis.Domain/Models/Question.cs
-
2src/Shentun.WebPeis.Domain/Models/QuestionType.cs
-
137src/Shentun.WebPeis.Domain/QuestionTypes/QuestionTypeManager.cs
-
17src/Shentun.WebPeis.Domain/QuestionTypes/UpdateQuestionTypeSortDragDto.cs
-
16src/Shentun.WebPeis.Domain/QuestionTypes/UpdateQuestionTypeSortTopOrBottomInputDto.cs
-
197src/Shentun.WebPeis.Domain/Questions/QuestionManager.cs
-
20src/Shentun.WebPeis.Domain/Questions/UpdateQuestionSortDragDto.cs
-
18src/Shentun.WebPeis.Domain/Questions/UpdateQuestionSortTopOrBottomInputDto.cs
-
2src/Shentun.WebPeis.HttpApi.Host/Shentun.WebPeis.HttpApi.Host.csproj
@ -0,0 +1,19 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.QuestionTypes |
||||
|
{ |
||||
|
public class CreateQuestionTypeDto |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 主键
|
||||
|
/// </summary>
|
||||
|
public string QuestionTypeId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 名称
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionTypeName { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,23 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.QuestionTypes |
||||
|
{ |
||||
|
public class QuestionTypeDto:AuditedEntityDtoName |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 主键
|
||||
|
/// </summary>
|
||||
|
public string QuestionTypeId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 名称
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionTypeName { get; set; } |
||||
|
|
||||
|
public string SimpleCode { get; set; } |
||||
|
|
||||
|
public int DisplayOrder { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.QuestionTypes |
||||
|
{ |
||||
|
public class QuestionTypeIdInputDto |
||||
|
{ |
||||
|
public string QuestionTypeId { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,19 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.QuestionTypes |
||||
|
{ |
||||
|
public class UpdateQuestionTypeDto |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 主键
|
||||
|
/// </summary>
|
||||
|
public string QuestionTypeId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 名称
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionTypeName { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,48 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.Questions |
||||
|
{ |
||||
|
public class CreateQuestionDto |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 主键
|
||||
|
/// </summary>
|
||||
|
public Guid QuestionId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 题目
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionName { get; set; } = null!; |
||||
|
/// <summary>
|
||||
|
/// 问卷类别ID
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionTypeId { get; set; } |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 答案类别 0-单选 1-多选
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public char? AnswerType { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 问卷题目类别 01-生育 ,02-不适症状,03-危险因素,04-所患疾病
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionSubjectTypeId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 启用
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public char? IsActive { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 父问卷ID
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public Guid? ParentId { get; set; } |
||||
|
|
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,55 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.Questions |
||||
|
{ |
||||
|
public class QuestionDto: AuditedEntityDtoName |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 主键
|
||||
|
/// </summary>
|
||||
|
public Guid QuestionId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 题目
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionName { get; set; } = null!; |
||||
|
/// <summary>
|
||||
|
/// 问卷类别ID
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionTypeId { get; set; } |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 答案类别 0-单选 1-多选
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public char? AnswerType { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 问卷题目类别 01-生育 ,02-不适症状,03-危险因素,04-所患疾病
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionSubjectTypeId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 启用
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public char? IsActive { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 父问卷ID
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public Guid? ParentId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 编码路径
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string? PathCode { get; set; } |
||||
|
|
||||
|
public string SimpleCode { get; set; } = null!; |
||||
|
|
||||
|
public int DisplayOrder { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.Questions |
||||
|
{ |
||||
|
public class QuestionIdInputDto |
||||
|
{ |
||||
|
public Guid QuestionId { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,58 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.Questions |
||||
|
{ |
||||
|
public class QuestionTreeListDto : AuditedEntityDtoName |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 主键
|
||||
|
/// </summary>
|
||||
|
public Guid QuestionId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 题目
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionName { get; set; } = null!; |
||||
|
/// <summary>
|
||||
|
/// 问卷类别ID
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionTypeId { get; set; } |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 答案类别 0-单选 1-多选
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public char? AnswerType { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 问卷题目类别 01-生育 ,02-不适症状,03-危险因素,04-所患疾病
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionSubjectTypeId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 启用
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public char? IsActive { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 父问卷ID
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public Guid? ParentId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 编码路径
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string? PathCode { get; set; } |
||||
|
|
||||
|
public string SimpleCode { get; set; } = null!; |
||||
|
|
||||
|
public int DisplayOrder { get; set; } |
||||
|
|
||||
|
public List<QuestionTreeListDto> TreeChildren { get; set; } |
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,47 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.Questions |
||||
|
{ |
||||
|
public class UpdateQuestionDto |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 主键
|
||||
|
/// </summary>
|
||||
|
public Guid QuestionId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 题目
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionName { get; set; } = null!; |
||||
|
/// <summary>
|
||||
|
/// 问卷类别ID
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionTypeId { get; set; } |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 答案类别 0-单选 1-多选
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public char? AnswerType { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 问卷题目类别 01-生育 ,02-不适症状,03-危险因素,04-所患疾病
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string QuestionSubjectTypeId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 启用
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public char? IsActive { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 父问卷ID
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public Guid? ParentId { get; set; } |
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,135 @@ |
|||||
|
using Microsoft.AspNetCore.Authorization; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Shentun.WebPeis.AppointScheduleTemplates; |
||||
|
using Shentun.WebPeis.Models; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
using Volo.Abp.Domain.Repositories; |
||||
|
|
||||
|
namespace Shentun.WebPeis.QuestionTypes |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 问卷类型
|
||||
|
/// </summary>
|
||||
|
[ApiExplorerSettings(GroupName = "Work")] |
||||
|
[Authorize] |
||||
|
public class QuestionTypeAppService : ApplicationService |
||||
|
{ |
||||
|
|
||||
|
private readonly IRepository<QuestionType> _questionTypeRepository; |
||||
|
private readonly QuestionTypeManager _questionTypeManager; |
||||
|
private readonly CacheService _cacheService; |
||||
|
|
||||
|
public QuestionTypeAppService( |
||||
|
IRepository<QuestionType> questionTypeRepository, |
||||
|
QuestionTypeManager questionTypeManager, |
||||
|
CacheService cacheService) |
||||
|
{ |
||||
|
_questionTypeRepository = questionTypeRepository; |
||||
|
_questionTypeManager = questionTypeManager; |
||||
|
_cacheService = cacheService; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取列表
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/QuestionType/GetList")] |
||||
|
public async Task<List<QuestionTypeDto>> GetListAsync() |
||||
|
{ |
||||
|
var entlist = await _questionTypeRepository.GetQueryableAsync(); |
||||
|
|
||||
|
var entdto = entlist.Select(s => new QuestionTypeDto |
||||
|
{ |
||||
|
CreationTime = s.CreationTime, |
||||
|
CreatorId = s.CreatorId, |
||||
|
DisplayOrder = s.DisplayOrder, |
||||
|
LastModificationTime = s.LastModificationTime, |
||||
|
LastModifierId = s.LastModifierId, |
||||
|
SimpleCode = s.SimpleCode, |
||||
|
QuestionTypeId = s.QuestionTypeId, |
||||
|
QuestionTypeName = s.QuestionTypeName, |
||||
|
CreatorName = _cacheService.GetSurnameAsync(s.CreatorId).Result, |
||||
|
LastModifierName = _cacheService.GetSurnameAsync(s.LastModifierId).Result |
||||
|
}).OrderBy(o => o.DisplayOrder).ToList(); |
||||
|
|
||||
|
return entdto; |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/QuestionType/Create")] |
||||
|
public async Task<QuestionTypeDto> CreateAsync(CreateQuestionTypeDto input) |
||||
|
{ |
||||
|
var createEntity = ObjectMapper.Map<CreateQuestionTypeDto, QuestionType>(input); |
||||
|
var entity = await _questionTypeManager.CreateAsync(createEntity); |
||||
|
entity = await _questionTypeRepository.InsertAsync(entity); |
||||
|
var dto = ObjectMapper.Map<QuestionType, QuestionTypeDto>(entity); |
||||
|
dto.CreatorName = await _cacheService.GetSurnameAsync(dto.CreatorId); |
||||
|
dto.LastModifierName = await _cacheService.GetSurnameAsync(dto.LastModifierId); |
||||
|
return dto; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 更新
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/QuestionType/Update")] |
||||
|
public async Task<QuestionTypeDto> UpdateAsync(UpdateQuestionTypeDto input) |
||||
|
{ |
||||
|
var entity = await _questionTypeRepository.GetAsync(f => f.QuestionTypeId == input.QuestionTypeId); |
||||
|
var sourceEntity = ObjectMapper.Map<UpdateQuestionTypeDto, QuestionType>(input); |
||||
|
await _questionTypeManager.UpdateAsync(sourceEntity, entity); |
||||
|
entity = await _questionTypeRepository.UpdateAsync(entity); |
||||
|
var dto = ObjectMapper.Map<QuestionType, QuestionTypeDto>(entity); |
||||
|
dto.CreatorName = await _cacheService.GetSurnameAsync(dto.CreatorId); |
||||
|
dto.LastModifierName = await _cacheService.GetSurnameAsync(dto.LastModifierId); |
||||
|
return dto; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 删除
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/QuestionType/Delete")] |
||||
|
public async Task DeleteAsync(QuestionTypeIdInputDto input) |
||||
|
{ |
||||
|
await _questionTypeManager.CheckAndDeleteAsync(input.QuestionTypeId); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 修改排序 置顶,置底
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/QuestionType/UpdateSortTopOrBottom")] |
||||
|
public async Task UpdateSortTopOrBottomAsync(UpdateQuestionTypeSortTopOrBottomInputDto input) |
||||
|
{ |
||||
|
await _questionTypeManager.UpdateSortTopOrBottomAsync(input.QuestionTypeId, input.SortType); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 修改排序 拖拽
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/QuestionType/UpdateSortDragAsync")] |
||||
|
public async Task UpdateSortDragAsync(UpdateQuestionTypeSortDragDto input) |
||||
|
{ |
||||
|
await _questionTypeManager.UpdateSortDragAsync(input); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,208 @@ |
|||||
|
using Microsoft.AspNetCore.Authorization; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Shentun.WebPeis.Models; |
||||
|
using Shentun.WebPeis.QuestionTypes; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
using Volo.Abp.Domain.Repositories; |
||||
|
|
||||
|
namespace Shentun.WebPeis.Questions |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 问卷
|
||||
|
/// </summary>
|
||||
|
[ApiExplorerSettings(GroupName = "Work")] |
||||
|
[Authorize] |
||||
|
public class QuestionAppService : ApplicationService |
||||
|
{ |
||||
|
|
||||
|
private readonly IRepository<Question> _questionRepository; |
||||
|
private readonly QuestionManager _questionManager; |
||||
|
private readonly CacheService _cacheService; |
||||
|
|
||||
|
public QuestionAppService( |
||||
|
IRepository<Question> questionRepository, |
||||
|
QuestionManager questionManager, |
||||
|
CacheService cacheService) |
||||
|
{ |
||||
|
_questionRepository = questionRepository; |
||||
|
_questionManager = questionManager; |
||||
|
_cacheService = cacheService; |
||||
|
} |
||||
|
|
||||
|
///// <summary>
|
||||
|
///// 获取列表
|
||||
|
///// </summary>
|
||||
|
///// <returns></returns>
|
||||
|
//[HttpPost("api/app/Question/GetList")]
|
||||
|
//public async Task<List<QuestionDto>> GetListAsync()
|
||||
|
//{
|
||||
|
// var entlist = await _questionRepository.GetQueryableAsync();
|
||||
|
|
||||
|
// var entdto = entlist.Select(s => new QuestionDto
|
||||
|
// {
|
||||
|
// CreationTime = s.CreationTime,
|
||||
|
// CreatorId = s.CreatorId,
|
||||
|
// DisplayOrder = s.DisplayOrder,
|
||||
|
// LastModificationTime = s.LastModificationTime,
|
||||
|
// LastModifierId = s.LastModifierId,
|
||||
|
// SimpleCode = s.SimpleCode,
|
||||
|
// QuestionTypeId = s.QuestionTypeId,
|
||||
|
// QuestionSubjectTypeId = s.QuestionSubjectTypeId,
|
||||
|
// QuestionName = s.QuestionName,
|
||||
|
// QuestionId = s.QuestionId,
|
||||
|
// PathCode = s.PathCode,
|
||||
|
// ParentId = s.ParentId,
|
||||
|
// IsActive = s.IsActive,
|
||||
|
// AnswerType = s.AnswerType,
|
||||
|
// CreatorName = _cacheService.GetSurnameAsync(s.CreatorId).Result,
|
||||
|
// LastModifierName = _cacheService.GetSurnameAsync(s.LastModifierId).Result
|
||||
|
// }).OrderBy(o => o.DisplayOrder).ToList();
|
||||
|
|
||||
|
// return entdto;
|
||||
|
|
||||
|
|
||||
|
//}
|
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取问卷树型列表
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/Question/GetQuestionTreeList")] |
||||
|
public async Task<List<QuestionTreeListDto>> GetQuestionTreeListAsync() |
||||
|
{ |
||||
|
var dataList = await _questionRepository.GetListAsync(); |
||||
|
var items = from p in dataList.OrderBy(o => o.DisplayOrder) |
||||
|
select new QuestionTreeListDto() |
||||
|
{ |
||||
|
ParentId = p.ParentId, |
||||
|
AnswerType = p.AnswerType, |
||||
|
QuestionId = p.QuestionId, |
||||
|
CreationTime = p.CreationTime, |
||||
|
CreatorId = p.CreatorId, |
||||
|
CreatorName = _cacheService.GetSurnameAsync(p.CreatorId).Result, |
||||
|
IsActive = p.IsActive, |
||||
|
LastModificationTime = p.LastModificationTime, |
||||
|
LastModifierId = p.LastModifierId, |
||||
|
LastModifierName = _cacheService.GetSurnameAsync(p.LastModifierId).Result, |
||||
|
PathCode = p.PathCode, |
||||
|
QuestionName = p.QuestionName, |
||||
|
QuestionSubjectTypeId = p.QuestionSubjectTypeId, |
||||
|
QuestionTypeId = p.QuestionTypeId, |
||||
|
SimpleCode = p.SimpleCode, |
||||
|
DisplayOrder = p.DisplayOrder |
||||
|
}; |
||||
|
return GetTree(items.ToList(), 0, ""); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/Question/Create")] |
||||
|
public async Task<QuestionDto> CreateAsync(CreateQuestionDto input) |
||||
|
{ |
||||
|
var createEntity = ObjectMapper.Map<CreateQuestionDto, Question>(input); |
||||
|
var entity = await _questionManager.CreateAsync(createEntity); |
||||
|
entity = await _questionRepository.InsertAsync(entity); |
||||
|
var dto = ObjectMapper.Map<Question, QuestionDto>(entity); |
||||
|
dto.CreatorName = await _cacheService.GetSurnameAsync(dto.CreatorId); |
||||
|
dto.LastModifierName = await _cacheService.GetSurnameAsync(dto.LastModifierId); |
||||
|
return dto; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 更新
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/Question/Update")] |
||||
|
public async Task<QuestionDto> UpdateAsync(UpdateQuestionDto input) |
||||
|
{ |
||||
|
var entity = await _questionRepository.GetAsync(f => f.QuestionTypeId == input.QuestionTypeId); |
||||
|
var sourceEntity = ObjectMapper.Map<UpdateQuestionDto, Question>(input); |
||||
|
_questionManager.UpdateAsync(sourceEntity, entity); |
||||
|
entity = await _questionRepository.UpdateAsync(entity); |
||||
|
var dto = ObjectMapper.Map<Question, QuestionDto>(entity); |
||||
|
dto.CreatorName = await _cacheService.GetSurnameAsync(dto.CreatorId); |
||||
|
dto.LastModifierName = await _cacheService.GetSurnameAsync(dto.LastModifierId); |
||||
|
return dto; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 删除
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/Question/Delete")] |
||||
|
public async Task DeleteAsync(QuestionIdInputDto input) |
||||
|
{ |
||||
|
await _questionManager.CheckAndDeleteAsync(input.QuestionId); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 修改排序 置顶,置底
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/Question/UpdateSortTopOrBottom")] |
||||
|
public async Task UpdateSortTopOrBottomAsync(UpdateQuestionSortTopOrBottomInputDto input) |
||||
|
{ |
||||
|
await _questionManager.UpdateSortTopOrBottomAsync(input.QuestionId, input.SortType); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 修改排序 拖拽
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/Question/UpdateSortDragAsync")] |
||||
|
public async Task UpdateSortDragAsync(UpdateQuestionSortDragDto input) |
||||
|
{ |
||||
|
await _questionManager.UpdateSortDragAsync(input); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 使用Code进行递归
|
||||
|
/// </summary>
|
||||
|
/// <param name="items"></param>
|
||||
|
/// <param name="deep"></param>
|
||||
|
/// <param name="prefix"></param>
|
||||
|
/// <returns></returns>
|
||||
|
private List<QuestionTreeListDto> GetTree(List<QuestionTreeListDto> items, int deep, string prefix) |
||||
|
{ |
||||
|
return (from p in items |
||||
|
where p.PathCode.StartsWith(prefix) && p.PathCode.Count(a => a == '.') == deep |
||||
|
orderby p.DisplayOrder ascending |
||||
|
let subs = GetTree(items, deep + 1, p.PathCode) |
||||
|
select new QuestionTreeListDto() |
||||
|
{ |
||||
|
ParentId = p.ParentId, |
||||
|
AnswerType = p.AnswerType, |
||||
|
QuestionId = p.QuestionId, |
||||
|
CreationTime = p.CreationTime, |
||||
|
CreatorId = p.CreatorId, |
||||
|
CreatorName = _cacheService.GetSurnameAsync(p.CreatorId).Result, |
||||
|
IsActive = p.IsActive, |
||||
|
LastModificationTime = p.LastModificationTime, |
||||
|
LastModifierId = p.LastModifierId, |
||||
|
LastModifierName = _cacheService.GetSurnameAsync(p.LastModifierId).Result, |
||||
|
PathCode = p.PathCode, |
||||
|
QuestionName = p.QuestionName, |
||||
|
QuestionSubjectTypeId = p.QuestionSubjectTypeId, |
||||
|
QuestionTypeId = p.QuestionTypeId, |
||||
|
SimpleCode = p.SimpleCode, |
||||
|
DisplayOrder = p.DisplayOrder, |
||||
|
TreeChildren = subs.ToList() |
||||
|
} |
||||
|
).ToList(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,137 @@ |
|||||
|
using NPOI.SS.Formula.Functions; |
||||
|
using Shentun.Utilities; |
||||
|
using Shentun.WebPeis.Models; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Domain.Entities; |
||||
|
using Volo.Abp.Domain.Repositories; |
||||
|
using Volo.Abp.Domain.Services; |
||||
|
|
||||
|
namespace Shentun.WebPeis.QuestionTypes |
||||
|
{ |
||||
|
public class QuestionTypeManager : DomainService |
||||
|
{ |
||||
|
private readonly IRepository<QuestionType> _questionTypeRepository; |
||||
|
private readonly IRepository<Question> _questionRepository; |
||||
|
|
||||
|
public QuestionTypeManager( |
||||
|
IRepository<QuestionType> questionTypeRepository, |
||||
|
IRepository<Question> questionRepository) |
||||
|
{ |
||||
|
_questionTypeRepository = questionTypeRepository; |
||||
|
_questionRepository = questionRepository; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
public async Task<QuestionType> CreateAsync(QuestionType entity) |
||||
|
{ |
||||
|
DataHelper.CheckEntityIsNull(entity); |
||||
|
DataHelper.CheckStringIsNull(entity.QuestionTypeName, "名称"); |
||||
|
|
||||
|
var isQuestionType = await _questionTypeRepository.FirstOrDefaultAsync(f => f.QuestionTypeName == entity.QuestionTypeName); |
||||
|
if (isQuestionType != null) |
||||
|
throw new UserFriendlyException($"问卷类别{entity.QuestionTypeName}已存在"); |
||||
|
return new QuestionType |
||||
|
{ |
||||
|
QuestionTypeName = entity.QuestionTypeName, |
||||
|
SimpleCode = LanguageConverter.GetPYSimpleCode(entity.QuestionTypeName), |
||||
|
DisplayOrder = await EntityHelper.CreateMaxDisplayOrder<QuestionType>(_questionTypeRepository), |
||||
|
QuestionTypeId = entity.QuestionTypeId |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 更新
|
||||
|
/// </summary>
|
||||
|
/// <param name="sourceEntity"></param>
|
||||
|
/// <param name="targetEntity"></param>
|
||||
|
/// <returns></returns>
|
||||
|
public async Task UpdateAsync( |
||||
|
QuestionType sourceEntity, |
||||
|
QuestionType targetEntity |
||||
|
) |
||||
|
{ |
||||
|
DataHelper.CheckEntityIsNull(sourceEntity); |
||||
|
DataHelper.CheckEntityIsNull(targetEntity); |
||||
|
DataHelper.CheckStringIsNull(sourceEntity.QuestionTypeName, "名称"); |
||||
|
if (sourceEntity.QuestionTypeName != targetEntity.QuestionTypeName) |
||||
|
{ |
||||
|
var isQuestionType = await _questionTypeRepository.FirstOrDefaultAsync(f => f.QuestionTypeId != sourceEntity.QuestionTypeId |
||||
|
&& f.QuestionTypeName == sourceEntity.QuestionTypeName); |
||||
|
if (isQuestionType != null) |
||||
|
throw new UserFriendlyException($"问卷类别{sourceEntity.QuestionTypeName}已存在"); |
||||
|
targetEntity.QuestionTypeName = sourceEntity.QuestionTypeName; |
||||
|
targetEntity.SimpleCode = LanguageConverter.GetPYSimpleCode(targetEntity.QuestionTypeName); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 删除
|
||||
|
/// </summary>
|
||||
|
/// <param name="QuestionTypeId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
/// <exception cref="UserFriendlyException"></exception>
|
||||
|
public async Task CheckAndDeleteAsync(string QuestionTypeId) |
||||
|
{ |
||||
|
|
||||
|
var questionEnt = await _questionRepository.FirstOrDefaultAsync(m => m.QuestionTypeId == QuestionTypeId); |
||||
|
if (questionEnt != null) |
||||
|
{ |
||||
|
throw new UserFriendlyException($"问卷类别已被使用,不能删除"); |
||||
|
} |
||||
|
|
||||
|
await _questionTypeRepository.DeleteAsync(d => d.QuestionTypeId == QuestionTypeId); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 修改排序 置顶,置底
|
||||
|
/// </summary>
|
||||
|
/// <param name="id">需要修改的ID</param>
|
||||
|
/// <param name="SortType">修改方式:1 置顶 2 置底</param>
|
||||
|
/// <returns></returns>
|
||||
|
public async Task UpdateSortTopOrBottomAsync(string QuestionTypeId, int SortType) |
||||
|
{ |
||||
|
var entity = await _questionTypeRepository.GetAsync(f => f.QuestionTypeId == QuestionTypeId); |
||||
|
await EntityHelper.UpdateSortTopOrBottomAsync(_questionTypeRepository, entity, SortType); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 修改排序 拖拽
|
||||
|
/// </summary>
|
||||
|
/// <typeparam name="TEntity"></typeparam>
|
||||
|
/// <param name="repository"></param>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
public async Task UpdateSortDragAsync(UpdateQuestionTypeSortDragDto input) |
||||
|
{ |
||||
|
var entitylist = await _questionTypeRepository.GetListAsync(o => input.ItemList.Select(s => s.QuestionTypeId).Contains(o.QuestionTypeId)); |
||||
|
|
||||
|
foreach (var entity in entitylist) |
||||
|
{ |
||||
|
foreach (var item in input.ItemList) |
||||
|
{ |
||||
|
if (item.QuestionTypeId == entity.QuestionTypeId) |
||||
|
entity.DisplayOrder = item.DisplayOrder; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
await _questionTypeRepository.UpdateManyAsync(entitylist); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,17 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.QuestionTypes |
||||
|
{ |
||||
|
public class UpdateQuestionTypeSortDragDto |
||||
|
{ |
||||
|
public List<UpdateQuestionTypeSortDragDetail> ItemList { get; set; } |
||||
|
} |
||||
|
|
||||
|
public class UpdateQuestionTypeSortDragDetail |
||||
|
{ |
||||
|
public string QuestionTypeId { get; set; } |
||||
|
public int DisplayOrder { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,16 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.QuestionTypes |
||||
|
{ |
||||
|
public class UpdateQuestionTypeSortTopOrBottomInputDto |
||||
|
{ |
||||
|
public string QuestionTypeId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 修改方式:1 置顶 2 置底
|
||||
|
/// </summary>
|
||||
|
public int SortType { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,197 @@ |
|||||
|
using NPOI.POIFS.Properties; |
||||
|
using Shentun.Utilities; |
||||
|
using Shentun.WebPeis.Models; |
||||
|
using Shentun.WebPeis.QuestionTypes; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Domain.Entities; |
||||
|
using Volo.Abp.Domain.Repositories; |
||||
|
using Volo.Abp.Domain.Services; |
||||
|
|
||||
|
namespace Shentun.WebPeis.Questions |
||||
|
{ |
||||
|
public class QuestionManager : DomainService |
||||
|
{ |
||||
|
|
||||
|
private readonly IRepository<Question> _questionRepository; |
||||
|
|
||||
|
public QuestionManager( |
||||
|
IRepository<Question> questionRepository |
||||
|
) |
||||
|
{ |
||||
|
_questionRepository = questionRepository; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
public async Task<Question> CreateAsync(Question entity) |
||||
|
{ |
||||
|
DataHelper.CheckEntityIsNull(entity); |
||||
|
//DataHelper.CheckStringIsNull(entity.QuestionTypeName, "名称");
|
||||
|
|
||||
|
return new Question |
||||
|
{ |
||||
|
AnswerType = entity.AnswerType, |
||||
|
IsActive = entity.IsActive, |
||||
|
ParentId = entity.ParentId, |
||||
|
PathCode = await CreatePathCode(entity.ParentId), |
||||
|
QuestionId = entity.QuestionId, |
||||
|
QuestionName = entity.QuestionName, |
||||
|
QuestionSubjectTypeId = entity.QuestionSubjectTypeId, |
||||
|
SimpleCode = LanguageConverter.GetPYSimpleCode(entity.QuestionName), |
||||
|
DisplayOrder = await EntityHelper.CreateMaxDisplayOrder<Question>(_questionRepository), |
||||
|
QuestionTypeId = entity.QuestionTypeId |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 更新
|
||||
|
/// </summary>
|
||||
|
/// <param name="sourceEntity"></param>
|
||||
|
/// <param name="targetEntity"></param>
|
||||
|
/// <returns></returns>
|
||||
|
public void UpdateAsync( |
||||
|
Question sourceEntity, |
||||
|
Question targetEntity |
||||
|
) |
||||
|
{ |
||||
|
DataHelper.CheckEntityIsNull(sourceEntity); |
||||
|
DataHelper.CheckEntityIsNull(targetEntity); |
||||
|
//DataHelper.CheckStringIsNull(sourceEntity.QuestionTypeName, "名称");
|
||||
|
|
||||
|
|
||||
|
targetEntity.AnswerType = sourceEntity.AnswerType; |
||||
|
targetEntity.IsActive = sourceEntity.IsActive; |
||||
|
targetEntity.ParentId = sourceEntity.ParentId; |
||||
|
targetEntity.QuestionName = sourceEntity.QuestionName; |
||||
|
targetEntity.QuestionSubjectTypeId = sourceEntity.QuestionSubjectTypeId; |
||||
|
targetEntity.SimpleCode = LanguageConverter.GetPYSimpleCode(sourceEntity.QuestionName); |
||||
|
targetEntity.QuestionTypeId = sourceEntity.QuestionTypeId; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 删除
|
||||
|
/// </summary>
|
||||
|
/// <param name="QuestionId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
/// <exception cref="UserFriendlyException"></exception>
|
||||
|
public async Task CheckAndDeleteAsync(Guid QuestionId) |
||||
|
{ |
||||
|
|
||||
|
//var questionEnt = await _questionRepository.FirstOrDefaultAsync(m => m.QuestionTypeId == QuestionTypeId);
|
||||
|
//if (questionEnt != null)
|
||||
|
//{
|
||||
|
// throw new UserFriendlyException($"问卷类别已被使用,不能删除");
|
||||
|
//}
|
||||
|
|
||||
|
await _questionRepository.DeleteAsync(d => d.QuestionId == QuestionId); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 修改排序 置顶,置底
|
||||
|
/// </summary>
|
||||
|
/// <param name="id">需要修改的ID</param>
|
||||
|
/// <param name="SortType">修改方式:1 置顶 2 置底</param>
|
||||
|
/// <returns></returns>
|
||||
|
public async Task UpdateSortTopOrBottomAsync(Guid QuestionId, int SortType) |
||||
|
{ |
||||
|
var entity = await _questionRepository.GetAsync(f => f.QuestionId == QuestionId); |
||||
|
await EntityHelper.UpdateSortTopOrBottomAsync(_questionRepository, entity, SortType); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 修改排序 拖拽
|
||||
|
/// </summary>
|
||||
|
/// <typeparam name="TEntity"></typeparam>
|
||||
|
/// <param name="repository"></param>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
public async Task UpdateSortDragAsync(UpdateQuestionSortDragDto input) |
||||
|
{ |
||||
|
var entitylist = await _questionRepository.GetListAsync(o => input.ItemList.Select(s => s.QuestionId).Contains(o.QuestionId)); |
||||
|
|
||||
|
foreach (var entity in entitylist) |
||||
|
{ |
||||
|
foreach (var item in input.ItemList) |
||||
|
{ |
||||
|
if (item.QuestionId == entity.QuestionId) |
||||
|
entity.DisplayOrder = item.DisplayOrder; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
await _questionRepository.UpdateManyAsync(entitylist); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 自动生成pathcode
|
||||
|
/// </summary>
|
||||
|
/// <param name="parentId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
public async Task<string> CreatePathCode(Guid? parentId) |
||||
|
{ |
||||
|
string PathCode = "00001"; |
||||
|
//一级
|
||||
|
if (parentId == null || parentId == Guid.Empty) |
||||
|
{ |
||||
|
//最大pathcode
|
||||
|
var LastPathCode = (await _questionRepository.GetListAsync(o => o.ParentId == Guid.Empty || o.ParentId == null)) |
||||
|
.OrderByDescending(o => |
||||
|
{ |
||||
|
var sortCode = o.PathCode.Replace(".", ""); |
||||
|
return Convert.ToInt32(sortCode); |
||||
|
}).FirstOrDefault(); |
||||
|
if (LastPathCode != null) |
||||
|
{ |
||||
|
PathCode = (Convert.ToInt32(LastPathCode.PathCode) + 1).ToString().PadLeft(5, '0'); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
PathCode = "00001"; |
||||
|
} |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
//二级以及以上
|
||||
|
|
||||
|
|
||||
|
//上级pathcode
|
||||
|
var ParentPathCode = (await _questionRepository.GetListAsync(o => o.QuestionId == parentId)).FirstOrDefault().PathCode; |
||||
|
|
||||
|
//最大pathcode
|
||||
|
var LastPathCode = (await _questionRepository.GetListAsync(o => o.ParentId == parentId)) |
||||
|
.OrderByDescending(o => |
||||
|
{ |
||||
|
var sortCode = o.PathCode.Replace(".", ""); |
||||
|
return Convert.ToInt32(sortCode); |
||||
|
}).Select(s => s.PathCode).FirstOrDefault(); |
||||
|
|
||||
|
if (!string.IsNullOrEmpty(LastPathCode)) |
||||
|
{ |
||||
|
var MaxCode = LastPathCode.Split('.').Last(); |
||||
|
PathCode = ParentPathCode + "." + (Convert.ToInt32(MaxCode) + 1).ToString().PadLeft(5, '0'); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
PathCode = ParentPathCode + ".00001"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return PathCode; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,20 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
|
||||
|
namespace Shentun.WebPeis.Questions |
||||
|
{ |
||||
|
public class UpdateQuestionSortDragDto |
||||
|
{ |
||||
|
public List<UpdateQuestionSortDragDetail> ItemList { get; set; } |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public class UpdateQuestionSortDragDetail |
||||
|
{ |
||||
|
public Guid QuestionId { get; set; } |
||||
|
public int DisplayOrder { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,18 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
|
||||
|
namespace Shentun.WebPeis.Questions |
||||
|
{ |
||||
|
public class UpdateQuestionSortTopOrBottomInputDto |
||||
|
{ |
||||
|
public Guid QuestionId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 修改方式:1 置顶 2 置底
|
||||
|
/// </summary>
|
||||
|
public int SortType { get; set; } |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue