`
m17185082163
  • 浏览: 29895 次
文章分类
社区版块
存档分类
最新评论

flowable 走过的流程图节点描红线

 
阅读更多

在正常的flowable就是显示当前节点,路径需要我们自己获取,特别是来回的驳回会导致节点混乱,这里主要就是如何正确的显示流程图

效果:

已经结束的流程

  正在执行的流程

 代码:1、生成图片

// 源码 www.1b23.com
public byte[] createImage2(String processInstanceId) {
        //1.获取当前的流程实例
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
        String processDefinitionId = null;
        List<String> activeActivityIds = null;
        //2.获取所有的历史轨迹对象
        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. 获取流程定义的所有节点信息
        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对象
        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;
    }

 

递归获取高

//from www.fhadmin.cn
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 {
 
          if (hisActivityMap.containsKey(sourceRefId)){
              highLightedFlows.add(sequenceFlow.getId());
          }
          break; 
} } }

 

 

分享到:
评论

相关推荐

    flowable高亮流程已执行节点及连线.txt

    flowable高亮流程已执行节点及连线,包含6.4.1版本以及6.4.1之前版本的不同处理方法

    Flowable深入浅出-13 Flowable-BPMN操作流程之流程进展查看之流程图

    Flowable深入浅出-13 Flowable-BPMN操作流程之流程进展查看之流程图,欢迎在我的专栏查看该文章(第13篇),专栏地址:https://blog.csdn.net/houyj1986/column/info/31755

    vue使用flowable绘制流程图.docx

    总结来说,使用Vue结合`workflow-bpmn-modeler`库绘制Flowable流程图的步骤包括: 1. 创建Vue 2项目,并安装`workflow-bpmn-modeler`库。 2. 在Vue组件中注册并使用`bpmnModeler`组件,传递必要的数据属性。 3. ...

    流程定义更新版本(插入节点、删除节点、修改节点、删除节点恢复)

    首先,"插入节点"是指在流程图中增加新的步骤或决策点。以前的版本仅允许在流程的末尾添加节点,这限制了流程设计的灵活性。现在,更新后的版本允许用户在已选择的节点前或后插入新节点,这样可以根据实际需求更自由...

    SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化项目

    SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解) 博客地址:https://yangyongli.blog.csdn.net/article/details/132719594

    Flowable深入浅出-14 Flowable-BPMN操作流程之任务完成

    Flowable深入浅出-14 Flowable-BPMN操作流程之任务完成,欢迎进入我的专栏第14节查看,专栏地址:https://blog.csdn.net/houyj1986/column/info/31755

    flowable-engine-flowable-6.7.2.tar.gz

    12. **流程可视化**:Flowable提供了强大的流程图可视化工具,可直观查看和编辑流程定义。 13. **工作流引擎的调度**:Flowable Engine包含一个调度器,可以处理定时任务和延迟事件。 14. **多租户支持**:...

    Fixflow内部子流程subProcess使用

    在主流程中引用子流程时,只需在主流程图中添加一个子流程节点,并将其与子流程文件关联。通过这种方式,主流程可以在运行时调用子流程实例,执行相应的业务逻辑。在FixFlow中,可以通过设置子流程节点的属性,如...

    activiti画图工具

    Flowable支持BPMN 2.0标准,这使得创建的流程图具有广泛的兼容性和可扩展性。 Activiti是另一个知名的工作流引擎,曾经在社区中广受欢迎。Flowable是在Activiti项目停滞不前后由其核心开发者创立的,因此两者之间...

    本项目基于vue、antdesignvue和bpmn.io@7.0,实现flowable的modeler流程设计器.zip

    在本项目中,bpmn.io@7.0 版本被用来创建和编辑Flowable的流程图,用户可以通过直观的图形界面设计复杂的业务流程。 4. **Flowable Modeler**: Flowable Modeler是Flowable项目的一部分,它提供了一个可视化的...

    Flowable-BPMN操作流程部署启动源码

    这个文件包含了流程的各个活动、任务、决策点等,并且可以包含流程图的布局信息。 2. **加载流程定义**: 将流程定义文件读入内存,然后通过Flowable提供的API进行部署。这通常涉及到`ProcessEngine`的`...

    Flowable深入浅出-15 Flowable-BPMN操作流程之排他网关

    Flowable深入浅出-15 Flowable-BPMN操作流程之排他网关,欢迎进入我的专栏第15节查看,专栏地址:https://blog.csdn.net/houyj1986/column/info/31755

    flowable-bpmn---idea的插件--超级好用

    安装完成后,开发者可以在IDEA内部直接创建和编辑Flowable BPMN流程图,而无需切换到专门的流程设计工具。这大大提高了开发效率,减少了在不同工具间切换的时间成本。 Flowable BPMN插件提供了丰富的图形元素,包括...

    工作流中的回退业务实现

    实现回退业务的方式有两种主要策略:一种是通过在流程定义阶段显式绘制回退线,虽然这可能导致流程图变得复杂,但清晰明了,易于实现;另一种是隐式实现,这种方式可能更加灵活,但可能需要更复杂的逻辑来处理回退。...

    流程引擎(Flowable+Activiti)

    在本压缩包中,我们包含了两个知名的流程引擎——Flowable 6.4.2和Activiti 6.0。这两个引擎都是基于Java的企业级工作流引擎,广泛应用于BPM(Business Process Management)系统。 Flowable是一个高度灵活且可扩展...

    Flowable 请假流程 demo 示例

    Flowable 是一个强大的开源工作流和业务自动化引擎,它提供了高度灵活的业务流程管理(BPM)和案例管理(Case Management)解决方案。这个"Flowable 请假流程 demo 示例"是用于展示如何使用 Flowable 实现一个典型的...

    flowable v6.4.2版本中文文档

    Flowable V6.4.2版本是针对企业级工作流管理的一个强大工具,它是一个用Java语言开发的轻量级业务流程引擎。该版本的中文文档对于中国开发者来说尤其重要,因为它提供了详尽的说明,使得理解并使用Flowable变得更加...

    enterprise-flowable:工作流,包含:单人审批、多人审批、流程分支、指定退回、流程图展示

    通过BPMN 2.0标准,流程图能清晰地表达各个任务、决策点、分支和连接,方便团队理解和协作。 8. **Flowable核心概念**: - **流程定义(Process Definition)**:描述了一个流程的结构,包括任务、事件、网关等。 ...

    springboot-flowable-modeler快速开发工作流, 在线流程设计器

    通过这个在线流程设计器,用户可以拖拽元素创建流程图,定义任务、事件和转移规则。同时,Flowable引擎会自动解析这些模型并执行相应的流程实例。此外,Flowable还支持流程审计、任务管理和监控,有助于企业优化业务...

    基于若依开源框架集成钉钉与flowable(一体化人事流程系统)

    在本文中,我们将深入探讨如何基于若依开源框架集成钉钉与Flowable,构建一个高效的一体化人事流程系统。若依(RuoYi)是一个流行的企业级Java开源框架,设计用于快速开发轻量级管理系统。钉钉是阿里巴巴集团推出的...

Global site tag (gtag.js) - Google Analytics