KnowledgeCommonController.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. using Hotline.KnowledgeBase;
  2. using Hotline.Permissions;
  3. using Hotline.Share.Dtos.Knowledge;
  4. using MapsterMapper;
  5. using Microsoft.AspNetCore.Mvc;
  6. using XF.Domain.Exceptions;
  7. namespace Hotline.Api.Controllers
  8. {
  9. /// <summary>
  10. ///
  11. /// </summary>
  12. public class KnowledgeCommonController : BaseController
  13. {
  14. #region 注入
  15. private readonly IKnowledgeTypeRepository _knowledgeTypeRepository;
  16. private readonly IKnowledgeTypeDomainService _knowledgeTypeDomainService;
  17. private readonly IKnowledgeStandardRepository _knowledgeStandardRepository;
  18. private readonly IMapper _mapper;
  19. /// <summary>
  20. ///
  21. /// </summary>
  22. /// <param name="knowledgeTypeRepository"></param>
  23. /// <param name="knowledgeTypeDomainService"></param>
  24. /// <param name="knowledgeStandardRepository"></param>
  25. /// <param name="mapper"></param>
  26. public KnowledgeCommonController(IKnowledgeTypeRepository knowledgeTypeRepository, IKnowledgeTypeDomainService knowledgeTypeDomainService,
  27. IKnowledgeStandardRepository knowledgeStandardRepository,
  28. IMapper mapper)
  29. {
  30. _knowledgeTypeRepository = knowledgeTypeRepository;
  31. _knowledgeTypeDomainService = knowledgeTypeDomainService;
  32. _knowledgeStandardRepository = knowledgeStandardRepository;
  33. _mapper = mapper;
  34. }
  35. #endregion
  36. #region 知识分类
  37. /// <summary>
  38. ///知识分类- 新增
  39. /// </summary>
  40. /// <param name="dto"></param>
  41. /// <returns></returns>
  42. [Permission(EPermission.AddKnowledgeType)]
  43. [HttpPost("add")]
  44. public async Task<string> AddType([FromBody] AddKnowledgeTypeDto dto)
  45. {
  46. return await _knowledgeTypeDomainService.AddType(dto, HttpContext.RequestAborted);
  47. }
  48. /// <summary>
  49. ///知识分类- 编辑
  50. /// </summary>
  51. /// <param name="dto"></param>
  52. /// <returns></returns>
  53. [Permission(EPermission.UpdateKnowledgeType)]
  54. [HttpPut("update")]
  55. public async Task UpdateType([FromBody] UpdateKnowledgeTypeDto dto)
  56. {
  57. await _knowledgeTypeDomainService.UpdateType(dto, HttpContext.RequestAborted);
  58. }
  59. /// <summary>
  60. /// 知识分类-新增、编辑初始化
  61. /// </summary>
  62. /// <param name="Id"></param>
  63. /// <param name="ParentId"></param>
  64. /// <returns></returns>
  65. [HttpGet("init")]
  66. public async Task<KnowledgeTypeDto> InitType(string Id, string ParentId)
  67. {
  68. return await _knowledgeTypeDomainService.InitType(Id, ParentId, HttpContext.RequestAborted);
  69. }
  70. /// <summary>
  71. /// 知识分类-查询详情
  72. /// </summary>
  73. /// <param name="Id"></param>
  74. /// <returns></returns>
  75. [HttpGet("info/{Id}")]
  76. public async Task<KnowledgeType> GetType(string Id)
  77. {
  78. var types = await _knowledgeTypeRepository.GetAsync(Id, HttpContext.RequestAborted);
  79. if (types is null)
  80. throw UserFriendlyException.SameMessage("查询失败!");
  81. return types;
  82. }
  83. /// <summary>
  84. /// 知识分类-删除
  85. /// </summary>
  86. /// <param name="Id"></param>
  87. /// <returns></returns>
  88. [Permission(EPermission.RemoveKnowledgeType)]
  89. [HttpDelete("remove")]
  90. public async Task RemoveType(string Id)
  91. {
  92. await _knowledgeTypeDomainService.RemoveType(Id, HttpContext.RequestAborted);
  93. }
  94. /// <summary>
  95. /// 知识分类-启用、禁用切换
  96. /// </summary>
  97. /// <param name="Id"></param>
  98. /// <returns></returns>
  99. [Permission(EPermission.KnowledgeTypeChangeState)]
  100. [HttpPut("changestate")]
  101. public async Task ChangeStateType(string Id)
  102. {
  103. await _knowledgeTypeDomainService.ChangeStateType(Id, HttpContext.RequestAborted);
  104. }
  105. /// <summary>
  106. /// 知识分类-禁用,并且下架知识
  107. /// </summary>
  108. /// <param name="Id"></param>
  109. /// <returns></returns>
  110. [Permission(EPermission.KnowledgeTypeChangeStateAndOffShelf)]
  111. [HttpPut("changestateandoffshelf")]
  112. public async Task TypeChangeStateAndOffShelf(string Id)
  113. {
  114. await _knowledgeTypeDomainService.ChangeStateTypeAndOffShelf(Id, HttpContext.RequestAborted);
  115. }
  116. /// <summary>
  117. /// 知识分类- 获取层级分类
  118. /// </summary>
  119. /// <param name="IsEnable">不传查询所有</param>
  120. /// <returns></returns>
  121. [Permission(EPermission.KnowledgeTypeMange)]
  122. [HttpGet("treelist")]
  123. public async Task<List<KnowledgeType>> GetTreeList(bool? IsEnable)
  124. {
  125. return await _knowledgeTypeRepository.Queryable().WhereIF(IsEnable.HasValue, p => p.IsEnable == IsEnable).ToTreeAsync(it => it.children, it => it.ParentId, null);
  126. }
  127. /// <summary>
  128. /// 知识分类- 只获取一级
  129. /// </summary>
  130. /// <param name="ParentId">不传默认查询第一级</param>
  131. /// <param name="IsEnable">不传查询所有,包含已经禁用的</param>
  132. /// <returns></returns>
  133. [HttpGet("typelist")]
  134. public async Task<List<KnowledgeType>> GetTypeList(string? ParentId, bool? IsEnable)
  135. {
  136. return await _knowledgeTypeRepository
  137. .Queryable()
  138. .Where(p => p.ParentId == ParentId)
  139. .WhereIF(IsEnable.HasValue, p => p.IsEnable == IsEnable)
  140. .OrderByDescending(p => p.Sort)
  141. .ToListAsync();
  142. }
  143. #endregion
  144. #region 编写规范
  145. /// <summary>
  146. /// 编写规范-查询详情
  147. /// </summary>
  148. /// <returns></returns>
  149. [Permission(EPermission.KnowledgeStandardInfo)]
  150. [HttpGet("info-standard")]
  151. public async Task<KnowledgeStandard> GetStandard()
  152. {
  153. var sandard = await _knowledgeStandardRepository.Queryable().FirstAsync();
  154. if (sandard == null)
  155. {
  156. KnowledgeStandard standard = new()
  157. {
  158. Title = "",
  159. Content = ""
  160. };
  161. var Id = await _knowledgeStandardRepository.AddAsync(standard, HttpContext.RequestAborted);
  162. return await _knowledgeStandardRepository.GetAsync(Id, HttpContext.RequestAborted);
  163. }
  164. return sandard;
  165. }
  166. /// <summary>
  167. /// 编写规范-修改
  168. /// </summary>
  169. /// <param name="dto"></param>
  170. /// <returns></returns>
  171. [Permission(EPermission.KnowledgeStandardUpdate)]
  172. [HttpPut("update-standard")]
  173. public async Task UpdateStandard([FromBody] UpdateKnowledgeStandardDto dto)
  174. {
  175. var sandard = _mapper.Map<KnowledgeStandard>(dto);
  176. await _knowledgeStandardRepository.UpdateAsync(sandard, HttpContext.RequestAborted);
  177. }
  178. #endregion
  179. }
  180. }