跳到主要内容

BPM流程配置

目录

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

简介

本文件围绕黑名单审批流程的BPM配置展开,系统性阐述从流程定义、节点配置、审批人设置、权限控制,到流程模板设计、流程实例管理、流程与业务数据绑定、最佳实践与调试技巧的完整方案。目标读者既包括一线运维与业务人员,也包括后端开发者与架构师。

项目结构

  • BPM模块采用分层与模块化组织:
    • yudao-module-bpm-api:对外RPC接口定义(如流程实例创建、查询、取消)
    • yudao-module-bpm-biz:业务实现(流程定义、表单、监听器、服务等)
    • 文档与SQL:docs目录下的BPM与黑名单文档,以及sql/mysql/bpm.sql中的流程相关表结构
  • 黑名单模块与BPM模块通过接口与事件联动,实现“业务变更触发审批”的闭环

Mermaid Diagram Code:

graph TB
subgraph "BPM模块"
API["BpmProcessInstanceApi<br/>RPC接口"]
DEF["流程定义DTO<br/>BpmProcessDefinitionCreateReqDTO"]
META["模型元信息DTO<br/>BpmModelMetaInfoRespDTO"]
DB["流程相关表<br/>bpm_process_definition_info"]
end
subgraph "黑名单模块"
SVC["IAppBlackListedBpmService<br/>接口"]
IMPL["AppBlackListedBpmServiceImpl<br/>实现"]
VAR["AppBlacklistedBpmVariable<br/>流程变量"]
LISTENER["BpmBlacklistStatusListener<br/>状态监听"]
end
API --> IMPL
IMPL --> SVC
IMPL --> VAR
LISTENER --> IMPL
DEF --> DB
META --> DB

图表来源

章节来源

核心组件

  • 流程实例RPC接口:提供创建、查询、取消流程实例的能力,统一由BpmProcessInstanceApi暴露
  • 流程定义DTO:封装流程模型、标识、名称、分类、BPMN字节流、表单类型等关键字段
  • 模型元信息DTO:封装流程图标、描述、表单类型、表单ID、自定义表单路径等
  • 黑名单BPM服务:负责黑名单变更触发审批、取消审批、查询运行中实例、处理审批结果
  • 流程变量POJO:承载业务审批所需的关键字段(如业务原因、渠道名称、业务类型)
  • 状态监听器:接收BPM状态事件,驱动黑名单业务状态同步

章节来源

架构总览

黑名单模块与BPM模块通过RPC与事件解耦协作:

  • 业务侧变更触发:黑名单服务调用BPM RPC创建流程实例
  • 流程运行:BPM引擎执行流程,产生状态事件
  • 状态回传:BPM状态事件由监听器接收,驱动黑名单业务状态更新

Mermaid Diagram Code:

sequenceDiagram
participant Biz as "黑名单业务"
participant API as "BpmProcessInstanceApi"
participant Impl as "AppBlackListedBpmServiceImpl"
participant Listener as "BpmBlacklistStatusListener"
Biz->>Impl : "createBpm(userId, blackListedId)"
Impl->>API : "createProcessInstance(userId, reqDTO)"
API-->>Impl : "返回流程实例ID"
Impl->>Impl : "更新业务状态为RUNNING"
note over Impl : "等待BPM状态事件"
API-->>Listener : "发布流程状态事件"
Listener->>Impl : "handleBpmResult(event)"
Impl->>Impl : "根据事件更新业务状态"

图表来源

详细组件分析

组件A:黑名单审批流程(BPM)配置

  • 流程定义与模板
    • 使用BpmProcessDefinitionCreateReqDTO定义流程模型、标识、名称、分类、BPMN字节流、表单类型等
    • 模型元信息通过BpmModelMetaInfoRespDTO配置图标、描述、表单类型、表单ID、自定义表单路径
  • 流程实例管理
    • 创建:通过BpmProcessInstanceApi.createProcessInstance发起
    • 查询:通过BpmProcessInstanceApi.getProcessInstance查询运行中实例
    • 取消:通过BpmProcessInstanceApi.cancel取消流程实例
  • 流程变量与业务绑定
    • AppBlacklistedBpmVariable承载业务原因、渠道名称、业务类型等字段,作为流程变量注入
  • 状态监听与回写
    • BpmBlacklistStatusListener监听BPM状态事件,调用AppBlackListedBpmServiceImpl.handleBpmResult回写业务状态

Mermaid Diagram Code:

classDiagram
class IAppBlackListedBpmService {
+createBpm(userId, blackListedId)
+cancelBpm(userId, blackListedId)
+getRunningProcessInstance(blackListedId)
+handleBpmResult(event)
}
class AppBlackListedBpmServiceImpl {
+createBpm(userId, blackListedId)
+cancelBpm(userId, blackListedId)
+getRunningProcessInstance(blackListedId)
+handleBpmResult(event)
}
class AppBlacklistedBpmVariable {
+String businessBpmReason
+String[] channelNames
+String businessBpmType
}
class BpmProcessInstanceApi {
+createProcessInstance(userId, reqDTO)
+getProcessInstance(reqDTO)
+cancel(userId, processInstanceId, reason)
}
class BpmBlacklistStatusListener {
+onEvent(event)
}
IAppBlackListedBpmService <|.. AppBlackListedBpmServiceImpl
AppBlackListedBpmServiceImpl --> BpmProcessInstanceApi : "调用"
AppBlackListedBpmServiceImpl --> AppBlacklistedBpmVariable : "使用"
BpmBlacklistStatusListener --> IAppBlackListedBpmService : "回调"

图表来源

章节来源

组件B:黑名单审批流程模板设计

  • 流程图绘制与节点配置
    • 通过BpmProcessDefinitionCreateReqDTO携带BPMN字节流,定义开始事件、用户任务节点、排他网关、结束事件等
    • 用户任务节点配置审批人策略(如指定角色、动态分配、会签/或签等)
  • 分支条件设置
    • 使用排他网关与条件表达式,结合流程变量businessBpmReason、businessBpmType等,实现不同场景的分支
  • 表单与字段
    • 通过BpmModelMetaInfoRespDTO配置表单类型与表单ID,或自定义表单路径,支撑业务字段录入与展示

Mermaid Diagram Code:

flowchart TD
Start(["开始"]) --> Task1["用户任务:部门主管审批"]
Task1 --> Decision{"条件判断<br/>businessBpmType"}
Decision --> |新增/修改| Approve1["通过"]
Decision --> |删除| Reject1["驳回"]
Approve1 --> End(["结束"])
Reject1 --> End

图表来源

章节来源

组件C:流程实例管理(启动、流转、状态跟踪、历史)

  • 启动流程实例
    • 通过BpmProcessInstanceApi.createProcessInstance(userId, reqDTO)传入业务上下文与流程变量
  • 节点流转
    • 用户任务节点由审批人完成审批动作,触发后续节点
  • 状态跟踪
    • 通过BpmProcessInstanceApi.getProcessInstance查询运行中实例,结合BpmProcessInstanceStatusEnum进行状态管理
  • 历史记录
    • BPM引擎会持久化流程实例与任务历史,便于审计与追溯

Mermaid Diagram Code:

sequenceDiagram
participant Client as "客户端"
participant API as "BpmProcessInstanceApi"
participant Engine as "BPM引擎"
participant Store as "流程存储"
Client->>API : "POST /create"
API->>Engine : "启动流程实例"
Engine->>Store : "写入实例与任务"
Store-->>Engine : "确认"
Engine-->>API : "返回实例ID"
API-->>Client : "实例ID"
Client->>API : "POST /get"
API->>Store : "查询运行中实例"
Store-->>API : "实例列表"
API-->>Client : "实例详情"

图表来源

章节来源

组件D:流程与业务数据绑定(变量、映射、回调)

  • 变量传递
    • AppBlacklistedBpmVariable承载businessBpmReason、channelNames、businessBpmType等字段,作为流程变量注入
  • 数据映射
    • 业务DO与流程变量之间通过服务实现类进行映射与转换
  • 回调处理
    • BpmBlacklistStatusListener监听BPM状态事件,调用handleBpmResult进行业务状态回写

Mermaid Diagram Code:

sequenceDiagram
participant Biz as "黑名单业务"
participant Impl as "AppBlackListedBpmServiceImpl"
participant Var as "AppBlacklistedBpmVariable"
participant API as "BpmProcessInstanceApi"
participant Listener as "BpmBlacklistStatusListener"
Biz->>Impl : "准备业务数据"
Impl->>Var : "填充businessBpmReason/Type/ChannelNames"
Impl->>API : "createProcessInstance(userId, reqDTO)"
API-->>Impl : "返回实例ID"
API-->>Listener : "发布状态事件"
Listener->>Impl : "handleBpmResult(event)"
Impl->>Biz : "更新业务状态"

图表来源

章节来源

组件E:黑名单审批流程的业务背景与交互

  • 非管理员修改黑名单需走审批;管理员修改直接生效
  • 审批进度可在“审批中心”查看
  • 黑名单模块与BPM模块通过接口与事件联动,形成“业务变更 → 审批 → 状态回写”的闭环

Mermaid Diagram Code:

sequenceDiagram
participant User as "普通用户"
participant BL as "黑名单服务"
participant BPM as "BPM服务"
participant Admin as "管理员"
User->>BL : "修改黑名单配置"
BL->>BPM : "createProcessInstance"
BPM-->>User : "审批中"
Admin->>BPM : "审批通过/驳回"
BPM-->>BL : "状态事件"
BL-->>User : "变更生效/失败"

图表来源

章节来源

依赖分析

  • 模块间依赖
    • 黑名单biz依赖BPM API进行流程实例操作
    • 黑名单biz通过事件监听器订阅BPM状态事件
    • BPM biz提供流程定义与表单配置能力
  • 外部依赖
    • 基于Flowable 6实现,流程定义与实例持久化至数据库

Mermaid Diagram Code:

graph LR
BLBiz["黑名单biz"] --> BpmAPI["BPM API"]
BLBiz --> BpmListener["BPM状态监听器"]
BpmBiz["BPM biz"] --> DB["流程数据库表"]
BpmAPI --> DB

图表来源

章节来源

性能考虑

  • 并发与一致性
    • 发起新审批前检查并取消运行中的实例,避免数据不一致
    • 通过事务与行锁保护业务状态更新
  • 缓存与查询
    • 对常用查询结果进行缓存,降低数据库压力
  • 异步处理
    • 审批状态事件采用异步监听,减少主流程阻塞

故障排查指南

  • 常见问题
    • 流程创建失败:检查BPM API返回值与网络连通性
    • 审批状态不同步:检查BpmBlacklistStatusListener是否正确注册与消费事件
    • 重复实例:确认是否存在未取消的运行中实例
  • 调试建议
    • 开启BPM与黑名单模块的日志,定位接口调用链
    • 使用BpmProcessInstanceApi.getProcessInstance核对运行中实例
    • 校验流程变量businessBpmReason/businessBpmType是否正确注入

章节来源

结论

黑名单审批流程通过BPM模块实现了“业务变更 → 审批 → 状态回写”的标准化闭环。借助清晰的流程定义、完善的变量传递与事件监听机制,既能满足复杂业务场景的审批需求,又能保证系统的可观测性与可维护性。

附录

  • 流程相关表结构参考:bpm_process_definition_info
  • 模块描述与实现说明:yudao-module-bpm模块POM与README中的说明

章节来源

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