ApprovalTaskController.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package com.qqflow.engine.domain.flow.controller;
  2. import com.qqflow.engine.common.PageResult;
  3. import com.qqflow.engine.common.Result;
  4. import com.qqflow.engine.common.exception.BusinessException;
  5. import com.qqflow.engine.common.util.SecurityUtils;
  6. import com.qqflow.engine.config.security.LoginUser;
  7. import com.qqflow.engine.domain.flow.dto.ApprovalRecordDTO;
  8. import com.qqflow.engine.domain.flow.dto.ApprovalTaskDTO;
  9. import com.qqflow.engine.domain.flow.dto.ApproveTaskDTO;
  10. import com.qqflow.engine.domain.flow.dto.BatchTaskDTO;
  11. import com.qqflow.engine.domain.flow.dto.NextNodeDTO;
  12. import com.qqflow.engine.domain.flow.dto.TransferTaskDTO;
  13. import com.qqflow.engine.domain.flow.service.ApprovalTaskService;
  14. import com.qqflow.engine.domain.system.dto.UserDTO;
  15. import io.swagger.v3.oas.annotations.Operation;
  16. import io.swagger.v3.oas.annotations.tags.Tag;
  17. import jakarta.validation.Valid;
  18. import lombok.RequiredArgsConstructor;
  19. import org.springframework.web.bind.annotation.GetMapping;
  20. import org.springframework.web.bind.annotation.PathVariable;
  21. import org.springframework.web.bind.annotation.PostMapping;
  22. import org.springframework.web.bind.annotation.RequestBody;
  23. import org.springframework.web.bind.annotation.RequestMapping;
  24. import org.springframework.web.bind.annotation.RequestParam;
  25. import org.springframework.web.bind.annotation.RestController;
  26. import java.util.List;
  27. @RestController
  28. @RequestMapping("/flow/task")
  29. @RequiredArgsConstructor
  30. @Tag(name = "审批任务管理")
  31. public class ApprovalTaskController {
  32. private final ApprovalTaskService approvalTaskService;
  33. @GetMapping("/todo")
  34. @Operation(summary = "我的待办列表")
  35. public Result<PageResult<ApprovalTaskDTO>> todoList(
  36. @RequestParam(defaultValue = "1") Integer pageNum,
  37. @RequestParam(defaultValue = "10") Integer pageSize,
  38. @RequestParam(required = false) String processName,
  39. @RequestParam(required = false) String formFilters) {
  40. Long assigneeId = SecurityUtils.getUserId();
  41. String assigneeType = requireLoginUser().getUserType();
  42. return Result.ok(this.approvalTaskService.todoList(assigneeId, assigneeType, processName, formFilters, pageNum, pageSize));
  43. }
  44. @GetMapping("/handled")
  45. @Operation(summary = "我的已办列表")
  46. public Result<PageResult<ApprovalTaskDTO>> handledList(
  47. @RequestParam(defaultValue = "1") Integer pageNum,
  48. @RequestParam(defaultValue = "10") Integer pageSize,
  49. @RequestParam(required = false) String processName) {
  50. Long assigneeId = SecurityUtils.getUserId();
  51. String assigneeType = requireLoginUser().getUserType();
  52. return Result.ok(this.approvalTaskService.handledList(assigneeId, assigneeType, processName, pageNum, pageSize));
  53. }
  54. @GetMapping("/{taskId}/next-nodes")
  55. @Operation(summary = "获取当前任务的下游节点列表(条件节点选分支用)")
  56. public Result<List<NextNodeDTO>> nextNodes(@PathVariable Long taskId) {
  57. return Result.ok(this.approvalTaskService.getNextNodes(taskId));
  58. }
  59. @PostMapping("/{taskId}/approve")
  60. @Operation(summary = "审批通过")
  61. public Result<Void> approve(@PathVariable Long taskId, @RequestBody @Valid ApproveTaskDTO dto) {
  62. dto.setTaskId(taskId);
  63. this.approvalTaskService.approve(dto);
  64. return Result.ok();
  65. }
  66. @PostMapping("/{taskId}/reject")
  67. @Operation(summary = "审批拒绝")
  68. public Result<Void> reject(@PathVariable Long taskId, @RequestBody @Valid ApproveTaskDTO dto) {
  69. dto.setTaskId(taskId);
  70. this.approvalTaskService.reject(dto);
  71. return Result.ok();
  72. }
  73. @PostMapping("/batch-approve")
  74. @Operation(summary = "批量审批通过")
  75. public Result<Void> batchApprove(@RequestBody @Valid BatchTaskDTO dto) {
  76. this.approvalTaskService.batchApprove(dto);
  77. return Result.ok();
  78. }
  79. @PostMapping("/batch-reject")
  80. @Operation(summary = "批量审批拒绝")
  81. public Result<Void> batchReject(@RequestBody @Valid BatchTaskDTO dto) {
  82. this.approvalTaskService.batchReject(dto);
  83. return Result.ok();
  84. }
  85. @PostMapping("/{taskId}/return")
  86. @Operation(summary = "审批回退")
  87. public Result<Void> returnTask(@PathVariable Long taskId, @RequestBody @Valid ApproveTaskDTO dto) {
  88. dto.setTaskId(taskId);
  89. this.approvalTaskService.returnTask(dto);
  90. return Result.ok();
  91. }
  92. @PostMapping("/{taskId}/transfer")
  93. @Operation(summary = "任务转办")
  94. public Result<Void> transfer(@PathVariable Long taskId, @RequestBody @Valid TransferTaskDTO dto) {
  95. dto.setTaskId(taskId);
  96. this.approvalTaskService.transfer(dto);
  97. return Result.ok();
  98. }
  99. @PostMapping("/{taskId}/add-sign")
  100. @Operation(summary = "任务加签")
  101. public Result<Void> addSign(@PathVariable Long taskId, @RequestParam Long assigneeId) {
  102. this.approvalTaskService.addSign(taskId, assigneeId);
  103. return Result.ok();
  104. }
  105. @GetMapping("/history/{instanceId}")
  106. @Operation(summary = "审批历史记录")
  107. public Result<List<ApprovalRecordDTO>> history(@PathVariable Long instanceId) {
  108. return Result.ok(this.approvalTaskService.history(instanceId));
  109. }
  110. @GetMapping("/todo-count")
  111. @Operation(summary = "我的待办任务数")
  112. public Result<Long> todoCount() {
  113. Long assigneeId = SecurityUtils.getUserId();
  114. String assigneeType = requireLoginUser().getUserType();
  115. return Result.ok(this.approvalTaskService.todoCount(assigneeId, assigneeType));
  116. }
  117. @GetMapping("/cc")
  118. @Operation(summary = "我的抄送列表")
  119. public Result<PageResult<ApprovalTaskDTO>> ccList(
  120. @RequestParam(defaultValue = "1") Integer pageNum,
  121. @RequestParam(defaultValue = "10") Integer pageSize,
  122. @RequestParam(required = false) String processName) {
  123. Long assigneeId = SecurityUtils.getUserId();
  124. String assigneeType = requireLoginUser().getUserType();
  125. return Result.ok(this.approvalTaskService.ccList(assigneeId, assigneeType, processName, pageNum, pageSize));
  126. }
  127. @PostMapping("/cc/{taskId}/read")
  128. @Operation(summary = "标记抄送已读")
  129. public Result<Void> readCc(@PathVariable Long taskId) {
  130. this.approvalTaskService.readCc(taskId);
  131. return Result.ok();
  132. }
  133. @GetMapping("/{taskId}/transferable-users")
  134. @Operation(summary = "获取可转办/加签的用户列表")
  135. public Result<List<UserDTO>> transferableUsers(@PathVariable Long taskId) {
  136. return Result.ok(this.approvalTaskService.getTransferableUsers(taskId));
  137. }
  138. private LoginUser requireLoginUser() {
  139. LoginUser loginUser = SecurityUtils.getLoginUser();
  140. if (loginUser == null) {
  141. throw new BusinessException("未登录");
  142. }
  143. return loginUser;
  144. }
  145. }