|
@@ -156,32 +156,31 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
|
|
|
// 1、校验秒杀活动是否存在
|
|
|
SeckillActivityDO seckillActivity = getSeckillActivity(updateStockReqDTO.getActivityId());
|
|
|
// 1.1、校验库存是否充足
|
|
|
- if (seckillActivity.getStock() < updateStockReqDTO.getCount()) {
|
|
|
+ if (seckillActivity.getTotalStock() < updateStockReqDTO.getCount()) {
|
|
|
throw exception(SECKILL_ACTIVITY_UPDATE_STOCK_FAIL);
|
|
|
}
|
|
|
|
|
|
- // 2、更新活动库存
|
|
|
- // TODO @puhui999:考虑下并发更新
|
|
|
- seckillActivity.setStock(seckillActivity.getStock() + updateStockReqDTO.getCount());
|
|
|
- seckillActivity.setTotalStock(seckillActivity.getTotalStock() - updateStockReqDTO.getCount());
|
|
|
- updateSeckillActivity(seckillActivity);
|
|
|
-
|
|
|
- // 3、获取活动商品
|
|
|
+ // 2、获取活动商品
|
|
|
List<SeckillProductDO> products = getSeckillProductListByActivityId(updateStockReqDTO.getActivityId());
|
|
|
- // 3.1、过滤出购买的商品
|
|
|
+ // 2.1、过滤出购买的商品
|
|
|
SeckillProductDO product = findFirst(products, item -> ObjectUtil.equal(updateStockReqDTO.getItem().getSkuId(), item.getSkuId()));
|
|
|
- // 3.2、检查活动商品库存是否充足
|
|
|
+ // 2.2、检查活动商品库存是否充足
|
|
|
boolean isSufficient = product == null || (product.getStock() == 0 || (product.getStock() < updateStockReqDTO.getItem().getCount()) || (product.getStock() - updateStockReqDTO.getItem().getCount()) < 0);
|
|
|
if (isSufficient) {
|
|
|
throw exception(SECKILL_ACTIVITY_UPDATE_STOCK_FAIL);
|
|
|
}
|
|
|
|
|
|
- // 4、更新活动商品库存
|
|
|
- SeckillProductDO updateProduct = new SeckillProductDO();
|
|
|
- updateProduct.setId(product.getId());
|
|
|
- updateProduct.setStock(product.getStock() - updateStockReqDTO.getItem().getCount());
|
|
|
- // TODO @puhui999:考虑下并发更新
|
|
|
+ // 3、更新活动商品库存
|
|
|
+ int itemRow = seckillProductMapper.updateActivityStock(product.getId(), updateStockReqDTO.getItem().getCount());
|
|
|
+ if (itemRow == 0) {
|
|
|
+ throw exception(SECKILL_ACTIVITY_UPDATE_STOCK_FAIL);
|
|
|
+ }
|
|
|
|
|
|
+ // 4、更新活动库存
|
|
|
+ int row = seckillActivityMapper.updateActivityStock(seckillActivity.getId(), updateStockReqDTO.getCount());
|
|
|
+ if (row == 0) {
|
|
|
+ throw exception(SECKILL_ACTIVITY_UPDATE_STOCK_FAIL);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|