BUGFIX:订阅计划
This commit is contained in:
@@ -2421,6 +2421,9 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
||||
AuthPrincipalVo authPrincipalVo = UserContext.getUserHolder();
|
||||
Account adminAcc = accountMapper.selectById(authPrincipalVo.getId());
|
||||
int subUserRole = getSubUserRole(adminAcc.getSystemUser());
|
||||
if (Objects.isNull(adminAcc.getSubscriptionPlanId())) {
|
||||
throw new BusinessException("relate.to.any.subscription");
|
||||
}
|
||||
|
||||
if (addSubAccountDTO.getId() == null) {
|
||||
return createSubAccount(addSubAccountDTO, adminAcc, subUserRole);
|
||||
@@ -3177,6 +3180,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
||||
response.setUsernameModify(getNicknameModifyTimes());
|
||||
response.setOrganizationId(account.getOrganizationId());
|
||||
response.setOrganizationName(account.getOrganizationName());
|
||||
response.setSubscriptionPlanId(account.getSubscriptionPlanId());
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
@@ -1029,14 +1029,16 @@ public class StripeServiceImpl implements StripeService {
|
||||
}else {
|
||||
List<SubscriptionInfo> activeSubscriptions = subscriptionInfoList.stream()
|
||||
.filter(subscription -> "active".equals(subscription.getStatus()))
|
||||
.collect(Collectors.toList());
|
||||
.toList();
|
||||
if (!StringUtil.isNullOrEmpty(type) && type.equals("cancel")){
|
||||
subscriptionInfo = subscriptionInfoList.get(0);
|
||||
}else if (activeSubscriptions.isEmpty()){
|
||||
subscriptionInfo = subscriptionInfoList.getFirst();
|
||||
} else if (!StringUtil.isNullOrEmpty(type) && type.equals("reminder_expire")) {
|
||||
subscriptionInfo = subscriptionInfoList.getFirst();
|
||||
} else if (activeSubscriptions.isEmpty() && type.equals("cancel")){
|
||||
log.info("不发送邮件,原因:【当前邮件类型:{}, 但是状态为active的subscriptionInfo为空】", type);
|
||||
return false;
|
||||
}else {
|
||||
subscriptionInfo = activeSubscriptions.get(0);
|
||||
} else {
|
||||
subscriptionInfo = activeSubscriptions.getFirst();
|
||||
}
|
||||
}
|
||||
}else if (!StringUtil.isNullOrEmpty(orderNo)) {
|
||||
|
||||
@@ -143,6 +143,7 @@ public class SubscriptionPlanServiceImpl extends ServiceImpl<SubscriptionPlanMap
|
||||
public List<SubscriptionPlan> searchByOrganizationIdAndStatus(SubscriptionPlanPageQuery subscriptionPlanPageQuery) {
|
||||
QueryWrapper<SubscriptionPlan> queryWrapper = new QueryWrapper<>();
|
||||
|
||||
queryWrapper.lambda().eq(SubscriptionPlan::getAdminAccId, UserContext.getUserHolder().getId());
|
||||
if (Objects.nonNull(subscriptionPlanPageQuery.getOrganizationId())){
|
||||
queryWrapper.lambda().eq(SubscriptionPlan::getOrganizationId, subscriptionPlanPageQuery.getOrganizationId());
|
||||
} else {
|
||||
@@ -163,7 +164,7 @@ public class SubscriptionPlanServiceImpl extends ServiceImpl<SubscriptionPlanMap
|
||||
validatePageQuery(subscriptionPlanPageQuery);
|
||||
|
||||
// 2. 构建查询条件(不需要包含is_deleted条件,因为SQL中已包含)
|
||||
LambdaQueryWrapper<SubscriptionPlan> queryWrapper = buildQueryWrapperWithoutDeleted(subscriptionPlanPageQuery);
|
||||
QueryWrapper<SubscriptionPlan> queryWrapper = buildQueryWrapperWithoutDeleted(subscriptionPlanPageQuery);
|
||||
|
||||
// 3. 执行自定义的分页查询
|
||||
Page<SubscriptionPlanVO> page = new Page<>(
|
||||
@@ -178,37 +179,38 @@ public class SubscriptionPlanServiceImpl extends ServiceImpl<SubscriptionPlanMap
|
||||
/**
|
||||
* 构建查询条件(不包含is_deleted条件,因为SQL中已包含)
|
||||
*/
|
||||
private LambdaQueryWrapper<SubscriptionPlan> buildQueryWrapperWithoutDeleted(SubscriptionPlanPageQuery query) {
|
||||
LambdaQueryWrapper<SubscriptionPlan> wrapper = new LambdaQueryWrapper<>();
|
||||
private QueryWrapper<SubscriptionPlan> buildQueryWrapperWithoutDeleted(SubscriptionPlanPageQuery query) {
|
||||
QueryWrapper<SubscriptionPlan> wrapper = new QueryWrapper<>();
|
||||
|
||||
// 精确匹配条件
|
||||
// 精确匹配条件 - 需要指定表别名
|
||||
if (query.getId() != null) {
|
||||
wrapper.eq(SubscriptionPlan::getId, query.getId());
|
||||
wrapper.eq("sp.id", query.getId());
|
||||
}
|
||||
if (query.getOrganizationId() != null) {
|
||||
wrapper.eq(SubscriptionPlan::getOrganizationId, query.getOrganizationId());
|
||||
wrapper.eq("sp.organization_id", query.getOrganizationId());
|
||||
}
|
||||
if (query.getAdminAccId() != null) {
|
||||
wrapper.eq(SubscriptionPlan::getAdminAccId, query.getAdminAccId());
|
||||
wrapper.eq("sp.admin_acc_id", query.getAdminAccId());
|
||||
}
|
||||
|
||||
// 时间范围查询
|
||||
if (StringUtils.isNotBlank(query.getStartTime())) {
|
||||
LocalDateTime startTime = parseDateTime(query.getStartTime());
|
||||
wrapper.ge(SubscriptionPlan::getCreateTime, startTime);
|
||||
wrapper.ge("sp.create_time", startTime);
|
||||
}
|
||||
if (StringUtils.isNotBlank(query.getEndTime())) {
|
||||
LocalDateTime endTime = parseDateTime(query.getEndTime());
|
||||
wrapper.le(SubscriptionPlan::getCreateTime, endTime);
|
||||
wrapper.le("sp.create_time", endTime);
|
||||
}
|
||||
|
||||
// 状态匹配
|
||||
if (!CollectionUtils.isEmpty(query.getStatus())) {
|
||||
wrapper.in(SubscriptionPlan::getStatus, query.getStatus());
|
||||
wrapper.in("sp.status", query.getStatus());
|
||||
}
|
||||
|
||||
// 按创建时间倒序排序
|
||||
wrapper.orderByDesc(SubscriptionPlan::getCreateTime);
|
||||
wrapper.ne("sp.is_deleted", 1)
|
||||
.orderByDesc("sp.create_time");
|
||||
|
||||
return wrapper;
|
||||
}
|
||||
@@ -752,6 +754,8 @@ public class SubscriptionPlanServiceImpl extends ServiceImpl<SubscriptionPlanMap
|
||||
// 5. 管理员当前未使用这个订阅,只处理订阅关系状态
|
||||
log.info("订阅{}已过期,但管理员{}未激活此订阅", plan.getId(), adminAccount.getId());
|
||||
}
|
||||
// 6. 处理该订阅下的子账号
|
||||
processChildAccountsForExpiredSubscription(plan);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -800,14 +804,10 @@ public class SubscriptionPlanServiceImpl extends ServiceImpl<SubscriptionPlanMap
|
||||
log.info("管理员{}没有其他活跃订阅,降级为游客", adminAccount.getId());
|
||||
|
||||
// downgradeAccountToVisitor(adminAccount);
|
||||
// todo toVisitor 需要更新其他字段,如subscriptionPlanId, parentId
|
||||
accountMapper.toVisitor(adminAccount.getId());
|
||||
log.info("管理员账号{}已降级为游客", adminAccount.getId());
|
||||
|
||||
}
|
||||
|
||||
// 7. 处理该订阅下的子账号
|
||||
processChildAccountsForExpiredSubscription(expiringPlan);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -926,7 +926,9 @@ public class SubscriptionPlanServiceImpl extends ServiceImpl<SubscriptionPlanMap
|
||||
if (Objects.isNull(subscriptionPlan)) {
|
||||
throw new BusinessException("unknown.subscription.plan");
|
||||
}
|
||||
if (subscriptionPlan.getStatus().equals(SubscriptionPlan.SubscriptionStatus.EXPIRED.name())) {
|
||||
long now = System.currentTimeMillis() / 1000;
|
||||
if (subscriptionPlan.getStatus().equals(SubscriptionPlan.SubscriptionStatus.EXPIRED.name())
|
||||
|| subscriptionPlan.getCurrentPeriodEnd() <= now) {
|
||||
throw new BusinessException("subscription.has.expired");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user