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流程设计、任务分配机制、会签/或签功能以及流程监控系统。通过详细的代码示例、流程图和表格对比,展示了该模块如何实现复杂的业务流程管理。文章不仅帮助开发者理解技术实现细节,更为实际业务场景中的工作流应用提供了完整解决方案。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00