yudao-cloud工作流引擎揭秘:Flowable+BPMN实现符合国情的审批流程
痛点:传统审批流程的困境
在企业数字化转型过程中,你是否遇到过这样的问题:
- 审批流程僵化,无法适应实际业务场景的灵活审批需求
- 多级审批、会签、或签等复杂场景难以实现
- 审批人与业务数据动态关联困难
- 流程撤回、加签、转派等特殊操作支持不足
- 审批记录和状态跟踪不清晰
yudao-cloud基于Flowable+BPMN的强大组合,完美解决了这些痛点,为企业提供了符合实际业务需求的智能化审批流程解决方案。
技术架构:三层设计确保灵活性
整体架构图
核心组件说明
| 组件层级 | 核心类 | 功能描述 |
|---|---|---|
| 业务服务层 | 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. 多实例审批支持
支持会签(所有审批人同意)和或签(任一审批人同意)两种模式:
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
}
审批状态流转
高级特性:灵活的审批操作
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. 监控与日志
总结与展望
yudao-cloud的工作流引擎通过深度整合Flowable和BPMN标准,成功实现了符合实际业务需求的审批流程管理。其核心优势包括:
- 灵活性强:支持多种审批人分配策略,适应不同企业需求
- 功能完备:提供加签、转派、撤回等灵活审批操作
- 性能优异:优化的数据库设计和缓存机制确保系统稳定
- 扩展性好:基于标准BPMN 2.0,易于扩展新功能
未来,yudao-cloud将继续深化AI技术在审批流程中的应用,实现智能路由、风险预测等高级功能,为企业数字化转型提供更强大的工作流支持。
通过本文的详细解析,相信你已经对yudao-cloud的工作流引擎有了深入了解。无论是简单的请假审批,还是复杂的多级会签流程,yudao-cloud都能提供完美的解决方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



