Commit e931414b55817aed617a7ffca7538fd1f9315169
1 parent
8a10568b
实现流程任务的审批功能的 API 接口
Showing
8 changed files
with
80 additions
and
54 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java
| @@ -42,17 +42,18 @@ public class BpmTaskController { | @@ -42,17 +42,18 @@ public class BpmTaskController { | ||
| 42 | return success(taskService.getDoneTaskPage(getLoginUserId(), pageVO)); | 42 | return success(taskService.getDoneTaskPage(getLoginUserId(), pageVO)); |
| 43 | } | 43 | } |
| 44 | 44 | ||
| 45 | + @PutMapping("/complete") | ||
| 46 | + @ApiOperation(value = "完成任务", notes = "审批通过 or 不通过") | ||
| 47 | + public CommonResult<Boolean> completeTask(@Valid @RequestBody BpmTaskCompleteReqVO reqVO) { | ||
| 48 | + taskService.completeTask(reqVO); | ||
| 49 | + return success(true); | ||
| 50 | + } | ||
| 51 | + | ||
| 45 | @PostMapping("/task-steps") | 52 | @PostMapping("/task-steps") |
| 46 | public CommonResult<TaskHandleVO> getTaskSteps(@RequestBody TaskQueryReqVO taskQuery) { | 53 | public CommonResult<TaskHandleVO> getTaskSteps(@RequestBody TaskQueryReqVO taskQuery) { |
| 47 | return success(taskService.getTaskSteps(taskQuery)); | 54 | return success(taskService.getTaskSteps(taskQuery)); |
| 48 | } | 55 | } |
| 49 | 56 | ||
| 50 | - @PostMapping("/complete") | ||
| 51 | - public CommonResult<Boolean> complete(@RequestBody TaskReqVO taskReq) { | ||
| 52 | - taskService.completeTask(taskReq); | ||
| 53 | - return success(true); | ||
| 54 | - } | ||
| 55 | - | ||
| 56 | @GetMapping("/process/history-steps") | 57 | @GetMapping("/process/history-steps") |
| 57 | public CommonResult<List<TaskStepVO>> getHistorySteps(@RequestParam("id") String processInstanceId) { | 58 | public CommonResult<List<TaskStepVO>> getHistorySteps(@RequestParam("id") String processInstanceId) { |
| 58 | return success(taskService.getHistorySteps(processInstanceId)); | 59 | return success(taskService.getHistorySteps(processInstanceId)); |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskCompleteReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +import javax.validation.constraints.NotEmpty; | ||
| 10 | +import javax.validation.constraints.NotNull; | ||
| 11 | +import java.util.Map; | ||
| 12 | + | ||
| 13 | +@ApiModel("流程任务的 Done 已办的分页 Request VO") | ||
| 14 | +@Data | ||
| 15 | +public class BpmTaskCompleteReqVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "任务编号", required = true, example = "1024") | ||
| 18 | + @NotEmpty(message = "任务编号不能为空") | ||
| 19 | + private String id; | ||
| 20 | + | ||
| 21 | + @ApiModelProperty(value = "是否通过", required = true, example = "true", notes = "true 通过;false 不通过") | ||
| 22 | + @NotNull(message = "是否通过不能为空") | ||
| 23 | + private Boolean pass; | ||
| 24 | + | ||
| 25 | + @ApiModelProperty(value = "审批意见", required = true, example = "不错不错!") | ||
| 26 | + @NotEmpty(message = "审批意见不能为空") | ||
| 27 | + private String comment; | ||
| 28 | + | ||
| 29 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/TaskReqVO.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task; | ||
| 2 | - | ||
| 3 | -import lombok.Data; | ||
| 4 | -import lombok.ToString; | ||
| 5 | - | ||
| 6 | -import java.util.Map; | ||
| 7 | - | ||
| 8 | -@Data | ||
| 9 | -@ToString | ||
| 10 | -public class TaskReqVO { | ||
| 11 | - | ||
| 12 | - private String taskId; | ||
| 13 | - | ||
| 14 | - private Map<String,Object> variables; | ||
| 15 | - | ||
| 16 | - private String comment; | ||
| 17 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java
| @@ -33,7 +33,11 @@ public interface BpmErrorCodeConstants { | @@ -33,7 +33,11 @@ public interface BpmErrorCodeConstants { | ||
| 33 | ErrorCode PROCESS_DEFINITION_IS_SUSPENDED = new ErrorCode(1009003002, "流程定义处于挂起状态"); | 33 | ErrorCode PROCESS_DEFINITION_IS_SUSPENDED = new ErrorCode(1009003002, "流程定义处于挂起状态"); |
| 34 | 34 | ||
| 35 | // ========== 流程实例 1-009-004-000 ========== | 35 | // ========== 流程实例 1-009-004-000 ========== |
| 36 | - ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS = new ErrorCode(1009004000, "流程取消失败,流程不处于运行中"); | 36 | + ErrorCode PROCESS_INSTANCE_NOT_EXISTS = new ErrorCode(1009004000, "流程实例不存在"); |
| 37 | + ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS = new ErrorCode(1009004001, "流程取消失败,流程不处于运行中"); | ||
| 38 | + | ||
| 39 | + // ========== 流程实例 1-009-005-000 ========== | ||
| 40 | + ErrorCode TASK_COMPLETE_FAIL_NOT_EXISTS = new ErrorCode(1009004000, "审批任务失败,原因:该任务不处于未审批"); | ||
| 37 | 41 | ||
| 38 | // ========== 动态表单模块 1-009-010-000 ========== | 42 | // ========== 动态表单模块 1-009-010-000 ========== |
| 39 | ErrorCode FORM_NOT_EXISTS = new ErrorCode(1009010000, "动态表单不存在"); | 43 | ErrorCode FORM_NOT_EXISTS = new ErrorCode(1009010000, "动态表单不存在"); |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java
| @@ -48,6 +48,14 @@ public interface BpmProcessInstanceService { | @@ -48,6 +48,14 @@ public interface BpmProcessInstanceService { | ||
| 48 | @Valid BpmProcessInstanceMyPageReqVO pageReqVO); | 48 | @Valid BpmProcessInstanceMyPageReqVO pageReqVO); |
| 49 | 49 | ||
| 50 | /** | 50 | /** |
| 51 | + * 获得流程实例 | ||
| 52 | + * | ||
| 53 | + * @param id 流程实例的编号 | ||
| 54 | + * @return 流程实例 | ||
| 55 | + */ | ||
| 56 | + ProcessInstance getProcessInstance(String id); | ||
| 57 | + | ||
| 58 | + /** | ||
| 51 | * 获得流程实例列表 | 59 | * 获得流程实例列表 |
| 52 | * | 60 | * |
| 53 | * @param ids 流程实例的编号集合 | 61 | * @param ids 流程实例的编号集合 |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java
| @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 5 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 5 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 6 | import org.activiti.engine.task.Task; | 6 | import org.activiti.engine.task.Task; |
| 7 | 7 | ||
| 8 | +import javax.validation.Valid; | ||
| 8 | import java.util.List; | 9 | import java.util.List; |
| 9 | import java.util.Map; | 10 | import java.util.Map; |
| 10 | 11 | ||
| @@ -70,29 +71,24 @@ public interface BpmTaskService { | @@ -70,29 +71,24 @@ public interface BpmTaskService { | ||
| 70 | void updateTaskAssign(String id, Long userId); | 71 | void updateTaskAssign(String id, Long userId); |
| 71 | 72 | ||
| 72 | /** | 73 | /** |
| 73 | - * 签收任务 | 74 | + * 完成任务(审批通过 / 不通过) |
| 74 | * | 75 | * |
| 75 | - * @param id 任务编号 | 76 | + * @param taskReq 完成请求 |
| 76 | */ | 77 | */ |
| 77 | - void claimTask(String id); | ||
| 78 | - | ||
| 79 | - /** | ||
| 80 | - * 工作流,完成 userTask, 完成用户任务 一般传入参数 1。是否同意(variables). 2. 评论(comment) | ||
| 81 | - * variables 变量名 和 评论 由前台传入 | ||
| 82 | - * @param taskReq 任务参数 | ||
| 83 | - */ | ||
| 84 | - void completeTask(TaskReqVO taskReq); | 78 | + void completeTask(@Valid BpmTaskCompleteReqVO taskReq); |
| 85 | 79 | ||
| 86 | /** | 80 | /** |
| 87 | * 根据任务id, 查询已经完成的用户任务,未完成的用户任务 | 81 | * 根据任务id, 查询已经完成的用户任务,未完成的用户任务 |
| 88 | * @param taskQuery 查询参数 一般 taskId | 82 | * @param taskQuery 查询参数 一般 taskId |
| 89 | */ | 83 | */ |
| 84 | + @Deprecated | ||
| 90 | TaskHandleVO getTaskSteps(TaskQueryReqVO taskQuery); | 85 | TaskHandleVO getTaskSteps(TaskQueryReqVO taskQuery); |
| 91 | 86 | ||
| 92 | /** | 87 | /** |
| 93 | * 根据流程实例id, 查询历史用户任务,包括已完成,未完成 | 88 | * 根据流程实例id, 查询历史用户任务,包括已完成,未完成 |
| 94 | * @param processInstanceId 流程实例id | 89 | * @param processInstanceId 流程实例id |
| 95 | */ | 90 | */ |
| 91 | + @Deprecated | ||
| 96 | List<TaskStepVO> getHistorySteps(String processInstanceId); | 92 | List<TaskStepVO> getHistorySteps(String processInstanceId); |
| 97 | 93 | ||
| 98 | /** | 94 | /** |
| @@ -101,4 +97,5 @@ public interface BpmTaskService { | @@ -101,4 +97,5 @@ public interface BpmTaskService { | ||
| 101 | * @return {@link FileResp} 返回文件 | 97 | * @return {@link FileResp} 返回文件 |
| 102 | */ | 98 | */ |
| 103 | FileResp getHighlightImg(String processInstanceId); | 99 | FileResp getHighlightImg(String processInstanceId); |
| 100 | + | ||
| 104 | } | 101 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java
| @@ -166,13 +166,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -166,13 +166,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 166 | return runtimeService.createProcessInstanceQuery().processInstanceIds(ids).list(); | 166 | return runtimeService.createProcessInstanceQuery().processInstanceIds(ids).list(); |
| 167 | } | 167 | } |
| 168 | 168 | ||
| 169 | - /** | ||
| 170 | - * 获得流程实例 | ||
| 171 | - * | ||
| 172 | - * @param id 流程实例的编号 | ||
| 173 | - * @return 流程实例 | ||
| 174 | - */ | ||
| 175 | - private ProcessInstance getProcessInstance(String id) { | 169 | + @Override |
| 170 | + public ProcessInstance getProcessInstance(String id) { | ||
| 176 | return runtimeService.createProcessInstanceQuery().processInstanceId(id).singleResult(); | 171 | return runtimeService.createProcessInstanceQuery().processInstanceId(id).singleResult(); |
| 177 | } | 172 | } |
| 178 | 173 |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java
| @@ -41,7 +41,7 @@ import java.io.IOException; | @@ -41,7 +41,7 @@ import java.io.IOException; | ||
| 41 | import java.io.InputStream; | 41 | import java.io.InputStream; |
| 42 | import java.util.*; | 42 | import java.util.*; |
| 43 | 43 | ||
| 44 | -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.HIGHLIGHT_IMG_ERROR; | 44 | +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; |
| 45 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 45 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 46 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | 46 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| 47 | 47 | ||
| @@ -157,20 +157,24 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -157,20 +157,24 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | @Override | 159 | @Override |
| 160 | - public void claimTask(String id) { | 160 | + @Transactional(rollbackFor = Exception.class) |
| 161 | + public void completeTask(BpmTaskCompleteReqVO reqVO) { | ||
| 162 | + // 校验任务存在 | ||
| 163 | + Task task = getTask(reqVO.getId()); | ||
| 164 | + if (task == null) { | ||
| 165 | + throw exception(TASK_COMPLETE_FAIL_NOT_EXISTS); | ||
| 166 | + } | ||
| 167 | + // 校验流程实例存在 | ||
| 168 | + ProcessInstance instance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); | ||
| 169 | + if (instance == null) { | ||
| 170 | + throw exception(PROCESS_INSTANCE_NOT_EXISTS); | ||
| 171 | + } | ||
| 161 | 172 | ||
| 162 | - } | 173 | + // 完成(审批)任务 |
| 174 | + taskService.complete(task.getId(), instance.getProcessVariables()); | ||
| 163 | 175 | ||
| 164 | - @Override | ||
| 165 | - @Transactional | ||
| 166 | - public void completeTask(TaskReqVO taskReq) { | ||
| 167 | -// final Task task = taskRuntime.task(taskReq.getTaskId()); | ||
| 168 | -// | ||
| 169 | -// taskService.addComment(taskReq.getTaskId(), task.getProcessInstanceId(), taskReq.getComment()); | ||
| 170 | -// | ||
| 171 | -// taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskReq.getTaskId()) | ||
| 172 | -// .withVariables(taskReq.getVariables()) | ||
| 173 | -// .build()); | 176 | + // TODO 芋艿:添加评论 |
| 177 | +// taskService.addComment(task.getId(), task.getProcessInstanceId(), reqVO.getComment()); | ||
| 174 | } | 178 | } |
| 175 | 179 | ||
| 176 | @Override | 180 | @Override |
| @@ -347,4 +351,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -347,4 +351,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 347 | } | 351 | } |
| 348 | return highLightedFlowIds; | 352 | return highLightedFlowIds; |
| 349 | } | 353 | } |
| 354 | + | ||
| 355 | + private Task getTask(String id) { | ||
| 356 | + return taskService.createTaskQuery().taskId(id).singleResult(); | ||
| 357 | + } | ||
| 358 | + | ||
| 350 | } | 359 | } |