From 519bedfc7c6b5d8c2c4bca0d38008f2c083ec990 Mon Sep 17 00:00:00 2001 From: SongZhang <2064194730@qq.com> Date: Thu, 17 Oct 2024 09:12:58 +0800 Subject: [PATCH] =?UTF-8?q?detail=E4=BB=B7=E6=A0=BC=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E6=8A=98=E6=89=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cashier/service/impl/PayServiceImpl.java | 2 ++ .../impl/shopimpl/TbShopTableServiceImpl.java | 1 + .../main/java/cn/ysk/cashier/utils/Utils.java | 25 +++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/PayServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/PayServiceImpl.java index a11b87b9..04bf4437 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/PayServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/PayServiceImpl.java @@ -176,6 +176,8 @@ public class PayServiceImpl implements PayService { .eq(TbOrderDetail::getOrderId, orderInfo.getId()) .eq(TbOrderDetail::getUseType, orderInfo.getUseType()) .in(TbOrderDetail::getStatus, "unpaid") + .setSql(StrUtil.format("price_amount=price*num*{}", orderInfo.getDiscountRatio())) + .set(TbOrderDetail::getStatus, "closed")); //修改主单状态 diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java index 2514c6fb..fbf0a37b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java @@ -1599,6 +1599,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { .eq(TbOrderDetail::getOrderId, orderInfo.getId()) .eq(TbOrderDetail::getUseType, orderInfo.getUseType()) .eq(TbOrderDetail::getStatus, "unpaid") + .setSql(StrUtil.format("price_amount=price*num*{}", payDTO.getDiscount())) .set(TbOrderDetail::getStatus, "closed")); JSONObject jsonObject = new JSONObject(); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/utils/Utils.java b/eladmin-system/src/main/java/cn/ysk/cashier/utils/Utils.java index 1e4897ad..fbcc0f13 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/utils/Utils.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/utils/Utils.java @@ -70,6 +70,31 @@ public class Utils { } } + public static T runFunAndTransaction(Supplier supplier, StringRedisTemplate redisTemplate, String lockKey) { + try{ + // 创建线程id, 用作判断 + String clientId = UUID.randomUUID().toString(); + // 设置分布式锁 + boolean lock = Boolean.TRUE.equals(redisTemplate.opsForValue().setIfAbsent(lockKey, clientId, 30, TimeUnit.MILLISECONDS)); + int count = 0; + while (!lock) { + if (count++ > 100) { + throw new BadRequestException("系统繁忙, 稍后再试"); + } + Thread.sleep(20); + lock = Boolean.TRUE.equals(redisTemplate.opsForValue().setIfAbsent(lockKey, clientId, 30, TimeUnit.MILLISECONDS)); + } + return supplier.get(); + } catch (RuntimeException e){ + log.info("执行出错:{}", e.getMessage()); + throw e; + } catch (InterruptedException e) { + throw new RuntimeException(e); + } finally{ + redisTemplate.delete(lockKey); + } + } + public static R runFunAndRetry( Supplier function, Function check, Consumer errFun) {