Activity实现 高亮显示活动节点,和所有已完成过的节点

171509_zFmt_3142419.png

171602_am7i_3142419.png

上面这种是显示当前活动节点,下面我将贴出 显示所有已完成过的节点,第二种显示有问题,如图像不清晰,中文乱码,而且流程图感觉失真!

171823_A3Qu_3142419.png

171852_xhWW_3142419.png

171921_Mt20_3142419.png

171957_Z7dR_3142419.png

由于第二种方法代码量比较多,所以给出代码

/*----------------------------------------- 显示实现 ----------------------------------------*/
    
    /**
     * 测试 高亮显示所有走过的 节点和线
     * @throws Exception
     */
    public void showAllFinishView(String processInstanceId,HttpServletResponse response) throws Exception{
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
        if(processInstance == null){
            throw new RuntimeException("获取流程图异常");
        }else{
            BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
            List<HistoricActivityInstance> activityInstances = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list();
            List<String> activityIds = new ArrayList<String>();
            List<String> flowIds = new ArrayList<String>();
            ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity)((RepositoryServiceImpl)repositoryService).getDeployedProcessDefinition(processInstance.getProcessDefinitionId());
            //获取流程走过的线
            flowIds = getHighLightedFlows(processDefinition,activityInstances);
            for(HistoricActivityInstance hai:activityInstances){
                //获取流程走过的节点
                activityIds.add(hai.getActivityId());
            }
            InputStream inputStream = new DefaultProcessDiagramGenerator().generateDiagram(bpmnModel, "png", activityIds, flowIds,"宋体","宋体",null,1.0);
            OutputStream out = response.getOutputStream();
            for(int b = -1;(b=inputStream.read())!=-1;){
                out.write(b);
            }
            out.close();
            inputStream.close();
        }
    }
    
    
    
    //获取流程走过的线 
    public static List<String> getHighLightedFlows(ProcessDefinitionEntity processDefinitionEntity,List<HistoricActivityInstance> haiList) throws Exception{
        //用来保存高亮的线 flowId
        List<String> highFlows = new ArrayList<String>();
        for (int i = 0; i < haiList.size() - 1; i++) {
            //对历史流程节点进行遍历
            //得到节点定义的详细信息
            ActivityImpl activityImpl = processDefinitionEntity.findActivity(haiList.get(i).getActivityId());
            //用以保存后需要开始时间相同的节点
            List<ActivityImpl> sameStartTimeNodes = new ArrayList<ActivityImpl>();
            ActivityImpl sameActivityImpl1 = processDefinitionEntity.findActivity(haiList.get(i + 1).getActivityId());
            //讲后面第一个节点放在时间相同节点的集合里
            sameStartTimeNodes.add(sameActivityImpl1);
            for (int j = i + 1; j < haiList.size() - 1; j++) {
                HistoricActivityInstance activityImpl1 = haiList.get(j);//后续第一个节点
                HistoricActivityInstance activityImpl2 = haiList.get(j + 1);//后续第而个节点
                if(activityImpl1.getStartTime().equals(activityImpl2.getStartTime())){
                    //如果第一个节点和第二个节点开始时间相同保存
                    ActivityImpl sameActivityImpl2 = processDefinitionEntity.findActivity(activityImpl2.getActivityId());
                    sameStartTimeNodes.add(sameActivityImpl2);
                }else{
                    //不同就调查循环
                    break;
                }
            }
            //取出节点的所有出去的线
            List<PvmTransition> pvmTransitions = activityImpl.getOutgoingTransitions();
            for(PvmTransition pvmTransition : pvmTransitions){
                //对所有的线进行遍历
                ActivityImpl pvmActivityImpl = (ActivityImpl) pvmTransition.getDestination();
                //如果取出的线的目标节点存在时间相同的节点里,保存该线的id,进行高亮显示
                if(sameStartTimeNodes.contains(pvmActivityImpl)){
                    highFlows.add(pvmTransition.getId());
                }
            }
        }
        return highFlows;
    }
    /*----------------------------------------- 显示实现 ----------------------------------------*/

第一种效果图

 

172318_NHf5_3142419.png

第二种效果图

172502_CGml_3142419.png

转载于:https://my.oschina.net/u/3142419/blog/861561

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值