Skip to content

流程引擎架构设计

RuoYi Office 流程引擎的整体架构、核心概念、前后端交互方式及关键代码位置。

1. 架构选型

1.1 核心引擎

维度选型说明
流程引擎Flowable 7.0.1基于 Java 的轻量级 BPM 引擎,BPMN 2.0 标准
集成方式flowable-spring-boot-starter-processSpring 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 APIBPM 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.vueBPMN 流程设计器
ProcessViewer.vueBPMN 流程查看器(含高亮)
simple-process-designer.vueSimple 流程设计器
simple-process-viewer.vueSimple 流程查看器
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. 关键代码文件索引

后端

文件说明
BpmFlowableConfigurationFlowable 自定义配置
BpmUserTaskActivityBehavior用户任务分配行为
BpmTaskCandidateInvoker候选人策略调度器
BpmProcessInstanceServiceImpl流程实例核心逻辑
BpmTaskServiceImpl任务审批核心逻辑
SimpleModelUtilsSimple → 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