駁回流程後,可能存在某一階段的曆史記錄,在生成高亮的詳情圖時,就會把下一步的給渲染了,需要跳過那些被駁回的流程
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);
}
}