diff --git a/src/main/java/com/ai/da/common/security/filter/AuthenticationFilter.java b/src/main/java/com/ai/da/common/security/filter/AuthenticationFilter.java index 1103242c..7974a487 100644 --- a/src/main/java/com/ai/da/common/security/filter/AuthenticationFilter.java +++ b/src/main/java/com/ai/da/common/security/filter/AuthenticationFilter.java @@ -46,6 +46,7 @@ public class AuthenticationFilter extends OncePerRequestFilter { "/api/python/saveGeneratePicture", "/api/python/getLibraryByUserId", "/api/third/party/addUser","/api/third/party/addTrialUser", "/api/third/party/editUser", "/api/element/initDefaultSysFile", "/api/third/party/addNoLoginRequired","/api/third/party/deleteNoLoginRequired", + "/api/third/party/existNoLoginRequired", "/api/python/chatStream", "/api/python/flush", "/api/account/healthy" diff --git a/src/main/java/com/ai/da/controller/ThirdPartyController.java b/src/main/java/com/ai/da/controller/ThirdPartyController.java index a9db8b2a..72167882 100644 --- a/src/main/java/com/ai/da/controller/ThirdPartyController.java +++ b/src/main/java/com/ai/da/controller/ThirdPartyController.java @@ -55,4 +55,11 @@ public class ThirdPartyController { public Response deleteNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO) { return Response.success(accountService.deleteNoLoginRequired(noLoginRequiredDTO)); } + + @CrossOrigin + @ApiOperation(value = "add No Login Required") + @PostMapping("/existNoLoginRequired") + public Response existNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO) { + return Response.success(accountService.existNoLoginRequired(noLoginRequiredDTO)); + } } diff --git a/src/main/java/com/ai/da/service/AccountService.java b/src/main/java/com/ai/da/service/AccountService.java index b9089c54..d6c7aede 100644 --- a/src/main/java/com/ai/da/service/AccountService.java +++ b/src/main/java/com/ai/da/service/AccountService.java @@ -121,4 +121,6 @@ public interface AccountService extends IService { Boolean deleteNoLoginRequired(NoLoginRequiredDTO noLoginRequiredDTO); AccountLoginVO noLoginRequired(NoLoginRequiredDTO noLoginRequiredDTO); + + Boolean existNoLoginRequired(NoLoginRequiredDTO noLoginRequiredDTO); } 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 c26aa6bf..f66a9369 100644 --- a/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java @@ -569,39 +569,83 @@ 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()); - 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); + //jwt本身失效比较难做 统一用缓存实现 删除缓存就失效 + String token = LocalCacheUtils.getTokenCache(String.valueOf(accountDelete.getId())); + if (StringUtils.isNotBlank(token)) { + LocalCacheUtils.delTokenCache(String.valueOf(accountDelete.getId())); + } + if (!userName.equals(userToBeUpdate.getUserName())) { + accountMapper.deleteById(accountDelete); + userToBeUpdate.setUserName(userName); + accountMapper.updateById(userToBeUpdate); + }else { + accountMapper.deleteById(accountDelete); + } + } + } + return Boolean.TRUE; } + @Override public AccountLoginVO noLoginRequired(NoLoginRequiredDTO noLoginRequiredDTO) { QueryWrapper qw = new QueryWrapper<>(); @@ -622,4 +666,15 @@ public class AccountServiceImpl extends ServiceImpl impl response.setUserId(account.getId()); return response; } + + @Override + public Boolean existNoLoginRequired(NoLoginRequiredDTO noLoginRequiredDTO) { + QueryWrapper qw = new QueryWrapper<>(); + qw.lambda().eq(Account::getBrowserIdentifiers, noLoginRequiredDTO.getBrowserIdentifiers()); + List accountList = accountMapper.selectList(qw); + if (CollectionUtil.isEmpty(accountList)) { + return Boolean.FALSE; + } + return Boolean.TRUE; + } }