activiti 查看流程图,并且当前节点实现标红

activiti 查看流程图,并且当前节点实现标红,第1张

activiti 查看流程图,并且当前节点实现标红

查看流程图比较简单,获取流程定义,展示即可。

重点是实现当前节点标记:流程需要判断:是否已经结束

结束:获取结束节点

未结束:获取当前活动节点

测试代码如下:

 @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());
//        //设置参数,并且启动
//        Map map = 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配置字体后

 还需要注意服务器需要安装字体。否则上线后有可能也会乱码可能。

如果觉得有用,记得给作者一个赞表示鼓励哦!

有问题可以随时探讨~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5685226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存