跳到主要内容

流程管理

目录

  1. 引言
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

引言

本文件面向工作流流程管理功能,系统化梳理流程模型的设计与管理机制,覆盖模型创建/编辑/版本控制、流程部署、生命周期管理(版本发布/停用启用/迁移)、节点配置与候选人设置、表达式计算、监听器等高级特性,并提供完整的流程管理API接口文档与模型设计规范。同时,结合规则引擎模块的业务联动机制,给出流程设计器集成与可视化建模的最佳实践,以及性能优化、并发控制与事务管理的技术要点。

项目结构

工作流模块位于 yudao-module-bpm,采用“API + Biz”分层架构:

  • API 层:对外暴露流程实例相关API与枚举常量
  • Biz 层:控制器、服务接口与实现、转换器、持久层映射、工具与框架能力

Mermaid Diagram Code:

graph TB
subgraph "API 层"
API_Task["BpmProcessInstanceApi.java"]
API_DTOs["BpmProcessInstance* DTOs"]
Enums["BpmModelTypeEnum.java"]
end
subgraph "Biz 层"
Ctl_Model["BpmModelController.java"]
Ctl_Def["BpmProcessDefinitionController.java"]
Ctl_Expr["BpmProcessExpressionController.java"]
Svc_Model["BpmModelService.java"]
Svc_Def["BpmProcessDefinitionService.java"]
Svc_Expr["BpmProcessExpressionService.java"]
Impl_Model["BpmModelServiceImpl.java"]
Impl_Def["BpmProcessDefinitionServiceImpl.java"]
Mapper_Info["BpmProcessDefinitionInfoMapper.java"]
VO_Model["BpmModel* VO/ReqVO"]
VO_Def["BpmProcessDefinition* RespVO"]
end
Ctl_Model --> Svc_Model
Ctl_Def --> Svc_Def
Ctl_Expr --> Svc_Expr
Svc_Model --> Impl_Model
Svc_Def --> Impl_Def
Impl_Def --> Mapper_Info
API_Task -. 业务联动 .-> Svc_Def
Enums --> Ctl_Model
VO_Model --> Ctl_Model
VO_Def --> Ctl_Def

图表来源

章节来源

核心组件

  • 控制器层
    • 流程模型控制器:负责模型的查询、创建、更新、部署、状态变更、删除与清理,以及仿钉钉/飞书精简模型的获取与更新
    • 流程定义控制器:负责流程定义的分页、列表、精简列表与详情查询
    • 流程表达式控制器:负责表达式的增删改查与分页
  • 服务层
    • 模型服务:模型 CRUD、BPMN/XML 获取/更新、部署、状态更新、清理、精简模型解析/更新
    • 定义服务:定义分页/列表、基于模型创建定义、状态更新、BPMN 模型获取、信息查询、可见性与权限校验
    • 表达式服务:表达式 CRUD 与分页
  • 数据访问层
    • 定义信息映射:按定义 ID 或模型 ID 查询/更新流程定义扩展信息
  • API 层
    • 流程实例 API:对外提供流程实例创建、查询、删除等能力,供业务模块调用
    • 枚举与常量:模型类型枚举等

章节来源

架构总览

工作流模块围绕 Flowable 引擎,通过 RepositoryService 管理模型与定义,结合自定义扩展信息表实现更丰富的业务属性。控制器负责请求编排与结果封装,服务层承担领域逻辑与引擎交互,API 层为外部业务模块提供统一入口。

Mermaid Diagram Code:

graph TB
Client["客户端/前端"] --> Ctrl["控制器层<br/>BpmModelController / BpmProcessDefinitionController / BpmProcessExpressionController"]
Ctrl --> Svc["服务层接口<br/>BpmModelService / BpmProcessDefinitionService / BpmProcessExpressionService"]
Svc --> Impl["服务实现<br/>BpmModelServiceImpl / BpmProcessDefinitionServiceImpl"]
Impl --> Repo["Flowable RepositoryService"]
Impl --> Ext["扩展信息映射<br/>BpmProcessDefinitionInfoMapper"]
Svc_API["流程实例API<br/>BpmProcessInstanceApi"] -. 业务联动 .-> Svc

图表来源

详细组件分析

流程模型管理

  • 功能范围
    • 模型列表与详情:支持按名称过滤、关联表单/分类/部署/定义信息聚合展示
    • 模型创建与更新:支持 BPMN XML 与仿钉钉精简模型
    • 模型部署:将模型发布为可执行的流程定义
    • 状态变更:基于模型更新对应部署的流程定义状态(挂起/激活)
    • 清理与删除:清理无效模型或删除模型
  • 关键接口与流程

Mermaid Diagram Code:

sequenceDiagram
participant U as "用户"
participant C as "BpmModelController"
participant S as "BpmModelService"
participant R as "RepositoryService"
U->>C : "POST /bpm/model/create"
C->>S : "createModel(saveReqVO)"
S-->>C : "返回模型ID"
C-->>U : "成功响应"
U->>C : "POST /bpm/model/deploy?id={id}"
C->>S : "deployModel(userId, id)"
S->>R : "创建部署并解析BPMN"
R-->>S : "返回部署信息"
S-->>C : "完成"
C-->>U : "成功响应"

图表来源

章节来源

流程定义管理

  • 功能范围
    • 定义分页与列表:支持按挂起状态筛选、可见性与权限过滤
    • 精简列表:仅返回可用的定义用于前端选择
    • 定义详情:返回定义、信息、BPMN 模型
  • 关键接口与流程

Mermaid Diagram Code:

sequenceDiagram
participant U as "用户"
participant C as "BpmProcessDefinitionController"
participant S as "BpmProcessDefinitionService"
participant M as "BpmProcessDefinitionInfoMapper"
participant R as "RepositoryService"
U->>C : "GET /bpm/process-definition/page"
C->>S : "getProcessDefinitionPage(pageReqVO)"
S->>R : "查询流程定义"
S->>M : "按定义ID批量查询扩展信息"
S-->>C : "返回分页结果"
C-->>U : "封装VO并返回"

图表来源

章节来源

流程表达式管理

  • 功能范围
    • 表达式 CRUD 与分页:支持表达式创建、更新、删除、查询与分页
  • 关键接口与流程

Mermaid Diagram Code:

sequenceDiagram
participant U as "用户"
participant C as "BpmProcessExpressionController"
participant S as "BpmProcessExpressionService"
U->>C : "POST /bpm/process-expression/save"
C->>S : "createProcessExpression(saveReqVO)"
S-->>C : "返回ID"
C-->>U : "成功响应"

图表来源

章节来源

类图:服务接口与实现

Mermaid Diagram Code:

classDiagram
class BpmModelService {
+getModelList(name)
+createModel(modelVO)
+getModel(id)
+getModelBpmnXML(id)
+updateModel(userId, modelVO)
+deployModel(userId, id)
+updateModelState(userId, id, state)
+deleteModel(userId, id)
+cleanModel(userId, id)
+getSimpleModel(modelId)
+updateSimpleModel(userId, reqVO)
}
class BpmProcessDefinitionService {
+getProcessDefinitionPage(pageReqVO)
+getProcessDefinitionListBySuspensionState(state)
+createProcessDefinition(model, metaInfo, bpmnBytes, simpleJson, form)
+updateProcessDefinitionState(id, state)
+getProcessDefinitionBpmnModel(id)
+getProcessDefinitionInfo(id)
+getProcessDefinition(id)
+canUserStartProcessDefinition(info, userId)
}
class BpmProcessExpressionService {
+createProcessExpression(reqVO)
+updateProcessExpression(reqVO)
+deleteProcessExpression(id)
+getProcessExpression(id)
+getProcessExpressionPage(pageReqVO)
}
class BpmModelServiceImpl
class BpmProcessDefinitionServiceImpl
class BpmProcessDefinitionInfoMapper
BpmModelService <|.. BpmModelServiceImpl
BpmProcessDefinitionService <|.. BpmProcessDefinitionServiceImpl
BpmProcessDefinitionServiceImpl --> BpmProcessDefinitionInfoMapper : "查询/更新扩展信息"

图表来源

依赖关系分析

  • 控制器依赖服务接口,服务实现依赖 Flowable RepositoryService 与自定义映射
  • 定义服务在查询时会聚合分类、部署、表单与扩展信息,形成最终 VO
  • API 层的流程实例 API 与服务层解耦,便于业务模块按需调用

Mermaid Diagram Code:

graph LR
Ctl_Model["BpmModelController"] --> Svc_Model["BpmModelService"]
Ctl_Def["BpmProcessDefinitionController"] --> Svc_Def["BpmProcessDefinitionService"]
Ctl_Expr["BpmProcessExpressionController"] --> Svc_Expr["BpmProcessExpressionService"]
Svc_Model --> Impl_Model["BpmModelServiceImpl"]
Svc_Def --> Impl_Def["BpmProcessDefinitionServiceImpl"]
Impl_Def --> Mapper_Info["BpmProcessDefinitionInfoMapper"]
API_Task["BpmProcessInstanceApi"] -. 调用 .-> Svc_Def

图表来源

性能考虑

  • 批量查询与映射
    • 使用集合工具对模型/定义进行去重与映射,减少多次数据库往返
    • 通过 Map 结构快速定位分类、部署、表单与扩展信息
  • 分页与过滤
    • 控制器侧先做可见性与权限过滤,再进行 VO 组装,避免无效渲染
  • 并发与事务
    • 部署与状态变更涉及引擎操作,建议在服务层以事务包裹,确保一致性
  • 表达式与监听器
    • 表达式计算尽量轻量化,复杂逻辑下沉至规则引擎或独立服务,避免阻塞引擎执行

[本节为通用性能指导,不直接分析具体文件]

故障排查指南

  • 模型部署失败
    • 检查 BPMN XML 合法性与节点配置完整性
    • 核对模型元信息与表单/分类是否存在
  • 定义状态异常
    • 确认挂起状态值与 Flowable 枚举一致
    • 校验用户权限与可见性字段
  • 表达式无效
    • 校验表达式语法与上下文变量
    • 检查表达式作用域与生命周期

[本节为通用排查建议,不直接分析具体文件]

结论

工作流模块通过清晰的分层设计与 Flowable 引擎集成,提供了从模型到定义再到实例的完整生命周期管理能力。配合表达式与规则引擎的联动,能够满足复杂业务场景下的流程编排需求。建议在生产环境中强化事务与并发控制,完善可观测性与告警策略,持续优化表达式与监听器的性能表现。

[本节为总结性内容,不直接分析具体文件]

附录

API 接口清单与规范

  • 流程模型

    • GET /bpm/model/list:按名称查询模型列表
    • GET /bpm/model/get:获取模型详情(含 BPMN/XML 与精简模型)
    • POST /bpm/model/create:创建模型
    • PUT /bpm/model/update:更新模型
    • PUT /bpm/model/update-sort-batch:批量更新模型排序
    • POST /bpm/model/deploy:部署模型
    • PUT /bpm/model/update-state:更新模型状态(影响定义)
    • DELETE /bpm/model/delete:删除模型
    • DELETE /bpm/model/clean:清理模型
    • GET /bpm/model/simple/get:获取精简模型
    • POST /bpm/model/simple/update:更新精简模型(已废弃)
  • 流程定义

    • GET /bpm/process-definition/page:分页查询定义
    • GET /bpm/process-definition/list:按挂起状态查询定义列表
    • GET /bpm/process-definition/simple-list:精简列表(仅可用)
    • GET /bpm/process-definition/get:获取定义详情(按ID或Key)
  • 流程表达式

    • POST /bpm/process-expression/save:创建表达式
    • PUT /bpm/process-expression/update:更新表达式
    • DELETE /bpm/process-expression/delete:删除表达式
    • GET /bpm/process-expression/get:获取表达式
    • GET /bpm/process-expression/page:分页查询表达式
  • 流程实例(业务模块调用)

    • POST /bpm/process-instance/create:创建流程实例
    • GET /bpm/process-instance/query:查询流程实例
    • DELETE /bpm/process-instance/delete:删除流程实例
    • POST /bpm/process-instance/status-message:推送状态消息
    • POST /bpm/process-instance/status-message-update:更新状态消息

章节来源

模型设计规范

  • 模型类型
    • BPMN 设计器:标准 BPMN 图形建模
    • SIMPLE 设计器:仿钉钉/飞书精简流程建模
  • 元信息与扩展
    • 模型元信息包含表单、分类、发起人等关键属性
    • 定义扩展信息包含可见性、权限、表单等业务属性
  • 表达式与监听器
    • 表达式用于动态计算字段、分支条件等
    • 监听器用于流程事件回调(启动、结束、任务创建/删除等)
  • 版本与迁移
    • 新版本发布后保留旧版本,通过定义 Key 与版本号进行区分
    • 迁移策略建议采用灰度发布与回滚预案

章节来源

流程设计器集成与最佳实践

  • 可视化建模
    • 使用 BPMN 设计器绘制流程图,确保节点命名规范与边界事件完整
    • 使用 SIMPLE 设计器适配移动端审批场景,简化节点与连线
  • 节点配置与候选人
    • 用户任务节点配置候选人/候选组与分配策略
    • 会签/或签节点明确计数与通过条件
  • 表达式与监听器
    • 表达式优先使用简单逻辑,复杂逻辑交由规则引擎
    • 监听器避免长耗时操作,必要时异步化
  • 性能与并发
    • 避免在监听器中进行重型计算或远程调用
    • 对高并发场景进行限流与降级

[本节为通用实践建议,不直接分析具体文件]

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答