单据状态修改问题

2019-08-21 20:27:28 +08:00
 xalilo

假设一个单据整个流程有 10 个节点状态,每次状态变更时候都可能发生:状态被改成之前的已执行过的状态这种类似错误。为了防止这种问题,每次变更时候要校验当前状态能不能改成指定状态,并且要加锁防止并发。

由于节点状态比较多,那么每个点都要加锁并且校验当前状态是否合法,这很容易遗漏,导致出现状态混乱的问题。

现在想到的办法: 1、增加一个接口,StateChange#change(合法的上游状态,要改的目标状态); pojo 类实现这个接口,实现的时候通过悲观锁 for update 查询,锁住数据,并校验数据库当前状态是不是在合法的上游状态数组里面,符合就是调用 setState()给该单据对象的 state 字段赋值。 2、另外一种实现方法,定义一个 State 接口,每种状态都实现这个接口,然后变更单据状态都通过状态对象来执行,这样就可以在对象里封装锁和校验的逻辑。

想问问大家都是怎么解决这种问题的?

2779 次点击
所在节点    Java
5 条回复
limuyan44
2019-08-21 20:47:37 +08:00
状态机?
maowu
2019-08-21 21:03:07 +08:00
你可能需要的是有限状态机🤔
xalilo
2019-08-21 21:09:22 +08:00
@limuyan44 就是一个业务单,状态 state 分为新建,执行,检查,结束这样。
xalilo
2019-08-21 21:10:33 +08:00
@limuyan44 我去看看
SmallDream1995
2019-08-22 10:07:50 +08:00
马克一下。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/593984

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX