master
袁野 5 months ago
parent 341d24654b
commit 0309701a34
  1. 2
      service/src/main/java/com/hfkj/service/goods/GoodsMsgService.java
  2. 43
      service/src/main/java/com/hfkj/service/goods/impl/GoodsMsgServiceImpl.java

@ -83,6 +83,6 @@ public interface GoodsMsgService {
* @param type 1 增加库存 2 减少库存
* @return
*/
void editSaleNum(Long goodsId , Integer num , Integer type) throws Exception;
void editSaleNum(Long goodsId , Integer num , Integer type);
}

@ -1,5 +1,8 @@
package com.hfkj.service.goods.impl;
import com.hfkj.common.exception.ErrorCode;
import com.hfkj.common.exception.ErrorHelp;
import com.hfkj.common.exception.SysCode;
import com.hfkj.dao.GoodsMsgMapper;
import com.hfkj.entity.GoodsBrand;
import com.hfkj.entity.GoodsMsg;
@ -101,33 +104,41 @@ public class GoodsMsgServiceImpl implements GoodsMsgService {
}
@Override
public void editSaleNum(Long goodsId, Integer num , Integer type) throws Exception {
public void editSaleNum(Long goodsId, Integer num , Integer type) {
String key = "GOODS" + goodsId;
// 分布式锁占坑
Boolean lock = redisTemplate.opsForValue().setIfAbsent(key, goodsId);
try {
// 分布式锁占坑
Boolean lock = redisTemplate.opsForValue().setIfAbsent(key, goodsId);
GoodsMsg goodsMsg = queryDetail(goodsId);
GoodsMsg goodsMsg = queryDetail(goodsId);
if (goodsMsg != null) {
if (goodsMsg != null) {
if(Boolean.TRUE.equals(lock)) {
if(Boolean.TRUE.equals(lock)) {
if (type == 1) {
goodsMsg.setSaleNum(goodsMsg.getSaleNum() + num);
} else if (type == 2){
goodsMsg.setSaleNum(goodsMsg.getSaleNum() - num);
if (type == 1) {
goodsMsg.setSaleNum(goodsMsg.getSaleNum() + num);
} else if (type == 2){
goodsMsg.setSaleNum(goodsMsg.getSaleNum() - num);
}
update(goodsMsg);
} else {
// 加锁失败,重试
Thread.sleep(100);
editSaleNum(goodsId , num , type);
}
update(goodsMsg);
} else {
// 加锁失败,重试
Thread.sleep(100);
editSaleNum(goodsId , num , type);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 删除key,释放锁
redisTemplate.delete(key);
}
}

Loading…
Cancel
Save