跳到主要内容

审批流程生命周期

目录

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

简介

本文围绕黑名单审批流程的生命周期展开,系统性阐述从“创建审批”到“完成/取消”的全过程,包括流程状态定义与转换规则、并发控制与事务管理、回滚与补偿机制、以及监控与审计日志方案。目标读者既包含技术工程师也包含非技术业务人员,力求以循序渐进的方式呈现复杂流程。

项目结构

黑名单审批流程位于“黑名单模块”与“工作流模块”的协作边界上:

  • 黑名单模块负责业务数据与流程变量封装,并在流程结束后执行业务补偿与缓存同步。
  • 工作流模块负责流程实例的创建、状态变更事件发布与监听。

Mermaid Diagram Code:

graph TB
subgraph "黑名单模块"
SVC["AppBlackListedBpmServiceImpl<br/>审批流程服务"]
IFACE["IAppBlackListedBpmService<br/>接口"]
LISTENER["BpmBlacklistStatusListener<br/>流程状态监听器"]
DO["AppBlacklistedDO<br/>业务实体"]
VAR["AppBlacklistedBpmVariable<br/>流程变量"]
end
subgraph "工作流模块"
ENUM_STATUS["BpmProcessInstanceStatusEnum<br/>流程状态枚举"]
ENUM_VALID["BpmBusinessValid<br/>业务有效性枚举"]
EVENT["BpmProcessInstanceStatusEvent<br/>流程状态事件"]
ENUM_METHOD["BpmUserTaskApproveMethodEnum<br/>审批方式"]
ENUM_TYPE["BpmUserTaskApproveTypeEnum<br/>审批类型"]
end
SVC --> IFACE
SVC --> DO
SVC --> VAR
SVC --> ENUM_STATUS
SVC --> ENUM_VALID
SVC --> EVENT
LISTENER --> EVENT
LISTENER --> SVC
ENUM_METHOD --> ENUM_TYPE

图表来源

章节来源

核心组件

  • 黑名单审批服务:负责创建流程、取消流程、查询运行中的流程实例、处理流程结果并执行业务补偿与缓存同步。
  • 流程状态监听器:接收工作流模块发布的流程状态事件,转发至黑名单审批服务进行后续处理。
  • 业务实体与流程变量:承载黑名单业务数据与流程变量,支持草稿机制与有效性标记。
  • 流程状态与业务有效性枚举:统一定义流程状态与业务有效性状态,确保跨模块一致性。

章节来源

架构总览

黑名单审批流程的关键交互路径如下:

  • 发起审批:黑名单服务封装流程变量并调用工作流模块创建流程实例。
  • 流程推进:工作流模块驱动审批节点,最终发布流程状态事件。
  • 结果处理:黑名单监听器接收事件,黑名单服务据此执行业务补偿与缓存同步。

Mermaid Diagram Code:

sequenceDiagram
participant UI as "前端/业务"
participant BL as "黑名单服务<br/>AppBlackListedBpmServiceImpl"
participant WF as "工作流模块"
participant LSN as "黑名单监听器<br/>BpmBlacklistStatusListener"
UI->>BL : "提交审批请求"
BL->>WF : "创建流程实例"
WF-->>BL : "返回流程实例ID"
WF-->>LSN : "发布流程状态事件"
LSN->>BL : "handleBpmResult(event)"
BL->>BL : "根据状态执行补偿与缓存同步"
BL-->>UI : "返回处理结果"

图表来源

详细组件分析

流程状态与转换规则

  • 流程状态枚举涵盖:未开始、审批中、审批通过、审批不通过、已取消;并提供结束态判断与状态查询辅助方法。
  • 业务有效性枚举涵盖:未生效、已生效、已生效且做修改标记、已生效且做移除标记等,用于区分主表与关联表的草稿与生效策略。

Mermaid Diagram Code:

stateDiagram-v2
[*] --> 未开始
未开始 --> 审批中 : "创建流程实例"
审批中 --> 审批通过 : "审批通过"
审批中 --> 审批不通过 : "审批不通过"
审批中 --> 已取消 : "业务取消/系统取消"
审批通过 --> [*]
审批不通过 --> [*]
已取消 --> [*]

图表来源

章节来源

流程创建与并发控制

  • 并发检查:在创建流程前,若检测到存在运行中的流程实例,将先取消这些实例,再抛出提示,避免业务与流程数据不一致。
  • 乐观锁:创建流程后再次查询并加锁更新业务表,防止并发覆盖。
  • 事务管理:创建流程与更新业务状态均置于同一事务中,保证原子性。

Mermaid Diagram Code:

flowchart TD
Start(["进入创建流程"]) --> CheckRun["查询是否存在运行中实例"]
CheckRun --> HasRun{"存在运行中实例?"}
HasRun --> |是| CancelRun["取消所有运行中实例"]
CancelRun --> ThrowErr["抛出提示:请稍后刷新"]
HasRun --> |否| BuildVar["构建流程变量"]
BuildVar --> CreatePI["调用工作流创建流程实例"]
CreatePI --> LockUpdate["再次查询并加锁更新业务状态"]
LockUpdate --> End(["完成"])
ThrowErr --> End

图表来源

章节来源

流程取消与状态修复

  • 取消流程:业务侧主动取消时,先查询并逐个取消运行中的流程实例,随后将业务状态重置为“未开始”,确保状态一致。
  • 状态修复:当发现业务与流程状态不一致时,通过取消运行中实例与事务内更新,实现快速修复。

章节来源

审批决策与结果处理

  • 审批决策:工作流模块通过用户任务的审批方式与类型决定流程走向(如会签、或签、依次审批、自动通过/拒绝)。
  • 结果处理:黑名单监听器接收流程状态事件,黑名单服务依据事件状态更新业务表的有效性与草稿字段,并执行关联表的补偿与缓存同步。

Mermaid Diagram Code:

classDiagram
class AppBlackListedBpmServiceImpl {
+createBpm(userId, blackListedId)
+cancelBpm(userId, blackListedId)
+getRunningProcessInstance(id)
+handleBpmResult(event)
}
class IAppBlackListedBpmService {
<<interface>>
+createBpm(userId, blackListedId)
+cancelBpm(userId, blackListedId)
+getRunningProcessInstance(id)
+handleBpmResult(event)
}
class BpmBlacklistStatusListener {
+onEvent(event)
}
class AppBlacklistedDO {
+Long id
+Integer bpmStatus
+Integer valid
+String processInstanceId
+BpmDraft draft
}
class AppBlacklistedBpmVariable {
+String businessBpmReason
+String businessBpmType
+String[] channelNames
}
class BpmProcessInstanceStatusEvent {
+String id
+String processDefinitionKey
+Integer status
+String businessKey
}
AppBlackListedBpmServiceImpl ..|> IAppBlackListedBpmService
BpmBlacklistStatusListener --> AppBlackListedBpmServiceImpl : "调用处理"
AppBlackListedBpmServiceImpl --> AppBlacklistedDO : "读写"
AppBlackListedBpmServiceImpl --> AppBlacklistedBpmVariable : "封装变量"
BpmBlacklistStatusListener --> BpmProcessInstanceStatusEvent : "接收事件"

图表来源

章节来源

回滚与补偿机制

  • 主表补偿:根据业务有效性状态与草稿字段,执行新增、更新或删除的补偿逻辑;审批不通过时仅更新流程状态,不改变业务数据。
  • 关联表补偿:针对渠道、国家(地区)、MAC三类关联表,依据草稿有效性进行“新增/删除”补偿,并同步更新缓存。
  • 缓存同步:补偿完成后,统一移除或更新黑名单相关缓存,确保缓存与数据库一致。

Mermaid Diagram Code:

flowchart TD
Enter(["收到流程结果事件"]) --> SetStatus["更新业务表流程状态"]
SetStatus --> IsApprove{"审批通过?"}
IsApprove --> |否| Exit(["仅更新流程状态,结束"])
IsApprove --> |是| CheckValid{"主表有效性状态"}
CheckValid --> Delete["删除主表并移除缓存"]
CheckValid --> No["新增:保持有效"]
CheckValid --> Update["更新:应用草稿字段"]
Delete --> Compensate["补偿关联表:渠道/区域/MAC"]
No --> Compensate
Update --> Compensate
Compensate --> SyncCache["同步缓存"]
SyncCache --> Done(["完成"])

图表来源

章节来源

并发控制与事务管理

  • 乐观锁:在创建流程后再次查询并加锁更新业务状态,避免并发覆盖。
  • 事务管理:创建流程与更新业务状态、处理流程结果均置于事务中,保证原子性与一致性。
  • 分布式锁:框架提供基于 Redis 的分布式锁工具,可用于跨服务或跨进程的资源互斥控制(如定时任务或补偿任务的幂等执行)。

章节来源

监控与审计日志

  • 事件日志:黑名单监听器在接收到流程状态事件时输出日志,便于定位流程状态变化。
  • 业务日志:黑名单服务在创建流程、取消流程、处理结果等关键节点输出日志,记录操作人、业务主键与状态变化。
  • 建议:结合链路追踪与统一日志采集,对流程关键路径进行埋点,形成端到端的审计轨迹。

章节来源

依赖关系分析

  • 黑名单服务依赖工作流模块的流程实例 API 与状态枚举,确保流程状态与业务状态的一致映射。
  • 监听器依赖事件模型,实现解耦的异步处理。
  • 业务实体与流程变量作为数据契约,贯穿流程创建与结果处理阶段。

Mermaid Diagram Code:

graph LR
BL_SVC["黑名单服务"] --> WF_API["工作流API"]
BL_SVC --> ENUMS["状态/有效性枚举"]
BL_SVC --> DO_VAR["业务实体/流程变量"]
LSN["黑名单监听器"] --> EVENT["流程状态事件"]
LSN --> BL_SVC

图表来源

章节来源

性能考量

  • 批量补偿:在处理关联表补偿时,优先使用批量更新与批量删除,减少多次往返。
  • 缓存同步:采用增量更新(新增/删除集合)的方式同步缓存,降低全量写入成本。
  • 日志采样:在高并发场景下,对非关键路径日志进行采样输出,避免日志风暴影响性能。

故障排查指南

  • 并发冲突:若出现“正在运行的流程实例”提示,先取消旧实例,再重试;检查业务状态与流程状态是否一致。
  • 审批不通过:仅更新流程状态,业务数据不变;确认草稿字段与有效性状态是否正确。
  • 缓存不一致:补偿完成后检查缓存是否同步;必要时触发缓存重建任务。
  • 事件丢失:核查监听器是否正确注册与消费;关注事件主题与序列化格式。

章节来源

结论

黑名单审批流程通过“业务数据+流程变量+状态枚举”的协同,实现了从创建到完成的闭环管理。配合乐观锁、事务与缓存补偿,确保了数据一致性与高性能。建议在生产环境中强化监控与审计,完善异常与回滚预案,持续优化补偿与缓存同步策略,以应对更复杂的业务场景。

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