Flowable 工作流引擎集成
2025/12/3大约 7 分钟
Flowable 工作流引擎集成
概述
FlowMind 系统基于 Flowable 工作流引擎实现企业级审批流程管理。Flowable 是一个轻量级、高性能的 BPMN 2.0 工作流引擎,提供了完整的流程定义、执行、监控和管理功能。
核心功能
- 流程分类管理:支持流程分类的增删改查,便于流程的组织和管理
- 表单配置:支持可视化表单设计和管理
- 流程模型管理:支持 BPMN 2.0 流程模型的设计、部署、激活、挂起和删除
- 流程实例管理:创建、启动、暂停、恢复和终止流程实例
- 任务管理:分配、认领、完成和委托审批任务
- 流程历史记录:完整的流程执行历史记录和审计
- 流程变量管理:支持流程变量的设置、获取和更新
- 事件监听:支持流程事件的监听和处理
- 草稿箱功能:支持流程草稿的保存、编辑和管理
技术架构
集成架构
┌─────────────────────────────────────────────────────────┐
│ Spring Boot │
├─────────────────────────────────────────────────────────┤
│ Flowable Process Engine │
├─────────────────────────────┬───────────────────────────┤
│ 业务服务层 │ 核心工具层 │
├─────────────────────────────┼───────────────────────────┤
│ - 流程分类服务 │ - 流程设计工具 │
│ - 表单配置服务 │ - 流程节点工具 │
│ - 流程模型服务 │ - 流程变量工具 │
│ - 流程实例服务 │ - 事件监听工具 │
│ - 任务管理服务 │ - 流程导出工具 │
│ - 草稿箱服务 │ - 表单处理工具 │
│ - 流程查询服务 │ │
└─────────────────────────────────────────────────────────┘核心 API
| API 接口 | 功能描述 |
|---|---|
| RepositoryService | 流程定义管理,包括部署、查询和删除流程定义 |
| RuntimeService | 流程实例管理,包括启动、暂停和终止流程实例 |
| TaskService | 任务管理,包括分配、认领和完成任务 |
| HistoryService | 历史数据管理,包括查询流程实例和任务的历史记录 |
| IdentityService | 用户和组管理,用于任务分配和权限控制 |
| ManagementService | 引擎管理和监控,包括作业管理和数据库表维护 |
配置与集成
依赖配置
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>7.1.0</version>
</dependency>核心实体类
| 实体类 | 功能描述 |
|---|---|
| WfCategory | 流程分类实体,用于流程的分类管理 |
| WfForm | 流程表单实体,存储表单配置信息 |
| WfDeployForm | 流程实例关联表单实体,关联流程部署和表单 |
| WfModel | 流程模型实体,存储流程模型信息 |
| WfCopy | 流程抄送实体,存储流程抄送信息 |
| WfDraft | 流程草稿实体,存储流程草稿信息 |
核心服务接口
| 服务接口 | 功能描述 |
|---|---|
| IWfCategoryService | 流程分类服务,提供流程分类的增删改查 |
| IWfFormService | 表单配置服务,提供表单的设计和管理 |
| IWfModelService | 流程模型服务,提供流程模型的设计、部署和管理 |
| IWfInstanceService | 流程实例服务,提供流程实例的管理和查询 |
| IWfProcessService | 流程处理服务,提供流程的启动、任务处理等核心功能 |
| IWfTaskService | 任务管理服务,提供任务的查询、认领和完成等功能 |
| IWfDraftService | 草稿箱服务,提供流程草稿的保存、编辑和管理 |
数据库设计
自定义扩展表
| 表名 | 描述 |
|---|---|
| wf_category | 流程分类表,存储流程分类信息 |
| wf_form | 流程表单表,存储表单配置信息 |
| wf_deploy_form | 流程实例关联表单表,关联流程部署和表单 |
| wf_copy | 流程抄送表,存储流程抄送信息 |
| wf_draft | 流程草稿表,存储流程草稿信息 |
Flowable 核心表
Flowable 使用以下核心表存储流程数据:
| 表名 | 描述 |
|---|---|
| ACT_RE_PROCDEF | 流程定义表,存储流程模型定义 |
| ACT_RU_EXECUTION | 运行时流程实例表,存储正在执行的流程实例 |
| ACT_RU_TASK | 运行时任务表,存储正在执行的任务 |
| ACT_HI_PROCINST | 历史流程实例表,存储已完成的流程实例 |
| ACT_HI_TASKINST | 历史任务表,存储已完成的任务 |
| ACT_HI_ACTINST | 历史活动实例表,存储流程活动的执行历史 |
| ACT_RU_VARIABLE | 运行时变量表,存储流程变量 |
| ACT_HI_VARIABLE | 历史变量表,存储流程变量的历史记录 |
核心实现
流程启动
public String startProcess(WfStartProcessBo startProcessBo) {
// 1. 验证表单数据
// 2. 准备流程变量
// 3. 启动流程实例
// 4. 关联业务数据
// 5. 记录流程日志
// 6. 返回流程实例ID
}任务处理
public void completeTask(WfTaskBo taskBo) {
// 1. 获取任务信息
// 2. 验证任务权限
// 3. 处理任务(完成/驳回/转办等)
// 4. 记录任务日志
// 5. 触发后续流程
}任务查询
public TableDataInfo<Task> getTaskList(WfTaskBo taskBo) {
// 1. 构建查询条件
// 2. 查询任务列表
// 3. 转换为VO对象
// 4. 返回分页结果
}流程历史查询
public WfDetailVo getProcessDetail(String procInsId) {
// 1. 查询流程实例信息
// 2. 查询任务历史记录
// 3. 查询流程变量
// 4. 查询流程轨迹
// 5. 组装流程详情信息
// 6. 返回流程详情
}草稿箱功能
public void saveDraft(WfDraftBo draftBo) {
// 1. 验证草稿数据
// 2. 保存或更新草稿
// 3. 返回草稿ID
}事件监听机制
全局事件监听
@Component
public class GlobalEventListener implements ApplicationListener<AbstractFlowableEvent> {
@Override
public void onApplicationEvent(AbstractFlowableEvent event) {
// 根据事件类型执行相应的业务逻辑
// 1. 流程实例事件(启动、结束、暂停、恢复)
// 2. 任务事件(创建、分配、完成、删除)
// 3. 活动事件(进入、结束)
// 4. 网关事件(进入、结束)
}
}用户任务监听
@Component
public class UserTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
// 处理用户任务事件
// 1. 任务创建时的处理
// 2. 任务分配时的处理
// 3. 任务完成时的处理
}
}流程设计器集成
FlowMind 系统集成了 bpmn-js 流程设计器,支持可视化流程设计:
- 前端集成:使用 bpmn-js 提供流程设计界面
- 后端支持:提供流程模型的保存、部署和管理 API
- 模型转换:将 BPMN 模型转换为 Flowable 可执行的流程定义
- 核心工具类:
ModelUtils:流程模型处理工具ProcessUtils:流程处理工具ProcessFormUtils:流程表单处理工具FindNextNodeUtil:查找流程下一节点工具
核心工具类
ModelUtils
提供流程模型的解析、转换和验证功能:
- 模型XML的解析和生成
- 模型元数据的提取和处理
- 模型的验证和修复
ProcessUtils
提供流程实例和任务的处理功能:
- 流程实例的启动和管理
- 任务的查询和处理
- 流程变量的管理
- 流程历史的查询
ProcessFormUtils
提供流程表单的处理功能:
- 表单数据的解析和验证
- 表单与流程的关联处理
- 表单数据的存储和读取
性能优化
- 流程定义缓存:使用缓存机制减少流程定义的加载次数
- 异步执行:将耗时的流程任务异步执行
- 历史数据清理:定期清理历史流程数据,优化数据库性能
- 批量处理:对于大量任务的处理,使用批量操作提高效率
- 索引优化:对核心业务表建立合理的索引
监控与管理
- 流程实例监控:实时监控流程实例的运行状态
- 任务统计:统计待办任务、已办任务、逾期任务等
- 流程效率分析:分析流程执行时间、瓶颈等
- 异常处理:提供流程异常的处理机制和恢复策略
与业务系统集成
业务数据关联
通过 businessKey 关联业务数据与流程实例:
// 启动流程时关联业务数据
runtimeService.startProcessInstanceByKey(
"approvalProcess",
"business-123", // 业务ID
variables
);
// 根据业务ID查询流程实例
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceBusinessKey("business-123")
.singleResult();服务调用
通过 Feign 客户端实现微服务间的调用:
- 调用系统服务获取用户和部门信息
- 调用文件服务处理流程附件
- 调用通知服务发送流程通知
总结
Flowable 工作流引擎的集成使 FlowMind 系统能够提供完整的企业级审批流程管理功能。通过灵活的流程定义、强大的执行引擎和完善的监控管理,实现了审批流程的自动化、规范化和可视化管理,提高了企业的流程管理效率和执行力。
系统的设计遵循了模块化原则,将流程管理功能划分为多个独立的服务模块,便于维护和扩展。同时,通过事件监听机制和工具类的封装,实现了业务逻辑与工作流引擎的解耦,提高了系统的灵活性和可扩展性。