From d2b2b5f49ef31e6a7baffa98f7ab833b74af9bb0 Mon Sep 17 00:00:00 2001 From: wuxicheng <1441859745@qq.com> Date: Tue, 30 May 2023 16:00:42 +0800 Subject: [PATCH] =?UTF-8?q?bug=E5=A4=84=E7=90=86=EF=BC=8C=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/VipOrderServiceImpl.java | 34 ++++++++----------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java index 8ab564b..b805e39 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java @@ -121,26 +121,20 @@ public class VipOrderServiceImpl implements VipOrderService { @Override @Transactional(rollbackFor = Exception.class) public String addVipOrder(AddVipOrderDto addVipOrderDto) { - VipOrder vipOrder = getCacheVipOrder(addVipOrderDto); - String orderNo; - if (ObjectUtil.isNull(vipOrder)){ - //构建订单 - vipOrder = buildVipOrder(addVipOrderDto); - vipOrderMapper.insert(vipOrder); - //缓存订单,有效期30分钟,防止用户一直创建重复的订单 - cacheOrder(vipOrder); - orderNo = vipOrder.getOrderNo(); - //发送消息,如果三十分钟后没有支付,则取消订单 - VipOrderCancelMessage vipOrderCancelMessage = new VipOrderCancelMessage(); - vipOrderCancelMessage.setOrderNo(orderNo); - //延时消息不走消息表,因为延时消息最少支持秒级延时,定时任务不可能对消息表进行秒级扫描,那样性能损耗太大了 - //所以确保消息一定发送成功,走同步发送,如果发送失败直接抛异常,确保本地事物回滚 - SendStatus sendStatus = rocketMQEnhanceTemplate.send(RocketMqTopic.ORDER_CANCEL_TOPIC, RocketMqTag.ORDER_VIP_TAG, vipOrderCancelMessage, RocketMqConstant.THIRTY_MINUTES).getSendStatus(); - if (SendStatus.SEND_OK != sendStatus){ - throw new ServiceException("下单失败,请重试"); - } - }else { - orderNo = vipOrder.getOrderNo(); + //构建订单 + VipOrder vipOrder = buildVipOrder(addVipOrderDto); + vipOrderMapper.insert(vipOrder); + //缓存订单,有效期30分钟,防止用户一直创建重复的订单 + //cacheOrder(vipOrder); + String orderNo = vipOrder.getOrderNo(); + //发送消息,如果三十分钟后没有支付,则取消订单 + VipOrderCancelMessage vipOrderCancelMessage = new VipOrderCancelMessage(); + vipOrderCancelMessage.setOrderNo(orderNo); + //延时消息不走消息表,因为延时消息最少支持秒级延时,定时任务不可能对消息表进行秒级扫描,那样性能损耗太大了 + //所以确保消息一定发送成功,走同步发送,如果发送失败直接抛异常,确保本地事物回滚 + SendStatus sendStatus = rocketMQEnhanceTemplate.send(RocketMqTopic.ORDER_CANCEL_TOPIC, RocketMqTag.ORDER_VIP_TAG, vipOrderCancelMessage, RocketMqConstant.THIRTY_MINUTES).getSendStatus(); + if (SendStatus.SEND_OK != sendStatus){ + throw new ServiceException("下单失败,请重试"); } return orderNo; }