流程引擎架构设计
RuoYi Office 流程引擎的整体架构、核心概念、前后端交互方式及关键代码位置。
1. 架构选型
1.1 核心引擎
| 维度 | 选型 | 说明 |
|---|---|---|
| 流程引擎 | Flowable 7.0.1 | 基于 Java 的轻量级 BPM 引擎,BPMN 2.0 标准 |
| 集成方式 | flowable-spring-boot-starter-process | Spring Boot Starter 自动配置 |
| 历史级别 | audit | 记录流程活动和任务级别的历史数据 |
| 表结构管理 | database-schema-update: true | 自动更新 Flowable 表结构 |
1.2 架构分层
┌─────────────────────────────────────────────────────────────┐
│ 前端 (Vue3 + Vben Admin + Ant Design Vue) │
│ ┌──────────┐ ┌───────────┐ ┌──────────┐ ┌───────────┐ │
│ │ 流程设计器 │ │ 表单设计器 │ │ 任务中心 │ │ 业务表单 │ │
│ └──────────┘ └───────────┘ └──────────┘ └───────────┘ │
├─────────────────────────────────────────────────────────────┤
│ BPM Server 子模块(流程业务实现层) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Controller │ │ Service │ │ Framework │ │
│ │ · 模型管理 │ │ · 流程实例 │ │ · 自定义行为 │ │
│ │ · 表单管理 │ │ · 任务管理 │ │ · 候选人策略 │ │
│ │ · 任务管理 │ │ · 表单管理 │ │ · 事件监听 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ BPM API 子模块(对外接口、枚举、事件) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ API 接口 │ │ 事件定义 │ │ 枚举常量 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Flowable 7.0.1 (BPMN 2.0 引擎) │
│ ┌────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 运行时 │ │ 任务服务 │ │ 历史服务 │ │ 仓库服务 │ │
│ └────────┘ └──────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 数据库 (MySQL/PostgreSQL/达梦等) │
│ ┌────────────────────────┐ ┌──────────────────────┐ │
│ │ Flowable 系统表 (ACT_*) │ │ 业务扩展表 (bpm_*) │ │
│ └────────────────────────┘ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────┘1.3 双流程设计器
| 设计器 | 枚举值 | 适用场景 |
|---|---|---|
| BPMN 设计器 | BPMN(10) | 复杂流程,精细控制 |
| Simple 设计器 | SIMPLE(20) | 简单审批,快速搭建 |
两种设计器最终都转化为 Flowable 的 BPMN Model,Simple 模型通过 SimpleModelUtils.buildBpmnModel() 转换。
1.4 关键 Flowable 配置
yaml
flowable:
database-schema-update: true
db-history-used: true
check-process-definitions: false
history-level: audit自定义配置类(BpmFlowableConfiguration)注册:
BpmActivityBehaviorFactory:自定义 UserTask 分配逻辑BpmTaskEventListener:监听任务生命周期BpmProcessInstanceEventListener:监听流程实例生命周期BpmTaskCandidateInvoker:任务候选人策略调度器
2. 后端模块结构
后端 BPM 能力由 BPM API 与 BPM Server 两个 Maven 子模块组成(位于 RuoYi Office 后端工程中的流程模块目录下)。Java 代码根包为项目统一基础包下的 module.bpm。
BPM 模块(后端)
├── BPM API 子模块/ # 对外接口、DTO、枚举、事件
│ └── .../module/bpm/
│ ├── api/event/ # BpmProcessInstanceStatusEvent
│ ├── api/task/ # BpmProcessInstanceApi
│ ├── enums/ # 状态枚举、类型枚举
│ └── util/ # 工具类
│
└── BPM Server 子模块/ # 核心业务实现
└── .../module/bpm/
├── controller/ # REST API
├── service/ # 业务逻辑
│ ├── definition/ # 模型、表单、分类、监听器、表达式
│ ├── task/ # 流程实例、任务、抄送
│ └── oa/ # OA 请假示例
├── dal/ # 数据访问
├── framework/ # 框架扩展
│ ├── flowable/ # Flowable 自定义行为、监听器
│ └── security/ # 安全配置
└── convert/ # MapStruct 转换器核心 Service
| Service | 职责 |
|---|---|
| BpmModelService | 流程模型的 CRUD、发布、导入导出 |
| BpmFormService | 流程表单管理 |
| BpmProcessDefinitionService | 流程定义查询、扩展信息管理 |
| BpmProcessInstanceService | 流程实例发起、取消、查询 |
| BpmTaskService | 任务审批、驳回、转办、委派、加签 |
| BpmProcessInstanceCopyService | 抄送管理 |
| BpmCategoryService | 流程分类管理 |
| BpmProcessListenerService | 监听器模板管理 |
| BpmProcessExpressionService | 表达式模板管理 |
3. 核心功能设计
3.1 流程状态流转
发起 → 运行中(1)
├── 所有审批通过 → 审批通过(2)
├── 任一审批拒绝 → 审批不通过(3)
└── 发起人取消 → 已取消(4)3.2 任务状态流转
待审批(1)
├── 审批通过 → 审批通过(3)
├── 审批不通过 → 审批不通过(4)
├── 驳回 → 已退回(6)
├── 委派 → 已委派(7)
├── 向前加签 → 待前加签(9)
├── 向后加签 → 待后加签(8)
├── 取消 → 已取消(5)
└── 撤回 → 已撤回(10)3.3 候选人策略
15 种审批人策略通过 BpmTaskCandidateStrategy 接口实现:
用户任务 → BpmUserTaskActivityBehavior
→ BpmTaskCandidateInvoker
→ BpmTaskCandidateStrategy (具体策略)
→ 返回候选人列表3.4 事件驱动
流程状态变化通过 Spring Event 通知业务模块:
java
// BPM 模块发布事件
applicationEventPublisher.publishEvent(
new BpmProcessInstanceStatusEvent(processInstanceId, status));
// 业务模块监听事件
@Component
public class MyListener extends BpmProcessInstanceStatusEventListener {
@Override
protected void onEvent(BpmProcessInstanceStatusEvent event) {
// 同步更新业务状态
}
}4. 前端架构
管理端页面基于 Vue3 + Vben Admin + Ant Design Vue,源码目录:ruoyi-office-vben/apps/web-antd/src/views/bpm。
4.1 页面结构
ruoyi-office-vben/apps/web-antd/src/views/bpm/
├── components/
│ ├── bpmn-process-designer/ # BPMN 设计器(基于 bpmn-js)
│ └── simple-process-design/ # Simple 设计器(仿钉钉/飞书)
├── composables/
│ └── useBusinessFieldPermission.ts # 业务表单字段权限
├── form/ # 流程表单管理
├── model/ # 流程模型管理
├── processInstance/ # 流程实例(我的流程、详情、发起)
├── task/ # 任务(待办、已办、抄送)
├── category/ # 流程分类
├── group/ # 用户分组
├── processListener/ # 流程监听器
├── processExpression/ # 流程表达式
└── oa/leave/ # OA 请假示例4.2 核心组件
| 组件 | 说明 |
|---|---|
| ProcessDesigner.vue | BPMN 流程设计器 |
| ProcessViewer.vue | BPMN 流程查看器(含高亮) |
| simple-process-designer.vue | Simple 流程设计器 |
| simple-process-viewer.vue | Simple 流程查看器 |
| operation-button.vue | 审批操作按钮组件 |
| time-line.vue | 审批时间线组件 |
| task-list.vue | 任务列表组件 |
5. 常用枚举速查
| 枚举 | 说明 | 常用值 |
|---|---|---|
| BpmProcessInstanceStatusEnum | 流程状态 | RUNNING(1), APPROVE(2), REJECT(3), CANCEL(4) |
| BpmTaskStatusEnum | 任务状态 | WAITING(1), APPROVE(3), REJECT(4), RETURN(6) |
| BpmModelTypeEnum | 设计器类型 | BPMN(10), SIMPLE(20) |
| BpmModelFormTypeEnum | 表单类型 | NORMAL(10), CUSTOM(20) |
| BpmTaskCandidateStrategyEnum | 候选人策略 | ROLE(10), DEPT_MEMBER(20), POST(22), USER(35) |
6. 关键代码文件索引
后端
| 文件 | 说明 |
|---|---|
| BpmFlowableConfiguration | Flowable 自定义配置 |
| BpmUserTaskActivityBehavior | 用户任务分配行为 |
| BpmTaskCandidateInvoker | 候选人策略调度器 |
| BpmProcessInstanceServiceImpl | 流程实例核心逻辑 |
| BpmTaskServiceImpl | 任务审批核心逻辑 |
| SimpleModelUtils | Simple → BPMN 转换 |
前端
路径均相对于 ruoyi-office-vben/apps/web-antd/src/。
| 文件 | 说明 |
|---|---|
| views/bpm/model/form/index.vue | 流程模型编辑(多步骤) |
| views/bpm/processInstance/detail/index.vue | 流程审批详情页 |
| views/bpm/processInstance/create/index.vue | 发起流程页 |
| views/bpm/composables/useBusinessFieldPermission.ts | 字段权限 Hook |