物料领用单:PO2012050500025:
----------------
铅笔10
橡皮20
直尺5-----------------------------------
提交后,需要审批:
流程如下:
A-B-C
-----------------------------------
A、B都通过。
C点通过,先查库存,看库存是否充足。
是:单据完成。扣除相应库存数量。
否:提示因库存不足,审批失败。
-----------------------------------并发出现点:查完库存后(库存充足)。更新。
详细说明:
步骤1.C点通过,先查库存。结果三样东西库存都是充足的。
步骤2.然后程序执行更新操作。但在步骤1和步骤2中间。由于其它原因使库存不足(如其它人先领用了)。这样就出现了负库存。
正常解决方法:
1.说服客户允许负库存。
2.操作完成后给出提示,实际领用数量(原因)。
3.数据库加数据锁。
首先排除1和2.因为我这客户明确说明不同意。再说3. 个人对锁不是很了解。以下是个人观点:
首先,有锁就要有等待,比如我在领用时,必然这条数据会被锁掉,那么我如果正好有这个东西要入库呢?而实际生活中,入库和出库并不冲突的。
其次,客户网络环境较差,而且我都是很多条数据一起更新的(最笨的sql拼接),我不知道这会不会导致死锁。如果会,下面就免谈了。最后,就是等待,我加了锁,然后解锁,这个过程是要我手动设置的还是会自动解锁。据我所知应该是会自动解锁的。那么页面上呢?告知用户一会再试,还是后台定个方法在那等待执行?求一个实际可行的解决方案。
没分了,就这么点了,请各位谅解。

解决方案 »

  1.   

    库存表中加入trigger,若数量为负直接报错就可以了
      

  2.   

    程序里用把这个更新操作lock一下,lock中首先先判断是否为负数 然后再决定是否更新
      

  3.   

    我说的lock并不是数据库里的什么事务锁  是C#中的lock关键字  注意下
      

  4.   

    上代码吧,因为不知道你使用的是ORM,还是ado.net,也不知道是什么数据库。步骤1.C点通过,先查库存。结果三样东西库存都是充足的。
    步骤2.然后程序执行更新操作。
    --------------------------------------------
    其实针对这种情况,一般数据库上的书都有实例
      

  5.   

    .net
    sql2005公司内部讨论解决方案:前端卡口。
    用户申请的时候就卡口