KnowledgeApplyController.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. using Hotline.Application.Knowledge;
  2. using Hotline.KnowledgeBase;
  3. using Hotline.Permissions;
  4. using Hotline.Settings;
  5. using Hotline.Share.Dtos;
  6. using Hotline.Share.Dtos.Knowledge;
  7. using Hotline.Share.Enums.KnowledgeBase;
  8. using Hotline.Users;
  9. using MapsterMapper;
  10. using Microsoft.AspNetCore.Mvc;
  11. using XF.Domain.Authentications;
  12. using XF.Domain.Exceptions;
  13. using XF.Utility.EnumExtensions;
  14. namespace Hotline.Api.Controllers
  15. {
  16. /// <summary>
  17. ///
  18. /// </summary>
  19. public class KnowledgeApplyController : BaseController
  20. {
  21. #region 注入
  22. private readonly IKnowledgeRepository _knowledgeRepository;
  23. private readonly IKnowledgeApplyRepository _knowledgeApplyRepository;
  24. private readonly ISessionContext _sessionContext;
  25. private readonly IMapper _mapper;
  26. private readonly IKnowApplication _knowApplication;
  27. private readonly IUserRepository _userRepository;
  28. private readonly ISystemOrganizeRepository _systemOrganizeRepository;
  29. /// <summary>
  30. ///
  31. /// </summary>
  32. /// <param name="knowledgeRepository"></param>
  33. /// <param name="knowledgeApplyRepository"></param>
  34. /// <param name="sessionContext"></param>
  35. /// <param name="mapper"></param>
  36. /// <param name="knowApplication"></param>
  37. /// <param name="userRepository"></param>
  38. /// <param name="systemOrganizeRepository"></param>
  39. public KnowledgeApplyController(IKnowledgeRepository knowledgeRepository, IKnowledgeApplyRepository knowledgeApplyRepository, ISessionContext sessionContext
  40. , IMapper mapper, IKnowApplication knowApplication, IUserRepository userRepository, ISystemOrganizeRepository systemOrganizeRepository)
  41. {
  42. _knowledgeRepository = knowledgeRepository;
  43. _knowledgeApplyRepository = knowledgeApplyRepository;
  44. _sessionContext = sessionContext;
  45. _mapper = mapper;
  46. _knowApplication = knowApplication;
  47. _userRepository = userRepository;
  48. _systemOrganizeRepository = systemOrganizeRepository;
  49. }
  50. #endregion
  51. #region 知识申请基础
  52. /// <summary>
  53. /// 知识申请-发起申请
  54. /// </summary>
  55. /// <param name="dto"></param>
  56. /// <returns></returns>
  57. [Permission(EPermission.KnowledgeApplyAdd)]
  58. [HttpPost("add")]
  59. public async Task<string> AddApply([FromBody] KnowledgeApplyDto dto)
  60. {
  61. var ka = _mapper.Map<KnowledgeApply>(dto);
  62. ka.Status = EKnowledgeApplyStatus.Handling;
  63. return await _knowledgeApplyRepository.AddAsync(ka, HttpContext.RequestAborted);
  64. }
  65. /// <summary>
  66. /// 知识申请-修改申请
  67. /// </summary>
  68. /// <param name="dto"></param>
  69. /// <returns></returns>
  70. [Permission(EPermission.KnowledgeUpdateAdd)]
  71. [HttpPut("update")]
  72. public async Task UpdateApply([FromBody] UpdateKnowledgeApplyDto dto)
  73. {
  74. var ka = _mapper.Map<KnowledgeApply>(dto);
  75. await _knowledgeApplyRepository.UpdateAsync(ka, HttpContext.RequestAborted);
  76. }
  77. /// <summary>
  78. ///知识申请-信息办理
  79. /// </summary>
  80. /// <param name="dto"></param>
  81. /// <returns></returns>
  82. [Permission(EPermission.KnowApplyHandle)]
  83. [HttpPut("handle")]
  84. public async Task HandleApply([FromBody] KnowledgeApplyHandleDto dto)
  85. {
  86. //查询申请信息
  87. var handle = await _knowledgeApplyRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
  88. if (handle is null || handle.Status != EKnowledgeApplyStatus.Handling)
  89. throw UserFriendlyException.SameMessage("办理失败");
  90. if (string.IsNullOrEmpty(dto.Code))
  91. {
  92. var know = await _knowledgeRepository.GetAsync(dto.KnowledgeId, HttpContext.RequestAborted);
  93. handle.Code = know?.Code;
  94. }
  95. handle.Status = EKnowledgeApplyStatus.Succeed;
  96. handle.HandleTime = DateTime.Now;
  97. handle.KnowledgeId = dto.KnowledgeId;
  98. handle.Code = dto.Code;
  99. handle.Opinion = dto.Opinion;
  100. handle.Processor = _sessionContext.UserName;
  101. handle.ProcessorId = _sessionContext.RequiredUserId;
  102. //修改办理信息
  103. await _knowledgeApplyRepository.UpdateAsync(handle, HttpContext.RequestAborted);
  104. }
  105. /// <summary>
  106. ///知识申请- 撤销操作
  107. /// </summary>
  108. /// <param name="Id"></param>
  109. /// <returns></returns>
  110. [Permission(EPermission.KnowledgeApplyRevoke)]
  111. [HttpPut("apply-handle/{Id}")]
  112. public async Task RevokeApply(string Id)
  113. {
  114. var handle = await _knowledgeApplyRepository.GetAsync(Id, HttpContext.RequestAborted);
  115. if (handle is null)
  116. throw UserFriendlyException.SameMessage("申请信息撤销失败");
  117. if (handle.Status != EKnowledgeApplyStatus.Handling)
  118. throw UserFriendlyException.SameMessage("只能撤销办理中的申请");
  119. handle.Status = EKnowledgeApplyStatus.Revert;
  120. handle.RevokeTime = DateTime.Now;
  121. await _knowledgeApplyRepository.UpdateAsync(handle, HttpContext.RequestAborted);
  122. }
  123. /// <summary>
  124. /// 知识申请-退回操作
  125. /// </summary>
  126. /// <param name="dto"></param>
  127. /// <returns></returns>
  128. [Permission(EPermission.KnowledgeApplyReturn)]
  129. [HttpPut("return")]
  130. public async Task ReturnApply([FromBody] KnowledgeApplyReturnDto dto)
  131. {
  132. //查询申请信息
  133. var handle = await _knowledgeApplyRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
  134. if (handle is null)
  135. throw UserFriendlyException.SameMessage("退回失败");
  136. if (handle.Status != EKnowledgeApplyStatus.Handling)
  137. throw UserFriendlyException.SameMessage("只能退回办理中的申请");
  138. if (string.IsNullOrEmpty(dto.Opinion))
  139. throw UserFriendlyException.SameMessage("退回原因不能为空");
  140. handle.Status = EKnowledgeApplyStatus.Failed;
  141. handle.ReturnTime = DateTime.Now;
  142. handle.HandleTime = DateTime.Now;
  143. handle.Opinion = dto.Opinion;
  144. await _knowledgeApplyRepository.UpdateAsync(handle, HttpContext.RequestAborted);
  145. }
  146. /// <summary>
  147. /// 删除申请
  148. /// </summary>
  149. /// <param name="Id"></param>
  150. /// <returns></returns>
  151. [Permission(EPermission.KnowledgeApplyDelete)]
  152. [HttpDelete("remove")]
  153. public async Task RemoveApply(string Id)
  154. {
  155. var handle = await _knowledgeApplyRepository.GetAsync(Id, HttpContext.RequestAborted);
  156. if (handle is null)
  157. throw UserFriendlyException.SameMessage("申请不存在");
  158. if (handle.Status != EKnowledgeApplyStatus.Revert && handle.Status != EKnowledgeApplyStatus.Failed)
  159. throw UserFriendlyException.SameMessage("只能删除已退回或者撤回的知识申请");
  160. await _knowledgeApplyRepository.RemoveAsync(handle, false, HttpContext.RequestAborted);
  161. }
  162. /// <summary>
  163. /// 知识申请-查询详情
  164. /// </summary>
  165. /// <param name="Id"></param>
  166. /// <returns></returns>
  167. [HttpGet("info/{Id}")]
  168. public async Task<DataKnowledgeApplyDto> GetApply(string Id)
  169. {
  170. var handle = await _knowledgeApplyRepository.GetAsync(Id, HttpContext.RequestAborted);
  171. if (handle is null)
  172. throw UserFriendlyException.SameMessage("申请信息查询失败");
  173. DataKnowledgeApplyDto dataKnowledgeApplyDto = new();
  174. _mapper.Map(handle, dataKnowledgeApplyDto);
  175. var user = await _userRepository.GetAsync(handle.CreatorId, HttpContext.RequestAborted);
  176. if (user != null)
  177. dataKnowledgeApplyDto.CreationName = user.Name;
  178. var organize = await _systemOrganizeRepository.GetAsync(handle.CreatorOrgId, HttpContext.RequestAborted);
  179. if (organize != null)
  180. dataKnowledgeApplyDto.CreationBMName = organize.OrgName;
  181. //这里查询最新的版本
  182. if (!string.IsNullOrEmpty(handle.Code))
  183. {
  184. var knowledge = await _knowledgeRepository
  185. .Queryable()
  186. .Where(p => p.Code == handle.Code && p.IsDeleted == false && (p.Status == EKnowledgeStatus.OnShelf || p.Status == EKnowledgeStatus.OffShelf))
  187. .OrderByDescending(p => p.Version)
  188. .Take(1)
  189. .FirstAsync();
  190. if (knowledge != null)
  191. {
  192. dataKnowledgeApplyDto.KBID = knowledge.Id;
  193. dataKnowledgeApplyDto.KBTitle = knowledge.Title;
  194. }
  195. }
  196. ////这里查询对应的版本
  197. //var knowledge = await _knowledgeRepository.GetAsync(p => p.Id == handle.KnowledgeId, HttpContext.RequestAborted);
  198. //if (knowledge != null)
  199. //{
  200. // dataKnowledgeApplyDto.KBID = knowledge.Id;
  201. // dataKnowledgeApplyDto.KBTitle = knowledge.Title;
  202. //}
  203. return dataKnowledgeApplyDto;
  204. }
  205. #endregion
  206. #region 我的知识申请
  207. /// <summary>
  208. /// 知识申请页面枚举值
  209. /// </summary>
  210. /// <returns></returns>
  211. [HttpGet("apply-base-data")]
  212. public async Task<object> ApplyBaseData()
  213. {
  214. return new
  215. {
  216. EKnowledgeApplyStatus = EnumExts.GetDescriptions<EKnowledgeApplyStatus>(),
  217. EKnowledgeApplyType = EnumExts.GetDescriptions<EApplyType>()
  218. };
  219. }
  220. /// <summary>
  221. /// 我的知识申请--全部
  222. /// </summary>
  223. /// <returns></returns>
  224. //[Permission(EPermission.KnowledgeAllApply)]
  225. [HttpGet()]
  226. public async Task<PagedDto<KnowledgeApplyHandlePageDto>> GetApplyList([FromQuery] KnowledgeApplyPagedDto dto)
  227. {
  228. return await _knowApplication.GetApplyList(dto, HttpContext.RequestAborted);
  229. }
  230. #endregion
  231. #region 知识申请处理查询
  232. /// <summary>
  233. /// 申请处理查询
  234. /// </summary>
  235. /// <returns></returns>
  236. [HttpGet("handlelist")]
  237. public async Task<PagedDto<KnowledgeApplyHandlePageDto>> AllHandle([FromQuery] KnowledgeHandlePagedDto dto)
  238. {
  239. return await _knowApplication.GetApplyHandleList(dto, HttpContext.RequestAborted);
  240. }
  241. #endregion
  242. }
  243. }