yudao-cloud工作流引擎揭秘:Flowable+BPMN实现符合国情的审批流程

yudao-cloud工作流引擎揭秘:Flowable+BPMN实现符合国情的审批流程

【免费下载链接】yudao-cloud ruoyi-vue-pro 全新 Cloud 版本,优化重构所有功能。基于 Spring Cloud Alibaba + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城、CRM、ERP、AI 大模型等功能。你的 ⭐️ Star ⭐️,是作者生发的动力! 【免费下载链接】yudao-cloud 项目地址: https://gitcode.com/gh_mirrors/yu/yudao-cloud

痛点:传统审批流程的困境

在企业数字化转型过程中,你是否遇到过这样的问题:

  • 审批流程僵化,无法适应实际业务场景的灵活审批需求
  • 多级审批、会签、或签等复杂场景难以实现
  • 审批人与业务数据动态关联困难
  • 流程撤回、加签、转派等特殊操作支持不足
  • 审批记录和状态跟踪不清晰

yudao-cloud基于Flowable+BPMN的强大组合,完美解决了这些痛点,为企业提供了符合实际业务需求的智能化审批流程解决方案。

技术架构:三层设计确保灵活性

整体架构图

mermaid

核心组件说明

组件层级核心类功能描述
业务服务层BpmProcessInstanceServiceImpl流程实例管理,包含创建、取消、审批等操作
引擎适配层BpmUserTaskActivityBehavior自定义任务分配行为,支持灵活审批规则
工具辅助层FlowableUtils提供流程状态、表单变量、审批人等工具方法
策略执行层BpmTaskCandidateInvoker动态计算任务候选人,支持多种分配策略

灵活审批特性实现

1. 灵活的审批人分配策略

yudao-cloud支持多种符合企业管理习惯的审批人分配方式:

// 动态候选人计算核心逻辑
public class BpmUserTaskActivityBehavior extends UserTaskActivityBehavior {
    
    private Long calculateTaskCandidateUsers(DelegateExecution execution) {
        // 多实例任务(会签、或签)从Variable中获取
        if (super.multiInstanceActivityBehavior != null) {
            return execution.getVariable(
                super.multiInstanceActivityBehavior.getCollectionElementVariable(), 
                Long.class
            );
        }
        
        // 单实例任务动态计算处理人
        Set<Long> candidateUserIds = taskCandidateInvoker.calculateUsersByTask(execution);
        if (CollUtil.isEmpty(candidateUserIds)) {
            return null;
        }
        // 随机选择一名处理人(责任到人原则)
        return CollUtil.get(candidateUserIds, RandomUtil.randomInt(candidateUserIds.size()));
    }
}

2. 多实例审批支持

支持会签(所有审批人同意)和或签(任一审批人同意)两种模式:

mermaid

3. 审批过程状态管理

public class FlowableUtils {
    // 获取流程实例状态
    public static Integer getProcessInstanceStatus(ProcessInstance processInstance) {
        return (Integer) processInstance.getProcessVariables().get(
            BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS
        );
    }
    
    // 获取任务审批状态
    public static Integer getTaskStatus(TaskInfo task) {
        return (Integer) task.getTaskLocalVariables().get(
            BpmnVariableConstants.TASK_VARIABLE_STATUS
        );
    }
}

实战案例:请假审批流程

BPMN流程定义

<!-- 简化的请假审批BPMN定义 -->
<process id="leave_approval" name="请假审批流程">
    <startEvent id="start" />
    <userTask id="department_approval" name="部门审批" 
              camunda:assignee="${approver1}" />
    <userTask id="hr_approval" name="人事审批" 
              camunda:assignee="${approver2}" />
    <exclusiveGateway id="decision" />
    <endEvent id="end" />
    <sequenceFlow sourceRef="start" targetRef="department_approval" />
    <sequenceFlow sourceRef="department_approval" targetRef="hr_approval" />
    <sequenceFlow sourceRef="hr_approval" targetRef="decision" />
    <sequenceFlow sourceRef="decision" targetRef="end" />
</process>

业务实体设计

@TableName("bpm_oa_leave")
@Data
@Builder
public class BpmOALeaveDO extends BaseDO {
    private Long id;
    private Long userId;          // 申请人
    private String type;          // 请假类型
    private String reason;        // 原因
    private LocalDateTime startTime; // 开始时间
    private LocalDateTime endTime;   // 结束时间
    private Long day;             // 请假天数
    private Integer status;       // 审批状态
    private String processInstanceId; // 流程实例ID
}

审批状态流转

mermaid

高级特性:灵活的审批操作

1. 加签机制

支持向前加签和向后加签,满足临时增加审批环节的需求:

public class BpmTaskServiceImpl {
    
    @Transactional
    public void createSignTask(Long userId, BpmTaskSignCreateReqVO reqVO) {
        // 向前加签:在当前任务前增加审批环节
        // 向后加签:在当前任务后增加审批环节
        // 支持设置加签理由和新的审批人
    }
}

2. 转派与委托

public class BpmTaskServiceImpl {
    
    @Transactional
    public void delegateTask(Long userId, BpmTaskDelegateReqVO reqVO) {
        // 任务委托:将当前任务临时委托给他人处理
        // 原审批人仍可收回委托权限
    }
    
    @Transactional
    public void transferTask(Long userId, BpmTaskTransferReqVO reqVO) {
        // 任务转派:永久将任务转交给他人
        // 原审批人不再拥有处理权限
    }
}

3. 审批撤回

支持在特定条件下撤回已提交的审批申请:

public class BpmProcessInstanceServiceImpl {
    
    @Transactional
    public void cancelProcessInstanceByStartUser(Long userId, 
                                               BpmProcessInstanceCancelReqVO cancelReqVO) {
        // 校验撤回权限
        // 更新流程状态为已取消
        // 发送撤回通知
    }
}

性能优化与最佳实践

1. 流程变量管理

public class FlowableUtils {
    
    // 高效处理流程变量
    public static Map<String, Object> filterProcessInstanceFormVariable(
        Map<String, Object> processVariables) {
        // 过滤系统字段,只保留业务表单数据
        processVariables.remove(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS);
        processVariables.remove(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_REASON);
        return processVariables;
    }
}

2. 数据库优化策略

优化点实现方式效果
流程实例查询分页查询+状态过滤减少内存占用
历史数据归档定时任务清理提升查询性能
变量存储分离业务变量和系统变量优化存储结构
索引优化为常用查询字段建立索引加速数据检索

3. 监控与日志

mermaid

总结与展望

yudao-cloud的工作流引擎通过深度整合Flowable和BPMN标准,成功实现了符合实际业务需求的审批流程管理。其核心优势包括:

  1. 灵活性强:支持多种审批人分配策略,适应不同企业需求
  2. 功能完备:提供加签、转派、撤回等灵活审批操作
  3. 性能优异:优化的数据库设计和缓存机制确保系统稳定
  4. 扩展性好:基于标准BPMN 2.0,易于扩展新功能

未来,yudao-cloud将继续深化AI技术在审批流程中的应用,实现智能路由、风险预测等高级功能,为企业数字化转型提供更强大的工作流支持。

通过本文的详细解析,相信你已经对yudao-cloud的工作流引擎有了深入了解。无论是简单的请假审批,还是复杂的多级会签流程,yudao-cloud都能提供完美的解决方案。

【免费下载链接】yudao-cloud ruoyi-vue-pro 全新 Cloud 版本,优化重构所有功能。基于 Spring Cloud Alibaba + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城、CRM、ERP、AI 大模型等功能。你的 ⭐️ Star ⭐️,是作者生发的动力! 【免费下载链接】yudao-cloud 项目地址: https://gitcode.com/gh_mirrors/yu/yudao-cloud

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值