From 5d4d85335585b4eaca42ae5810cf92f17be30253 Mon Sep 17 00:00:00 2001 From: gong <1157756119@qq.com> Date: Fri, 19 Dec 2025 10:44:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A5=97=E9=A4=90=E6=8E=A8=E5=B9=BF=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=8F=96=E6=B6=88=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/czg/task/AAMarketTasks.java | 12 +++- .../main/java/com/czg/task/PpPackageTask.java | 69 +++++++++++++++++++ .../config/RedisKeyExpirationListener.java | 7 ++ .../controller/admin/PpOrderController.java | 3 +- .../src/main/java/com/czg/task/OTimeTask.java | 6 +- .../main/java/com/czg/config/RedisCst.java | 2 + .../market/service/PpPackageOrderService.java | 5 ++ .../impl/PpPackageOrderServiceImpl.java | 22 ++++++ 8 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 cash-api/market-server/src/main/java/com/czg/task/PpPackageTask.java diff --git a/cash-api/market-server/src/main/java/com/czg/task/AAMarketTasks.java b/cash-api/market-server/src/main/java/com/czg/task/AAMarketTasks.java index ace8dfe50..34ad858b4 100644 --- a/cash-api/market-server/src/main/java/com/czg/task/AAMarketTasks.java +++ b/cash-api/market-server/src/main/java/com/czg/task/AAMarketTasks.java @@ -7,7 +7,6 @@ import org.springframework.stereotype.Component; /** * market服务 任务总调度 * @author ww - * @description */ @Component public class AAMarketTasks { @@ -74,5 +73,16 @@ public class AAMarketTasks { smsShopMoneyTask.task(); } + @Resource + private PpPackageTask ppPackageTask; + + /** + * 套餐推广订单 过期 + * 每两小时 触发一次 + */ + @Scheduled(cron = "0 24 0/2 * * ?") + public void ppOrderExpire() { + ppPackageTask.ppOrderExpire(); + } } diff --git a/cash-api/market-server/src/main/java/com/czg/task/PpPackageTask.java b/cash-api/market-server/src/main/java/com/czg/task/PpPackageTask.java new file mode 100644 index 000000000..8398a1890 --- /dev/null +++ b/cash-api/market-server/src/main/java/com/czg/task/PpPackageTask.java @@ -0,0 +1,69 @@ +package com.czg.task; + +import com.czg.config.RedisCst; +import com.czg.constants.PpPackageConstants; +import com.czg.market.entity.PpPackageOrder; +import com.czg.market.service.PpPackageOrderService; +import com.czg.order.entity.GbOrder; +import com.czg.service.RedisService; +import com.mybatisflex.core.query.QueryWrapper; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 套餐推广定时任务 + * + * @author yjjie + * @date 2025/12/19 10:05 + */ +@Slf4j +@Component +public class PpPackageTask { + + @Resource + private RedisService redisService; + + @Resource + private PpPackageOrderService ppPackageOrderService; + + /** + * 订单 过期 + * 每两小时 触发一次 + */ + public void ppOrderExpire() { + // 当前系统时间 + LocalDateTime now = LocalDateTime.now(); + // 过期时间下限:当前时间往前推4小时(只查最近4小时内过期的) + LocalDateTime expire4HoursAgo = now.minusHours(4); + List expiredOrderList = ppPackageOrderService.list(QueryWrapper.create() + .eq(PpPackageOrder::getStatus, PpPackageConstants.OrderStatus.PROCESSING) + .le(PpPackageOrder::getExpireTime, now) + .ge(PpPackageOrder::getExpireTime, expire4HoursAgo)); + + // 处理已过期订单 + for (PpPackageOrder expiredOrder : expiredOrderList) { + //退款 + ppPackageOrderService.expiredOrder(expiredOrder.getId()); + } + + //查询【当前时间往后2小时内】将要过期的订单 + LocalDateTime willExpire2HoursLater = now.plusHours(2); + List willExpireOrderList = ppPackageOrderService.list(QueryWrapper.create() + .eq(PpPackageOrder::getStatus, PpPackageConstants.OrderStatus.PROCESSING) + .ge(PpPackageOrder::getExpireTime, now) + .le(PpPackageOrder::getExpireTime, willExpire2HoursLater)); + // 处理将要过期订单(如推送提醒、催参团等) + for (PpPackageOrder willExpireOrder : willExpireOrderList) { + LocalDateTime endTime = willExpireOrder.getExpireTime(); + Duration duration = Duration.between(now, endTime); + long seconds = duration.getSeconds(); + redisService.set(RedisCst.classKeyExpired.EXPIRED_PP_ORDER + willExpireOrder.getId(), willExpireOrder.getId(), seconds); + } + } +} diff --git a/cash-api/order-server/src/main/java/com/czg/config/RedisKeyExpirationListener.java b/cash-api/order-server/src/main/java/com/czg/config/RedisKeyExpirationListener.java index 07333471a..6ca8812b3 100644 --- a/cash-api/order-server/src/main/java/com/czg/config/RedisKeyExpirationListener.java +++ b/cash-api/order-server/src/main/java/com/czg/config/RedisKeyExpirationListener.java @@ -4,6 +4,7 @@ import com.czg.account.service.ShopTableService; import com.czg.market.entity.MkShopCouponRecord; import com.czg.market.service.AcPushEventService; import com.czg.market.service.MkShopCouponRecordService; +import com.czg.market.service.PpPackageOrderService; import com.czg.market.service.SmsPushEventService; import com.czg.order.service.GbOrderService; import com.czg.order.service.OrderInfoCustomService; @@ -43,6 +44,8 @@ public class RedisKeyExpirationListener implements MessageListener { private AcPushEventService acPushEventService; @Resource private GbOrderService gbOrderService; + @DubboReference + private PpPackageOrderService ppPackageOrderService; //redis key失效监听 @@ -79,6 +82,10 @@ public class RedisKeyExpirationListener implements MessageListener { log.info("监听到拼团任务过期,gb_order任务Id: {}", expiredKey); String eventId = expiredKey.substring(RedisCst.classKeyExpired.EXPIRED_GB_ORDER.length()); gbOrderService.expireRefund(Long.parseLong(eventId), null); + } else if (expiredKey.startsWith(RedisCst.classKeyExpired.EXPIRED_PP_ORDER)) { + log.info("监听到套餐推广任务过期,pp_order任务Id: {}", expiredKey); + String eventId = expiredKey.substring(RedisCst.classKeyExpired.EXPIRED_PP_ORDER.length()); + ppPackageOrderService.expiredOrder(Long.parseLong(eventId)); } else if (expiredKey.startsWith(RedisCst.classKeyExpired.EXPIRED_SMS)) { log.info("监听到短信定时发放优惠券,sms_push_event任务Id: {}", expiredKey); String eventId = expiredKey.substring(RedisCst.classKeyExpired.EXPIRED_SMS.length()); diff --git a/cash-api/order-server/src/main/java/com/czg/controller/admin/PpOrderController.java b/cash-api/order-server/src/main/java/com/czg/controller/admin/PpOrderController.java index 9c1c641b0..4e58cc90c 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/admin/PpOrderController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/admin/PpOrderController.java @@ -54,7 +54,7 @@ public class PpOrderController { //退钱 String refPayOrderNo = CzgRandomUtils.snowflake(OrderNoPrefixEnum.REPP); payService.unifyRefund(detail.getShopId(), detail.getId(), detail.getPayOrderId(), refPayOrderNo, - StrUtil.isBlankIfStr(detail.getRefundReason()) ? "拼团退款" : detail.getRefundReason(), detail.getFinalPrice()); + StrUtil.isBlankIfStr(detail.getRefundReason()) ? "套餐推广退款" : detail.getRefundReason(), detail.getFinalPrice()); return CzgResult.success(); } @@ -70,6 +70,7 @@ public class PpOrderController { /** * 套餐推广-核销 + * 参数: {"verifyCode": "123456"} */ @PostMapping("checkout") @OperationLog("套餐推广-核销") diff --git a/cash-api/order-server/src/main/java/com/czg/task/OTimeTask.java b/cash-api/order-server/src/main/java/com/czg/task/OTimeTask.java index 5ea29ce77..b94bc7c66 100644 --- a/cash-api/order-server/src/main/java/com/czg/task/OTimeTask.java +++ b/cash-api/order-server/src/main/java/com/czg/task/OTimeTask.java @@ -109,7 +109,11 @@ public class OTimeTask { @Scheduled(cron = "0 50 23 * * ? ") public void refundCompensate() { //积分 和 拼团 - List ware = List.of(PayTypeConstants.SourceType.WARE, PayTypeConstants.SourceType.POINT); + List ware = List.of( + PayTypeConstants.SourceType.WARE, + PayTypeConstants.SourceType.POINT, + PayTypeConstants.SourceType.PP + ); LocalDateTime tenMinutesAgo = LocalDateTime.now().minusMinutes(10); LocalDateTime thirdDayAgo = LocalDateTime.now().minusDays(3); diff --git a/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java b/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java index 648127dde..cbfd9dd99 100644 --- a/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java +++ b/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java @@ -25,6 +25,8 @@ public interface RedisCst { public static final String EXPIRED_COUPON = "expired:coupon:"; //拼团 任务过期 public static final String EXPIRED_GB_ORDER = "expired:gb:order:"; + // 套餐推广 任务过期 + public static final String EXPIRED_PP_ORDER = "expired:pp:order:"; //短信定时发放 倒计时KEY public static final String EXPIRED_SMS = "expired:sms:"; //公众号推送 倒计时KEY diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/service/PpPackageOrderService.java b/cash-common/cash-common-service/src/main/java/com/czg/market/service/PpPackageOrderService.java index 83f2a1393..da8b3675b 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/service/PpPackageOrderService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/service/PpPackageOrderService.java @@ -70,4 +70,9 @@ public interface PpPackageOrderService extends IService { * 核销 */ boolean checkout(String verifyCode, Long shopId); + + /** + * 过期订单 + */ + void expiredOrder(Long orderId); } diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/PpPackageOrderServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/PpPackageOrderServiceImpl.java index 548f6aa41..ee15bce0c 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/PpPackageOrderServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/PpPackageOrderServiceImpl.java @@ -29,6 +29,7 @@ import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.update.UpdateChain; import com.mybatisflex.spring.service.impl.ServiceImpl; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboService; import org.springframework.transaction.annotation.Transactional; @@ -42,6 +43,7 @@ import java.util.List; * @author gyj * @since 2025-12-18 */ +@Slf4j @DubboService public class PpPackageOrderServiceImpl extends ServiceImpl implements PpPackageOrderService { @@ -271,4 +273,24 @@ public class PpPackageOrderServiceImpl extends ServiceImpl