diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowTaskController.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowTaskController.java index 87a77a48..f2976d1c 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowTaskController.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowTaskController.java @@ -138,6 +138,13 @@ public class FlowTaskController { return AjaxResult.success(); } + @ApiOperation(value = "任务归还") + @PostMapping(value = "/delegate") + public AjaxResult resolveTask(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.resolveTask(flowTaskVo); + return AjaxResult.success(); + } + @ApiOperation(value = "转办任务") @PostMapping(value = "/assign") public AjaxResult assign(@RequestBody FlowTaskVo flowTaskVo) { @@ -145,6 +152,20 @@ public class FlowTaskController { return AjaxResult.success(); } + @PostMapping(value = "/addMultiInstanceExecution") + @ApiOperation(value = "多实例加签") + public AjaxResult addMultiInstanceExecution(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.addMultiInstanceExecution(flowTaskVo); + return AjaxResult.success("加签成功"); + } + + @PostMapping(value = "/deleteMultiInstanceExecution") + @ApiOperation(value = "多实例减签") + public AjaxResult deleteMultiInstanceExecution(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.deleteMultiInstanceExecution(flowTaskVo); + return AjaxResult.success("减签成功"); + } + @ApiOperation(value = "获取下一节点") @PostMapping(value = "/nextFlowNode") public AjaxResult getNextFlowNode(@RequestBody FlowTaskVo flowTaskVo) { @@ -203,22 +224,24 @@ public class FlowTaskController { /** * 流程节点信息 - * @param procInsId 流程实例id + * + * @param procInsId 流程实例id * @return */ @GetMapping("/flowXmlAndNode") - public AjaxResult flowXmlAndNode(@RequestParam(value = "procInsId",required = false) String procInsId, - @RequestParam(value = "deployId",required = false) String deployId){ - return flowTaskService.flowXmlAndNode(procInsId,deployId); + public AjaxResult flowXmlAndNode(@RequestParam(value = "procInsId", required = false) String procInsId, + @RequestParam(value = "deployId", required = false) String deployId) { + return flowTaskService.flowXmlAndNode(procInsId, deployId); } /** * 流程节点表单 - * @param taskId 流程任务编号 + * + * @param taskId 流程任务编号 * @return */ @GetMapping("/flowTaskForm") - public AjaxResult flowTaskForm(@RequestParam(value = "taskId",required = false) String taskId) throws Exception { + public AjaxResult flowTaskForm(@RequestParam(value = "taskId", required = false) String taskId) throws Exception { return flowTaskService.flowTaskForm(taskId); } diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/vo/FlowTaskVo.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/vo/FlowTaskVo.java index 6e240d49..60fe1146 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/vo/FlowTaskVo.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/domain/vo/FlowTaskVo.java @@ -33,6 +33,14 @@ public class FlowTaskVo { private String targetKey; private String deploymentId; + @ApiModelProperty("流程环节定义ID") + private String defId; + + @ApiModelProperty("子执行流ID") + private String currentChildExecutionId; + + @ApiModelProperty("子执行流是否已执行") + private Boolean flag; @ApiModelProperty("流程变量信息") private Map variables; diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IFlowTaskService.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IFlowTaskService.java index 87817efa..74534ae1 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IFlowTaskService.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IFlowTaskService.java @@ -72,6 +72,13 @@ public interface IFlowTaskService { */ void delegateTask(FlowTaskVo flowTaskVo); + /** + * 任务归还 + * + * @param flowTaskVo 请求实体参数 + */ + void resolveTask(FlowTaskVo flowTaskVo); + /** * 转办任务 @@ -80,6 +87,19 @@ public interface IFlowTaskService { */ void assignTask(FlowTaskVo flowTaskVo); + + /** + * 多实例加签 + * @param flowTaskVo + */ + void addMultiInstanceExecution(FlowTaskVo flowTaskVo); + + /** + * 多实例减签 + * @param flowTaskVo + */ + void deleteMultiInstanceExecution(FlowTaskVo flowTaskVo); + /** * 我发起的流程 * @param queryVo 请求参数 diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java index e69f11ff..1d940795 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java @@ -55,7 +55,8 @@ import org.flowable.task.api.Task; import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstanceQuery; -import org.flowable.task.service.impl.persistence.entity.TaskEntityImpl; +import org.flowable.engine.impl.cmd.AddMultiInstanceExecutionCmd; +import org.flowable.engine.impl.cmd.DeleteMultiInstanceExecutionCmd; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -416,6 +417,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask /** * 认领/签收任务 + * 认领以后,这个用户就会成为任务的执行人,任务会从其他成员的任务列表中消失 * * @param flowTaskVo 请求实体参数 */ @@ -438,6 +440,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask /** * 委派任务 + * 任务委派只是委派人将当前的任务交给被委派人进行审批,处理任务后又重新回到委派人身上。 * * @param flowTaskVo 请求实体参数 */ @@ -447,16 +450,58 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask taskService.delegateTask(flowTaskVo.getTaskId(), flowTaskVo.getAssignee()); } + /** + * 任务归还 + * 被委派人完成任务之后,将任务归还委派人 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void resolveTask(FlowTaskVo flowTaskVo) { + taskService.resolveTask(flowTaskVo.getTaskId()); + } + /** * 转办任务 + * 直接将办理人换成别人,这时任务的拥有者不再是转办人 * * @param flowTaskVo 请求实体参数 */ @Override @Transactional(rollbackFor = Exception.class) public void assignTask(FlowTaskVo flowTaskVo) { - taskService.setAssignee(flowTaskVo.getTaskId(), flowTaskVo.getComment()); + // 直接转派就可以覆盖掉之前的 + taskService.setAssignee(flowTaskVo.getTaskId(), flowTaskVo.getAssignee()); +// // 删除指派人重新指派 +// taskService.deleteCandidateUser(flowTaskVo.getTaskId(),flowTaskVo.getAssignee()); +// taskService.addCandidateUser(flowTaskVo.getTaskId(),flowTaskVo.getAssignee()); +// // 如果要查询转给他人处理的任务,可以同时将OWNER进行设置: +// taskService.setOwner(flowTaskVo.getTaskId(), flowTaskVo.getAssignee()); + + } + + /** + * 多实例加签 + * act_ru_task、act_ru_identitylink各生成一条记录 + * + * @param flowTaskVo + */ + @Override + public void addMultiInstanceExecution(FlowTaskVo flowTaskVo) { + managementService.executeCommand(new AddMultiInstanceExecutionCmd(flowTaskVo.getDefId(), flowTaskVo.getInstanceId(), flowTaskVo.getVariables())); + } + + /** + * 多实例减签 + * act_ru_task减1、act_ru_identitylink不变 + * + * @param flowTaskVo + */ + @Override + public void deleteMultiInstanceExecution(FlowTaskVo flowTaskVo) { + managementService.executeCommand(new DeleteMultiInstanceExecutionCmd(flowTaskVo.getCurrentChildExecutionId(), flowTaskVo.getFlag())); } /** @@ -518,6 +563,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask /** * 取消申请 * 目前实现方式: 直接将当前流程变更为已完成 + * * @param flowTaskVo * @return */ @@ -529,8 +575,8 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask } // 获取当前流程实例 ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() - .processInstanceId(flowTaskVo.getInstanceId()) - .singleResult(); + .processInstanceId(flowTaskVo.getInstanceId()) + .singleResult(); BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId()); if (Objects.nonNull(bpmnModel)) { Process process = bpmnModel.getMainProcess(); @@ -544,7 +590,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask // StringUtils.isBlank(flowTaskVo.getComment()) ? "取消申请" : flowTaskVo.getComment()); // 获取当前流程最后一个节点 String endId = endNodes.get(0).getId(); - List executions = runtimeService.createExecutionQuery() + List executions = runtimeService.createExecutionQuery() .parentId(processInstance.getProcessInstanceId()).list(); List executionIds = new ArrayList<>(); executions.forEach(execution -> executionIds.add(execution.getId()));