在正常的flowable就是显示当前节点 路径需要我们自己获取 特别是来回的驳回会导致节点混乱 这里主要就是如何正确的显示流程图
代码 1、生成图片
public byte[] createImage2(String processInstanceId) { //1.获取当前的流程实例 ProcessInstance processInstance runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); String processDefinitionId null; List String activeActivityIds null; //2.获取所有的历史轨迹对象 fhadmin.org List HistoricActivityInstance list historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId).list(); Map String, HistoricActivityInstance hisActivityMap new HashMap (); list.forEach(historicActivityInstance - { if (!hisActivityMap.containsKey(historicActivityInstance.getActivityId())) { hisActivityMap.put(historicActivityInstance.getActivityId(), historicActivityInstance); //3. 获取流程定义id和高亮的节点id if (processInstance ! null) { //3.1. 正在运行的流程实例 processDefinitionId processInstance.getProcessDefinitionId(); activeActivityIds runtimeService.getActiveActivityIds(processInstanceId); } else { //3.2. 已经结束的流程实例 HistoricProcessInstance historicProcessInstance historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); processDefinitionId historicProcessInstance.getProcessDefinitionId(); activeActivityIds new ArrayList (); List EndEvent endEvents bpmnModelService.findEndFlowElement(processDefinitionId); List String finalActiveActivityIds activeActivityIds; endEvents.forEach(endEvent - { if (hisActivityMap.containsKey(endEvent.getId())) { finalActiveActivityIds.add(endEvent.getId()); //4. 获取流程定义的所有节点信息 fhadmin.org List FlowNode flowNodes bpmnModelService.findFlowNodes(processDefinitionId); Map String, FlowNode activityMap flowNodes.stream().collect(Collectors.toMap(FlowNode::getId, flowNode - flowNode)); List String highLightedFlows new ArrayList (); //5. 递归得到高亮线 activeActivityIds.forEach(activeActivityId - this.getHighLightedFlows(activityMap, hisActivityMap, activeActivityId, highLightedFlows, activeActivityId)); //6. 获取bpmnModel对象 fhadmin.org BpmnModel bpmnModel bpmnModelService.getBpmnModelByProcessDefId(processDefinitionId); //7. 生成图片流 InputStream inputStream flowProcessDiagramGenerator.generateDiagram(bpmnModel, activeActivityIds, highLightedFlows); //8. 转化成byte便于网络传输 byte[] datas IoUtil.readInputStream(inputStream, image inputStream name return datas; }
递归获取高
private void getHighLightedFlows(Map String, FlowNode flowNodeMap, Map String, HistoricActivityInstance hisActivityMap, String activeActivityId, List String highLightedFlows, String oldActivityId) { FlowNode flowNode flowNodeMap.get(activeActivityId); List SequenceFlow incomingFlows flowNode.getIncomingFlows(); for (SequenceFlow sequenceFlow : incomingFlows) { String sourceRefId sequenceFlow.getSourceRef(); if (hisActivityMap.containsKey(sourceRefId) !oldActivityId.equals(sourceRefId)) { highLightedFlows.add(sequenceFlow.getId()); this.getHighLightedFlows(flowNodeMap, hisActivityMap, sourceRefId, highLightedFlows, oldActivityId); } else { //java fhadmin.org if (hisActivityMap.containsKey(sourceRefId)){ highLightedFlows.add(sequenceFlow.getId()); break; } } }
企业边缘应用面临的挑战 CDN是通过在全球范围内分布式地部署边缘服务器将各类互...
新的 域名 tech多少钱? tech域名 的注册价格,与其品相、含义有关。当然,也与...
为什么需要超时控制?请求时间过长,用户侧可能已经离开本页面了,服务端还在消...
境外服务器就是把服务器租用或者托管在国外的区域,境外服务器我们熟知的有美国...
随着数字经济的发展,CIO承担的风险也在不断增加。他们能否以不落窠臼的创新方式...
据Canalys报告,由于主要云服务提供商和技术渠道加大客户投入,2020年第四季度全...
产业互联网,是传统企业+互联网。这种全新的模式,可为消费者带来了更好的价值体验...
怎样制作 小程序 ?制作小程序,首先需要注册申请一个小程序。制作小程序,可以...
数字时代,创新的时代。万千开发者汇聚智慧,启迪梦想,不断推动创新发生。成立1...
背景 我们知道 如果在Kubernetes中支持GPU设备调度 需要做如下的工作 节点上安装...