diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java index 284d0566f..3c4493a45 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java @@ -85,4 +85,10 @@ public interface CacheNames { */ String DELAY_ORDER_UNPAY = GlobalConstants.GLOBAL_REDIS_KEY + "order_unpay"; + + /** + * 延时队列:订单支付未核销 + */ + String DELAY_ORDER_TO_BE_USED = GlobalConstants.GLOBAL_REDIS_KEY + "order_tobe_used"; + } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/Constants.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/Constants.java index dc348ef12..c235d5f7d 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/Constants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/Constants.java @@ -73,9 +73,14 @@ public interface Constants { Long TOP_PARENT_ID = 0L; /** - * 订单未支付自动取消时间(秒) + * 订单未支付自动取消时间(分钟) */ - Long ORDER_CANCEL_TIME = 900L; + Long ORDER_CANCEL_TIME = 15L; + + /** + * 订单支付未核销自动退款时间(天) + */ + Long ORDER_REFUND_TIME = 14L; } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java index 884a21240..a46c1037b 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java @@ -64,8 +64,10 @@ import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import static org.dromara.common.core.constant.CacheNames.DELAY_ORDER_TO_BE_USED; import static org.dromara.common.core.constant.CacheNames.DELAY_ORDER_UNPAY; import static org.dromara.common.core.constant.Constants.ORDER_CANCEL_TIME; +import static org.dromara.common.core.constant.Constants.ORDER_REFUND_TIME; /** @@ -281,7 +283,7 @@ public class OrderServiceImpl extends ServiceImpl implements }).toList(); orderItemMapper.insert(orderItemList); // 添加订单到延迟队列 - QueueUtils.addDelayedQueueObject(DELAY_ORDER_UNPAY, order.getId(), ORDER_CANCEL_TIME, TimeUnit.SECONDS); + QueueUtils.addDelayedQueueObject(DELAY_ORDER_UNPAY, order.getId(), ORDER_CANCEL_TIME, TimeUnit.MINUTES); return BeanUtil.copyProperties(order, OrderVO.class); } @@ -565,7 +567,8 @@ public class OrderServiceImpl extends ServiceImpl implements .paymentTime(LocalDateTime.now()) .payType(payType) .build()); - + // 添加已支付订单到延迟队列,14天未使用自动退款 + QueueUtils.addDelayedQueueObject(DELAY_ORDER_TO_BE_USED, order.getId(), ORDER_REFUND_TIME, TimeUnit.DAYS); //发出消息 MqUtil.sendIMMessage(buildMQMessage(order)); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/task/OrderScheduledTask.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/task/OrderScheduledTask.java index a1d8a0387..d40d896c4 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/task/OrderScheduledTask.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/task/OrderScheduledTask.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.concurrent.CompletableFuture; +import static org.dromara.common.core.constant.CacheNames.DELAY_ORDER_TO_BE_USED; import static org.dromara.common.core.constant.CacheNames.DELAY_ORDER_UNPAY; /** @@ -65,4 +66,26 @@ public class OrderScheduledTask { }); }, true); } + + + /** + * 订阅redis延迟队列退款已支付未核销的订单 + */ + @PostConstruct + public void orderRefundByDelayedQueue() { + log.info("订单已支付未核销延时队列: {} 监听中......",DELAY_ORDER_TO_BE_USED); + // 项目初始化设置一次即可 + QueueUtils.subscribeBlockingQueue(DELAY_ORDER_TO_BE_USED, (Long orderId) -> { + // 观察接收时间 + log.info("订单未支付延时队列: {}, 收到订单id: {}", DELAY_ORDER_TO_BE_USED, orderId); + return CompletableFuture.runAsync(() -> { + // 异步处理数据逻辑 不要在上方处理业务逻辑 + orderService.update(Wrappers.lambdaUpdate(Order.class) + .eq(Order::getId, orderId) + .eq(Order::getStatus, OrderStatusEnum.VERIFY.getValue()) + .set(Order::getStatus, OrderStatusEnum.REFUNDED.getValue())); + // TODO退款 + }); + }, true); + } }