Flowable相关知识学习

318 阅读1分钟

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)) {

}
}

        }