首页
/ RuoYi-Cloud-Plus工作流:Warm-Flow应用

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. 命名约定:流程代码使用有意义的英文名称
  2. 状态管理:业务状态与流程状态保持同步
  3. 异常处理:所有流程操作都需要异常捕获
  4. 日志记录:关键操作记录详细日志
  5. 性能监控:设置合理的超时时间和重试机制

部署建议

环境 实例数 内存配置 数据库配置
开发 1 2GB 单节点
测试 2 4GB 主从复制
生产 3+ 8GB+ 集群模式

扩展性考虑

  • 水平扩展:通过增加应用实例提升处理能力
  • 垂直扩展:优化数据库性能和缓存策略
  • 异步处理:耗时操作采用异步执行模式
  • 批量操作:支持批量流程启动和审批

未来演进方向

  1. AI智能审批:集成机器学习模型实现智能路由
  2. 移动端适配:提供完整的移动审批体验
  3. 集成扩展:与更多第三方系统深度集成
  4. 低代码平台:可视化流程编排和业务配置

RuoYi-Cloud-Plus的Warm-Flow工作流解决方案,为企业数字化转型提供了强有力的技术支撑,真正实现了业务流程的自动化、规范化和智能化管理。

登录后查看全文
热门项目推荐
相关项目推荐