仓库实际使用 PDA 和开发测试完全是两个场景。
开发时:
扫一下
等接口回来
再扫一下
仓库工作人员可能是:
哒哒哒哒哒
连续高速扫码。
这时候很容易出现:
扫码事件
↓
调用接口
↓
接口还没返回
↓
下一次扫码又来了
如果没有做保护,就可能产生:
· 重复入库;
· 重复出库;
· 重复扣库存;
· 重复生成记录。
所以扫码系统最好至少考虑三层保护。
第一层:扫码层去重
例如:
相同条码
300ms 内
只返回一次
第二层:页面提交锁
例如:
submitting = true
当前业务还在处理时,根据业务规则决定:
忽略后续扫码
或者:
加入扫码队列
第三层:后端幂等
前端再怎么防,也不能完全替代服务端。
例如使用:
业务单号
barcode
operation
生成幂等键。
即使客户端真的请求两次,服务端也不能重复扣库存。
我现在的做法是:
SL-ScanBridge 负责设备输入与基础扫码防抖,业务页面负责业务锁,服务端负责最终幂等。
这三个层级最好不要混在一起。 插件地址:ext.dcloud.net.cn/plugin?id=2…