Просмотр исходного кода

订单获取序列号加锁以解决订单序列号重复问题

codingliang 1 год назад
Родитель
Сommit
7851d368f5

+ 5 - 0
src/main/java/com/sqx/common/constant/RedisKey.java

@@ -34,6 +34,11 @@ public interface RedisKey {
     String PAY_ORDER_LOCK = "wm:lock:order:pay:%s";
 
     /**
+     * 订单序号锁 按店铺获取锁
+     */
+    String ORDER_SEQUENCE_LOCK = "wm:lock:order:sequence:%s";
+
+    /**
      * 提现锁
      */
     String CASH_OUT_LOCK = "wm:lock:cash:out:%s";

+ 8 - 2
src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java

@@ -2530,8 +2530,14 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
      * @return 支付顺序
      */
     private int selectCurrentOrderSequenceByShopId(TbOrder order, Long shopId) {
-        int count = appOrderDao.countCurDayPayByShopId(shopId, order.getPayTime());
+        RLock lock = redissonClient.getLock(String.format(RedisKey.ORDER_SEQUENCE_LOCK, shopId));
+        lock.lock();
+        try {
+            int count = appOrderDao.countCurDayPayByShopId(shopId, order.getPayTime());
 
-        return count + 1;
+            return count + 1;
+        } finally {
+            lock.unlock();
+        }
     }
 }