From c788847ab99a1c39207a7bb76e3f499e8285eab9 Mon Sep 17 00:00:00 2001 From: konbai <1527468660@qq.com> Date: Mon, 9 Jan 2023 00:33:05 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E7=A7=BB=E9=99=A4=20=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=B5=81=E4=BB=BB=E5=8A=A1=E7=AE=A1=E7=90=86=E5=B7=B2=E8=BF=87?= =?UTF-8?q?=E6=97=B6=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/workflow/WfTaskController.java | 23 ---- .../workflow/service/IWfTaskService.java | 16 --- .../service/impl/WfTaskServiceImpl.java | 118 ------------------ 3 files changed, 157 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfTaskController.java index 2874c42d..01345c33 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfTaskController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfTaskController.java @@ -4,7 +4,6 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.util.ObjectUtil; import com.ruoyi.common.core.domain.R; import com.ruoyi.workflow.domain.bo.WfTaskBo; -import com.ruoyi.workflow.domain.dto.WfNextDto; import com.ruoyi.workflow.service.IWfTaskService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -156,17 +155,6 @@ public class WfTaskController { return R.ok(); } - /** - * 获取下一节点 - */ - @Deprecated - @PostMapping(value = "/nextFlowNode") - @SaCheckPermission("workflow:process:query") - public R getNextFlowNode(@RequestBody WfTaskBo bo) { - WfNextDto wfNextDto = flowTaskService.getNextFlowNode(bo); - return wfNextDto != null ? R.ok(wfNextDto) : R.ok("流程已完结", null); - } - /** * 生成流程图 * @@ -198,15 +186,4 @@ public class WfTaskController { } } } - - /** - * 生成流程图 - * - * @param procInsId 任务ID - */ - @Deprecated - @RequestMapping("/flowViewer/{procInsId}") - public R getFlowViewer(@PathVariable("procInsId") String procInsId) { - return R.ok(flowTaskService.getFlowViewer(procInsId)); - } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfTaskService.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfTaskService.java index e5534fdb..55ed5cb7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfTaskService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfTaskService.java @@ -1,8 +1,6 @@ package com.ruoyi.workflow.service; import com.ruoyi.workflow.domain.bo.WfTaskBo; -import com.ruoyi.workflow.domain.dto.WfNextDto; -import com.ruoyi.workflow.domain.vo.WfViewerVo; import org.flowable.bpmn.model.UserTask; import org.flowable.engine.runtime.ProcessInstance; @@ -103,13 +101,6 @@ public interface IWfTaskService { */ InputStream diagram(String processId); - /** - * 获取流程执行过程 - * @param procInsId - * @return - */ - WfViewerVo getFlowViewer(String procInsId); - /** * 获取流程变量 * @param taskId 任务ID @@ -117,13 +108,6 @@ public interface IWfTaskService { */ Map getProcessVariables(String taskId); - /** - * 获取下一节点 - * @param bo 任务 - * @return - */ - WfNextDto getNextFlowNode(WfTaskBo bo); - /** * 启动第一个任务 * @param processInstance 流程实例 diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfTaskServiceImpl.java index 14b7e533..d3e205cb 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfTaskServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfTaskServiceImpl.java @@ -1,28 +1,21 @@ package com.ruoyi.workflow.service.impl; - import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.flowable.common.constant.ProcessConstants; import com.ruoyi.flowable.common.constant.TaskConstants; import com.ruoyi.flowable.common.enums.FlowComment; import com.ruoyi.flowable.factory.FlowServiceFactory; import com.ruoyi.flowable.flow.CustomProcessDiagramGenerator; -import com.ruoyi.flowable.flow.FindNextNodeUtil; import com.ruoyi.flowable.flow.FlowableUtils; import com.ruoyi.flowable.utils.ModelUtils; import com.ruoyi.flowable.utils.TaskUtils; -import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.workflow.domain.bo.WfTaskBo; -import com.ruoyi.workflow.domain.dto.WfNextDto; -import com.ruoyi.workflow.domain.vo.WfViewerVo; import com.ruoyi.workflow.service.IWfCopyService; import com.ruoyi.workflow.service.IWfTaskService; import lombok.RequiredArgsConstructor; @@ -36,7 +29,6 @@ import org.flowable.common.engine.api.FlowableObjectNotFoundException; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.ProcessEngineConfiguration; import org.flowable.engine.history.HistoricActivityInstance; -import org.flowable.engine.history.HistoricActivityInstanceQuery; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.Execution; @@ -63,8 +55,6 @@ public class WfTaskServiceImpl extends FlowServiceFactory implements IWfTaskServ private final ISysUserService sysUserService; - private final ISysRoleService sysRoleService; - private final IWfCopyService copyService; /** @@ -547,48 +537,6 @@ public class WfTaskServiceImpl extends FlowServiceFactory implements IWfTaskServ } - /** - * 获取流程执行过程 - * - * @param procInsId - * @return - */ - @Override - public WfViewerVo getFlowViewer(String procInsId) { - // 构建查询条件 - HistoricActivityInstanceQuery query = historyService.createHistoricActivityInstanceQuery() - .processInstanceId(procInsId); - List allActivityInstanceList = query.list(); - if (CollUtil.isEmpty(allActivityInstanceList)) { - return new WfViewerVo(); - } - // 获取流程发布Id信息 - String processDefinitionId = allActivityInstanceList.get(0).getProcessDefinitionId(); - BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); - // 查询所有已完成的元素 - List finishedElementList = allActivityInstanceList.stream() - .filter(item -> ObjectUtil.isNotNull(item.getEndTime())).collect(Collectors.toList()); - // 所有已完成的连线 - Set finishedSequenceFlowSet = new HashSet<>(); - // 所有已完成的任务节点 - Set finishedTaskSet = new HashSet<>(); - finishedElementList.forEach(item -> { - if (BpmnXMLConstants.ELEMENT_SEQUENCE_FLOW.equals(item.getActivityType())) { - finishedSequenceFlowSet.add(item.getActivityId()); - } else { - finishedTaskSet.add(item.getActivityId()); - } - }); - // 查询所有未结束的节点 - Set unfinishedTaskSet = allActivityInstanceList.stream() - .filter(item -> ObjectUtil.isNull(item.getEndTime())) - .map(HistoricActivityInstance::getActivityId) - .collect(Collectors.toSet()); - // DFS 查询未通过的元素集合 - Set rejectedSet = FlowableUtils.dfsFindRejects(bpmnModel, unfinishedTaskSet, finishedSequenceFlowSet, finishedTaskSet); - return new WfViewerVo(finishedTaskSet, finishedSequenceFlowSet, unfinishedTaskSet, rejectedSet); - } - /** * 获取流程变量 * @@ -608,72 +556,6 @@ public class WfTaskServiceImpl extends FlowServiceFactory implements IWfTaskServ return taskService.getVariables(taskId); } - /** - * 获取下一节点 - * - * @param bo 任务 - * @return - */ - @Override - public WfNextDto getNextFlowNode(WfTaskBo bo) { - // Step 1. 获取当前节点并找到下一步节点 - Task task = taskService.createTaskQuery().taskId(bo.getTaskId()).singleResult(); - WfNextDto nextDto = new WfNextDto(); - if (Objects.nonNull(task)) { - // Step 2. 获取当前流程所有流程变量(网关节点时需要校验表达式) - Map variables = taskService.getVariables(task.getId()); - List nextUserTask = FindNextNodeUtil.getNextUserTasks(repositoryService, task, variables); - if (CollectionUtils.isNotEmpty(nextUserTask)) { - for (UserTask userTask : nextUserTask) { - MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); - // 会签节点 - if (Objects.nonNull(multiInstance)) { - List list = sysUserService.selectUserList(new SysUser()); - - nextDto.setVars(ProcessConstants.PROCESS_MULTI_INSTANCE_USER); - nextDto.setType(ProcessConstants.PROCESS_MULTI_INSTANCE); - nextDto.setUserList(list); - } else { - - // 读取自定义节点属性 判断是否是否需要动态指定任务接收人员、组 - String dataType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_DATA_TYPE); - String userType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_USER_TYPE); - - if (ProcessConstants.DATA_TYPE.equals(dataType)) { - // 指定单个人员 - if (ProcessConstants.USER_TYPE_ASSIGNEE.equals(userType)) { - List list = sysUserService.selectUserList(new SysUser()); - - nextDto.setVars(ProcessConstants.PROCESS_APPROVAL); - nextDto.setType(ProcessConstants.USER_TYPE_ASSIGNEE); - nextDto.setUserList(list); - } - // 候选人员(多个) - if (ProcessConstants.USER_TYPE_USERS.equals(userType)) { - List list = sysUserService.selectUserList(new SysUser()); - - nextDto.setVars(ProcessConstants.PROCESS_APPROVAL); - nextDto.setType(ProcessConstants.USER_TYPE_USERS); - nextDto.setUserList(list); - } - // 候选组 - if (ProcessConstants.USER_TYPE_ROUPS.equals(userType)) { - List sysRoles = sysRoleService.selectRoleAll(); - - nextDto.setVars(ProcessConstants.PROCESS_APPROVAL); - nextDto.setType(ProcessConstants.USER_TYPE_ROUPS); - nextDto.setRoleList(sysRoles); - } - } - } - } - } else { - return null; - } - } - return nextDto; - } - /** * 启动第一个任务 * @param processInstance 流程实例