天天看點

工作流實戰_11_flowable 流程執行個體 跟蹤流程

項目位址 ​​https://gitee.com/lwj/flowable.git​​
代碼分支 flowable-base
視訊講解位址 ​​https://space.bilibili.com/485524575/channel/detail?cid=94579​​
使用者名 密碼
0000001 test
0000002 test
0000003 test
0000004 test

文章目錄

  • ​​1. 示範​​
  • ​​2. 代碼分享​​

1. 示範

工作流實戰_11_flowable 流程執行個體 跟蹤流程

2. 代碼分享

public byte[] createImage(String processInstanceId) {
        //1.擷取目前的流程執行個體
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
        String processDefinitionId = null;
        List<String> activeActivityIds = new ArrayList<>();
        List<String> highLightedFlows = new ArrayList<>();
        //2.擷取所有的曆史軌迹線對象
        List<HistoricActivityInstance> historicSquenceFlows = historyService.createHistoricActivityInstanceQuery()
                .processInstanceId(processInstanceId).activityType(BpmnXMLConstants.ELEMENT_SEQUENCE_FLOW).list();
        historicSquenceFlows.forEach(historicActivityInstance -> highLightedFlows.add(historicActivityInstance.getActivityId()));
        //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();
            //3.3. 擷取結束節點清單
            List<HistoricActivityInstance> historicEnds = historyService.createHistoricActivityInstanceQuery()
                    .processInstanceId(processInstanceId).activityType(BpmnXMLConstants.ELEMENT_EVENT_END).list();
            List<String> finalActiveActivityIds = activeActivityIds;
            historicEnds.forEach(historicActivityInstance -> finalActiveActivityIds.add(historicActivityInstance.getActivityId()));
        }
        //4. 擷取bpmnModel對象
        BpmnModel bpmnModel = flowableBpmnModelService.getBpmnModelByProcessDefId(processDefinitionId);
        //5. 生成圖檔流
        InputStream inputStream = flowProcessDiagramGenerator.generateDiagram(bpmnModel, activeActivityIds, highLightedFlows);
        //6. 轉化成byte便于網絡傳輸
        byte[] datas = IoUtil.readInputStream(inputStream, "image inputStream name");
        return datas;
    }