Activiti6.0生成流程跟踪图,高亮显示
##实现的效果一
controller代码
@RequestMapping("viewProcessImg")
public void viewProcessImg(String processId, HttpServletResponse response) {
try {
byte[] processImage = activitiService.getProcessImage(processId);
OutputStream outputStream = response.getOutputStream();
InputStream in = new ByteArrayInputStream(processImage);
IOUtils.copy(in, outputStream);
} catch (Exception e) {
logger.error("viewProcessImg---- {}", ExceptionUtil.stackTraceText(e));
}
}
service代码
public byte[] getProcessImage(String processInstanceId) throws Exception {
// 获取历史流程实例
HistoricProcessInstance historicProcessInstance = queryHistoricProcessInstance(processInstanceId);
if (historicProcessInstance == null) {
throw new Exception();
} else {
// 获取流程定义
ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService
.getProcessDefinition(historicProcessInstance.getProcessDefinitionId());
// 获取流程历史中已执行节点,并按照节点在流程中执行先后顺序排序
List<HistoricActivityInstance> historicActivityInstanceList = historyService
.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId)
.orderByHistoricActivityInstanceId().desc().list();
// 已执行的节点ID集合
List<String> executedActivityIdList = new ArrayList<>();
@SuppressWarnings("unused") int index = 1;
logger.info("获取已经执行的节点ID");
for (HistoricActivityInstance activityInstance : historicActivityInstanceList) {
executedActivityIdList.add(activityInstance.getActivityId());
index++;
}
// 获取流程图图像字符流
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
//已执行flow的集和
List<String> executedFlowIdList = getHighLightedFlows(bpmnModel,historicActivityInstanceList);
ProcessDiagramGenerator processDiagramGenerator = processEngine.getProcessEngineConfiguration().getProcessDiagramGenerator();
InputStream imageStream = processDiagramGenerator.generateDiagram(bpmnModel, "png", executedActivityIdList,executedFlowIdList, "黑体","黑体","黑体",null,1.0);
byte[] buffer = new byte[imageStream.available()];
imageStream.read(buffer);
imageStream.close();
return buffer;
}
}
/**
* 获取已经流转的线
*
* @para