天天看点

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);
        }
    }