查看流程图比较简单,获取流程定义,展示即可。
重点是实现当前节点标记:流程需要判断:是否已经结束
结束:获取结束节点
未结束:获取当前活动节点
测试代码如下:
@Autowired ProcessEngineConfiguration processEngineConfiguration; @Autowired private ProcessEngine processEngine; @Autowired private RepositoryService repositoryService; @Autowired private RuntimeService runtimeService; @Autowired private HistoryService historyService; @RequestMapping(value = "/wjwtest") @ResponseBody public void testProcess(@RequestParam(name = "proInsId") String proInsId, @RequestParam(name = "businessKey") String businessKey,HttpServletResponse response) { try { //启动流程 // RepositoryService repositoryService = SpringContextUtil.getApplicationContext().getBean(RepositoryService.class); // RuntimeService runtimeService = SpringContextUtil.getApplicationContext().getBean(RuntimeService.class); // Deployment deployment = repositoryService.createDeployment() // .name("会签测试") // .addClasspathResource("activiti/process.bpmn20.xml").deploy(); // System.out.println("deploy success,deploymentId:" + deployment.getId()); // //设置参数,并且启动 // Mapmap = new HashMap<>(); // List assignList = new ArrayList<>(); // assignList.add("终审01"); // assignList.add("终审02"); // assignList.add("终审03"); // map.put("assignList",assignList); // ProcessInstance instance = runtimeService.startProcessInstanceByKey("process","process_2",map); //完成节点 // Task currentTask = taskService.createTaskQuery().processInstanceId("2215005").singleResult(); // taskService.setAssignee(currentTask.getId(), "终审03"); // taskService.complete(currentTask.getId(), new HashMap<>()); response.setContentType("image/png"); InputStream imageStream; String processDefinitionId; ProcessDiagramGenerator diagramGenerator = processEngineConfiguration.getProcessDiagramGenerator(); List currentActivities = new ArrayList (); if (proInsId.equals("0")) {//如果只是展示流程图,这个判断就满足了 ProcessDefinitionQuery pdq = repositoryService.createProcessDefinitionQuery(); ProcessDefinition pd = pdq.processDefinitionKey(businessKey).latestVersion().singleResult(); processDefinitionId = pd.getId(); }else {//标记流程进度代码 ProcessInstance processInstance_ = runtimeService.createProcessInstanceQuery().processInstanceId(proInsId).singleResult(); //获取历史流程实例 HistoricProcessInstance processInstance; if (processInstance_ != null) {//流程没有结束 processInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstance_.getId()).singleResult(); currentActivities = runtimeService.getActiveActivityIds(processInstance_.getId()); } else {//流程结束,则返回终审节点 processInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(proInsId).singleResult(); currentActivities.add(historyService.createHistoricActivityInstanceQuery().executionId(processInstance.getId()).activityType("endEvent").singleResult().getActivityId()); } processEngineConfiguration = processEngine.getProcessEngineConfiguration(); processEngineConfiguration.setActivityFontName("WenQuanYi Micro Hei"); processEngineConfiguration.setLabelFontName("WenQuanYi Micro Hei"); processEngineConfiguration.setAnnotationFontName("WenQuanYi Micro Hei"); Context.setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration); processDefinitionId = processInstance.getProcessDefinitionId(); //中文显示的是口口口,设置字体就好了 } //获取流程图 BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); imageStream = diagramGenerator.generateDiagram(bpmnModel, "png", currentActivities, new ArrayList (), "WenQuanYi Micro Hei", "WenQuanYi Micro Hei", "WenQuanYi Micro Hei", null, 1.0D); // 输出资源内容到相应对象 byte[] b = new byte[2048]; int len; while ((len = imageStream.read(b)) > 0) { response.getOutputStream().write(b, 0, len); } }catch (Exception e){ LOGGER.error("error",e); } }
以下为测试结果:
测试流程没有居中。可以在exploer里面做调整。后续会出用activiti-explore画流程图的博客。
其中我们遇到的一个问题有,流程指向线只有用explore画的才是直的,用idea画的就会弯弯曲曲。
其中功能开发过程中,有遇到字体乱码问题,正常的配置文件activiti.cfg.xml配置字体后
还需要注意服务器需要安装字体。否则上线后有可能也会乱码可能。
如果觉得有用,记得给作者一个赞表示鼓励哦!
有问题可以随时探讨~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)