TASK:免密登录并发优化;

This commit is contained in:
shahaibo
2024-01-15 16:54:20 +08:00
parent 8737350002
commit 11e231992a

View File

@@ -569,40 +569,76 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean addNoLoginRequired(NoLoginRequiredDTO noLoginRequiredDTO) {
QueryWrapper<Account> qw = new QueryWrapper<>();
qw.lambda().isNotNull(Account::getBrowserIdentifiers);
qw.lambda().like(Account::getUserName, "PolyU-SFT-");
List<Account> accountList = accountMapper.selectList(qw);
if (accountList.size() >= 100) {
// 构建查询条件,查找已注册的账户数量
QueryWrapper<Account> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().isNotNull(Account::getBrowserIdentifiers);
queryWrapper.lambda().like(Account::getUserName, "PolyU-SFT-");
List<Account> 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<Account> qw = new QueryWrapper<>();
qw.lambda().eq(Account::getBrowserIdentifiers, noLoginRequiredDTO.getBrowserIdentifiers());
accountMapper.delete(qw);
// 删除将被注销的用户
QueryWrapper<Account> queryWrapperDelete = new QueryWrapper<>();
queryWrapperDelete.lambda().eq(Account::getBrowserIdentifiers, noLoginRequiredDTO.getBrowserIdentifiers());
List<Account> accountList = accountMapper.selectList(queryWrapperDelete);
if (CollectionUtil.isNotEmpty(accountList)) {
Account accountDelete = accountList.get(0);
String userName = accountDelete.getUserName();
// 查询当前浏览器标识下的所有用户,并按照用户名编号降序排序
QueryWrapper<Account> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().isNotNull(Account::getBrowserIdentifiers);
queryWrapper.lambda().orderByDesc(Account::getUserName);
List<Account> 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<Account> qw = new QueryWrapper<>();