yudaocode/ruoyi-vue-pro 工作流模块深度解析
文章深入解析了ruoyi-vue-pro工作流模块的核心功能,包括BPMN流程设计与实现、任务分配与审批流程、会签与或签功能以及流程监控与报表。从技术实现到应用场景,全面剖析了工作流模块的设计理念和实际应用。
BPMN流程设计与实现
BPMN(Business Process Model and Notation)是一种用于业务流程建模的标准符号,广泛应用于工作流引擎的设计与实现中。在 yudao-module-bpm 模块中,BPMN 的设计与实现是核心功能之一,支持流程定义、任务分配、流程触发等关键功能。本节将深入解析 BPMN 的设计与实现细节。
BPMN 设计器与 XML 解析
BPMN 设计器通过 XML 文件定义流程模型,其核心数据结构如下:
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL">
<bpmn2:process id="process_1" name="请假流程">
<bpmn2:startEvent id="startEvent_1" />
<bpmn2:userTask id="userTask_1" name="提交申请" />
<bpmn2:sequenceFlow id="flow_1" sourceRef="startEvent_1" targetRef="userTask_1" />
</bpmn2:process>
</bpmn2:definitions>
关键类与方法
-
BpmModelService
提供 BPMN 模型的管理功能,包括获取和更新 BPMN XML:public interface BpmModelService { String getBpmnXml(String modelId); void updateBpmnXml(String modelId, String bpmnXml); } -
BpmProcessDefinitionService
负责流程定义的部署与解析:public interface BpmProcessDefinitionService { String deployProcessDefinition(Model model, byte[] bpmnBytes); BpmnModel getBpmnModel(String processDefinitionId); }
BPMN 流程触发机制
BPMN 支持多种触发机制,包括:
- 用户任务触发:通过
UserTaskListener监听用户任务事件。 - HTTP 请求触发:通过
BpmHttpCallbackTrigger实现外部系统调用。
示例:用户任务监听器
public class BpmUserTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
// 处理任务分配逻辑
delegateTask.setAssignee("user1");
}
}
BPMN 流程实例管理
流程实例的管理通过 BpmProcessInstanceService 实现,支持以下功能:
- 创建流程实例:根据 BPMN 定义启动流程。
- 查询流程状态:获取流程实例的当前状态和任务节点。
- 终止流程:支持管理员或发起人终止流程。
示例:创建流程实例
public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService {
@Override
public String createProcessInstance(BpmProcessInstanceCreateReqVO reqVO) {
ProcessInstance instance = runtimeService.startProcessInstanceByKey(reqVO.getProcessDefinitionKey());
return instance.getId();
}
}
表格:BPMN 核心组件
| 组件名称 | 功能描述 | 实现类/接口 |
|---|---|---|
| BPMN 设计器 | 提供可视化流程设计 | BpmModelService |
| 流程定义解析器 | 解析 BPMN XML 为可执行流程 | BpmProcessDefinitionService |
| 用户任务监听器 | 处理用户任务分配与完成事件 | BpmUserTaskListener |
| HTTP 触发器 | 支持外部系统触发流程 | BpmHttpCallbackTrigger |
流程图:BPMN 流程生命周期
stateDiagram-v2
[*] --> 草稿
草稿 --> 已部署: 部署流程
已部署 --> 运行中: 启动流程
运行中 --> 已完成: 流程结束
运行中 --> 已终止: 管理员终止
通过以上设计与实现,yudao-module-bpm 模块提供了强大的 BPMN 支持,能够满足复杂业务流程的需求。
任务分配与审批流程
在 ruoyi-vue-pro 的工作流模块中,任务分配与审批流程是核心功能之一。通过灵活的配置和强大的功能支持,开发者可以轻松实现复杂的业务流程管理。以下是对任务分配与审批流程的深度解析。
任务分配机制
任务分配是工作流中至关重要的一环。ruoyi-vue-pro 提供了多种任务分配方式,包括:
- 直接分配:将任务直接分配给指定用户。
- 会签:同一节点设置多人审批,需全部通过才能进入下一节点。
- 或签:同一节点设置多人审批,任意一人通过即可进入下一节点。
- 依次审批:多人按顺序依次审批,前一人通过后下一人才能审批。
代码示例
以下是一个任务分配的代码片段,展示了如何通过 BpmTaskService 接口实现任务分配:
// 分配任务给指定用户
taskService.transferTask(userId, reqVO);
流程图
flowchart TD
A[发起流程] --> B{分配方式}
B -->|直接分配| C[用户A]
B -->|会签| D[用户A & 用户B]
B -->|或签| E[用户A 或 用户B]
B -->|依次审批| F[用户A → 用户B]
审批流程
审批流程支持多种操作,包括通过、驳回、退回、委派、转派、加签、减签等。以下是常见的审批操作及其实现方式:
1. 通过任务
// 通过任务
taskService.approveTask(userId, reqVO);
2. 驳回任务
// 驳回任务
taskService.rejectTask(userId, reqVO);
3. 退回任务
// 退回任务到指定节点
taskService.returnTask(userId, reqVO);
4. 委派任务
// 委派任务给其他用户
taskService.delegateTask(userId, reqVO);
5. 加签与减签
// 加签
taskService.createSignTask(userId, reqVO);
// 减签
taskService.deleteSignTask(userId, reqVO);
任务状态管理
任务的状态管理是工作流的核心功能之一。ruoyi-vue-pro 提供了以下状态管理功能:
- 待办任务:用户未处理的任务。
- 已办任务:用户已处理的任务。
- 超时任务:任务超过预设时间未处理。
状态转换图
stateDiagram
[*] --> 待办
待办 --> 已办: 通过/驳回
待办 --> 超时: 未处理
超时 --> 已办: 自动处理
表格:任务分配方式对比
| 分配方式 | 描述 | 适用场景 |
|---|---|---|
| 直接分配 | 任务直接分配给指定用户 | 简单任务,明确审批人 |
| 会签 | 同一节点多人审批,需全部通过 | 重要决策,需多人确认 |
| 或签 | 同一节点多人审批,任意一人通过即可 | 快速审批,无需全员确认 |
| 依次审批 | 多人按顺序依次审批,前一人通过后下一人才能审批 | 层级审批,逐级上报 |
代码示例:任务审批逻辑
以下是一个完整的任务审批逻辑示例:
public void approveTask(Long userId, BpmTaskApproveReqVO reqVO) {
// 校验任务是否存在
Task task = validateTask(userId, reqVO.getTaskId());
// 执行审批逻辑
taskService.complete(task.getId(), reqVO.getVariables());
// 发送审批通知
messageService.sendApproveMessage(task, userId);
}
通过以上内容,开发者可以快速理解并实现 ruoyi-vue-pro 工作流模块中的任务分配与审批流程功能。
会签与或签功能解析
在 yudaocode/ruoyi-vue-pro 的工作流模块中,会签(多人会签)与或签(多人或签)功能是实现多人审批场景的核心机制。以下是对这两种功能的详细解析,包括其实现原理、使用场景以及代码示例。
会签功能
定义与使用场景
会签(Multi-Instance Sequential)是指在一个流程节点中,多个审批人需要依次或同时完成审批任务,且必须满足一定的通过条件(如通过比例)才能进入下一节点。适用于需要多人共同确认的场景,如合同审批、项目立项等。
实现原理
- 多实例任务:会签任务通过 Flowable 的多实例任务机制实现,每个审批人对应一个子任务。
- 通过比例:通过
nrOfCompletedInstances/nrOfInstances >= 比例表达式判断是否满足通过条件。 - 任务分配:任务会根据配置的审批人列表动态分配。
代码示例
// 会签任务的审批逻辑
public void approveTask(Long userId, BpmTaskApproveReqVO reqVO) {
Task task = validateTask(userId, reqVO.getTaskId());
// 处理会签任务的审批逻辑
if (isMultiInstanceTask(task)) {
handleMultiInstanceTaskApproval(task, reqVO);
}
}
流程图
flowchart TD
A[开始] --> B[会签任务]
B --> C{通过比例满足?}
C -->|是| D[进入下一节点]
C -->|否| B
或签功能
定义与使用场景
或签(Multi-Instance Parallel)是指在一个流程节点中,多个审批人中的任意一人完成审批即可进入下一节点。适用于快速决策场景,如请假审批、紧急事项处理等。
实现原理
- 多实例任务:或签任务同样通过 Flowable 的多实例任务机制实现。
- 完成条件:通过
nrOfCompletedInstances > 0表达式判断是否满足完成条件。 - 任务取消:当任意一人审批通过后,其他未完成的任务会被自动取消。
代码示例
// 或签任务的审批逻辑
public void approveTask(Long userId, BpmTaskApproveReqVO reqVO) {
Task task = validateTask(userId, reqVO.getTaskId());
// 处理或签任务的审批逻辑
if (isMultiInstanceTask(task)) {
handleMultiInstanceTaskApproval(task, reqVO);
// 取消其他未完成任务
cancelOtherTasks(task);
}
}
流程图
flowchart TD
A[开始] --> B[或签任务]
B --> C{任意一人完成?}
C -->|是| D[进入下一节点]
C -->|否| B
会签与或签的对比
| 功能 | 会签 | 或签 |
|---|---|---|
| 审批方式 | 多人依次或同时审批,需满足通过比例 | 任意一人审批即可 |
| 适用场景 | 需要多人共同确认的场景(如合同审批) | 快速决策场景(如请假审批) |
| 实现条件 | nrOfCompletedInstances/nrOfInstances >= 比例 |
nrOfCompletedInstances > 0 |
| 任务取消 | 不满足比例时任务继续 | 任意一人审批通过后,其他任务自动取消 |
高级配置
会签的通过比例
在 BpmSimpleModelNodeVO 中,可以通过 approveRatio 字段配置会签任务的通过比例。例如:
private Integer approveRatio; // 通过比例,当多人审批方式为:多人会签(按通过比例) 需要设置
或签的自动取消
在 BpmTaskServiceImpl 中,或签任务完成后会自动取消其他未完成任务:
// 或签场景 + 审批通过:一个或签有多个审批时,如果 A 审批通过,其它或签 B、C 等任务会被 Flowable 自动删除
if (isMultiInstanceParallelTask(task)) {
cancelOtherTasks(task);
}
总结
会签与或签功能通过 Flowable 的多实例任务机制实现,能够灵活支持多人审批场景。开发者可以通过配置 approveRatio 和任务类型,快速适配不同的业务需求。
流程监控与报表
在 yudaocode/ruoyi-vue-pro 的工作流模块中,流程监控与报表功能是确保业务流程高效运行的关键部分。通过实时监控流程实例的状态、任务执行情况以及生成多维度的报表,管理员和开发者可以快速定位问题、优化流程设计,并为决策提供数据支持。
流程监控功能
流程监控主要围绕流程实例和任务实例展开,提供以下核心功能:
-
实时状态跟踪
- 通过
BpmTaskService和BpmProcessInstanceService提供的接口,可以实时获取流程实例和任务实例的状态。 - 例如,
getTaskTodoPage和getTaskDonePage方法分别用于查询待办和已办任务的分页数据。
- 通过
-
任务超时处理
- 任务超时是流程监控的重点之一。
BpmTaskService中的processTaskTimeout方法用于处理任务超时事件,支持多种超时处理策略(如自动通过、自动拒绝等)。 - 通过
BpmUserTaskTimeoutHandlerTypeEnum枚举定义超时处理类型。
- 任务超时是流程监控的重点之一。
-
流程实例状态变更
- 流程实例的状态变更(如启动、完成、取消)会触发相应的事件处理逻辑。例如,
processTaskCanceled方法用于更新任务状态为“已取消”。
- 流程实例的状态变更(如启动、完成、取消)会触发相应的事件处理逻辑。例如,
-
任务委派与转派
- 支持任务的动态分配,包括委派(
delegateTask)和转派(transferTask),确保任务能够高效流转。
- 支持任务的动态分配,包括委派(
报表功能
报表功能通过聚合流程数据,提供多维度的分析视图:
-
任务执行统计
- 通过
getTaskPage方法获取全部任务的分页数据,支持按用户、部门、时间范围等维度统计任务完成情况。 - 示例代码:
PageResult<HistoricTaskInstance> pageResult = taskService.getTaskPage(userId, pageReqVO);
- 通过
-
流程耗时分析
- 通过
getActivityListByProcessInstanceId方法获取流程实例的活动实例列表,计算每个节点的耗时,生成流程效率报表。
- 通过
-
用户任务负载
- 结合
AdminUserApi和DeptApi,统计每个用户的任务负载情况,帮助管理员合理分配资源。
- 结合
数据可视化
为了更直观地展示监控数据,可以通过 mermaid 生成流程图或状态图:
stateDiagram-v2
[*] --> 待办
待办 --> 已办: 任务完成
待办 --> 已取消: 任务取消
已办 --> [*]
已取消 --> [*]
表格示例
以下是一个任务统计报表的示例表格:
| 任务类型 | 待办数量 | 已办数量 | 超时数量 |
|---|---|---|---|
| 审批任务 | 120 | 85 | 5 |
| 抄送任务 | 30 | 25 | 0 |
| 委派任务 | 15 | 10 | 2 |
总结
流程监控与报表功能是 ruoyi-vue-pro 工作流模块的重要组成部分,通过实时监控和数据分析,帮助用户优化流程执行效率,提升业务响应速度。开发者可以通过 BpmTaskService 和 BpmProcessInstanceService 提供的丰富接口,快速实现定制化的监控和报表需求。
本文系统性地介绍了ruoyi-vue-pro工作流模块的四大核心功能:BPMN流程设计、任务分配机制、会签/或签功能以及流程监控系统。通过详细的代码示例、流程图和表格对比,展示了该模块如何实现复杂的业务流程管理。文章不仅帮助开发者理解技术实现细节,更为实际业务场景中的工作流应用提供了完整解决方案。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00