mall
mall copied to clipboard
锁定下单商品的所有库存
/** * 锁定下单商品的所有库存 */ private void lockStock(List<CartPromotionItem> cartPromotionItemList) { for (CartPromotionItem cartPromotionItem : cartPromotionItemList) { PmsSkuStock skuStock = skuStockMapper.selectByPrimaryKey(cartPromotionItem.getProductSkuId()); skuStock.setLockStock(skuStock.getLockStock() + cartPromotionItem.getQuantity()); skuStockMapper.updateByPrimaryKeySelective(skuStock); } }
并发下单时 可能导致锁定库存数量小于预期值 (两个线程同时读取到某个sku的库存 第二次save覆盖第一次)
锁定库存肯定是有问题的, 我觉得不如用乐观锁, 先update pms_sku_stock set lock_stock = lock_stock + {quality} where id = {id}; 然后回查一次pms_sku_stock,如果stock - lock_stock < 0, 就回滚事务