|
|
@@ -42,24 +42,22 @@ public class CesGoodStockRecordsServiceImpl extends ServiceImpl<CesGoodStockReco
|
|
|
|
|
|
@Transactional(rollbackOn = Exception.class)
|
|
|
public Result create(CesGoodStockRecordsDto dto){
|
|
|
-
|
|
|
/**
|
|
|
* 这里需要锁资源 分布式事务锁 采用redis 实现 考虑到数据操作的原子性 (设置redis 锁 统一要同步设置过期时间 60 秒 )
|
|
|
*/
|
|
|
String key = String.format("stock::record::create:%s:%s", dto.getGoodId(),dto.getHotelId());
|
|
|
Lock lock = redisLockRegistry.obtain(key); //获取锁资源
|
|
|
|
|
|
- //查询商品是否存在
|
|
|
- CesGoods goods = goodsService.fetchByIdAndHotelId(dto.getGoodId(),dto.getHotelId());
|
|
|
- if(ObjectUtils.isEmpty(goods)) return Result.error("商品数据未找到!");
|
|
|
-
|
|
|
logger.info("lock begin");
|
|
|
logger.info("创建 redis 资源锁 key:{}", key);
|
|
|
try{
|
|
|
//开启锁
|
|
|
lock.lock();
|
|
|
logger.info("开启 redis 资源锁");
|
|
|
-
|
|
|
+
|
|
|
+ //查询商品是否存在
|
|
|
+ CesGoods goods = goodsService.fetchByIdAndHotelId(dto.getGoodId(),dto.getHotelId());
|
|
|
+ if(ObjectUtils.isEmpty(goods)) return Result.error("商品数据未找到!");
|
|
|
//业务逻辑处理 减库存 加库存 这样写更清晰
|
|
|
int num = dto.getGoodNum().intValue();
|
|
|
int count = goods.getInventory().intValue();
|