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 b91f406e..cf8274dc 100644 --- a/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java @@ -569,40 +569,76 @@ public class AccountServiceImpl extends ServiceImpl impl } @Override + @Transactional(rollbackFor = Exception.class) public Boolean addNoLoginRequired(NoLoginRequiredDTO noLoginRequiredDTO) { - QueryWrapper qw = new QueryWrapper<>(); - qw.lambda().isNotNull(Account::getBrowserIdentifiers); - qw.lambda().like(Account::getUserName, "PolyU-SFT-"); - List accountList = accountMapper.selectList(qw); - if (accountList.size() >= 100) { + // 构建查询条件,查找已注册的账户数量 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().isNotNull(Account::getBrowserIdentifiers); + queryWrapper.lambda().like(Account::getUserName, "PolyU-SFT-"); + List existingAccounts = accountMapper.selectList(queryWrapper); + + // 检查注册账户数量是否超过限制 + if (existingAccounts.size() >= 100) { throw new BusinessException("The number of registered accounts exceeds the limit"); } - qw.lambda().eq(Account::getBrowserIdentifiers, noLoginRequiredDTO.getBrowserIdentifiers()); - if (!accountMapper.selectList(qw).isEmpty()) { + + // 检查浏览器标识是否已经被注册 + queryWrapper.clear(); + queryWrapper.lambda().eq(Account::getBrowserIdentifiers, noLoginRequiredDTO.getBrowserIdentifiers()); + if (!accountMapper.selectList(queryWrapper).isEmpty()) { throw new BusinessException("This browser has already been registered"); } - Account account = new Account(); - account.setUserName("PolyU-SFT-" + String.format("%03d", accountList.size() + 1)); - account.setUserPassword("Third-000000"); - account.setValidStartTime(System.currentTimeMillis()); - account.setValidEndTime(System.currentTimeMillis() + 365L * 24 * 60 * 60 * 1000); - account.setCreateDate(new Date()); - account.setIsBeginner(1); - account.setIsTrial(0); - account.setBrowserIdentifiers(noLoginRequiredDTO.getBrowserIdentifiers()); - account.setLanguage(Language.ENGLISH.name()); - accountMapper.insert(account); + + // 创建新账户 + Account newAccount = new Account(); + newAccount.setUserName("PolyU-SFT-" + String.format("%03d", existingAccounts.size() + 1)); + newAccount.setUserPassword("Third-000000"); + newAccount.setValidStartTime(System.currentTimeMillis()); + newAccount.setValidEndTime(System.currentTimeMillis() + 365L * 24 * 60 * 60 * 1000); + newAccount.setCreateDate(new Date()); + newAccount.setIsBeginner(1); + newAccount.setIsTrial(0); + newAccount.setBrowserIdentifiers(noLoginRequiredDTO.getBrowserIdentifiers()); + newAccount.setLanguage(Language.ENGLISH.name()); + + // 插入新账户 + accountMapper.insert(newAccount); + return Boolean.TRUE; } + @Override + @Transactional(rollbackFor = Exception.class) public Boolean deleteNoLoginRequired(NoLoginRequiredDTO noLoginRequiredDTO) { - QueryWrapper qw = new QueryWrapper<>(); - qw.lambda().eq(Account::getBrowserIdentifiers, noLoginRequiredDTO.getBrowserIdentifiers()); - accountMapper.delete(qw); + // 删除将被注销的用户 + QueryWrapper queryWrapperDelete = new QueryWrapper<>(); + queryWrapperDelete.lambda().eq(Account::getBrowserIdentifiers, noLoginRequiredDTO.getBrowserIdentifiers()); + List accountList = accountMapper.selectList(queryWrapperDelete); + if (CollectionUtil.isNotEmpty(accountList)) { + Account accountDelete = accountList.get(0); + String userName = accountDelete.getUserName(); + // 查询当前浏览器标识下的所有用户,并按照用户名编号降序排序 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().isNotNull(Account::getBrowserIdentifiers); + queryWrapper.lambda().orderByDesc(Account::getUserName); + List accounts = accountMapper.selectList(queryWrapper); + + // 如果存在用户,将将被注销的用户的浏览器标识更新为用户名编号最大的用户的浏览器标识 + if (!accounts.isEmpty()) { + Account userToBeUpdate = accounts.get(0); + if (!userName.equals(userToBeUpdate.getUserName())) { + accountMapper.deleteById(accountDelete); + userToBeUpdate.setUserName(userName); + accountMapper.updateById(userToBeUpdate); + } + } + } + return Boolean.TRUE; } + @Override public AccountLoginVO noLoginRequired(NoLoginRequiredDTO noLoginRequiredDTO) { QueryWrapper qw = new QueryWrapper<>();