在秒杀业务中,会出现当只剩一个库存时,但有多个人仍然秒杀成功,且都减库存成功,因此,在减库存,更新数据库的时候,需要在sql语句上进行判断,是否库存大于0.
@Update("update miaosha_goods set stock_count = stock_count - 1 where goods_id = #{goodsId} and stock_count > 0")void reduceStock(MiaoshaGoods g);
这样就不会出现库存为负的情况。
针对超卖的情况,一个人发出了两个请求,相隔时间很短,因此,在进入我们秒杀逻辑的时候,如下
//判断库存
GoodsVo goods =goodsService.getGoodsVoByGoodsId(goodsId);
Integer stock=goods.getStockCount();if(stock<=0){
model.addAttribute("errmsg", CodeMsg.MIAO_SHA_OVER.getMsg());returnResult.error(CodeMsg.MIAO_SHA_OVER);
}//判断是否已经秒杀到了
MiaoshaOrder order=orderService.getMiaoshaOrderByUserIdGoodsId(user.getId(), goodsId);if(order!=null){returnResult.error(CodeMsg.REPEATE_MIAOSHA);
}//进行秒杀逻辑//减库存,下订单,写入秒杀订单
OrderI