TASK: 教育管理员账号到期后降为游客并移除所有子账号

This commit is contained in:
2025-09-16 17:01:18 +08:00
parent 5bac740efd
commit 106528ce08
5 changed files with 37 additions and 6 deletions

View File

@@ -205,7 +205,7 @@ public interface AccountService extends IService<Account> {
// Boolean deleteSubAccount(AddSubAccountDTO addSubAccountDTO);
void removeSubAccount(AddSubAccountDTO addSubAccountDTO);
void removeSubAccount(AddSubAccountDTO addSubAccountDTO, Long adminAccId);
PageBaseResponse<Account> subAccountList(SubAccountPageDTO subAccountPageDTO);
@@ -240,4 +240,6 @@ public interface AccountService extends IService<Account> {
Set<String> organizationNameSearch(String type, String name);
/*void send618PromotionEmailTemp();*/
void checkEduAdminExpireStatus();
}

View File

@@ -2605,7 +2605,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
// BigDecimal creditsUsage = exAccountInfo.getCreditsUsage();
addSubAccountDTO.setCreditsUsage(exAccountInfo.getCreditsUsage());
// 这里移除原账号,但是积分不回流,机构分配的积分会由下一个账号继续持有(包括积分上限和已使用的积分都保持不变)
removeSubAccount(new AddSubAccountDTO(Collections.singletonList(addSubAccountDTO.getId())));
removeSubAccount(new AddSubAccountDTO(Collections.singletonList(addSubAccountDTO.getId())), adminAcc.getId());
// 移入新子账号(可能是移入,也可能是新增)
createSubAccount(addSubAccountDTO, adminAcc, subUserRole);
} else {
@@ -2691,8 +2691,8 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
return Boolean.TRUE;
}*/
public void removeSubAccount(AddSubAccountDTO addSubAccountDTO) {
Long adminAccId = UserContext.getUserHolder().getId();
public void removeSubAccount(AddSubAccountDTO addSubAccountDTO, Long adminAccId) {
// Long adminAccId = UserContext.getUserHolder().getId();
Account adminAcc = baseMapper.selectById(adminAccId);
if (Objects.isNull(adminAcc) || (adminAcc.getSystemUser() != 5 && adminAcc.getSystemUser() != 7)) {
throw new BusinessException("have.no.permission");
@@ -3595,4 +3595,23 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
}
}*/
@Transactional(rollbackFor = Exception.class)
public void checkEduAdminExpireStatus(){
// 1、检查所有管理员账号到期状态
List<Account> expiredEduAdmin = getExpiredUserBySystemUser(7);
// 2、若有过期教育管理员则将该管理员下的所有子账号删除降为游客或者恢复其原本身份与积分
if (!expiredEduAdmin.isEmpty()) {
for (Account adminAccount : expiredEduAdmin){
List<Account> subAccountsByAdmin = getSubAccountsByAdmin(adminAccount);
if (!subAccountsByAdmin.isEmpty()){
// 获取所有子账号的id,并删除
List<Long> subAccIdList = subAccountsByAdmin.stream().map(Account::getId).collect(Collectors.toList());
removeSubAccount(new AddSubAccountDTO(subAccIdList), adminAccount.getId());
}
// 将教育管理员置为游客
toVisitor(adminAccount);
}
}
}
}