fix(system): 修复过期账号任务仅处理有效用户
补充 AI 与大哥账号查询条件,避免全表扫描
This commit is contained in:
@@ -76,6 +76,7 @@ public class DisableAIExpiredAccount implements JobHandler{
|
|||||||
long minutes = brotherDuration.toMinutes();
|
long minutes = brotherDuration.toMinutes();
|
||||||
LambdaQueryWrapper<AdminUserDO> aiUserQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<AdminUserDO> aiUserQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
aiUserQueryWrapper.eq(AdminUserDO::getTenantId, tenantId);
|
aiUserQueryWrapper.eq(AdminUserDO::getTenantId, tenantId);
|
||||||
|
aiUserQueryWrapper.eq(AdminUserDO::getAiChat, 1);
|
||||||
List<AdminUserDO> aiUserList = userMapper.selectList(aiUserQueryWrapper);
|
List<AdminUserDO> aiUserList = userMapper.selectList(aiUserQueryWrapper);
|
||||||
int aiAccountNum = 0 ;
|
int aiAccountNum = 0 ;
|
||||||
if (minutes >= 0) {
|
if (minutes >= 0) {
|
||||||
|
|||||||
@@ -64,28 +64,56 @@ public class DisableBrotherExpiredAccount implements JobHandler{
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@TenantJob
|
@TenantJob
|
||||||
|
/**
|
||||||
|
* 执行禁用过期大哥账号的定时任务
|
||||||
|
* @param param 任务参数(未使用)
|
||||||
|
* @return 执行结果信息
|
||||||
|
* @throws Exception 执行过程中可能抛出的异常
|
||||||
|
*/
|
||||||
public String execute(String param) throws Exception {
|
public String execute(String param) throws Exception {
|
||||||
|
// 获取当前租户ID
|
||||||
Long tenantId = TenantContextHolder.getTenantId();
|
Long tenantId = TenantContextHolder.getTenantId();
|
||||||
|
// 查询当前租户信息
|
||||||
TenantDO tenant = tenantMapper.selectById(tenantId);
|
TenantDO tenant = tenantMapper.selectById(tenantId);
|
||||||
|
|
||||||
|
// 检查租户是否配置了大哥账号过期时间,如未配置则直接返回提示
|
||||||
if (tenant.getBrotherExpireTime() == null) {
|
if (tenant.getBrotherExpireTime() == null) {
|
||||||
return "租户未配置大哥过期时间";
|
return "租户未配置大哥过期时间";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 计算从租户设置的过期时间到当前时间的时间差
|
||||||
Duration brotherDuration = LocalDateTimeUtil.between(tenant.getBrotherExpireTime(), LocalDateTime.now());
|
Duration brotherDuration = LocalDateTimeUtil.between(tenant.getBrotherExpireTime(), LocalDateTime.now());
|
||||||
|
// 转换为分钟数
|
||||||
long minutes = brotherDuration.toMinutes();
|
long minutes = brotherDuration.toMinutes();
|
||||||
LambdaQueryWrapper<AdminUserDO> aiUserQueryWrapper = new LambdaQueryWrapper<>();
|
|
||||||
aiUserQueryWrapper.eq(AdminUserDO::getTenantId, tenantId);
|
// 创建查询条件,查找当前租户下的所有大哥账号
|
||||||
List<AdminUserDO> aiUserList = userMapper.selectList(aiUserQueryWrapper);
|
LambdaQueryWrapper<AdminUserDO> brotherUserQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
brotherUserQueryWrapper.eq(AdminUserDO::getTenantId, tenantId);
|
||||||
|
brotherUserQueryWrapper.eq(AdminUserDO::getBigBrother, 1);
|
||||||
|
|
||||||
|
// 查询符合条件的大哥账号列表
|
||||||
|
List<AdminUserDO> aiUserList = userMapper.selectList(brotherUserQueryWrapper);
|
||||||
|
|
||||||
|
// 统计被禁用的大哥账号数量
|
||||||
int brotherAccountNum = 0;
|
int brotherAccountNum = 0;
|
||||||
|
|
||||||
|
// 如果已过过期时间(minutes >= 0表示当前时间已超过过期时间)
|
||||||
if (minutes >= 0) {
|
if (minutes >= 0) {
|
||||||
|
// 遍历所有大哥账号进行禁用操作
|
||||||
for (AdminUserDO adminUserDO : aiUserList) {
|
for (AdminUserDO adminUserDO : aiUserList) {
|
||||||
|
// 将BigBrother标志设置为0,表示禁用大哥权限
|
||||||
adminUserDO.setBigBrother((byte) 0);
|
adminUserDO.setBigBrother((byte) 0);
|
||||||
|
// 更新用户信息到数据库
|
||||||
userMapper.updateById(adminUserDO);
|
userMapper.updateById(adminUserDO);
|
||||||
|
// 更新统计计数
|
||||||
brotherAccountNum++;
|
brotherAccountNum++;
|
||||||
|
// 记录禁用操作日志
|
||||||
log.info("禁用过期大哥账号,账号ID:{}", adminUserDO.getId());
|
log.info("禁用过期大哥账号,账号ID:{}", adminUserDO.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 返回操作结果:包含禁用的大哥账号数量统计
|
||||||
// 返回操作结果:包含禁用的AI账号和大哥账号数量统计
|
|
||||||
return "禁用过期账号成功,禁用了 " + brotherAccountNum + " 个 大哥账号。";
|
return "禁用过期账号成功,禁用了 " + brotherAccountNum + " 个 大哥账号。";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user