RuoYi-activiti系统架构深度拆解:如何快速看懂若依权限体系与Activiti6工作流引擎的6大模块协作
RuoYi-activiti 是一个整合若依(RuoYi)开源权限框架与 Activiti6.0 工作流引擎的开源工作流开发平台,集流程设计、流程部署、流程执行、任务办理、流程监控于一体,内置请假、采购、会议三个可复用审批示例,帮助新手快速搭建企业 OA 审批系统。
很多初学者的困惑在于:若依是一个权限管理系统,Activiti 是一个流程引擎,这两者到底是怎么拼装在一起的? 本文带你按模块拆解整个架构,看完即可在源码中自由导航。
RuoYi-activiti 功能表:流程设计、待办任务、流程监控功能总览
一、整体架构:权限平台 + 流程引擎的双核协作
从根目录的 pom.xml 可以看到,项目由 6 个 Maven 子模块组成:
| 模块 | 一句话职责 | 在协作中的角色 |
|---|---|---|
ruoyi-common | 通用工具、领域基类、权限注解 | 所有人共享的"地基" |
ruoyi-framework | Spring Security + JWT 认证、AOP 切面、数据源 | 若依权限体系的"大脑" |
ruoyi-system | 用户/角色/菜单等系统业务 + 流程业务实体 | 数据层与业务模型 |
ruoyi-quartz | 定时任务调度 | 后台自动化能力 |
ruoyi-generator | Velocity 代码生成器 | 开发提效工具 |
ruoyi-admin | Web 服务入口,Activiti6 在此接入 | 前后端交汇的"总机" |
协作关系可以概括为一句话:
若依负责"谁能进来看什么、能点什么"(RBAC 权限 + 菜单路由),Activiti 负责"事情怎么流转"(流程定义 + 任务执行),ruoyi-admin 把两者黏合在同一个 Web 应用中。
二、6 大模块职责一览
1. ruoyi-common:通用工具模块
提供 AjaxResult、BaseController、SecurityUtils、StringUtils 等所有模块共用的基础能力,以及 @DataScope、@Anonymous、@RepeatSubmit 等注解。所有权限判断的入口工具类 SecurityUtils.java 就在这里,Activiti 接口通过它获取当前登录用户名,再把用户名交给流程引擎做任务分配。
2. ruoyi-framework:若依权限体系的核心
权限体系的主配置在 SecurityConfig.java,它做了三件关键的事:
- 认证:登录成功后签发 JWT Token,之后每次请求由
JwtAuthenticationTokenFilter拦截并还原用户身份(无会话,天然支持前后端分离); - 方法级鉴权:开启
prePostEnabled,允许在 Controller 上用@PreAuthorize声明"拥有哪个菜单权限才能调这个接口"; - RBAC 数据模型:基于
sys_user、sys_role、sys_menu及关联表实现"用户-角色-菜单(权限串)"模型,建表脚本见 ry-activiti.sql。
此外还有 DataScopeAspect(数据权限切面)等操作日志、登录限流等基础设施。
3. ruoyi-system:业务数据模块
既存放系统管理实体(SysUser、SysMenu、SysRole 等),也存放流程业务实体:
- FlowInfo.java:流程定义视图对象
- TaskInfo.java:待办任务视图对象
- VariableInfo.java:流程变量
- Leaveapply.java / Purchase.java / Meeting.java:请假、采购、会议三个业务表单实体
一个重要的设计约定(README 中有说明):业务表单数据一律存在业务表(leaveapply 等),不存进 Activiti 的流程变量表,流程表只存流转状态,两者通过业务主键关联,职责清晰。
4. ruoyi-quartz:定时任务模块
提供 Quartz 定时任务管理(SysJob、Cron 表达式校验等),用于流程超时提醒、数据清理等场景,与主流程解耦。
5. ruoyi-generator:代码生成器
新增一个审批流程时,用代码生成器一键生成实体、Mapper、Service、Controller 和 Vue 页面骨架(基于 Velocity 模板,见 VelocityUtils.java),把重复劳动降到最少。
6. ruoyi-admin:Web 入口与 Activiti 接入点
Activiti 6.0 的全部依赖都声明在 ruoyi-admin/pom.xml 中:
activiti-spring-boot-starter-basic:自动装配流程引擎(启动时自动创建act_*系列表)activiti-json-converter:BPMN XML 与 JSON 互转,支撑在线设计器activiti-bpmn-layout:为流程图自动计算节点坐标,支撑前端渲染
所有流程相关 Controller 集中在 ruoyi-admin/src/main/java/com/ruoyi/web/controller/activiti/ 目录,按职能分为四类,下节详述。
三、Activiti6 工作流引擎:四类 Controller 各司其职
流程设计类:在线设计 BPMN 模型
explorer/ModelController.java+explorer/EditorController.java:管理模型,把设计器产出的 JSON 通过 json-converter 还原成 BPMN XML 并保存ModelManageController.java:模型列表、发布(部署)
RuoYi-activiti 在线流程设计器:拖拽设计 BPMN 工作流
设计完成后点击"发布",模型即部署为流程定义,进入部署管理页面:
RuoYi-activiti 部署管理页面:工作流流程定义部署列表
流程执行类:发起与办理
- FlowController.java:核心是
startProcess接口,调用runtimeService.startProcessInstanceById()启动流程实例,审批人通过流程变量(如${deptleader})动态指定 - TaskController.java:待办任务查询与办理。
mylist用taskAssignee(当前用户名)查"我的待办",/task/manage/completeTask/{taskId}是所有业务共用的办理接口
动态流程类:撤销、驳回、跳转
DynamicFlowController.java 演示了一个进阶技巧:运行时直接修改 BpmnModel——例如"撤销"就是找到流程实例当前节点,动态加一条通往结束事件的连线再推进执行,实现强制结束、驳回回退等操作。
流程监控类:挂起、唤醒、看变量
FlowMonitorController.java 提供流程实例挂起/唤醒、执行历史查询、流程变量查看等能力,配合前端"流程监控"菜单使用:
RuoYi-activiti 流程监控页面:流程实例执行历史与变量监控
四、一次请假流程的完整生命周期
把两大体系串起来,一次请假审批是这样流动的:
- 登录:前端
ruoyi-ui提交账号密码 → framework 模块校验(BCrypt)→ 签发 JWT → 前端按sys_menu权限动态生成左侧菜单; - 发起:用户在"请假申请"页面(
ruoyi-ui/src/views/function/leaveApply.vue)填表 → 数据存leaveapply业务表 → 调用startProcess启动流程实例; - 办理:审批人的"我的待办"(
ruoyi-ui/src/views/todo/myTodoList.vue)出现任务 → 系统通过任务的 formKey 找到对应的前端表单页面 → 审批人点通过,completeTask推进流程到下一节点; - 监控:管理员在流程实例/执行历史中查看走向与变量,必要时挂起、驳回或撤销。
RuoYi-activiti 请假流程演示:工作流审批任务办理全过程
RuoYi-activiti 全部待办任务列表:Activiti 工作流任务办理入口
RuoYi-activiti 流程变量监控:Activiti6 流程实例变量查看
其中 formKey 是前后端联动的关键约定:设计 BPMN 时给每个用户任务配置 formKey(如 leaveForm、purchaseForm),前端维护"formKey → 表单组件"的映射,办理任务时据此动态渲染对应表单,新增流程无需改动办理主流程代码。
五、前端视角:ruoyi-ui 的四大功能区域
Vue 前端(ruoyi-ui/src/views/)与后端模块一一对应:
| 目录 | 对应功能 | 后端模块 |
|---|---|---|
views/process/ | 模型管理、部署管理 | activiti/explorer |
views/todo/ | 我的待办、全部待办、任务办理 | TaskController |
views/inspection/ | 流程实例、执行历史、作业管理 | FlowMonitorController |
views/function/ | 请假、采购、会议三个业务表单 | 业务 Controller |
views/system/ | 用户、角色、菜单等权限管理 | ruoyi-system |
RuoYi-activiti 流程实例管理:运行中的工作流实例列表
RuoYi-activiti 作业管理:Activiti 定时作业与死信作业查看
六、新手上手:3 步跑通 RuoYi-activiti
- 建库:新建 MySQL 5.7 数据库
ry-activiti(utf8mb4),导入 ry-activiti.sql(Activiti 的act_*表由引擎启动时自动创建,无需手动导入); - 启动后端:编译打包后运行
java -jar ruoyi-admin.jar; - 启动前端:在
ruoyi-ui下执行npm run dev,访问http://localhost/login,账号admin、密码admin123。
RuoYi-activiti 登录页:若依权限体系 JWT 登录认证界面
七、架构要点小结
- 分层清晰:common 打地基 → framework 管安全 → system 存业务 → admin 接前端,符合若依一贯的分层习惯;
- 引擎解耦:Activiti 依赖只出现在 ruoyi-admin,权限体系完全不感知流程引擎,两边可独立演进;
- 表单外置:业务数据进业务表、流转状态进流程表,用 formKey 关联,是扩展新流程的最佳实践;
- 复用接口:所有待办办理统一走
completeTask接口,新增审批流程只需"设计 BPMN + 写业务表单"两步。
掌握以上 6 大模块的职责与协作方式后,你就能在 RuoYi-activiti 中快速定位问题、仿照请假流程添加自己的审批业务,把它当作企业级工作流平台的脚手架来使用。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



