diff --git a/src/main/java/com/ai/da/service/AccountService.java b/src/main/java/com/ai/da/service/AccountService.java index 07944fcd..bff69738 100644 --- a/src/main/java/com/ai/da/service/AccountService.java +++ b/src/main/java/com/ai/da/service/AccountService.java @@ -218,4 +218,8 @@ public interface AccountService extends IService { Boolean unbindWeChat(); Boolean unbindGoogle(); + + void updateAccountValidity(Long accountId, Long currentPeriodEnd); + + void updateUserRoleAndCredits(Long accountId, String type); } diff --git a/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java b/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java index 96d66d72..83b82a8e 100644 --- a/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java @@ -2591,4 +2591,32 @@ public class AccountServiceImpl extends ServiceImpl impl accountMapper.updateById(account); return Boolean.TRUE; } + + public void updateAccountValidity(Long accountId, Long currentPeriodEnd){ + // 不管当前用户的账号是否到期,都根据付款信息重置账号到期时间 + Account account = accountMapper.selectById(accountId); + account.setValidEndTime(currentPeriodEnd * 1000); + + accountMapper.updateById(account); + } + + public void updateUserRoleAndCredits(Long accountId, String type){ + Account account = accountMapper.selectById(accountId); + switch (type) { + case "month": + account.setSystemUser(2); + account.setCredits(BigDecimal.valueOf(Long.parseLong(CreditsEventsEnum.INIT_MONTHLY.getValue()))); + break; + case "year": + account.setSystemUser(1); + account.setCredits(BigDecimal.valueOf(Long.parseLong(CreditsEventsEnum.INIT_YEARLY.getValue()))); + break; + case "day": + account.setSystemUser(3); + account.setCredits(BigDecimal.valueOf(Long.parseLong(CreditsEventsEnum.INIT_WEEKLY.getValue()))); + break; + } + + accountMapper.updateById(account); + } } diff --git a/src/main/java/com/ai/da/service/impl/StripeServiceImpl.java b/src/main/java/com/ai/da/service/impl/StripeServiceImpl.java index d3b2df08..0fc00b32 100644 --- a/src/main/java/com/ai/da/service/impl/StripeServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/StripeServiceImpl.java @@ -58,6 +58,8 @@ public class StripeServiceImpl implements StripeService { private CreditsService creditsService; @Resource private RefundInfoService refundInfoService; + @Resource + private AccountService accountService; @Resource private AccountMapper accountMapper; @@ -368,6 +370,7 @@ public class StripeServiceImpl implements StripeService { orderInfoService.updateById(orderInfo); } } + log.info("回调事件 {} 处理完成", event.getType()); return response; } @@ -466,7 +469,10 @@ public class StripeServiceImpl implements StripeService { subscriptionInfoMapper.insert(subscriptionInfo); // 更新账号到期时间 - updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd()); + accountService.updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd()); + + // 更新账号身份和积分 + accountService.updateUserRoleAndCredits(subscriptionInfo.getAccountId(), interval); } return subscriptionInfo; } @@ -519,7 +525,9 @@ public class StripeServiceImpl implements StripeService { subscriptionInfo.setCurrentPeriodEnd(subscription.getCurrentPeriodEnd()); subscriptionInfo.setNextPayDate(DateUtil.changeTimeStampFormat(subscription.getCurrentPeriodEnd(), "seconds", CommonConstant.TIME_FORMAT_MMM_dd_yyyy_EEEE)); // 更新账号到期时间 - updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd()); + accountService.updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd()); + // 更新账号身份和积分 + accountService.updateUserRoleAndCredits(subscriptionInfo.getAccountId(), subscriptionInfo.getType()); log.info("更新 {} 账号到期时间为:{}", subscriptionInfo.getAccountId(), DateUtil.changeTimeStampFormat(subscriptionInfo.getCurrentPeriodEnd(), "seconds", CommonConstant.TIME_FORMAT_MMM_dd_yyyy_EEEE)); flag = true; } @@ -530,14 +538,6 @@ public class StripeServiceImpl implements StripeService { return subscriptionInfo; } - private void updateAccountValidity(Long accountId, Long currentPeriodEnd){ - // 不管当前用户的账号是否到期,都根据付款信息重置账号到期时间 - com.ai.da.mapper.primary.entity.Account account = accountMapper.selectById(accountId); - account.setValidEndTime(currentPeriodEnd * 1000); - - accountMapper.updateById(account); - } - // 取消连续订阅 将订阅从pause状态转为cancel状态(使用定时器,定期检索DB中,过期且不续订的订阅) public void cancelSubscription(String subscriptionId, String cancelReason) { Stripe.apiKey = privateKey;