首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

单据状态修改问题

  •  
  •   xalilo · 62 天前 · 728 次点击
    这是一个创建于 62 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

        1
    limuyan44   62 天前
    状态机?
        2
    maowu   62 天前 via Android
    你可能需要的是有限状态机🤔
        3
    xalilo   62 天前
    @limuyan44 就是一个业务单,状态 state 分为新建,执行,检查,结束这样。
        4
    xalilo   62 天前
    @limuyan44 我去看看
        5
    SmallDream1995   62 天前
    马克一下。。。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3666 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 10:12 · PVG 18:12 · LAX 03:12 · JFK 06:12
    ♥ Do have faith in what you're doing.