Flowable Flowable显示流程图坐标和审批人
获取所有的审批节点
BpmnModel bpmnModel = bpmnModelService.getBpmnModelByProcessDefId(processInstance.getProcessDefinitionId());
// 获得所有流程定的节点信息
List<UserTask> userTasks = bpmnModelService.findUserTasksByBpmnModel(bpmnModel);
子方法
@Override
public List<UserTask> findUserTasksByBpmnModel(BpmnModel bpmnModel) {
List<UserTask> datas = new ArrayList<>();
List<Process> processes = bpmnModel.getProcesses();
processes.forEach(process -> {
List<UserTask> userTasks = process.findFlowElementsOfType(UserTask.class);
datas.addAll(userTasks);
});
return datas;
}
设置节点的坐标
GraphicInfo graphicInfo = bpmnModelService.getGraphicInfo(bpmnModel, userTask.getId());
ActivityVo vo = new ActivityVo();
vo.setId(userTask.getId());
vo.setX(graphicInfo.getX());
vo.setY(graphicInfo.getY());
vo.setWidth(graphicInfo.getWidth());
vo.setHeight(graphicInfo.getHeight());
vo.setDocumentation(userTask.getDocumentation());
vo.setName(userTask.getName());
vo.setProceInsId(processInstance.getId());
vo.setProceDefId(processInstance.getProcessDefinitionId());
vo.setTaskDefKey(userTask.getId());
设置节点的审批人
这里加以说明,由于我扩展了很多信息,写出来估计大家很难看懂,我就说一下思路,和相关代码
1、如果执行人的字段不为空
userTask.getAssignee() 这就是执行人的id或者工号 可以得到执行人的姓名
1.1、如果这个是工号或者id的话我们可以直接获取人员的信息
1.2、如果这个是一个表达式我们需要解析
解析表达式前提是你把变量放入流程实例变量中,比方说有一个金额${money>500}
那么你在流程实例的表达式中应该有一条这样的数据 key为money value为值的数据
public Object getValue(String processInstanceId, String exp) {
Expression expression = processEngineConfiguration.getExpressionManager().createExpression(exp);
ExecutionEntity executionEntity = (ExecutionEntity) runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).includeProcessVariables().singleResult();
return managementService.executeCommand(commandContext -> expression.getValue(executionEntity));
}
2、如果这个字段为空,那么就是候选人或者候选组
这个时候我们就得到候选人和候选组
2.1、得到候选人
List<String> candidateUsers = userTask.getCandidateUsers();
这个解析也是一样的,参考上面的解析方法
2.2、得到候选组
List<String> candidateGroups = userTask.getCandidateGroups();
通过候选人和候选组我们就可以得到审批人列表的名称,按照自己的方式获取就可以了。
这个解析也是一样的,参考上面的解析方法
3、当我们鼠标移上面的时候通过坐标可以定位出当前的任务节点,然后显示一个弹出层就可以了。
效果如下: