KnowledgeApplyController.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. using Hotline.Application.Knowledge;
  2. using Hotline.KnowledgeBase;
  3. using Hotline.Permissions;
  4. using Hotline.Repository.SqlSugar.Extensions;
  5. using Hotline.Share.Dtos;
  6. using Hotline.Share.Dtos.Knowledge;
  7. using Hotline.Share.Enums.KnowledgeBase;
  8. using Hotline.Share.Requests;
  9. using MapsterMapper;
  10. using Microsoft.AspNetCore.Mvc;
  11. using XF.Domain.Authentications;
  12. using XF.Domain.Exceptions;
  13. namespace Hotline.Api.Controllers
  14. {
  15. /// <summary>
  16. ///
  17. /// </summary>
  18. public class KnowledgeApplyController : BaseController
  19. {
  20. private readonly IKnowledgeRepository _knowledgeRepository;
  21. private readonly IKnowledgeApplyRepository _knowledgeApplyRepository;
  22. private readonly ISessionContext _sessionContext;
  23. private readonly IMapper _mapper;
  24. private readonly IKnowApplication _knowApplication;
  25. /// <summary>
  26. ///
  27. /// </summary>
  28. /// <param name="knowledgeRepository"></param>
  29. /// <param name="knowledgeApplyRepository"></param>
  30. /// <param name="sessionContext"></param>
  31. /// <param name="mapper"></param>
  32. /// <param name="knowApplication"></param>
  33. public KnowledgeApplyController(IKnowledgeRepository knowledgeRepository, IKnowledgeApplyRepository knowledgeApplyRepository, ISessionContext sessionContext
  34. , IMapper mapper, IKnowApplication knowApplication)
  35. {
  36. _knowledgeRepository = knowledgeRepository;
  37. _knowledgeApplyRepository = knowledgeApplyRepository;
  38. _sessionContext = sessionContext;
  39. _mapper = mapper;
  40. _knowApplication = knowApplication;
  41. }
  42. /// <summary>
  43. /// 知识申请-发起申请
  44. /// </summary>
  45. /// <param name="dto"></param>
  46. /// <returns></returns>
  47. [Permission(EPermission.KnowledgeApplyAdd)]
  48. [HttpPost("add")]
  49. public async Task<string> AddApply([FromBody] KnowledgeApplyDto dto)
  50. {
  51. var ka = _mapper.Map<KnowledgeApply>(dto);
  52. ka.Status = EKnowledgeApplyStatus.Handling;
  53. return await _knowledgeApplyRepository.AddAsync(ka, HttpContext.RequestAborted);
  54. }
  55. /// <summary>
  56. /// 知识申请-修改申请
  57. /// </summary>
  58. /// <param name="dto"></param>
  59. /// <returns></returns>
  60. [Permission(EPermission.KnowledgeUpdateAdd)]
  61. [HttpPut("update")]
  62. public async Task UpdateApply([FromBody] UpdateKnowledgeApplyDto dto)
  63. {
  64. var ka = _mapper.Map<KnowledgeApply>(dto);
  65. await _knowledgeApplyRepository.UpdateAsync(ka, HttpContext.RequestAborted);
  66. }
  67. /// <summary>
  68. ///知识申请-信息办理
  69. /// </summary>
  70. /// <param name="dto"></param>
  71. /// <returns></returns>
  72. [Permission(EPermission.KnowApplyHandle)]
  73. [HttpPut("handle")]
  74. public async Task HandleApply([FromBody] KnowledgeApplyHandleDto dto)
  75. {
  76. //查询申请信息
  77. var handle = await _knowledgeApplyRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
  78. if (handle is null || handle.Status != EKnowledgeApplyStatus.Handling)
  79. throw UserFriendlyException.SameMessage("办理失败");
  80. handle.Status = EKnowledgeApplyStatus.Succeed;
  81. handle.HandleTime = DateTime.Now;
  82. handle.KnowledgeId = dto.KnowledgeId;
  83. handle.Opinion = dto.Opinion;
  84. //修改办理信息
  85. await _knowledgeApplyRepository.UpdateAsync(handle, HttpContext.RequestAborted);
  86. }
  87. /// <summary>
  88. ///知识申请- 撤销操作
  89. /// </summary>
  90. /// <param name="Id"></param>
  91. /// <returns></returns>
  92. [Permission(EPermission.KnowledgeApplyRevoke)]
  93. [HttpPut("apply-handle/{Id}")]
  94. public async Task RevokeApply(string Id)
  95. {
  96. var handle = await _knowledgeApplyRepository.GetAsync(Id, HttpContext.RequestAborted);
  97. if (handle is null)
  98. throw UserFriendlyException.SameMessage("申请信息撤销失败");
  99. if (handle.Status != EKnowledgeApplyStatus.Handling)
  100. throw UserFriendlyException.SameMessage("只能撤销办理中的申请");
  101. handle.Status = EKnowledgeApplyStatus.Revert;
  102. await _knowledgeApplyRepository.UpdateAsync(handle, HttpContext.RequestAborted);
  103. }
  104. /// <summary>
  105. /// 知识申请-退回操作
  106. /// </summary>
  107. /// <param name="dto"></param>
  108. /// <returns></returns>
  109. [Permission(EPermission.KnowledgeApplyReturn)]
  110. [HttpPut("return")]
  111. public async Task ReturnApply([FromBody] KnowledgeApplyReturnDto dto)
  112. {
  113. //查询申请信息
  114. var handle = await _knowledgeApplyRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
  115. if (handle is null)
  116. throw UserFriendlyException.SameMessage("退回失败");
  117. if (handle.Status != EKnowledgeApplyStatus.Handling)
  118. throw UserFriendlyException.SameMessage("只能退回办理中的申请");
  119. if (string.IsNullOrEmpty(dto.Opinion))
  120. throw UserFriendlyException.SameMessage("退回原因不能为空");
  121. handle.Status = EKnowledgeApplyStatus.Failed;
  122. handle.ReturnTime = DateTime.Now;
  123. handle.Opinion = dto.Opinion;
  124. await _knowledgeApplyRepository.UpdateAsync(handle, HttpContext.RequestAborted);
  125. }
  126. /// <summary>
  127. /// 删除申请
  128. /// </summary>
  129. /// <param name="Id"></param>
  130. /// <returns></returns>
  131. [Permission(EPermission.KnowledgeApplyDelete)]
  132. [HttpDelete("remove")]
  133. public async Task RemoveApply(string Id)
  134. {
  135. var handle = await _knowledgeApplyRepository.GetAsync(Id, HttpContext.RequestAborted);
  136. if (handle is null)
  137. throw UserFriendlyException.SameMessage("申请不存在");
  138. if (handle.Status != EKnowledgeApplyStatus.Revert || handle.Status != EKnowledgeApplyStatus.Failed)
  139. throw UserFriendlyException.SameMessage("只能删除已退回或者撤回的知识申请");
  140. await _knowledgeApplyRepository.RemoveAsync(handle, false, HttpContext.RequestAborted);
  141. }
  142. /// <summary>
  143. /// 知识申请-查询详情
  144. /// </summary>
  145. /// <param name="Id"></param>
  146. /// <returns></returns>
  147. [HttpGet("info/{Id}")]
  148. public async Task<DataKnowledgeApplyDto> GetApply(string Id)
  149. {
  150. var handle = await _knowledgeApplyRepository.GetAsync(Id, HttpContext.RequestAborted);
  151. if (handle is null)
  152. throw UserFriendlyException.SameMessage("申请信息查询失败");
  153. DataKnowledgeApplyDto dataKnowledgeApplyDto = new();
  154. _mapper.Map(handle, dataKnowledgeApplyDto);
  155. var knowledge = await _knowledgeRepository.GetAsync(p => p.Id == handle.KnowledgeId, HttpContext.RequestAborted);
  156. if (knowledge != null)
  157. {
  158. dataKnowledgeApplyDto.KBID = knowledge.Id;
  159. dataKnowledgeApplyDto.KBTitle = knowledge.Title;
  160. }
  161. return dataKnowledgeApplyDto;
  162. }
  163. /// <summary>
  164. /// 查询-新增知识申请
  165. /// </summary>
  166. /// <param name="pagedDto"></param>
  167. /// <returns></returns>
  168. [HttpGet("addapply")]
  169. public async Task<PagedDto<DataAddApplyDto>> GetAddApply([FromQuery] PagedRequest pagedDto)
  170. {
  171. var (total, items) = await _knowledgeApplyRepository
  172. .Queryable()
  173. .Where(d => d.CreatorId == _sessionContext.RequiredUserId && d.KnowledgeApplyType == EKnowledgeApplyType.Add && d.Status == EKnowledgeApplyStatus.Handling)
  174. .OrderByDescending(p => p.CreationTime)
  175. .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, HttpContext.RequestAborted);
  176. return new PagedDto<DataAddApplyDto>(total, _mapper.Map<IReadOnlyList<DataAddApplyDto>>(items));
  177. }
  178. #region 我的知识申请
  179. /// <summary>
  180. /// 我的知识申请--全部
  181. /// </summary>
  182. /// <returns></returns>
  183. [Permission(EPermission.KnowledgeAllApply)]
  184. [HttpGet()]
  185. public async Task<PagedDto<KnowledgeApply>> GetApplyList([FromQuery] KnowledgeApplyPagedDto dto)
  186. {
  187. return await _knowApplication.GetApplyList(dto, HttpContext.RequestAborted);
  188. }
  189. #endregion
  190. #region 知识申请处理查询
  191. /// <summary>
  192. /// 申请处理查询
  193. /// </summary>
  194. /// <returns></returns>
  195. [HttpGet("handlelist")]
  196. public async Task<PagedDto<KnowledgeApplyPageDto>> AllHandle([FromQuery] KnowledgeHandlePagedDto dto)
  197. {
  198. return await _knowApplication.GetApplyHandleList(dto, HttpContext.RequestAborted);
  199. }
  200. #endregion
  201. }
  202. }