perf: 移除 工作流任务管理已过时接口
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String, Object> getProcessVariables(String taskId);
|
||||
|
||||
/**
|
||||
* 获取下一节点
|
||||
* @param bo 任务
|
||||
* @return
|
||||
*/
|
||||
WfNextDto getNextFlowNode(WfTaskBo bo);
|
||||
|
||||
/**
|
||||
* 启动第一个任务
|
||||
* @param processInstance 流程实例
|
||||
|
||||
@@ -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<HistoricActivityInstance> allActivityInstanceList = query.list();
|
||||
if (CollUtil.isEmpty(allActivityInstanceList)) {
|
||||
return new WfViewerVo();
|
||||
}
|
||||
// 获取流程发布Id信息
|
||||
String processDefinitionId = allActivityInstanceList.get(0).getProcessDefinitionId();
|
||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
|
||||
// 查询所有已完成的元素
|
||||
List<HistoricActivityInstance> finishedElementList = allActivityInstanceList.stream()
|
||||
.filter(item -> ObjectUtil.isNotNull(item.getEndTime())).collect(Collectors.toList());
|
||||
// 所有已完成的连线
|
||||
Set<String> finishedSequenceFlowSet = new HashSet<>();
|
||||
// 所有已完成的任务节点
|
||||
Set<String> finishedTaskSet = new HashSet<>();
|
||||
finishedElementList.forEach(item -> {
|
||||
if (BpmnXMLConstants.ELEMENT_SEQUENCE_FLOW.equals(item.getActivityType())) {
|
||||
finishedSequenceFlowSet.add(item.getActivityId());
|
||||
} else {
|
||||
finishedTaskSet.add(item.getActivityId());
|
||||
}
|
||||
});
|
||||
// 查询所有未结束的节点
|
||||
Set<String> unfinishedTaskSet = allActivityInstanceList.stream()
|
||||
.filter(item -> ObjectUtil.isNull(item.getEndTime()))
|
||||
.map(HistoricActivityInstance::getActivityId)
|
||||
.collect(Collectors.toSet());
|
||||
// DFS 查询未通过的元素集合
|
||||
Set<String> 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<String, Object> variables = taskService.getVariables(task.getId());
|
||||
List<UserTask> nextUserTask = FindNextNodeUtil.getNextUserTasks(repositoryService, task, variables);
|
||||
if (CollectionUtils.isNotEmpty(nextUserTask)) {
|
||||
for (UserTask userTask : nextUserTask) {
|
||||
MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics();
|
||||
// 会签节点
|
||||
if (Objects.nonNull(multiInstance)) {
|
||||
List<SysUser> 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<SysUser> 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<SysUser> 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<SysRole> sysRoles = sysRoleService.selectRoleAll();
|
||||
|
||||
nextDto.setVars(ProcessConstants.PROCESS_APPROVAL);
|
||||
nextDto.setType(ProcessConstants.USER_TYPE_ROUPS);
|
||||
nextDto.setRoleList(sysRoles);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return nextDto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动第一个任务
|
||||
* @param processInstance 流程实例
|
||||
|
||||
Reference in New Issue
Block a user