用 Spring 状态机管理复杂单据状态
结合采购协同服务平台项目,介绍为什么使用 Spring 状态机处理事件驱动的单据状态流转。

采购协同平台中的单据会经历入库、稽核、挂账、入账和归档等环节。随着业务规则增加,单据状态之间的关系也会变复杂。
直接修改状态的问题
如果不同接口都直接修改状态字段,时间久了很难回答几个问题:这个状态为什么变化、哪些状态可以互相转换、重复操作会不会产生异常。
为什么引入状态机
项目中基于 Spring 状态机实现事件驱动的单据状态流转,把状态、事件和转换关系集中管理。这样做的好处是:
- 状态变化路径更清楚;
- 业务事件和状态更新有明确对应关系;
- 新增流程时不必把判断散落在多个接口;
- 更容易对异常流转进行排查。
状态机不是为了让代码看起来更复杂,而是当状态关系确实复杂时,给流程一个统一的管理位置。最终目标是降低维护成本。