返回 Bug 清单
BUG-0336project-47高已修复backend-logic

前置校验状态机漏态 —— 售后检查只认 PENDING,五个在途状态全部绕过

发现:2026-10-01验证:2026-10-09置信度:90%

症状

处于退款中/已批准/取货中/验机中/换机中的订单没被前置校验拦住,进入重复退款或状态冲突。

根因

校验条件用的是散落的字面量而非枚举全集——每加一个状态,校验点不会自动跟上;『只校验我知道的』而不是『校验全部在途状态』。

修复方案

1) 前置校验改为『状态枚举的在途集合』驱动:Set.of(REFUNDING, APPROVED, PICKUP, INSPECTING, EXCHANGING, PENDING),集合从枚举类派生; 2) 新增枚举值时编译器/单测强制同步在途集合(枚举实现接口或单元测试遍历全集断言); 3) 判断语义写『in (在途全集)』而不是『== 某个状态』。

检测命令

grep -rn 'PENDING' --include='*.java' | grep -i 'refund\|precheck'  # 核对是否漏在途状态

错误签名

退款前置校验 if status==PENDING 才拦截;REFUNDING/APPROVED/PICKUP/INSPECTING/EXCHANGING 全部不在判断里

技术信息

来源项目

project-47

标签

state-machine, refund, enum, business-logic