2019独角兽企业重金招聘Python工程师标准>>>

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

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

/*----------------------------------------- 显示实现 ----------------------------------------*/
    
    /**
     * 测试 高亮显示所有走过的 节点和线
     * @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;
    }
    /*----------------------------------------- 显示实现 ----------------------------------------*/

第一种效果图

第二种效果图

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

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

  1. MBSE建模学习之四:活动(Activity)及活动图

    目录 活动(Activity) 活动图示例 动作(Action) (1)不透明动作(OpaqueAction) (2)调用行为动作(CallBehaviorAction).调用操作动作(CallOpe ...

  2. EOS节点之争已开始 准备好欣赏了么?

    EOS节点之争已开始 准备好欣赏了么? 2018-03-14 00:23 来源:雷锋网 原标题:EOS节点之争已开始 准备好欣赏了么? 雷锋网AI金融评论按:本文作者大毛向前冲.文章略有改动. EOS ...

  3. [Andriod官方训练教程]管理Activity的生命活动之开始一个Activity

    原文地址:https://developer.android.com/training/basics/activity-lifecycle/starting.html ---------------- ...

  4. activitiy学习 (动态加签,动态流程图,指定节点跳转,指定多人节点跳转)

    activitiy学习 动态加签,动态流程图,指定节点跳转,指定多人节点跳转 POM.XML 部署流程 启动流程 查询待执行任务 查询任务历史 完成任务 多人会签节点的退回指定节点 退回到指定多人会签 ...

  5. mysql管理节点_mysql8 参考手册-NDB群集管理节点配置参数

    本节中的清单提供了有关在配置NDB群集管理节点的文件[ndb_mgmd]或 [mgm]部分中 使用的参数的信息config.ini.有关每个参数的详细说明和其他附加信息,请参见 第22.3.3.5节& ...

  6. 洛谷 P3384 【模板】树链剖分-树链剖分(点权)(路径节点更新、路径求和、子树节点更新、子树求和)模板-备注结合一下以前写的题目,懒得写很详细的注释...

    P3384 [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节 ...

  7. js添加多个子节点_JS创建DOM节点-使用document.createElement()创建子节点或同级节点...

    在一个Web页面中,需要弹出一个提示信息显示给用户.基于这个需求,要使用document.createElement()创建一个DOM节点.创建完节点后,还要使用appendChild()或inser ...

  8. python 节点_python在以太坊开发中节点和网络如何选择?

    以太坊节点 为什么我需要连接到一个节点? 以太坊协议定义了一种方法,用于人们通过网络与智能合约相互作用.为了获得关于合约.账户余额和新交易状态等最新的信息,协议需要与网络上的节点进行连接.这些节点不断 ...

  9. oracle单节点加入rac,实验:Oracle单节点RAC添加节点

    环境:RHEL 6.5 + Oracle 11.2.0.4 单节点RAC 需求:单节点RAC添加新节点 1.添加节点前的准备工作 参考Oracle官方文档: Oracle® Clusterware A ...

最新文章

  1. RESTful_URI资源
  2. 福昕PDF阅读器的图章妙用
  3. 识别访问端的操作系统
  4. 总结:Linux磁盘分区管理
  5. rocketmq安装部署过程(4.0.0版本)
  6. 2019 vs 安装odt_河南2019二级造价师考试教材出版信息,免费送考试大纲
  7. zend studio 10.6.2破解和汉化
  8. 怎么看接收灵敏度desense问题?
  9. 如何为Java面试准备项目经验
  10. 电工知识:常用电子元件名称及其对应图片实用大全
  11. iOS13适配暗黑模式/夜间模式/深色模式/暗黑主题(DarkMode)
  12. AMR 文件解析及编解码流程
  13. python open unicodedecodeerror_python 读取文件时报错UnicodeDecodeError: 'gbk' co
  14. 错误1053:服务没有及时响应启动或控制请求
  15. php如何设置随机数字和字母,PHP获取随机数字和字母的方法大全
  16. 内容:提出含冰蓄冷空调的微电网多时间尺度优化调度模型,研究冰蓄冷空调 的不同运行方式对优化调度的影响
  17. husky + lint-staged + commitizen 配置提交代码规范
  18. excel 两组数据交点_如何在百万级的数据里找到别人正在赚钱的项目
  19. C8051F340 USB0 寄存器访问
  20. 移动机器人中的现代控制理论之状态方程的解

热门文章

  1. 用脚本管理服务器日志
  2. cacti实现微信告警功能
  3. redis 配置以及缓存(javaconfig)
  4. cocos2dx 云彩特效
  5. Android 学习笔记【基础扫盲篇】
  6. 今天参加广州.NET俱乐部活动,运气超好
  7. Updater Application Block for .net 2.0 发布了
  8. java 类复制构造方法_java面向对象入门(3)-java构造方法
  9. 恢复出厂设置后itms注册失败_手机恢复出厂设置后,与新手机的区别已被确认,望大家相互转告!...
  10. Android学习系列(一)初识安卓