3. 审批流核心模型:审批流状态机设计、节点流转规则、超时与驳回机制
审批流是集成环境回放中保障数据一致性与业务合规性的关键基础设施。在微服务架构下,审批流本质是一个有限状态机(FSM),其核心模型需要精确描述状态迁移、节点路由、超时处理与驳回回退。本节从状态机设计、节点流转规则、超时与驳回机制三个维度展开,为后续契约测试与故障排查奠定模型基础。
3.1 审批流状态机设计
审批流状态机以“审批单”为实体,定义其在整个生命周期中的状态集合与合法迁移路径。典型状态机包含以下核心状态:
| 状态编码 | 状态名称 | 说明 | 可触发动作 |
|---|---|---|---|
| DRAFT | 草稿 | 审批单创建后未提交 | 提交、撤销 |
| PENDING | 审批中 | 已提交,等待当前节点审批人处理 | 同意、驳回、转办、加签 |
| APPROVED | 已通过 | 所有节点均审批通过 | 归档、触发后续回调 |
| REJECTED | 已驳回 | 任一节点驳回且未配置驳回回退 | 重新提交、关闭 |
| REVOKED | 已撤销 | 提交人主动撤销 | 无 |
| TIMEOUT | 超时 | 节点超时未处理,触发自动策略 | 自动转交、自动驳回、升级通知 |
| TERMINATED | 已终止 | 异常终止(如关联数据被删除) | 无 |
状态机设计遵循以下原则:
- 确定性迁移:每个状态在给定动作下只能迁移到一个确定的目标状态。
- 幂等性:重复触发同一动作不应改变状态机一致性。
- 可追溯性:每次状态变更必须记录操作人、时间戳、变更原因。
实践要点:在集成环境回放中,状态机快照是契约测试的输入之一。建议将状态机定义以 JSON Schema 形式暴露,供消费者驱动契约(CDC)验证。
3.2 节点流转规则
审批流由多个审批节点串联或并联组成,每个节点包含审批人、审批策略、流转条件。节点流转规则决定了审批单在节点间的路由逻辑。
3.2.1 节点类型
- 单人审批节点:任一审批人同意即通过,任一审批人驳回即驳回。
- 会签节点:需所有审批人同意才通过;任一驳回则驳回。
- 或签节点:任一审批人同意即通过;需所有审批人驳回才驳回。
- 条件分支节点:根据业务条件(如金额、部门)动态选择后续节点。
- 并行分支节点:同时触发多个子节点,所有子节点完成后汇聚。
3.2.2 流转规则配置
节点流转规则通常以 DSL 或配置表形式定义,以下为典型配置字段:
| 字段 | 类型 | 说明 | 示例 |
|---|---|---|---|
| nodeId | String | 节点唯一标识 | approve_director |
| nodeType | Enum | 节点类型 | SINGLE / COUNTERSIGN / OR_SIGN |
| assigneeRule | JSON | 审批人分配规则(角色、组织、表达式) | {"role": "director", "dept": "${dept}"} |
| nextNodes | List | 后续节点列表,支持条件路由 | [{"condition": "amount > 10000", "nodeId": "approve_vp"}] |
| timeout | Integer | 节点超时时间(秒) | 86400 |
| timeoutAction | Enum | 超时后自动动作 | ESCALATE / AUTO_REJECT / AUTO_APPROVE |
契约测试关联:节点流转规则是消费者与提供者之间的核心契约。消费者(审批引擎调用方)需约定 nodeId、assigneeRule 的格式;提供者(审批引擎)需保证规则解析与路由结果符合预期。在集成环境回放中,规则解析异常是高频故障点。
3.3 超时与驳回机制
超时与驳回是审批流中两个关键的异常处理路径,直接影响回放测试的覆盖范围与故障定位效率。
3.3.1 超时机制
超时机制用于防止审批单因审批人长时间未处理而阻塞流程。超时处理策略包括:
- 升级通知(ESCALATE):超时后通知上级审批人或管理员,节点状态不变。
- 自动驳回(AUTO_REJECT):超时后自动驳回审批单,状态迁移至 REJECTED。
- 自动同意(AUTO_APPROVE):超时后自动通过当前节点(需业务允许)。
- 自动转交(AUTO_TRANSFER):超时后将审批任务转交给备选审批人。
超时检测通常由后台定时任务或事件驱动机制触发。在集成环境回放中,超时时间被大幅缩短(如从 24 小时缩短为 30 秒),以加速测试流程。
3.3.2 驳回机制
驳回机制定义了审批单被拒绝后的处理路径,分为两种模式:
| 模式 | 行为 | 适用场景 | 回放影响 |
|---|---|---|---|
| 直接终止 | 驳回后审批单进入 REJECTED 状态,流程结束 | 合规性要求严格的场景 | 回放需验证驳回后回调是否被正确触发 |
| 驳回回退 | 驳回后审批单回退到指定历史节点,允许修改后重新提交 | 需要修正数据的业务场景 | 回放需验证回退后状态恢复与数据一致性 |
驳回回退的实现需要状态机支持“逆向迁移”,且需保证回退节点的审批人、审批意见等上下文数据完整恢复。
3.4 状态机与契约测试的联动
在集成环境回放中,审批流状态机与契约测试的联动体现在以下三个层面:
- 状态契约:消费者约定审批单状态枚举值及迁移路径,提供者保证状态机实现与契约一致。
- 超时契约:消费者约定超时时间与超时动作的映射关系,提供者保证超时触发后的状态迁移正确。
- 驳回契约:消费者约定驳回回退的目标节点与数据恢复规则,提供者保证回退后上下文完整。
常见故障模式:在回放测试中,超时时间压缩后可能触发竞态条件(如超时与审批人操作同时发生),导致状态机进入未定义状态。建议在契约测试中增加“并发操作”场景的覆盖率。
通过将审批流核心模型显式化为状态机图、节点规则表、超时/驳回策略,团队可以在集成环境回放中快速定位状态迁移异常、规则解析失败、超时处理不一致等故障,提升排查效率。