flowable使用 act_hi_xxx

news2024/9/22 17:36:09

HistoryService

流程历史信息

act_hi_procinst : 历史流程信息,,如果流程执行完了,end_time_ duration不为null

// 没有执行完的
        List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().unfinished().list();

 // 查询已经执行完成的流程信息,,, act_hi_procinst 没有endtime表示没有执行完, duration:耗时时间
        List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().finished().list();
       // 查找所有
        List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().list();
        for (HistoricProcessInstance historicProcessInstance : list) {
            if (historicProcessInstance.getEndTime() == null){
                // 没有执行完 
            }else {
                // 执行完了
            }
        }

任务历史信息

       List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().taskAssignee("cc").list();
        List<HistoricTaskInstance> finish = historyService.createHistoricTaskInstanceQuery().taskAssignee("cc").finished().list();
        List<HistoricTaskInstance> unfinish = historyService.createHistoricTaskInstanceQuery().taskAssignee("cc").unfinished().list();

        // endTime 是否为null,判断是否完成
        System.out.println("list.size() = " + list.size());
        System.out.println("finish.size() = " + finish.size());
        System.out.println("unfinish.size() = " + unfinish.size());
   List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().finished().list();

        for (HistoricProcessInstance historicProcessInstance : list) {
            // 根据 流程实例id(processInstanceId) 查找task
            List<HistoricTaskInstance> taskList = historyService.createHistoricTaskInstanceQuery().processInstanceId(historicProcessInstance.getId()).finished().list();
            System.out.println(taskList.size());
            System.out.println("================");
        }

活动历史信息

act_hi_actinst : 活动实例: 每一个活动都在里面,,包括,起始节点,连线,终点

 List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().finished().list();
        for (HistoricProcessInstance historicProcessInstance : list) {
            List<HistoricActivityInstance> list1 = historyService.createHistoricActivityInstanceQuery()
                    // 流程实例id查询
                    .processInstanceId(historicProcessInstance.getId())
                    // 开始时间排序
                    .orderByHistoricActivityInstanceStartTime()
                    // 升序
                    .asc()
                    .list();
            for (HistoricActivityInstance activityInstance : list1) {
                System.out.println("activityInstance = " + activityInstance.getStartTime());
            }
        }
   List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().activityType("startEvent")
                .orderByHistoricActivityInstanceStartTime()
                .desc()
                .list();
        for (HistoricActivityInstance historicActivityInstance : list) {
            System.out.println(historicActivityInstance.getActivityType()+historicActivityInstance.getStartTime());
        }

历史变量信息

根据流程id查找变量

        List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().list();
        System.out.println("list.size() = " + list.size());

        for (HistoricProcessInstance historicProcessInstance : list) {
            List<HistoricVariableInstance> list1 = historyService.createHistoricVariableInstanceQuery().processInstanceId(historicProcessInstance.getId()).list();
            for (HistoricVariableInstance historicVariableInstance : list1) {
                System.out.println("historicVariableInstance = " + historicVariableInstance.getValue());
            }
        }
// 查找指定名字的  variable
 List<HistoricVariableInstance> list1 = historyService.createHistoricVariableInstanceQuery().processInstanceId(historicProcessInstance.getId()).variableName("birthday").list();

日志历史信息

历史日志就是 上面这四个东西,,可以查找上面的四个,,act_hi_procInst,act_hi_varinst,act_hi_taskinst,act_hi_actinst

  List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().list();
        for (HistoricProcessInstance historicProcessInstance : list) {

            ProcessInstanceHistoryLog processInstanceHistoryLog = historyService.createProcessInstanceHistoryLogQuery(historicProcessInstance.getId())
                    // HistoricData : 中包含 variable
                    .includeVariables()
                    // HistoricData 中包含 task
                    .includeTasks()
                    .singleResult();

            System.out.println(processInstanceHistoryLog.getStartTime()+"---"+processInstanceHistoryLog.getId());
            List<HistoricData> historicData = processInstanceHistoryLog.getHistoricData();
            for (HistoricData data : historicData) {
                if (data instanceof HistoricVariableInstance){
                    // 是 variable
                    HistoricVariableInstance historicVariableInstance = (HistoricVariableInstance) data;
                    System.out.println("historicVariableInstance = " + historicVariableInstance.getValue());
                }else if (data instanceof HistoricTaskInstance){
                    // 是task
                    HistoricTaskInstance historicTaskInstance = (HistoricTaskInstance) data;
                    System.out.println("historicTaskInstance = " + historicTaskInstance.getName());
                }
            }
        }

历史权限查询

查询历史流程 处理人 : act_hi_identitylink

  List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().list();
        for (HistoricProcessInstance historicProcessInstance : list) {
            //  查询 参与者,处理人   act_hi_identitylink
            List<HistoricIdentityLink> links = historyService.getHistoricIdentityLinksForProcessInstance(historicProcessInstance.getId());
            for (HistoricIdentityLink link : links) {
                System.out.println("link.getUserId() = " + link.getUserId());
            }
        }

查找 指定的任务的 执行人是谁:

   String taskName = "组长审批";
        HistoricTaskInstance task = historyService.createHistoricTaskInstanceQuery().taskName(taskName).singleResult();
        // 查找 指定task的处理人
        List<HistoricIdentityLink> links = historyService.getHistoricIdentityLinksForTask(task.getId());

        for (HistoricIdentityLink link : links) {
            System.out.println("link.getUserId() = " + link.getUserId());
        }

自定义sql查询

   // 查询执行完的流程的  任务信息
        List<HistoricProcessInstance> list = historyService.createNativeHistoricProcessInstanceQuery().sql("").list();

        for (HistoricProcessInstance historicProcessInstance : list) {
            // 根据流程id ,, 查找对应的 task
            List<HistoricTaskInstance> taskInstanceList = historyService.createNativeHistoricTaskInstanceQuery().sql("").parameter("", "").list();
            
        }

历史数据记录级别

哪些历史信息会被 记录到 act_hi_xxx表中
配置:

  • None : 不存储任何历史信息
  • Activity : 存储所有的 流程实例 和 活动实例
  • Audit : 在 activity之上,增加了流程的历史详细信息,,默认就是这个 act_hi_detail : 详细信息
  • Full : 在activity之上,还会存储变量的变化信息,,,就是变量: 曾经是什么。。。流程变量 变化的详细信息在act_hi_detail表中

配置文件:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/177059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp封装并全局挂载request请求

前言 日常开发中,前端项目中需要调用服务端api完成页面渲染,uniapp提供的请求api:uni.request相对繁琐;另外服务端提供的不同api仅子路径不同,api域名以及根路径都是相同的,一旦接口api变更,需要更改地方就会很多.鉴于以上可以将uni.request进行封装,简化开发. 目前uniapp项…

MySQL(四):B+树索引、聚簇索引、二级索引、联合索引

目录一、B树索引1.1 在没有索引时进行查找记录1.2 索引方案1.3 InnoDB中的索引方案二、聚簇索引三、二级索引四、联合索引五、InnoDB中B树索引的注意事项5.1 根页面的位置不会改变5.2 内节点中目录项记录的唯一性5.3 一个页面至少容纳两条记录一、B树索引 数据库中的用来存储数…

MySQL进阶篇之索引1

02、索引 2.1、索引概述 1、介绍 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#…

Cepstral Analysis 倒谱分析

源过滤器分离 倒谱分析是另一种将声道滤波器响应与激励分开的方法&#xff08;如线性预测&#xff09; 它基于以下观察&#xff1a;语音信号的频谱是激励频谱和声道频率响应的乘积 可以使用log将乘法转换为加法&#xff0c;因此&#xff0c;“对数频谱”可以看作是对数激励频…

十七、Gtk4-Menu and action

Menu 用户经常使用菜单向计算机发出命令。它是这样的: 现在让我们分析一下上面的菜单。对象有两种类型。 “File”, “Edit”, “View”, “Cut”, “Copy”, “Paste” and “Select All”. 它们被称为“菜单项&#xff08;menu item&#xff09;”或简单地称为“item”。当…

字节青训前端笔记 | 前端调试

在程序员的世界中&#xff0c;BUG 一词相信同学们再熟悉不过了&#xff0c;本节课将围绕前端开发中所遇见的 BUG 出发&#xff0c;讲解作为一名合格的前端开发人员&#xff0c;你应该掌握哪些开发调试知识 Chorme DevTools Chorme DevTools 是 chorme内核为大家提供的高效的前…

gdb使用

gdb是一款UNIX及UNIX-like下的调试工具 gdb可用于调试用gcc编译的可执行文件&#xff0c;用gdb调试时gcc编译需要使用参数-g 本文是对于gdb在Linux下使用的基本命令的总结gdb调试视频演示&#xff0c;gdb调试基础指令&#xff0c;gdb调试其他命令&#xff0c;gdb常见错误说明 目…

23种设计模式(二十一)——命令模式【行为变化】

文章目录 意图什么时候使用命令真实世界类比命令模式的实现命令模式的优缺点亦称:动作、事务、Action、Transaction、Command 意图 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递…

Centos7 Docker安装APISIX

Centos7 Docker安装APISIX1 基础介绍1.1 概念1.2 特性1.3 架构图2 快速安装2.1 前提条件2.2 安装步骤2.2.1 git命令克隆apisix-docker仓库2.2.2 docker-compose启动apisix2.2.3 访问apisix dashboard3 简单使用3.1 准备接口3.2 创建服务3.3 创建路由3.4 测试请求1 基础介绍 1.…

Kubernetes:分享一个很简洁的 k8s 管理工具 Skooner

写在前面 博文内容为 Skooner 简单介绍包括下载安装导入集群基本功能使用Skooner 的 sa 使用的当前命名空间默认的 sa不会显示创建 sa ,当然可以单独创建理解不足小伙伴帮忙指正 我所渴求的&#xff0c;無非是將心中脫穎語出的本性付諸生活&#xff0c;為何竟如此艱難呢 -----…

Spring_FrameWork_10(MyBatisPlus)

lombok mybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplTestvoid selectById(){IPage page new Page(2,2);bookDao.selectPage(page,null);System.out.println("当前页码值&#xff1a;"page.getCurrent());System.out.println…

Java---微服务---Nacos集群搭建

Nacos集群搭建1.集群结构图2.搭建集群2.1.初始化数据库2.2.下载nacos2.3.配置Nacos2.4.启动2.5.nginx反向代理2.6.优化1.集群结构图 官方给出的Nacos集群图&#xff1a; 其中包含3个nacos节点&#xff0c;然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。 我们…

解锁Windows所有电源选项

20230123 By wdhuag 目录 参考&#xff1a; 查看当前选项&#xff1a; 警告&#xff01;修改前&#xff0c;先使用Registry Workshop备份注册表&#xff0c;导出PowerSettings&#xff1a; 在PowerSettings里增加Attributes参数&#xff08;十六进制、数值2&#xff09;&a…

Shell脚本从入门到实战

Shell 文章目录Shellshell概述Shell脚本入门1. 脚本格式2. 第一个Shell脚本:helloworld3. 第二个Shell脚本&#xff1a;多命令处理Shell中的变量系统变量1. 常用系统变量2. 案例实操自定义变量1. 基本语法2. 变量定义规则特殊变量&#xff1a;$n特殊变量&#xff1a;$#特殊变量…

零基础学JavaWeb开发(二十二)之 springmvc入门到精通

一、SpringMVC概述 1、三层架构与MVC架构区别 1.1、三层架构 表示层&#xff1a;主要对用户的请求接受&#xff0c;以及数据的返回&#xff0c;为客户端提供应用程序的访问。 servlet层 业务逻辑层&#xff1a;对我们数据实现业务逻辑的封装 service层 数据访问层&#xf…

【Java|golang】2303. 计算应缴税款总额

给你一个下标从 0 开始的二维整数数组 brackets &#xff0c;其中 brackets[i] [upperi, percenti] &#xff0c;表示第 i 个税级的上限是 upperi &#xff0c;征收的税率为 percenti 。税级按上限 从低到高排序&#xff08;在满足 0 < i < brackets.length 的前提下&am…

【JavaScript】多态(Symbol),迭代器接口,getter/setter

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录多态symbol迭代器接口实现数组的迭代器方法练习Getter/Setter多态 我拿到一个对象&#xff0c;这…

【JavaScript】正则表达式详解

&#x1f4bb;【JavaScript】正则表达式&#x1f3e0;专栏&#xff1a;JavaScript &#x1f440;个人主页&#xff1a;繁星学编程&#x1f341; &#x1f9d1;个人简介&#xff1a;一个不断提高自我的平凡人&#x1f680; &#x1f50a;分享方向&#xff1a;目前主攻前端&#…

MySQL(五):事务简介、事务的特性、事务的概念及状态、支持事务的引擎

目录一、事务的起源二、事务的特性2.1 原子性(Atomicity)2.2 隔离性(Isolation)2.3 一致性(Consistency)2.4 持久性(Durability)三、事务的概念及状态四、支持事务的引擎一、事务的起源 事务源于日常生活中的业务&#xff0c;现有这样的一个场景&#xff0c;A账户有11元&#…

人工智能学习06--pytorch04--transforms

transforms主要对图片进行一些变换 transform该如何使用&#xff08;python&#xff09; 从transform中选择一个class&#xff0c;进行创建 依据创建的工具看需要什么&#xff08;如img&#xff09; 为什么需要tensor的数据类型 tensor数据类型&#xff1a;包装了神经网络…