From 9ed15965f0492d8f01751b2354cd126505ae6d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E5=A4=A7=E5=8F=94?= <494979559@qq.com> Date: Sat, 24 Aug 2024 10:45:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E5=8D=95=E6=97=B6=E5=AF=B9=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=B8=8A=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/redis/enums/RedisLockKey.java | 3 +- .../impl/TransactionBillServiceImpl.java | 36 ++++++++++++------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/redis/enums/RedisLockKey.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/redis/enums/RedisLockKey.java index 6a4ed615..c4d8b34d 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/redis/enums/RedisLockKey.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/redis/enums/RedisLockKey.java @@ -21,7 +21,8 @@ public enum RedisLockKey { ADD_DEVICE("add_device", "创建设备"), ADD_TIME_BILL("add_time_bill", "创建时长订单"), PAY_BILL("pay_bill", "支付订单"), - PREPAY_DEPOSIT("prepay_deposit", "支付押金"); + PREPAY_DEPOSIT("prepay_deposit", "支付押金"), + ADD_RECHARGE_ORDER("add_recharge_order", "创建充值订单"); private final String key; diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java index fe22a51b..2d3f9fef 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java @@ -228,22 +228,32 @@ public class TransactionBillServiceImpl implements TransactionBillService, After @Override public String addOrder(RechargeBO bo) { - // 拉取设备信息 - deviceService.pullDeviceInfo(Collections.singletonList(bo.getDevice().getDeviceId())); + ServiceUtil.assertion(bo == null || bo.getDevice() == null || bo.getDevice().getDeviceId() == null, "设备不存在"); + Long deviceId = bo.getDevice().getDeviceId(); - // 下单 - TransactionBill order = parseToOrder(bo); + // 加锁 + ServiceUtil.assertion(!redisLock.lock(RedisLockKey.ADD_RECHARGE_ORDER, deviceId), "当前使用该设备人数较多,请稍后再试"); + try { + // 拉取设备信息 + deviceService.pullDeviceInfo(Collections.singletonList(bo.getDevice().getDeviceId())); - transactionTemplate.execute(status -> { - // 插入数据库 - int insert = this.insertSmTransactionBill(order); - ServiceUtil.assertion(insert != 1, "下单失败"); - return insert; - }); + // 下单 + TransactionBill order = parseToOrder(bo); - // 加入延时队列,超时取消 - billDelayedManager.add(order.getBillNo(), order.getExpireTime().getTime()); - return order.getBillNo(); + transactionTemplate.execute(status -> { + // 插入数据库 + int insert = this.insertSmTransactionBill(order); + ServiceUtil.assertion(insert != 1, "下单失败"); + return insert; + }); + + // 加入延时队列,超时取消 + billDelayedManager.add(order.getBillNo(), order.getExpireTime().getTime()); + return order.getBillNo(); + } finally { + // 解锁 + redisLock.unlock(RedisLockKey.ADD_RECHARGE_ORDER, deviceId); + } } // 处理充值服务费