Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

锁定库存的问题 #376

Open
Mr-90-Style opened this issue Jul 9, 2020 · 9 comments
Open

锁定库存的问题 #376

Mr-90-Style opened this issue Jul 9, 2020 · 9 comments

Comments

@Mr-90-Style
Copy link

目前看项目中锁定库存的逻辑是这样的:
①在产生订单的逻辑中判断库存表中的stock真实库存是否为0,为0则下单失败,否则进行锁定库存对lock_stock字段加一
②在支付的过程对lock_stock和stock字段同时减一

问题:lock_stock字段貌似没有进行任何的逻辑处理,只是设置了一个字段?
这样的后果是,如果后台同时在一段时间下单担均没支付,均在5分钟后才付款,由于下单时只对lock_stock进行加一,并且没有任何逻辑,在5分钟后支付时会对stock和lock_stock减一,那么若此时产生的订单数大于stock数,依然能够进行支付,因为判断库存的逻辑只在生成订单的时候对stock的值进行了判断,那么此时stock就减到负值了

@qaz279593395
Copy link

我也发现了这个bug,应该还要加个if判断当前购物车的数量和 stock-lock_stock是否充足

@qaz279593395
Copy link

/**
 * 判断下单商品是否都有库存
 */
private boolean hasStock(List<CartPromotionItem> cartPromotionItemList) {
    for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
        if (cartPromotionItem.getRealStock()==null||cartPromotionItem.getRealStock() <= 0) {
            return false;
        }
    }
    return true;
}

改为
/**
* 判断下单商品是否都有库存
*/
private boolean hasStock(List cartPromotionItemList) {
for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
if (cartPromotionItem.getRealStock()==null||cartPromotionItem.getRealStock()-cartPromotionItem.getQuantity() < 0) {
return false;
}
}
return true;
}

@zhaidaoxin
Copy link

库存那块没有处理,存在超卖风险

@wangjia2016
Copy link

是的 超卖没有处理

@keyuxiaohui
Copy link

下单库存锁定应该会有并发问题吧?

@wufeiha
Copy link

wufeiha commented Mar 22, 2021

这就是个demo

@99246255
Copy link

这就是个demo

是的,生成订单里面没考虑加锁问题,积分和优惠券一样的问题

@JiyunDeng
Copy link

JiyunDeng commented Jun 3, 2023

就是个demo,实际生产用还不够。还只是单体服务,还没考虑事务。

@lldm
Copy link

lldm commented Jul 10, 2023

的确,这项目里我也找不到关于超卖的处理方法,有的话麻烦告知一声。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants