在库存业务中,存在着一种反向业务,这种业务的单据也叫红单,这种单据的数量列表界面显示尾负数,打开编辑界面显示为红色的数字。
但是有的时候明明是红单,从列表界面看数量却是正数。
这是为什么呢?
先说个故事,大家就可以知道原因了。
小K是个快乐的打工人,一直负责星瀚产品的二开。有一天他接到一个需求,需要在销售出库单上加一个字段,并且添加一个按钮,在按钮点击的时候更新这个字段。小K一听,这个需求不是so easy。噼里啪啦3分钟搞定。
先加个扩展字段:
再加个按钮:
按钮绑个操作插件:
插件代码给新增的扩展字段赋值:
小测一下:
没毛病,666。提交,上线。
后来,用户反馈出现系统出现很奇怪的问题,销售出库明明红单,但是从列表看数量却是正的。
推了应收未核销数量也有问题。
小K心想,这个肯定不关我的事,我就更新了一个扩展字段,肯定是其他人写的bug。
但是有点心虚哈,再测试一下。
点击扩展功能前:
点击扩展功能后:
不对劲,有内鬼。怎么点了扩展功能之后红单数量就变正了?
作为一个资深打工人,不能慌,赶紧调试一下代码。
获取到的对象里数量的值:
调用save后平台产生的sql:
原来如此,操作编辑界面功能时,获取到的对象是前台的对象,这个对象中数量是正数,当调用save方法的时候,和后台字段的值(负数)对比,发现发生了改变,生成update语句将数量更新为正数。
Emmm,为什么红单在编辑界面上的数量是正数呢?
再看看这个值,有负号吗?没有呀!需求就是要这样展示负数,所以在展示界面的时候,标品把对象中负号干掉了。此时做编辑界面操作的时候,取到的对象里的数量就是正的。
那怎么解决这个问题呢?
两个方案:
1、更新数据的时候重新查询一下数据,只查要更新的字段
2、通过sql直接更新
还好我技高一筹,问题解决。
通过这个故事我们学到了什么?
SaveServiceHelper一定要慎用!