From 1680debd4b2f9f6aebb9690654fc1ae41ced136a Mon Sep 17 00:00:00 2001 From: xupei Date: Thu, 7 May 2026 11:45:49 +0800 Subject: [PATCH] =?UTF-8?q?BUGFIX:=20=E7=BB=AD=E8=AE=A2=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=8F=91=E9=80=81=E9=82=AE=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../da/service/impl/StripeSubscriptionServiceImpl.java | 10 +++++++--- .../stripe/handler/CheckoutSessionExpiredHandler.java | 4 ---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/ai/da/service/impl/StripeSubscriptionServiceImpl.java b/src/main/java/com/ai/da/service/impl/StripeSubscriptionServiceImpl.java index 3b88a1c1..6520a9ab 100644 --- a/src/main/java/com/ai/da/service/impl/StripeSubscriptionServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/StripeSubscriptionServiceImpl.java @@ -135,13 +135,17 @@ public class StripeSubscriptionServiceImpl implements StripeSubscriptionService // renewal 场景:从 InvoicePaidHandler 直接传入已更新的 SubscriptionInfo,避免事务未提交导致查询不到 if (passedInfo != null) { long now = Instant.now().getEpochSecond(); - // 限制当前时间在订阅区间内,避免处理上个周期内的回调而重复发送邮件 - if (now > passedInfo.getCurrentPeriodStart() && now < passedInfo.getCurrentPeriodEnd() - && "active".equals(passedInfo.getStatus())) { + boolean inPeriod = now > passedInfo.getCurrentPeriodStart() && now < passedInfo.getCurrentPeriodEnd(); + // 续订失败的场景,可能订单状态已被更新为past_due + boolean validStatus = "fail_renewal".equals(type) + ? ("past_due".equals(passedInfo.getStatus()) || "active".equals(passedInfo.getStatus())) + : "active".equals(passedInfo.getStatus()); + if (inPeriod && validStatus) { return passedInfo; } return null; } + if (!StringUtil.isNullOrEmpty(orderNo)) { long now = Instant.now().getEpochSecond(); List infos = subscriptionInfoMapper.selectList( diff --git a/src/main/java/com/ai/da/service/stripe/handler/CheckoutSessionExpiredHandler.java b/src/main/java/com/ai/da/service/stripe/handler/CheckoutSessionExpiredHandler.java index 2e86b9b8..70ecd1d1 100644 --- a/src/main/java/com/ai/da/service/stripe/handler/CheckoutSessionExpiredHandler.java +++ b/src/main/java/com/ai/da/service/stripe/handler/CheckoutSessionExpiredHandler.java @@ -96,10 +96,6 @@ public class CheckoutSessionExpiredHandler implements StripeEventHandler { // 首次订阅失败 stripeSubscriptionService.sendFailedNewOrderEmail(orderNo); log.info("[checkout.session.expired] 首次订阅失败邮件已发送,orderNo={}", orderNo); - } else { - // 续费失败 todo 续费不走这里吧? - stripeSubscriptionService.sendSubscriptionEmail(null, "fail_renewal", subInfoList.getFirst().getOrderNo(), null); - log.info("[checkout.session.expired] 续费失败邮件已发送,orderNo={}", orderNo); } }