package com.highdatas.mdm.util; import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.ProcessEngineConfiguration; import org.activiti.engine.RepositoryService; import org.activiti.engine.repository.ProcessDefinition; import com.highdatas.mdm.process.canvas.ProcessDiagramGenerator; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; public class WorkflowUtils { private static Logger logger = LoggerFactory.getLogger(WorkflowUtils.class); /** * è½¬æ¢æµç¨‹èŠ‚ç‚¹ç±»åž‹ä¸ºä¸æ–‡è¯´æ˜Ž * * @param type 英文åç§° * @return 翻译åŽçš„䏿–‡åç§° */ public static String parseToZhType(String type) { Map<String, String> types = new HashMap<String, String>(); types.put("userTask", "用户任务"); types.put("serviceTask", "系统任务"); types.put("startEvent", "开始节点"); types.put("endEvent", "结æŸèŠ‚ç‚¹"); types.put("exclusiveGateway", "æ¡ä»¶åˆ¤æ–节点(ç³»ç»Ÿè‡ªåŠ¨æ ¹æ®æ¡ä»¶å¤„ç†)"); types.put("inclusiveGateway", "并行处ç†ä»»åŠ¡"); types.put("callActivity", "åæµç¨‹"); return types.get(type) == null ? type : types.get(type); } /** * 导出图片文件到硬盘 * * @return 文件的全路径 */ public static String exportDiagramToFile(RepositoryService repositoryService, ProcessDefinition processDefinition, String exportDir) throws IOException { // String diagramResourceName = processDefinition.getDiagramResourceName(); // String key = processDefinition.getKey(); // int version = processDefinition.getVersion(); String diagramPath = exportDir; BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); ProcessEngineConfiguration engineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration(); ProcessDiagramGenerator diagramGenerator = new ProcessDiagramGenerator(); InputStream resourceAsStream = diagramGenerator.generateDiagram(bpmnModel, "png", "WenQuanYi Micro Hei", "WenQuanYi Micro Hei",null, null,0); byte[] b = new byte[resourceAsStream.available()]; resourceAsStream.read(b, 0, b.length); // create file if not exist // String diagramDir = exportDir + "/" + key + "/" + version; // File diagramDirFile = new File(diagramDir); // if (!diagramDirFile.exists()) { // diagramDirFile.mkdirs(); // } // diagramPath = exportDir + "/" +11 +".png"; File file = new File(diagramPath); if (file.exists()) { logger.debug("diagram exist, ignore... : {}", diagramPath); return diagramPath; } else { File parentFile = file.getParentFile(); if (!parentFile.exists()) { parentFile.createNewFile(); } file.createNewFile(); } logger.debug("export diagram to : {}", diagramPath); // wirte bytes to file FileUtils.writeByteArrayToFile(file, b); return diagramPath; } }