From 898e19f89fc42f2199f624d4c99989d25fd32b76 Mon Sep 17 00:00:00 2001
From: wxd <123@qq.com>
Date: Fri, 14 Jun 2024 00:50:29 +0800
Subject: [PATCH] =?UTF-8?q?=E9=97=AE=E5=8D=B7=E7=B1=BB=E5=88=AB=EF=BC=8C?=
=?UTF-8?q?=E9=97=AE=E5=8D=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../QuestionTypes/CreateQuestionTypeDto.cs | 19 ++
.../QuestionTypes/QuestionTypeDto.cs | 23 ++
.../QuestionTypes/QuestionTypeIdInputDto.cs | 11 +
.../QuestionTypes/UpdateQuestionTypeDto.cs | 19 ++
.../Questions/CreateQuestionDto.cs | 48 ++++
.../Questions/QuestionDto.cs | 55 +++++
.../Questions/QuestionIdInputDto.cs | 11 +
.../Questions/QuestionTreeListDto.cs | 58 +++++
.../Questions/UpdateQuestionDto.cs | 47 ++++
.../QuestionTypes/QuestionTypeAppService.cs | 135 ++++++++++++
.../Questions/QuestionAppService.cs | 208 ++++++++++++++++++
.../AppointScheduleTemplateManager.cs | 4 +-
src/Shentun.WebPeis.Domain/EntityHelper.cs | 4 +-
src/Shentun.WebPeis.Domain/Models/Question.cs | 16 +-
.../Models/QuestionType.cs | 4 +-
.../QuestionTypes/QuestionTypeManager.cs | 137 ++++++++++++
.../UpdateQuestionTypeSortDragDto.cs | 17 ++
...dateQuestionTypeSortTopOrBottomInputDto.cs | 16 ++
.../Questions/QuestionManager.cs | 197 +++++++++++++++++
.../Questions/UpdateQuestionSortDragDto.cs | 20 ++
.../UpdateQuestionSortTopOrBottomInputDto.cs | 18 ++
.../Shentun.WebPeis.HttpApi.Host.csproj | 2 +-
22 files changed, 1053 insertions(+), 16 deletions(-)
create mode 100644 src/Shentun.WebPeis.Application.Contracts/QuestionTypes/CreateQuestionTypeDto.cs
create mode 100644 src/Shentun.WebPeis.Application.Contracts/QuestionTypes/QuestionTypeDto.cs
create mode 100644 src/Shentun.WebPeis.Application.Contracts/QuestionTypes/QuestionTypeIdInputDto.cs
create mode 100644 src/Shentun.WebPeis.Application.Contracts/QuestionTypes/UpdateQuestionTypeDto.cs
create mode 100644 src/Shentun.WebPeis.Application.Contracts/Questions/CreateQuestionDto.cs
create mode 100644 src/Shentun.WebPeis.Application.Contracts/Questions/QuestionDto.cs
create mode 100644 src/Shentun.WebPeis.Application.Contracts/Questions/QuestionIdInputDto.cs
create mode 100644 src/Shentun.WebPeis.Application.Contracts/Questions/QuestionTreeListDto.cs
create mode 100644 src/Shentun.WebPeis.Application.Contracts/Questions/UpdateQuestionDto.cs
create mode 100644 src/Shentun.WebPeis.Application/QuestionTypes/QuestionTypeAppService.cs
create mode 100644 src/Shentun.WebPeis.Application/Questions/QuestionAppService.cs
create mode 100644 src/Shentun.WebPeis.Domain/QuestionTypes/QuestionTypeManager.cs
create mode 100644 src/Shentun.WebPeis.Domain/QuestionTypes/UpdateQuestionTypeSortDragDto.cs
create mode 100644 src/Shentun.WebPeis.Domain/QuestionTypes/UpdateQuestionTypeSortTopOrBottomInputDto.cs
create mode 100644 src/Shentun.WebPeis.Domain/Questions/QuestionManager.cs
create mode 100644 src/Shentun.WebPeis.Domain/Questions/UpdateQuestionSortDragDto.cs
create mode 100644 src/Shentun.WebPeis.Domain/Questions/UpdateQuestionSortTopOrBottomInputDto.cs
diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionTypes/CreateQuestionTypeDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionTypes/CreateQuestionTypeDto.cs
new file mode 100644
index 0000000..8dcd9a8
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/QuestionTypes/CreateQuestionTypeDto.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.QuestionTypes
+{
+ public class CreateQuestionTypeDto
+ {
+ ///
+ /// 主键
+ ///
+ public string QuestionTypeId { get; set; }
+ ///
+ /// 名称
+ ///
+
+ public string QuestionTypeName { get; set; }
+ }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionTypes/QuestionTypeDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionTypes/QuestionTypeDto.cs
new file mode 100644
index 0000000..b76eb5d
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/QuestionTypes/QuestionTypeDto.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.QuestionTypes
+{
+ public class QuestionTypeDto:AuditedEntityDtoName
+ {
+ ///
+ /// 主键
+ ///
+ public string QuestionTypeId { get; set; }
+ ///
+ /// 名称
+ ///
+
+ public string QuestionTypeName { get; set; }
+
+ public string SimpleCode { get; set; }
+
+ public int DisplayOrder { get; set; }
+ }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionTypes/QuestionTypeIdInputDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionTypes/QuestionTypeIdInputDto.cs
new file mode 100644
index 0000000..6c43f36
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/QuestionTypes/QuestionTypeIdInputDto.cs
@@ -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; }
+ }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/QuestionTypes/UpdateQuestionTypeDto.cs b/src/Shentun.WebPeis.Application.Contracts/QuestionTypes/UpdateQuestionTypeDto.cs
new file mode 100644
index 0000000..ea3f621
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/QuestionTypes/UpdateQuestionTypeDto.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.QuestionTypes
+{
+ public class UpdateQuestionTypeDto
+ {
+ ///
+ /// 主键
+ ///
+ public string QuestionTypeId { get; set; }
+ ///
+ /// 名称
+ ///
+
+ public string QuestionTypeName { get; set; }
+ }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/Questions/CreateQuestionDto.cs b/src/Shentun.WebPeis.Application.Contracts/Questions/CreateQuestionDto.cs
new file mode 100644
index 0000000..ec02167
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/Questions/CreateQuestionDto.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.Questions
+{
+ public class CreateQuestionDto
+ {
+ ///
+ /// 主键
+ ///
+ public Guid QuestionId { get; set; }
+ ///
+ /// 题目
+ ///
+
+ public string QuestionName { get; set; } = null!;
+ ///
+ /// 问卷类别ID
+ ///
+
+ public string QuestionTypeId { get; set; }
+
+
+ ///
+ /// 答案类别 0-单选 1-多选
+ ///
+
+ public char? AnswerType { get; set; }
+ ///
+ /// 问卷题目类别 01-生育 ,02-不适症状,03-危险因素,04-所患疾病
+ ///
+
+ public string QuestionSubjectTypeId { get; set; }
+ ///
+ /// 启用
+ ///
+
+ public char? IsActive { get; set; }
+ ///
+ /// 父问卷ID
+ ///
+
+ public Guid? ParentId { get; set; }
+
+
+ }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/Questions/QuestionDto.cs b/src/Shentun.WebPeis.Application.Contracts/Questions/QuestionDto.cs
new file mode 100644
index 0000000..9cd1253
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/Questions/QuestionDto.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.Questions
+{
+ public class QuestionDto: AuditedEntityDtoName
+ {
+ ///
+ /// 主键
+ ///
+ public Guid QuestionId { get; set; }
+ ///
+ /// 题目
+ ///
+
+ public string QuestionName { get; set; } = null!;
+ ///
+ /// 问卷类别ID
+ ///
+
+ public string QuestionTypeId { get; set; }
+
+
+ ///
+ /// 答案类别 0-单选 1-多选
+ ///
+
+ public char? AnswerType { get; set; }
+ ///
+ /// 问卷题目类别 01-生育 ,02-不适症状,03-危险因素,04-所患疾病
+ ///
+
+ public string QuestionSubjectTypeId { get; set; }
+ ///
+ /// 启用
+ ///
+
+ public char? IsActive { get; set; }
+ ///
+ /// 父问卷ID
+ ///
+
+ public Guid? ParentId { get; set; }
+ ///
+ /// 编码路径
+ ///
+
+ public string? PathCode { get; set; }
+
+ public string SimpleCode { get; set; } = null!;
+
+ public int DisplayOrder { get; set; }
+ }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/Questions/QuestionIdInputDto.cs b/src/Shentun.WebPeis.Application.Contracts/Questions/QuestionIdInputDto.cs
new file mode 100644
index 0000000..06a40a8
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/Questions/QuestionIdInputDto.cs
@@ -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; }
+ }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/Questions/QuestionTreeListDto.cs b/src/Shentun.WebPeis.Application.Contracts/Questions/QuestionTreeListDto.cs
new file mode 100644
index 0000000..1e762fa
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/Questions/QuestionTreeListDto.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.Questions
+{
+ public class QuestionTreeListDto : AuditedEntityDtoName
+ {
+ ///
+ /// 主键
+ ///
+ public Guid QuestionId { get; set; }
+ ///
+ /// 题目
+ ///
+
+ public string QuestionName { get; set; } = null!;
+ ///
+ /// 问卷类别ID
+ ///
+
+ public string QuestionTypeId { get; set; }
+
+
+ ///
+ /// 答案类别 0-单选 1-多选
+ ///
+
+ public char? AnswerType { get; set; }
+ ///
+ /// 问卷题目类别 01-生育 ,02-不适症状,03-危险因素,04-所患疾病
+ ///
+
+ public string QuestionSubjectTypeId { get; set; }
+ ///
+ /// 启用
+ ///
+
+ public char? IsActive { get; set; }
+ ///
+ /// 父问卷ID
+ ///
+
+ public Guid? ParentId { get; set; }
+ ///
+ /// 编码路径
+ ///
+
+ public string? PathCode { get; set; }
+
+ public string SimpleCode { get; set; } = null!;
+
+ public int DisplayOrder { get; set; }
+
+ public List TreeChildren { get; set; }
+
+ }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/Questions/UpdateQuestionDto.cs b/src/Shentun.WebPeis.Application.Contracts/Questions/UpdateQuestionDto.cs
new file mode 100644
index 0000000..fada274
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/Questions/UpdateQuestionDto.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.Questions
+{
+ public class UpdateQuestionDto
+ {
+ ///
+ /// 主键
+ ///
+ public Guid QuestionId { get; set; }
+ ///
+ /// 题目
+ ///
+
+ public string QuestionName { get; set; } = null!;
+ ///
+ /// 问卷类别ID
+ ///
+
+ public string QuestionTypeId { get; set; }
+
+
+ ///
+ /// 答案类别 0-单选 1-多选
+ ///
+
+ public char? AnswerType { get; set; }
+ ///
+ /// 问卷题目类别 01-生育 ,02-不适症状,03-危险因素,04-所患疾病
+ ///
+
+ public string QuestionSubjectTypeId { get; set; }
+ ///
+ /// 启用
+ ///
+
+ public char? IsActive { get; set; }
+ ///
+ /// 父问卷ID
+ ///
+
+ public Guid? ParentId { get; set; }
+
+ }
+}
diff --git a/src/Shentun.WebPeis.Application/QuestionTypes/QuestionTypeAppService.cs b/src/Shentun.WebPeis.Application/QuestionTypes/QuestionTypeAppService.cs
new file mode 100644
index 0000000..0d6ca4e
--- /dev/null
+++ b/src/Shentun.WebPeis.Application/QuestionTypes/QuestionTypeAppService.cs
@@ -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
+{
+ ///
+ /// 问卷类型
+ ///
+ [ApiExplorerSettings(GroupName = "Work")]
+ [Authorize]
+ public class QuestionTypeAppService : ApplicationService
+ {
+
+ private readonly IRepository _questionTypeRepository;
+ private readonly QuestionTypeManager _questionTypeManager;
+ private readonly CacheService _cacheService;
+
+ public QuestionTypeAppService(
+ IRepository questionTypeRepository,
+ QuestionTypeManager questionTypeManager,
+ CacheService cacheService)
+ {
+ _questionTypeRepository = questionTypeRepository;
+ _questionTypeManager = questionTypeManager;
+ _cacheService = cacheService;
+ }
+
+
+
+ ///
+ /// 获取列表
+ ///
+ ///
+ [HttpPost("api/app/QuestionType/GetList")]
+ public async Task> 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;
+
+
+ }
+
+ ///
+ /// 创建
+ ///
+ ///
+ [HttpPost("api/app/QuestionType/Create")]
+ public async Task CreateAsync(CreateQuestionTypeDto input)
+ {
+ var createEntity = ObjectMapper.Map(input);
+ var entity = await _questionTypeManager.CreateAsync(createEntity);
+ entity = await _questionTypeRepository.InsertAsync(entity);
+ var dto = ObjectMapper.Map(entity);
+ dto.CreatorName = await _cacheService.GetSurnameAsync(dto.CreatorId);
+ dto.LastModifierName = await _cacheService.GetSurnameAsync(dto.LastModifierId);
+ return dto;
+ }
+
+ ///
+ /// 更新
+ ///
+ ///
+ ///
+ [HttpPost("api/app/QuestionType/Update")]
+ public async Task UpdateAsync(UpdateQuestionTypeDto input)
+ {
+ var entity = await _questionTypeRepository.GetAsync(f => f.QuestionTypeId == input.QuestionTypeId);
+ var sourceEntity = ObjectMapper.Map(input);
+ await _questionTypeManager.UpdateAsync(sourceEntity, entity);
+ entity = await _questionTypeRepository.UpdateAsync(entity);
+ var dto = ObjectMapper.Map(entity);
+ dto.CreatorName = await _cacheService.GetSurnameAsync(dto.CreatorId);
+ dto.LastModifierName = await _cacheService.GetSurnameAsync(dto.LastModifierId);
+ return dto;
+ }
+
+ ///
+ /// 删除
+ ///
+ ///
+ ///
+ [HttpPost("api/app/QuestionType/Delete")]
+ public async Task DeleteAsync(QuestionTypeIdInputDto input)
+ {
+ await _questionTypeManager.CheckAndDeleteAsync(input.QuestionTypeId);
+ }
+
+ ///
+ /// 修改排序 置顶,置底
+ ///
+ ///
+ ///
+ [HttpPost("api/app/QuestionType/UpdateSortTopOrBottom")]
+ public async Task UpdateSortTopOrBottomAsync(UpdateQuestionTypeSortTopOrBottomInputDto input)
+ {
+ await _questionTypeManager.UpdateSortTopOrBottomAsync(input.QuestionTypeId, input.SortType);
+ }
+
+ ///
+ /// 修改排序 拖拽
+ ///
+ ///
+ ///
+ [HttpPost("api/app/QuestionType/UpdateSortDragAsync")]
+ public async Task UpdateSortDragAsync(UpdateQuestionTypeSortDragDto input)
+ {
+ await _questionTypeManager.UpdateSortDragAsync(input);
+ }
+
+ }
+}
diff --git a/src/Shentun.WebPeis.Application/Questions/QuestionAppService.cs b/src/Shentun.WebPeis.Application/Questions/QuestionAppService.cs
new file mode 100644
index 0000000..bcbe74d
--- /dev/null
+++ b/src/Shentun.WebPeis.Application/Questions/QuestionAppService.cs
@@ -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
+{
+ ///
+ /// 问卷
+ ///
+ [ApiExplorerSettings(GroupName = "Work")]
+ [Authorize]
+ public class QuestionAppService : ApplicationService
+ {
+
+ private readonly IRepository _questionRepository;
+ private readonly QuestionManager _questionManager;
+ private readonly CacheService _cacheService;
+
+ public QuestionAppService(
+ IRepository questionRepository,
+ QuestionManager questionManager,
+ CacheService cacheService)
+ {
+ _questionRepository = questionRepository;
+ _questionManager = questionManager;
+ _cacheService = cacheService;
+ }
+
+ /////
+ ///// 获取列表
+ /////
+ /////
+ //[HttpPost("api/app/Question/GetList")]
+ //public async Task> 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;
+
+
+ //}
+
+
+ ///
+ /// 获取问卷树型列表
+ ///
+ ///
+ [HttpPost("api/app/Question/GetQuestionTreeList")]
+ public async Task> 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, "");
+ }
+
+
+
+ ///
+ /// 创建
+ ///
+ ///
+ [HttpPost("api/app/Question/Create")]
+ public async Task CreateAsync(CreateQuestionDto input)
+ {
+ var createEntity = ObjectMapper.Map(input);
+ var entity = await _questionManager.CreateAsync(createEntity);
+ entity = await _questionRepository.InsertAsync(entity);
+ var dto = ObjectMapper.Map(entity);
+ dto.CreatorName = await _cacheService.GetSurnameAsync(dto.CreatorId);
+ dto.LastModifierName = await _cacheService.GetSurnameAsync(dto.LastModifierId);
+ return dto;
+ }
+
+ ///
+ /// 更新
+ ///
+ ///
+ ///
+ [HttpPost("api/app/Question/Update")]
+ public async Task UpdateAsync(UpdateQuestionDto input)
+ {
+ var entity = await _questionRepository.GetAsync(f => f.QuestionTypeId == input.QuestionTypeId);
+ var sourceEntity = ObjectMapper.Map(input);
+ _questionManager.UpdateAsync(sourceEntity, entity);
+ entity = await _questionRepository.UpdateAsync(entity);
+ var dto = ObjectMapper.Map(entity);
+ dto.CreatorName = await _cacheService.GetSurnameAsync(dto.CreatorId);
+ dto.LastModifierName = await _cacheService.GetSurnameAsync(dto.LastModifierId);
+ return dto;
+ }
+
+ ///
+ /// 删除
+ ///
+ ///
+ ///
+ [HttpPost("api/app/Question/Delete")]
+ public async Task DeleteAsync(QuestionIdInputDto input)
+ {
+ await _questionManager.CheckAndDeleteAsync(input.QuestionId);
+ }
+
+ ///
+ /// 修改排序 置顶,置底
+ ///
+ ///
+ ///
+ [HttpPost("api/app/Question/UpdateSortTopOrBottom")]
+ public async Task UpdateSortTopOrBottomAsync(UpdateQuestionSortTopOrBottomInputDto input)
+ {
+ await _questionManager.UpdateSortTopOrBottomAsync(input.QuestionId, input.SortType);
+ }
+
+ ///
+ /// 修改排序 拖拽
+ ///
+ ///
+ ///
+ [HttpPost("api/app/Question/UpdateSortDragAsync")]
+ public async Task UpdateSortDragAsync(UpdateQuestionSortDragDto input)
+ {
+ await _questionManager.UpdateSortDragAsync(input);
+ }
+
+ ///
+ /// 使用Code进行递归
+ ///
+ ///
+ ///
+ ///
+ ///
+ private List GetTree(List 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();
+ }
+ }
+}
diff --git a/src/Shentun.WebPeis.Domain/AppointScheduleTemplates/AppointScheduleTemplateManager.cs b/src/Shentun.WebPeis.Domain/AppointScheduleTemplates/AppointScheduleTemplateManager.cs
index aa81830..dcaf3db 100644
--- a/src/Shentun.WebPeis.Domain/AppointScheduleTemplates/AppointScheduleTemplateManager.cs
+++ b/src/Shentun.WebPeis.Domain/AppointScheduleTemplates/AppointScheduleTemplateManager.cs
@@ -104,7 +104,7 @@ namespace Shentun.WebPeis.AppointScheduleTemplates
public async Task UpdateManySortAsync(Guid appointScheduleTemplateId, int SortType)
{
var entity = await _appointScheduleTemplateRepository.GetAsync(f => f.AppointScheduleTemplateId == appointScheduleTemplateId);
- await EntityHelper.UpdateManySortAsync(_appointScheduleTemplateRepository, entity, SortType);
+ await EntityHelper.UpdateSortTopOrBottomAsync(_appointScheduleTemplateRepository, entity, SortType);
}
@@ -121,7 +121,7 @@ namespace Shentun.WebPeis.AppointScheduleTemplates
var entitylist = await _appointScheduleTemplateRepository.GetListAsync(o => input.ItemList.Select(s => s.Id).Contains(o.AppointScheduleTemplateId));
- await EntityHelper.UpdateSortManyAsync(_appointScheduleTemplateRepository, entitylist, input);
+ await EntityHelper.UpdateSortDragAsync(_appointScheduleTemplateRepository, entitylist, input);
}
}
diff --git a/src/Shentun.WebPeis.Domain/EntityHelper.cs b/src/Shentun.WebPeis.Domain/EntityHelper.cs
index 9c9ccad..74a6f2c 100644
--- a/src/Shentun.WebPeis.Domain/EntityHelper.cs
+++ b/src/Shentun.WebPeis.Domain/EntityHelper.cs
@@ -34,7 +34,7 @@ namespace Shentun.WebPeis
/// 修改方式:1 置顶 2 置底
/// 排序规则 0、升序 1、降序 (默认降序)
///
- public static async Task UpdateManySortAsync(IRepository repository, TEntity entity, int SortType)
+ public static async Task UpdateSortTopOrBottomAsync(IRepository repository, TEntity entity, int SortType)
where TEntity : class, IEntity, IDisplayOrder
{
@@ -95,7 +95,7 @@ namespace Shentun.WebPeis
///
///
///
- public static async Task UpdateSortManyAsync(IRepository repository, List entitylist, UpdateSortManyDto input)
+ public static async Task UpdateSortDragAsync(IRepository repository, List entitylist, UpdateSortManyDto input)
where TEntity : class, IEntity, IDisplayOrder
{
diff --git a/src/Shentun.WebPeis.Domain/Models/Question.cs b/src/Shentun.WebPeis.Domain/Models/Question.cs
index 3031fa5..dafb1ba 100644
--- a/src/Shentun.WebPeis.Domain/Models/Question.cs
+++ b/src/Shentun.WebPeis.Domain/Models/Question.cs
@@ -8,7 +8,7 @@ namespace Shentun.WebPeis.Models;
///
/// 问卷
///
-public partial class Question : AuditedEntity, IHasConcurrencyStamp
+public partial class Question : AuditedEntity, IHasConcurrencyStamp, IDisplayOrder
{
///
/// 主键
@@ -25,17 +25,14 @@ public partial class Question : AuditedEntity, IHasConcurrencyStamp
public string QuestionTypeId { get; set; }
- public string SimpleCode { get; set; } = null!;
-
- public int DisplayOrder { get; set; }
///
- /// 档案类别
+ /// 答案类别 0-单选 1-多选
///
public char? AnswerType { get; set; }
///
- /// 问卷题目类别
+ /// 问卷题目类别 01-生育 ,02-不适症状,03-危险因素,04-所患疾病
///
public string QuestionSubjectTypeId { get; set; }
@@ -54,9 +51,10 @@ public partial class Question : AuditedEntity, IHasConcurrencyStamp
///
public string? PathCode { get; set; }
- ///
- /// 问卷包含的项目
- ///
+
+ public string SimpleCode { get; set; } = null!;
+
+ public int DisplayOrder { get; set; }
public string? ConcurrencyStamp { get; set; }
public virtual ICollection QuestionRegisterItems { get; set; } = new List();
diff --git a/src/Shentun.WebPeis.Domain/Models/QuestionType.cs b/src/Shentun.WebPeis.Domain/Models/QuestionType.cs
index 8fa21bd..884ecd9 100644
--- a/src/Shentun.WebPeis.Domain/Models/QuestionType.cs
+++ b/src/Shentun.WebPeis.Domain/Models/QuestionType.cs
@@ -8,7 +8,7 @@ namespace Shentun.WebPeis.Models;
///
/// 问卷类别 01-小程序健康问卷
///
-public partial class QuestionType : AuditedEntity, IHasConcurrencyStamp
+public partial class QuestionType : AuditedEntity, IHasConcurrencyStamp, IDisplayOrder
{
///
/// 主键
@@ -24,7 +24,7 @@ public partial class QuestionType : AuditedEntity, IHasConcurrencyStamp
public int DisplayOrder { get; set; }
-
+
public string? ConcurrencyStamp { get; set; }
diff --git a/src/Shentun.WebPeis.Domain/QuestionTypes/QuestionTypeManager.cs b/src/Shentun.WebPeis.Domain/QuestionTypes/QuestionTypeManager.cs
new file mode 100644
index 0000000..1822a17
--- /dev/null
+++ b/src/Shentun.WebPeis.Domain/QuestionTypes/QuestionTypeManager.cs
@@ -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 _questionTypeRepository;
+ private readonly IRepository _questionRepository;
+
+ public QuestionTypeManager(
+ IRepository questionTypeRepository,
+ IRepository questionRepository)
+ {
+ _questionTypeRepository = questionTypeRepository;
+ _questionRepository = questionRepository;
+ }
+
+ ///
+ /// 创建
+ ///
+ ///
+ public async Task 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(_questionTypeRepository),
+ QuestionTypeId = entity.QuestionTypeId
+ };
+ }
+
+
+ ///
+ /// 更新
+ ///
+ ///
+ ///
+ ///
+ 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);
+
+ }
+
+ }
+
+
+
+ ///
+ /// 删除
+ ///
+ ///
+ ///
+ ///
+ 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);
+
+ }
+
+
+ ///
+ /// 修改排序 置顶,置底
+ ///
+ /// 需要修改的ID
+ /// 修改方式:1 置顶 2 置底
+ ///
+ public async Task UpdateSortTopOrBottomAsync(string QuestionTypeId, int SortType)
+ {
+ var entity = await _questionTypeRepository.GetAsync(f => f.QuestionTypeId == QuestionTypeId);
+ await EntityHelper.UpdateSortTopOrBottomAsync(_questionTypeRepository, entity, SortType);
+ }
+
+
+
+ ///
+ /// 修改排序 拖拽
+ ///
+ ///
+ ///
+ ///
+ ///
+ 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);
+ }
+ }
+}
diff --git a/src/Shentun.WebPeis.Domain/QuestionTypes/UpdateQuestionTypeSortDragDto.cs b/src/Shentun.WebPeis.Domain/QuestionTypes/UpdateQuestionTypeSortDragDto.cs
new file mode 100644
index 0000000..bfff6b5
--- /dev/null
+++ b/src/Shentun.WebPeis.Domain/QuestionTypes/UpdateQuestionTypeSortDragDto.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.QuestionTypes
+{
+ public class UpdateQuestionTypeSortDragDto
+ {
+ public List ItemList { get; set; }
+ }
+
+ public class UpdateQuestionTypeSortDragDetail
+ {
+ public string QuestionTypeId { get; set; }
+ public int DisplayOrder { get; set; }
+ }
+}
diff --git a/src/Shentun.WebPeis.Domain/QuestionTypes/UpdateQuestionTypeSortTopOrBottomInputDto.cs b/src/Shentun.WebPeis.Domain/QuestionTypes/UpdateQuestionTypeSortTopOrBottomInputDto.cs
new file mode 100644
index 0000000..8edce5e
--- /dev/null
+++ b/src/Shentun.WebPeis.Domain/QuestionTypes/UpdateQuestionTypeSortTopOrBottomInputDto.cs
@@ -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; }
+
+ ///
+ /// 修改方式:1 置顶 2 置底
+ ///
+ public int SortType { get; set; }
+ }
+}
diff --git a/src/Shentun.WebPeis.Domain/Questions/QuestionManager.cs b/src/Shentun.WebPeis.Domain/Questions/QuestionManager.cs
new file mode 100644
index 0000000..2868f78
--- /dev/null
+++ b/src/Shentun.WebPeis.Domain/Questions/QuestionManager.cs
@@ -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 _questionRepository;
+
+ public QuestionManager(
+ IRepository questionRepository
+ )
+ {
+ _questionRepository = questionRepository;
+ }
+
+ ///
+ /// 创建
+ ///
+ ///
+ public async Task 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(_questionRepository),
+ QuestionTypeId = entity.QuestionTypeId
+ };
+ }
+
+
+ ///
+ /// 更新
+ ///
+ ///
+ ///
+ ///
+ 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;
+
+ }
+
+
+
+ ///
+ /// 删除
+ ///
+ ///
+ ///
+ ///
+ 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);
+
+ }
+
+
+ ///
+ /// 修改排序 置顶,置底
+ ///
+ /// 需要修改的ID
+ /// 修改方式:1 置顶 2 置底
+ ///
+ public async Task UpdateSortTopOrBottomAsync(Guid QuestionId, int SortType)
+ {
+ var entity = await _questionRepository.GetAsync(f => f.QuestionId == QuestionId);
+ await EntityHelper.UpdateSortTopOrBottomAsync(_questionRepository, entity, SortType);
+ }
+
+
+
+ ///
+ /// 修改排序 拖拽
+ ///
+ ///
+ ///
+ ///
+ ///
+ 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);
+ }
+
+
+ ///
+ /// 自动生成pathcode
+ ///
+ ///
+ ///
+ public async Task 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;
+ }
+ }
+}
diff --git a/src/Shentun.WebPeis.Domain/Questions/UpdateQuestionSortDragDto.cs b/src/Shentun.WebPeis.Domain/Questions/UpdateQuestionSortDragDto.cs
new file mode 100644
index 0000000..98868b7
--- /dev/null
+++ b/src/Shentun.WebPeis.Domain/Questions/UpdateQuestionSortDragDto.cs
@@ -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 ItemList { get; set; }
+ }
+
+
+ public class UpdateQuestionSortDragDetail
+ {
+ public Guid QuestionId { get; set; }
+ public int DisplayOrder { get; set; }
+ }
+}
diff --git a/src/Shentun.WebPeis.Domain/Questions/UpdateQuestionSortTopOrBottomInputDto.cs b/src/Shentun.WebPeis.Domain/Questions/UpdateQuestionSortTopOrBottomInputDto.cs
new file mode 100644
index 0000000..be12f3c
--- /dev/null
+++ b/src/Shentun.WebPeis.Domain/Questions/UpdateQuestionSortTopOrBottomInputDto.cs
@@ -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; }
+
+ ///
+ /// 修改方式:1 置顶 2 置底
+ ///
+ public int SortType { get; set; }
+ }
+}
diff --git a/src/Shentun.WebPeis.HttpApi.Host/Shentun.WebPeis.HttpApi.Host.csproj b/src/Shentun.WebPeis.HttpApi.Host/Shentun.WebPeis.HttpApi.Host.csproj
index 8240897..b0a0f12 100644
--- a/src/Shentun.WebPeis.HttpApi.Host/Shentun.WebPeis.HttpApi.Host.csproj
+++ b/src/Shentun.WebPeis.HttpApi.Host/Shentun.WebPeis.HttpApi.Host.csproj
@@ -14,7 +14,7 @@
-
+