From be646da6a960105511e719e39deb9c52b3ff2b83 Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期二, 03 九月 2024 10:03:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master-v2' into master-v2
---
src/main/java/com/mzl/flower/service/payment/OrderService.java | 82 ++++++++++++++++++++++++++--------------
src/main/java/com/mzl/flower/service/payment/RedisLockService.java | 1
2 files changed, 54 insertions(+), 29 deletions(-)
diff --git a/src/main/java/com/mzl/flower/service/payment/OrderService.java b/src/main/java/com/mzl/flower/service/payment/OrderService.java
index a332165..9660450 100644
--- a/src/main/java/com/mzl/flower/service/payment/OrderService.java
+++ b/src/main/java/com/mzl/flower/service/payment/OrderService.java
@@ -151,47 +151,71 @@
@Autowired
private PointGoodsService pointGoodsService;
+ @Autowired
+ private RedisLockService lockService;
+
public void changeFlower2Cart(CartSaveDTO dto) {
String userId = SecurityUtils.getUserId();
- Cart c = cartMapper.selectOne(new QueryWrapper<Cart>()
- .eq("create_by", userId).eq("flower_id", dto.getId()));
- if (c == null) {
- if (dto.getNum() <= 0) {
- throw new ValidationException("数量不能小于等于0,请刷新页面重试");
- }
- c = new Cart();
- c.setFlowerId(dto.getId());
- c.setNum(dto.getNum());
- c.create(userId);
+ String key = userId + "_" + dto.getId();
+ boolean lock = lockService.getObjectLock(RedisLockService.LOCK_KEY_CART_, key);
+ if(!lock){
+ return;
+ }
- cartMapper.insert(c);
- } else {
- c.setNum(c.getNum() + dto.getNum());
- c.update(userId);
- if (c.getNum() <= 0) {
- cartMapper.deleteById(c.getId());
+ try {
+ Cart c = cartMapper.selectOne(new QueryWrapper<Cart>()
+ .eq("create_by", userId).eq("flower_id", dto.getId()));
+ if (c == null) {
+ if (dto.getNum() <= 0) {
+ throw new ValidationException("数量不能小于等于0,请刷新页面重试");
+ }
+ c = new Cart();
+ c.setFlowerId(dto.getId());
+ c.setNum(dto.getNum());
+ c.create(userId);
+
+ cartMapper.insert(c);
} else {
- cartMapper.updateById(c);
+ c.setNum(c.getNum() + dto.getNum());
+ c.update(userId);
+ if (c.getNum() <= 0) {
+ cartMapper.deleteById(c.getId());
+ } else {
+ cartMapper.updateById(c);
+ }
}
+ } finally {
+ lockService.releaseObjectLock(RedisLockService.LOCK_KEY_CART_, key);
}
}
public void saveFlower2Cart(CartSaveDTO dto) {
String userId = SecurityUtils.getUserId();
- Cart c = cartMapper.selectOne(new QueryWrapper<Cart>()
- .eq("create_by", userId).eq("flower_id", dto.getId()));
- if (c == null) {
- c = new Cart();
- c.setFlowerId(dto.getId());
- c.setNum(dto.getNum());
- c.create(userId);
- cartMapper.insert(c);
- } else {
- c.setNum(dto.getNum());
- c.update(userId);
+ String key = userId + "_" + dto.getId();
+ boolean lock = lockService.getObjectLock(RedisLockService.LOCK_KEY_CART_, key);
+ if(!lock){
+ return;
+ }
- cartMapper.updateById(c);
+ try {
+ Cart c = cartMapper.selectOne(new QueryWrapper<Cart>()
+ .eq("create_by", userId).eq("flower_id", dto.getId()));
+ if (c == null) {
+ c = new Cart();
+ c.setFlowerId(dto.getId());
+ c.setNum(dto.getNum());
+ c.create(userId);
+
+ cartMapper.insert(c);
+ } else {
+ c.setNum(dto.getNum());
+ c.update(userId);
+
+ cartMapper.updateById(c);
+ }
+ } finally {
+ lockService.releaseObjectLock(RedisLockService.LOCK_KEY_CART_, key);
}
}
diff --git a/src/main/java/com/mzl/flower/service/payment/RedisLockService.java b/src/main/java/com/mzl/flower/service/payment/RedisLockService.java
index e158aba..a12e710 100644
--- a/src/main/java/com/mzl/flower/service/payment/RedisLockService.java
+++ b/src/main/java/com/mzl/flower/service/payment/RedisLockService.java
@@ -16,6 +16,7 @@
private RedisTemplate<String, String> redisTemplate;
public static final String LOCK_KEY_PAYMENT_NOTIFY_ = "LOCK_KEY_PAYMENT_NOTIFY_";
+ public static final String LOCK_KEY_CART_ = "LOCK_KEY_CART_";
public boolean getObjectLock(String key, String objectId){
String kk = key + objectId;
--
Gitblit v1.9.3