KnowledgeCommonController.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. using Hotline.KnowledgeBase;
  2. using Hotline.Share.Dtos.Knowledge;
  3. using MapsterMapper;
  4. using Microsoft.AspNetCore.Mvc;
  5. using XF.Domain.Exceptions;
  6. namespace Hotline.Api.Controllers
  7. {
  8. /// <summary>
  9. ///
  10. /// </summary>
  11. public class KnowledgeCommonController : BaseController
  12. {
  13. private readonly IKnowledgeTypeRepository _knowledgeTypeRepository;
  14. private readonly IKnowledgeRepository _knowledgeRepository;
  15. private readonly IKnowledgeTypeService _knowledgeTypeService;
  16. private readonly IKnowledgeStandardRepository _knowledgeStandardRepository;
  17. private readonly IMapper _mapper;
  18. /// <summary>
  19. ///
  20. /// </summary>
  21. /// <param name="knowledgeRepository"></param>
  22. /// <param name="knowledgeTypeRepository"></param>
  23. /// <param name="knowledgeTypeService"></param>
  24. /// <param name="knowledgeStandardRepository"></param>
  25. /// <param name="mapper"></param>
  26. public KnowledgeCommonController(IKnowledgeRepository knowledgeRepository, IKnowledgeTypeRepository knowledgeTypeRepository, IKnowledgeTypeService knowledgeTypeService,
  27. IKnowledgeStandardRepository knowledgeStandardRepository,
  28. IMapper mapper)
  29. {
  30. _knowledgeRepository = knowledgeRepository;
  31. _knowledgeTypeRepository = knowledgeTypeRepository;
  32. _knowledgeTypeService = knowledgeTypeService;
  33. _knowledgeStandardRepository = knowledgeStandardRepository;
  34. _mapper = mapper;
  35. }
  36. #region 知识分类
  37. /// <summary>
  38. ///知识分类- 新增
  39. /// </summary>
  40. /// <param name="dto"></param>
  41. /// <returns></returns>
  42. [HttpPost("type-add")]
  43. public async Task<string> TypeAdd([FromBody] AddKnowledgeTypeDto dto)
  44. {
  45. var type = _mapper.Map<KnowledgeType>(dto);
  46. type.CreationTime = DateTime.Now;
  47. type.IsEnable = true;
  48. string FullName = await _knowledgeTypeService.GetFullName(type.ParentId);
  49. type.SpliceName = string.IsNullOrEmpty(FullName) ? dto.Name : FullName + "-" + dto.Name;
  50. return await _knowledgeTypeRepository.AddAsync(type);
  51. }
  52. /// <summary>
  53. ///知识分类- 编辑
  54. /// </summary>
  55. /// <param name="dto"></param>
  56. /// <returns></returns>
  57. [HttpPost("type-update")]
  58. public async Task TypeUpdate([FromBody] UpdateKnowledgeTypeDto dto)
  59. {
  60. //查询原有数据
  61. var type = await _knowledgeTypeRepository.GetAsync(dto.Id);
  62. if (type is null)
  63. throw UserFriendlyException.SameMessage("编辑失败!");
  64. bool result = false;
  65. //是否更改分类名称
  66. if (type.Name != dto.Name)
  67. result = true;
  68. //转换
  69. _mapper.Map(dto, type);
  70. //如果更改了名称,则修改全程,为更改不修改
  71. if (result)
  72. {
  73. string FullName = await _knowledgeTypeService.GetFullName(type.ParentId);
  74. type.SpliceName = string.IsNullOrEmpty(FullName) ? dto.Name : FullName + "-" + dto.Name;
  75. }
  76. //修改数据
  77. await _knowledgeTypeRepository.UpdateAsync(type);
  78. //如果修改了名称,对应修改子分类全称
  79. if (result)
  80. await _knowledgeTypeService.UpdateChildNode(type.Id);
  81. }
  82. /// <summary>
  83. /// 知识分类-新增、编辑初始化
  84. /// </summary>
  85. /// <param name="Id"></param>
  86. /// <param name="ParentId"></param>
  87. /// <returns></returns>
  88. [HttpGet("type-init")]
  89. public async Task<KnowledgeTypeDto> TypeInit(string Id, string ParentId)
  90. {
  91. KnowledgeTypeDto knowledgeTypeDto = new();
  92. if (!string.IsNullOrEmpty(Id))
  93. {
  94. var type = await _knowledgeTypeRepository.GetAsync(p => p.Id == Id);
  95. _mapper.Map(type, knowledgeTypeDto);
  96. }
  97. var list = await _knowledgeTypeRepository.QueryAsync(p => p.IsEnable == true);
  98. if (!string.IsNullOrEmpty(ParentId) && ParentId != Guid.Empty.ToString())
  99. {
  100. knowledgeTypeDto.TreeLists = _knowledgeTypeService.GetChildren(list, Guid.Empty.ToString(), ParentId);
  101. }
  102. else
  103. {
  104. knowledgeTypeDto.TreeLists = _knowledgeTypeService.GetChildren(list, Guid.Empty.ToString(), "");
  105. }
  106. return knowledgeTypeDto;
  107. }
  108. /// <summary>
  109. /// 知识分类-查询详情
  110. /// </summary>
  111. /// <param name="Id"></param>
  112. /// <returns></returns>
  113. [HttpGet("type-info")]
  114. public async Task<KnowledgeType> TypeInfo(string Id)
  115. {
  116. var types = await _knowledgeTypeRepository.GetAsync(Id);
  117. if (types is null)
  118. throw UserFriendlyException.SameMessage("查询失败!");
  119. return types;
  120. }
  121. /// <summary>
  122. /// 知识分类-删除
  123. /// </summary>
  124. /// <param name="Id"></param>
  125. /// <returns></returns>
  126. [HttpDelete("type-delete")]
  127. public async Task TypeDelete(string Id)
  128. {
  129. //查询数据是否存在
  130. var sandard = await _knowledgeTypeRepository.GetAsync(Id);
  131. if (sandard is null)
  132. throw UserFriendlyException.SameMessage("分类不存在!");
  133. //查询是否有子级分类
  134. var checkChild = await _knowledgeTypeRepository.CountAsync(p => p.ParentId == Id);
  135. if (checkChild > 0)
  136. throw UserFriendlyException.SameMessage("存在子级分类!");
  137. //查询是否有知识分类
  138. var checkKnowledge = await _knowledgeRepository.CountAsync(p => p.KnowledgeTypeId == Id);
  139. if (checkKnowledge > 0)
  140. throw UserFriendlyException.SameMessage("分类存在知识!");
  141. //删除操作
  142. await _knowledgeTypeRepository.RemoveAsync(sandard, true);
  143. }
  144. /// <summary>
  145. /// 知识分类-启用、禁用切换
  146. /// </summary>
  147. /// <param name="Id"></param>
  148. /// <returns></returns>
  149. [HttpGet("type-changestate")]
  150. public async Task TypeChangeState(string Id)
  151. {
  152. //查询数据是否存在
  153. var type = await _knowledgeTypeRepository.GetAsync(Id);
  154. if (type is null)
  155. throw UserFriendlyException.SameMessage("分类不存在!");
  156. if (type.IsEnable)//禁用
  157. {
  158. //查询是否有子级,如果有子级启用,则不能禁用
  159. var checkChild = await _knowledgeTypeRepository.CountAsync(p => p.ParentId == Id && p.IsEnable == true);
  160. if (checkChild > 0)
  161. throw UserFriendlyException.SameMessage("请先禁用子级分类!");
  162. type.IsEnable = false;
  163. }
  164. else //启用
  165. {
  166. //查询上级是否是启用状态,如果是禁用状态不能修改
  167. var CheckParent = await _knowledgeTypeRepository.GetAsync(type.ParentId);
  168. if (CheckParent is null)
  169. throw UserFriendlyException.SameMessage("分类启用失败!");
  170. if (!CheckParent.IsEnable)
  171. throw UserFriendlyException.SameMessage("请先启用父级分类!");
  172. //将状态修改为启用
  173. type.IsEnable = true;
  174. }
  175. await _knowledgeTypeRepository.UpdateAsync(type);
  176. }
  177. /// <summary>
  178. ///知识分类- 获取层级分类
  179. /// </summary>
  180. /// <param name="IsAll">如果为true查询全部分类,包括禁用的;如果false查询启用的分类</param>
  181. /// <returns></returns>
  182. [HttpPost("type-treelist")]
  183. public async Task<List<TreeListDto>> GetTreeList(bool IsAll)
  184. {
  185. List<KnowledgeType> typeList;
  186. if (IsAll)//查询全部
  187. {
  188. typeList = await _knowledgeTypeRepository.QueryAsync();
  189. }
  190. else//查询启用的
  191. {
  192. typeList = await _knowledgeTypeRepository.QueryAsync(p => p.IsEnable == true);
  193. }
  194. return _knowledgeTypeService.GetChildren(typeList, Guid.Empty.ToString(), "");
  195. }
  196. #endregion
  197. #region 编写规范
  198. /// <summary>
  199. /// 编写规范-查询详情
  200. /// </summary>
  201. /// <param name="Id"></param>
  202. /// <returns></returns>
  203. [HttpGet("standard-info")]
  204. public async Task<KnowledgeStandard> StandardInfo(string Id)
  205. {
  206. if (string.IsNullOrEmpty(Id))
  207. throw UserFriendlyException.SameMessage("ID不能为空!");
  208. var sandard = await _knowledgeStandardRepository.GetAsync(Id);
  209. if (sandard is null)
  210. throw UserFriendlyException.SameMessage("编写规范查询失败!");
  211. return sandard;
  212. }
  213. /// <summary>
  214. /// 编写规范-删除
  215. /// </summary>
  216. /// <param name="Id"></param>
  217. /// <returns></returns>
  218. [HttpDelete("standard-delete")]
  219. public async Task StandardDelete(string Id)
  220. {
  221. if (string.IsNullOrEmpty(Id))
  222. throw UserFriendlyException.SameMessage("ID不能为空!");
  223. //删除操作
  224. await _knowledgeStandardRepository.RemoveAsync(Id);
  225. }
  226. /// <summary>
  227. /// 编写规范-新增
  228. /// </summary>
  229. /// <param name="dto"></param>
  230. /// <returns></returns>
  231. [HttpPost("standard-add")]
  232. public async Task StandardAdd([FromBody] AddKnowledgeStandardDto dto)
  233. {
  234. var sandard = _mapper.Map<KnowledgeStandard>(dto);
  235. sandard.CreationTime = DateTime.Now;
  236. await _knowledgeStandardRepository.AddAsync(sandard);
  237. }
  238. /// <summary>
  239. /// 编写规范-编辑
  240. /// </summary>
  241. /// <param name="dto"></param>
  242. /// <returns></returns>
  243. [HttpPost("standard-update")]
  244. public async Task StandardUpdate([FromBody] UpdateKnowledgeStandardDto dto)
  245. {
  246. var sandard = _mapper.Map<KnowledgeStandard>(dto);
  247. await _knowledgeStandardRepository.UpdateAsync(sandard);
  248. }
  249. #endregion
  250. }
  251. }