TASK:限制同一个管理员不允许绑定不同组织的订阅计划

This commit is contained in:
2026-01-07 15:24:38 +08:00
parent 9f523d5953
commit 13151b65f5
5 changed files with 27 additions and 1 deletions

View File

@@ -104,6 +104,20 @@ public class SubscriptionPlanServiceImpl extends ServiceImpl<SubscriptionPlanMap
if (account.getSystemUser().equals(8) || account.getSystemUser().equals(6)) {
throw new BusinessException("Sub-accounts.cannot.be.admins");
}
// 保证订阅计划绑定的管理员所属组织的唯一性
checkAdminCrossOrg(subscriptionPlanDTO.getAdminAccId(), subscriptionPlanDTO.getOrganizationId());
}
// 判断指定的管理员是否已绑定其他组织的订阅计划
private void checkAdminCrossOrg(Long adminAccId, Long organizationId) {
QueryWrapper<SubscriptionPlan> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(SubscriptionPlan::getAdminAccId, adminAccId)
.ne(SubscriptionPlan::getOrganizationId, organizationId);
Long count = baseMapper.selectCount(queryWrapper);
if (count > 0) {
throw new BusinessException("administrator.user.is.already.bound.to.different.organization");
}
}
// 更新 到期时间、积分总量、已使用积分量
@@ -217,6 +231,8 @@ public class SubscriptionPlanServiceImpl extends ServiceImpl<SubscriptionPlanMap
private void handleBasicInfo(UpdateSubscriptionPlanDTO dto, SubscriptionPlan plan) {
if (dto.getAdminAccId() != null
&& !dto.getAdminAccId().equals(plan.getAdminAccId())) {
// 保证订阅计划绑定的管理员所属组织的唯一性
checkAdminCrossOrg(dto.getAdminAccId(), plan.getOrganizationId());
plan.setAdminAccId(dto.getAdminAccId());
}
@@ -224,6 +240,11 @@ public class SubscriptionPlanServiceImpl extends ServiceImpl<SubscriptionPlanMap
&& !dto.getName().equals(plan.getName())) {
plan.setName(dto.getName());
}
if (StringUtils.isNotBlank(dto.getCountryOrRegion())
&& !dto.getCountryOrRegion().equals(plan.getCountryOrRegion())) {
plan.setCountryOrRegion(dto.getCountryOrRegion());
}
}
// ===================== 更新后处理 =====================