驳回流程后,可能存在某一阶段的历史记录,在生成高亮的详情图时,就会把下一步的给渲染了,需要跳过那些被驳回的流程
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);
}
}