天天看點

ACTIVITI5.22駁回後高亮顯示

駁回流程後,可能存在某一階段的曆史記錄,在生成高亮的詳情圖時,就會把下一步的給渲染了,需要跳過那些被駁回的流程

public void queryProPlan(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String processInstanceId = request.getParameter("processInstanceId");
        //擷取曆史流程執行個體
        HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
        //擷取流程圖
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
        ProcessEngineConfiguration processEngineConfiguration = processEngine.getProcessEngineConfiguration();
        Context.setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration);
        ProcessDiagramGenerator diagramGenerator = processEngineConfiguration.getProcessDiagramGenerator();
        ProcessDefinitionEntity definitionEntity = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processInstance.getProcessDefinitionId());
        List<HistoricActivityInstance> highLightedActivitList = historyService.createHistoricActivityInstanceQuery()
                .processInstanceId(processInstanceId).list();
        //高亮環節id集合
        List<String> highLightedActivitis = new ArrayList<String>();
        //高亮線路id集合
        List<String> highLightedFlows = getHighLightedFlows(definitionEntity, highLightedActivitList);
        //擷取流程順序,找到目前流程的activityId
        String activityId = highLightedActivitList.stream().sorted(Comparator.comparing(HistoricActivityInstance::getStartTime).reversed())
                .collect(Collectors.toList()).get(0).getActivityId();

        for (HistoricActivityInstance tempActivity : highLightedActivitList) {
            highLightedActivitis.add(tempActivity.getActivityId());
            //目前流程後面的步驟不高亮顯示
            if (activityId.equals(tempActivity.getActivityId())) {
                break;
            }
        }
        //中文顯示的是口口口,設定字型就好了
        InputStream imageStream = diagramGenerator.generateDiagram(bpmnModel, "png", highLightedActivitis, highLightedFlows, "宋體", "宋體", "宋體", null, 1.0);

        //單獨傳回流程圖,不高亮顯示
//        InputStream imageStream = diagramGenerator.generatePngDiagram(bpmnModel);
        // 輸出資源内容到相應對象
        byte[] b = new byte[1024];
        int len;
        while ((len = imageStream.read(b, 0, 1024)) != -1) {
            response.getOutputStream().write(b, 0, len);
        }
    }