|
|
@@ -193,8 +193,11 @@ public class AskGoodsServiceImpl implements AskGoodsService {
|
|
|
map.put("msg", "500");
|
|
|
map.put("errMsg", "失败");
|
|
|
} finally {
|
|
|
- //释放锁
|
|
|
- lock.unlock();
|
|
|
+ //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
|
|
|
+ if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
|
|
+ //释放锁
|
|
|
+ lock.unlock();
|
|
|
+ }
|
|
|
}
|
|
|
return map;
|
|
|
}
|
|
|
@@ -254,8 +257,11 @@ public class AskGoodsServiceImpl implements AskGoodsService {
|
|
|
map.put("msg", "500");
|
|
|
map.put("errMsg", "失败");
|
|
|
} finally {
|
|
|
- //释放锁
|
|
|
- lock.unlock();
|
|
|
+ //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
|
|
|
+ if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
|
|
+ //释放锁
|
|
|
+ lock.unlock();
|
|
|
+ }
|
|
|
}
|
|
|
return map;
|
|
|
}
|
|
|
@@ -613,8 +619,11 @@ public class AskGoodsServiceImpl implements AskGoodsService {
|
|
|
map.put("errMsg", "失败");
|
|
|
e.printStackTrace();
|
|
|
} finally {
|
|
|
- //释放锁
|
|
|
- lock.unlock();
|
|
|
+ //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
|
|
|
+ if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
|
|
+ //释放锁
|
|
|
+ lock.unlock();
|
|
|
+ }
|
|
|
}
|
|
|
return map;
|
|
|
}
|
|
|
@@ -744,6 +753,9 @@ public class AskGoodsServiceImpl implements AskGoodsService {
|
|
|
@Override
|
|
|
public Map<String, Object> addWarehouseTransferVitrual(AskGoods askGoods) {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
+ //redis并发锁
|
|
|
+ RLock lock = redissonClient.getLock(askGoods.getUniqueCode());
|
|
|
+ lock.lock();
|
|
|
try{
|
|
|
Map<String, Object> mapVal = askGoodsMapper.getScanIsNot(askGoods);
|
|
|
if((Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) == 0){
|
|
|
@@ -770,6 +782,12 @@ public class AskGoodsServiceImpl implements AskGoodsService {
|
|
|
e.printStackTrace();
|
|
|
map.put("msg", "500");
|
|
|
map.put("errMsg", "失败");
|
|
|
+ }finally {
|
|
|
+ //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
|
|
|
+ if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
|
|
+ //释放锁
|
|
|
+ lock.unlock();
|
|
|
+ }
|
|
|
}
|
|
|
return map;
|
|
|
}
|