# M04-B 订单状态机 - 日期:2026-06-20 - 起始 commit:`725028c` - 工程 commit:`40c891f` - ENGINEERING_DELTA=YES - 子阶段状态:DONE,已 push 且 `HEAD == origin/main` ## 工程增量 - 建立 DRAFT、PENDING_PAYMENT、PAID、RESERVED、IN_PROGRESS、FINISHED、CANCELLED、REFUNDING、REFUNDED、CLOSED 状态机。 - API 只接受受控业务动作,由服务端映射目标状态并校验合法迁移。 - 每次迁移在订单行锁事务中记录旧状态、新状态、操作者、来源、原因、traceId 和状态版本。 - 相同订单与 traceId 重试幂等,不重复写历史或审计。 - 状态迁移同步消费/释放房间预占,并在终态撤销现场访问授权;订单归属历史仍可查询。 - 过期待支付订单关闭时补状态历史。 ## 验证 - Windows `npm test` 与仓库全量门禁通过。 - WSL MySQL 8.4.9 临时库执行 `up → verify → down → up → verify` 通过。 - 迁移语句:up 60、verify 41、down 56。 - 实测待支付→已支付→已预留→使用中→完成→关闭全生命周期、非法迁移拒绝、重复 trace 幂等、历史与审计完整、关闭释放预占并撤销现场权限。 ## 后续 M04-C 实现续费、取消规则、换房和管理员调整,并覆盖冲突与事务回滚。