RuoYi-Cloud-Plus工作流:Warm-Flow应用
2026-02-04 05:17:07作者:毕习沙Eudora
痛点场景:企业审批流程的数字化转型挑战
在企业日常运营中,审批流程管理一直是效率提升的关键瓶颈。传统审批方式面临诸多挑战:
- 流程僵化:固定审批路径难以适应业务变化
- 效率低下:人工传递审批单,耗时耗力
- 状态不透明:审批进度难以实时追踪
- 数据孤岛:审批数据与业务系统分离
- 扩展困难:新流程开发周期长,维护成本高
RuoYi-Cloud-Plus集成Warm-Flow工作流引擎,为企业提供了一套完整的流程自动化解决方案,彻底解决上述痛点。
Warm-Flow工作流核心架构
技术栈组成
graph TB
A[Warm-Flow工作流引擎] --> B[流程定义管理]
A --> C[流程实例控制]
A --> D[任务调度分配]
A --> E[流程监听机制]
B --> B1[BPMN 2.0标准]
B --> B2[可视化设计器]
C --> C1[实例状态管理]
C --> C2[流程变量控制]
D --> D1[任务分配策略]
D --> D2[审批人指定]
E --> E1[事件驱动]
E --> E2[业务集成]
核心依赖配置
<dependency>
<groupId>org.dromara.warm</groupId>
<artifactId>warm-flow-mybatis-plus-sb3-starter</artifactId>
</dependency>
<dependency>
<groupId>org.dromara.warm</groupId>
<artifactId>warm-flow-plugin-ui-sb-web</artifactId>
</dependency>
实战应用:请假审批流程开发
1. 业务实体设计
public class TestLeave extends BaseEntity {
private Long id;
private String leaveType; // 请假类型
private Integer leaveDays; // 请假天数
private Date startDate; // 开始日期
private Date endDate; // 结束日期
private String status; // 审批状态
private String reason; // 请假原因
}
2. 流程监听器实现
Warm-Flow提供三种核心事件监听机制:
// 总体流程状态监听
@EventListener(condition = "#processEvent.flowCode.startsWith('leave')")
public void processHandler(ProcessEvent processEvent) {
// 更新业务状态
testLeave.setStatus(processEvent.getStatus());
}
// 任务创建监听
@EventListener(condition = "#processTaskEvent.flowCode.startsWith('leave')")
public void processTaskHandler(ProcessTaskEvent processTaskEvent) {
// 发送通知、记录日志等
}
// 流程删除监听
@EventListener(condition = "#processDeleteEvent.flowCode.startsWith('leave')")
public void processDeleteHandler(ProcessDeleteEvent processDeleteEvent) {
// 清理相关业务数据
}
3. 条件表达式配置
支持SpEL表达式实现动态路由:
public boolean eval(Integer leaveDays) {
if (leaveDays < 2) {
return true; // 短时请假直接审批
}
return false; // 长时请假需要上级审批
}
流程设计器实战指南
节点类型详解
| 节点类型 | 功能描述 | 应用场景 |
|---|---|---|
| 开始节点 | 流程起点 | 流程初始化 |
| 用户任务 | 人工审批 | 需要人工处理的环节 |
| 服务任务 | 自动执行 | 调用外部服务或逻辑 |
| 网关节点 | 流程分支 | 条件判断和路由 |
| 结束节点 | 流程终止 | 流程完成或终止 |
审批流程配置示例
flowchart TD
A[请假申请] --> B{天数判断}
B -- 小于2天 --> C[直接主管审批]
B -- 大于等于2天 --> D[部门经理审批]
C --> E[HR备案]
D --> E
E --> F[流程结束]
高级特性应用
1. 多租户支持
TenantHelper.dynamic(processEvent.getTenantId(), () -> {
// 在指定租户上下文中执行业务逻辑
TestLeave testLeave = baseMapper.selectById(processEvent.getBusinessId());
testLeave.setStatus(processEvent.getStatus());
baseMapper.updateById(testLeave);
});
2. 业务状态同步
// 获取业务流程状态
@Override
public String getBusinessStatus(String businessId) {
TestLeave testLeave = baseMapper.selectById(businessId);
return testLeave.getStatus();
}
// 设置流程变量
@Override
public void setVariable(Long instanceId, Map<String, Object> variable) {
// 将业务数据注入流程上下文
}
3. 审批意见处理
Map<String, Object> params = processEvent.getParams();
if (MapUtil.isNotEmpty(params)) {
String hisTaskExt = Convert.toStr(params.get("hisTaskExt")); // 审批附件
String handler = Convert.toStr(params.get("handler")); // 办理人
String message = Convert.toStr(params.get("message")); // 审批意见
// 存储到业务表或日志系统
}
性能优化策略
数据库设计优化
-- 流程实例表分区策略
CREATE TABLE flow_instance (
id BIGINT PRIMARY KEY,
business_id VARCHAR(64),
definition_id BIGINT,
status VARCHAR(32),
create_time DATETIME,
INDEX idx_business_id (business_id),
INDEX idx_status (status)
) PARTITION BY HASH(id) PARTITIONS 8;
缓存配置
warm-flow:
cache:
enabled: true
definition-cache-time: 3600 # 流程定义缓存1小时
instance-cache-time: 1800 # 实例数据缓存30分钟
监控与运维
健康检查端点
@RestController
@RequestMapping("/monitor")
public class FlowMonitorController {
@GetMapping("/health")
public Map<String, Object> healthCheck() {
return Map.of(
"engineStatus", flowEngine.getStatus(),
"activeInstances", insService.countActiveInstances(),
"pendingTasks", taskService.countPendingTasks()
);
}
}
日志监控配置
logging:
level:
org.dromara.warm.flow: DEBUG
org.dromara.workflow: INFO
file:
path: /logs/workflow
max-size: 100MB
max-history: 30
常见问题解决方案
1. 流程版本管理
// 流程定义同步
@Override
@Transactional(rollbackFor = Exception.class)
public void syncDef(String tenantId) {
// 同步最新流程定义版本
defService.syncDefinition(tenantId);
}
2. 事务一致性保证
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(List<Long> ids) {
// 先删除流程实例,再删除业务数据
workflowService.deleteInstance(ids);
return baseMapper.deleteByIds(ids) > 0;
}
3. 异常处理机制
try {
RemoteStartProcessReturn result = startWorkFlow(startProcessBo);
return result;
} catch (Exception e) {
log.error("流程启动失败: {}", e.getMessage());
throw new ServiceException("流程启动失败,请检查流程配置");
}
最佳实践总结
开发规范
- 命名约定:流程代码使用有意义的英文名称
- 状态管理:业务状态与流程状态保持同步
- 异常处理:所有流程操作都需要异常捕获
- 日志记录:关键操作记录详细日志
- 性能监控:设置合理的超时时间和重试机制
部署建议
| 环境 | 实例数 | 内存配置 | 数据库配置 |
|---|---|---|---|
| 开发 | 1 | 2GB | 单节点 |
| 测试 | 2 | 4GB | 主从复制 |
| 生产 | 3+ | 8GB+ | 集群模式 |
扩展性考虑
- 水平扩展:通过增加应用实例提升处理能力
- 垂直扩展:优化数据库性能和缓存策略
- 异步处理:耗时操作采用异步执行模式
- 批量操作:支持批量流程启动和审批
未来演进方向
- AI智能审批:集成机器学习模型实现智能路由
- 移动端适配:提供完整的移动审批体验
- 集成扩展:与更多第三方系统深度集成
- 低代码平台:可视化流程编排和业务配置
RuoYi-Cloud-Plus的Warm-Flow工作流解决方案,为企业数字化转型提供了强有力的技术支撑,真正实现了业务流程的自动化、规范化和智能化管理。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0212
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0137
JoyAI-EchoJoyAI-Echo,这是一个独立的、仅用于推理的版本,旨在实现分钟级多镜头音视频生成。它采用了经过蒸馏的DMD生成器、配对的跨模态记忆以及故事级别的一致性。其性能的核心在于,一个跨模态视听记忆库能够在长达五分钟的视频中保持角色外观和语音音色的一致性。同时,一个训练后处理流程将基于记忆的强化学习与分布匹配蒸馏相结合,实现了7.5倍的速度提升,显著增强了视觉质量和对齐效果。00
GLM-5.2智谱开源 GLM-5.2,这是针对长文本任务的最新旗舰模型。相较于前代产品 GLM-5.1,它在长文本任务处理能力上实现了显著飞跃,并且首次在稳定的 100 万 token 上下文中提供这一能力。Jinja00
SwanLab⚡️SwanLab - an open-source, modern-design AI training tracking and visualization tool. Supports Cloud / Self-hosted use. Integrated with PyTorch / Transformers / LLaMA Factory / veRL/ Swift / Ultralytics / MMEngine / Keras etc.Python00
tiny-universe《大模型白盒子构建指南》:一个全手搓的Tiny-UniverseJupyter Notebook03
项目优选
收起
deepin linux kernel
C
32
16
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
468
461
暂无描述
Dockerfile
776
5.07 K
Ascend Extension for PyTorch
Python
756
961
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
872
2.01 K
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
696
1.4 K
昇腾LLM分布式训练框架
Python
183
230
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.1 K
1.14 K
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.04 K
271
Oohos_react_native
React Native鸿蒙化仓库
C++
361
430