Flowable知识****
Flowable主要 涉及 的表****
一、ACT_RE_****
1. 介绍
· ACT_RE_*,RE表示repository(存储),流程定义/部署相关的表
· RespositoryService接口操作的表
2. 表
· act_re_model(流程模型)
| 字段 | 注释 |
|---|---|
| NAME_ | 模型名称 |
| KEY_ | 模型key |
| CATEGORY_ | 模型分类0-MODEL_TYPE_BPMN |
| DEPLOYMENT_ID_ | 关联的act_re_deployment的id_ |
| EDITOR_SOURCE_VALUE_ID_ | 关联的act_ge_bytearray的ID_,该模型对应的xml资源 |
| EDITOR_SOURCE_EXTRA_VALUE_ID_ | 关联的act_ge_bytearry的ID,该模型对应的图片资源 |
· act_re_deployment(部署单元信息)
| 字段 | 注释 |
|---|---|
| CATEGORY_ | 分类 |
| KEY_ | |
| NAME_ | |
| DEPLOY_TIME_ | 部署时间 |
· act_re_procdef(已部署的流程定义,部署时加载的xml信息)
| 字段 | 注释 |
|---|---|
| REV_ | 该记录修改的次数 |
| CATEGORY_ | |
| KEY_ | |
| NAME_ | 流程名称 |
| VERSION_ | 版本 |
| RESOURCE_NAME_ | 资源名称(xml文件路径+名称、自定义的资源名称) |
| DGRM_RESOURCE_NAME_ | 流程图资源名称(流程图位置+名称) |
| DEPLOYMENT_ID_ | 关联的act_re_depoyment的ID_ |
| SUSPENSION_STATE_ | 挂起状态(1-非挂起状态;2-挂起) |
二、ACT_RU_****
1. 介绍
· ACT_RU_*,RU表示runtime,这是运行时的表存储着流程变量,用户任务,变量,职责等运行时的数据
· RuntimeService、TaskService操作的表
· flowable只存储实例执行期间的运行数据,当流程实例结束时,将删除这些记录,这就保证了这些运行时的表小且快
2. 表
· act_ru_execution(正在运行的流程实例)
| 字段 | 注释 |
|---|---|
| ID_ | |
| REV_ | 该记录修改的次数 |
| PROC_INST_ID_ | 以开始节点ID_作为流程实例id_ |
| BUSINESS_KEY_ | 业务主键 |
| PROC_DEF_ID_ | 关联的act_re_procdef的ID_ |
| PARENT_ID_ | 开始节点的ID_(该节点不是开始节点),也是流程实例id |
| ROOT_PROC_INST_ID_ | 根节点的流程ID_ |
| ACT_ID_ | 环节id,xml标签id |
| IS_ACTIVE_ | 是否激活状态 |
| START_ACT_ID_ | 开始环节id,xml<startEvent id |
| START_USER_ID_ | 流程启动人员id |
| START_TIME_ | 流程启动时间 |
· act_ru_task(每个正在运行的流程实例当前正在进行的任务节点)
| 字段 | 注释 |
|---|---|
| ID_ | id |
| REV_ | |
| PROC_DEF_ID_ | 关联的act_re_procdef的id |
| EXECUTION_ID_ | 执行实例ID |
| PROC_INST_ID_ | 流程实例ID |
| PARENT_TASK_ID_ | 父节点实例ID |
| NAME_ | 节点定义名称 |
| TASK_DEF_KEY_ | xml节点ID |
| ASSIGNEE_ | 指定人员 |
| CREATE_TIME_ | 任务开始时间 |
· act_ru_actinst(每个正在运行的流程实例 经过的环节
| 字段 | 注释 |
|---|---|
| TASK_ID_ | 任务ID |
| ACT_ID_ | 环节ID |
| ACT_NAME_ | 环节名称 |
| START_TIME_ | |
| END_TIME_ |
· act_ru_identitylink(正在运行的流程实例环节人员参与信息)
| 字段 | 注释 |
|---|---|
| ID_ | |
| REV_ | |
| GROUP_ID_ | 候选组ID_ |
| TYPE_ | 类型(starter-流程发起人;candidate-xml中指定/动态添加的候选人、候选组;participant-该任务实际的参与者) |
| USER_ID_ | 候选人、参与者ID |
| TASK_ID_ | 任务ID |
| PROC_INST_ID_ | 流程实例ID |
· act_ru_variables(正在运行的流程的变量表)
一个流程执行完会删除
| 字段 | 注释 |
|---|---|
| ID_ | |
| REV_ | |
| TYPE_ | 变量类型:boolean、string |
| NAME_ | 变量key |
| EXECUTION_ID_ | |
| PROC_INST_ID_ | 流程实例ID |
| TASK_ID_ | 任务ID |
| DOUBLE_ | 变量是double类型则存入该列 |
| LONG_ | 变量integer、long、date、boolean类型则存入该列 |
| TEXT_ | 变量是string则存入该列 |
三、ACT_HI_****
1.介绍
· ACT_HI_*,HI表示history,流程历史相关数据
· HistoryService接口操作的表
2.表
· act_hi_procinst(历史流程信息)
| 字段 | 注释 |
|---|---|
| ID_ | |
| REV_ | |
| PROC_INST_ID_ | 流程实例ID |
| BUSINESS_KEY_ | 业务主键 |
| START_USER_ID_ | 流程启动人ID |
| START_TIME_ | 流程开始执行时间 |
| END_TIME_ | 流程结束时间 |
| DURATION_ | 流程历时(毫秒)END_TIME-START_TIME |
| START_ACT_ID_ | 开始环节ID,xml<startEvent id |
| END_ACT_ID_ | 结束环节ID,xml<endEvent id |
· act_hi_actinst(历史流程的环节)
包含所有的节点:开始节点、线段、任务、网关、结束节点
| 字段 | 注释 |
|---|---|
| ID_ | |
| REV_ | |
| PROC_DEF_ID_ | 关联的act_re_procdef的ID |
| PROC_INST_ID_ | 流程实例ID |
| EXECUTION_ID_ | |
| ACT_ID_ | 环节ID,xml标签ID |
| TASK_ID_ | 任务ID,只有插入郭的act_ru_task才有值 |
| ACT_NAME_ | 每个环节的名称(开始、任务、线段、网关、结束) |
| ACT_TYPE_ | xml标签类型 |
| ASSIGNEE_ | 指定人员 |
| START_TIME_ | 环节开始执行时间 |
| END_TIME_ | 环节结束时间 |
| DURATION_ | 环节历史(毫秒)(END_TIME-START_TIME) |
· act_hi_taskinst(历史流程的任务)
只包含任务节点
| 字段 | 注释 |
|---|---|
| ID_ | 任务id=act_ru_task的ID |
| REV_ | |
| PROC_DEF_ID_ | 关联的act_re_procdef的ID |
| TASK_DEF_KEY_ | 环节ID,xml标签的ID |
| PROC_INST_ID_ | 流程实例ID |
| EXECUTION_ID_ | |
| NAME_ | xml中任务名称 |
| ASSIGNEE_ | 指定人员 |
| START_TIME_ | 任务开始时间 |
| CLAIM_TIME_ | 签收时间 |
| END_TIME_ | 任务结束时间 |
| DURATION_ | 任务历时(毫秒)(END_TIME-START_TIME) |
| LAST_UPDATED_TIME_ | 最后修改时间 |
· act_hi_identitylink(历史流程的环节人员参与信息)
| 字段 | 注释 |
|---|---|
| ID_ | |
| GROUP_ID_ | 候选人ID |
| TYPE_ | 类型(starter-流程发起人;candidate-xml中指定/动态添加的候选人、候选组;participant-该任务实际的参与者) |
| USER_ID_ | 候选人或参与者ID |
| TASK_ID_ | 任务ID |
| PROC_INST_ID_ | 流程实例ID |
· act_hi_varinst(历史流程的变量历史表)
· act_hi_comment(批注)
| 字段 | 注释 |
|---|---|
| ID_ | |
| TYPE_ | 类型 |
| TIME_ | 审批时间 |
| PROC_INST_ID_ | 流程实例ID |
| TASK_ID_ | 任务ID |
| USER_ID_ | 审核人 |
| ACTION_ | 行为:AddComment、delComment、AddUserLink |
| MESSAGE_ | 审核信息(前163个字段内容) |
| FULL_MSG_ | 审核信息完整 |
四、ACT_GE_****
1.介绍
· ACT_GE_*,GE表示general,通用数据
2.表
· act_ge_bytearray(流程资源文件表)
部署的流程xml信息
| 字段 | 注释 |
|---|---|
| NAME_ | 资源文件名称(流程xml、png) |
| BYTES_ | 文件内容(二进制的流程图xml、png) |
| DEPLOYMENT_ID_ | 关联的act_re_deployment的ID |
任务监听器****
1、可以监听的节点****
· 用户任务UserTask节点
2、添加任务监听器配置****
· Event事件
o assignment:任务被委派某人后出发(create之前触发)
o create:任务创建时,并且所有的任务属性设置完成后触发
o complete:任务完成后,从运行时数据中(runtime data)删除前触发
o delete:在任务将要被删除之前发生(当任务通过completeTask完成任务时,他也会被执行)
· 类型
o 类:Classs:com.xxx.AxxxListener
§ 类名全限定
§ 监听器类上无论是否添加@Component("AxxxListener"),监听器中只能注入Flowable中的Bean
o 表达式:Expression
o 委托表达式:${XxxxxxListener}
§ 监听器类的bean name
§ 监听器类上添加@Component,既能注入Flowable中的Bean,也能注入Spring管理的Bean
具体实现
package org.springblade.plugin.workflow.listener;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.flowable.engine.HistoryService;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.Map;
/**
-
流程表单数据处理
-
@author hbx
*/
@Slf4j
@Component("XxxxListener")
public class XxxxListener implements TaskListener {
@Autowired
private HistoryService historyService;
@Override
public void notify(DelegateTask delegateTask) {
String eventName = delegateTask.getEventName();
switch (eventName) {
case EVENTNAME_CREATE:
System.err.println("任务创建");
break;
case EVENTNAME_ASSIGNMENT:
System.err.println("任务分配审核人");
break;
case EVENTNAME_COMPLETE:
complete(delegateTask);
System.err.println("任务完成");
break;
case EVENTNAME_DELETE:
System.err.println("任务删除");
break;
}
}
public void complete(DelegateTask delegateTask) {
HistoricTaskInstance task = historyService.createHistoricTaskInstanceQuery() // 是否待办
.taskId(delegateTask.getId())
.includeProcessVariables()
.includeIdentityLinks()
.singleResult();
String name = task.getName();//任务节点名称
Map<String, Object> variables = task.getProcessVariables();
ObjectMapper objectMapper = new ObjectMapper();
//某个节点审批审批通过后,去做某些业务数据处理
if ("验收负责人审批".equals(name)) {
}
}
}