|
|
@ -121,26 +121,20 @@ public class VipOrderServiceImpl implements VipOrderService { |
|
|
@Override |
|
|
@Override |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
public String addVipOrder(AddVipOrderDto addVipOrderDto) { |
|
|
public String addVipOrder(AddVipOrderDto addVipOrderDto) { |
|
|
VipOrder vipOrder = getCacheVipOrder(addVipOrderDto); |
|
|
//构建订单
|
|
|
String orderNo; |
|
|
VipOrder vipOrder = buildVipOrder(addVipOrderDto); |
|
|
if (ObjectUtil.isNull(vipOrder)){ |
|
|
vipOrderMapper.insert(vipOrder); |
|
|
//构建订单
|
|
|
//缓存订单,有效期30分钟,防止用户一直创建重复的订单
|
|
|
vipOrder = buildVipOrder(addVipOrderDto); |
|
|
//cacheOrder(vipOrder);
|
|
|
vipOrderMapper.insert(vipOrder); |
|
|
String orderNo = vipOrder.getOrderNo(); |
|
|
//缓存订单,有效期30分钟,防止用户一直创建重复的订单
|
|
|
//发送消息,如果三十分钟后没有支付,则取消订单
|
|
|
cacheOrder(vipOrder); |
|
|
VipOrderCancelMessage vipOrderCancelMessage = new VipOrderCancelMessage(); |
|
|
orderNo = vipOrder.getOrderNo(); |
|
|
vipOrderCancelMessage.setOrderNo(orderNo); |
|
|
//发送消息,如果三十分钟后没有支付,则取消订单
|
|
|
//延时消息不走消息表,因为延时消息最少支持秒级延时,定时任务不可能对消息表进行秒级扫描,那样性能损耗太大了
|
|
|
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("下单失败,请重试"); |
|
|
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(); |
|
|
|
|
|
} |
|
|
} |
|
|
return orderNo; |
|
|
return orderNo; |
|
|
} |
|
|
} |
|
|
|