@RequestMapping ( "/diagram/{processId}" )
public void genProcessDiagram ( HttpServletResponse response, @PathVariable ( "processId" ) String processId) { InputStream inputStream = flowTaskService. diagram ( processId) ; OutputStream os = null ; BufferedImage image = null ; try { image = ImageIO . read ( inputStream) ; response. setContentType ( "image/png" ) ; os = response. getOutputStream ( ) ; if ( image != null ) { ImageIO . write ( image, "png" , os) ; } } catch ( Exception e) { e. printStackTrace ( ) ; } finally { try { if ( os != null ) { os. flush ( ) ; os. close ( ) ; } } catch ( IOException e) { e. printStackTrace ( ) ; } }
}
public InputStream diagram ( String processId) { String processDefinitionId; ProcessInstance processInstance = runtimeService. createProcessInstanceQuery ( ) . processInstanceId ( processId) . singleResult ( ) ; if ( Objects . isNull ( processInstance) ) { HistoricProcessInstance pi = historyService. createHistoricProcessInstanceQuery ( ) . processInstanceId ( processId) . singleResult ( ) ; processDefinitionId = pi. getProcessDefinitionId ( ) ; } else { ProcessInstance pi = runtimeService. createProcessInstanceQuery ( ) . processInstanceId ( processId) . singleResult ( ) ; processDefinitionId = pi. getProcessDefinitionId ( ) ; } List < HistoricActivityInstance > highLightedFlowList = historyService. createHistoricActivityInstanceQuery ( ) . processInstanceId ( processId) . orderByHistoricActivityInstanceStartTime ( ) . asc ( ) . list ( ) ; List < String > highLightedFlows = new ArrayList < > ( ) ; List < String > highLightedNodes = new ArrayList < > ( ) ; for ( HistoricActivityInstance tempActivity : highLightedFlowList) { if ( "sequenceFlow" . equals ( tempActivity. getActivityType ( ) ) ) { highLightedFlows. add ( tempActivity. getActivityId ( ) ) ; } else { highLightedNodes. add ( tempActivity. getActivityId ( ) ) ; } } BpmnModel bpmnModel = repositoryService. getBpmnModel ( processDefinitionId) ; ProcessEngineConfiguration configuration = processEngine. getProcessEngineConfiguration ( ) ; ProcessDiagramGenerator diagramGenerator = new CustomProcessDiagramGenerator ( ) ; return diagramGenerator. generateDiagram ( bpmnModel, "png" , highLightedNodes, highLightedFlows, configuration. getActivityFontName ( ) , configuration. getLabelFontName ( ) , configuration. getAnnotationFontName ( ) , configuration. getClassLoader ( ) , 1.0 , true ) ;
}