fix(system): 修复过期账号任务仅处理有效用户

补充 AI 与大哥账号查询条件,避免全表扫描
This commit is contained in:
2025-11-17 21:26:19 +08:00
parent 4c42809d3b
commit 3ade777ac2
2 changed files with 37 additions and 8 deletions

View File

@@ -76,6 +76,7 @@ public class DisableAIExpiredAccount implements JobHandler{
long minutes = brotherDuration.toMinutes();
LambdaQueryWrapper<AdminUserDO> aiUserQueryWrapper = new LambdaQueryWrapper<>();
aiUserQueryWrapper.eq(AdminUserDO::getTenantId, tenantId);
aiUserQueryWrapper.eq(AdminUserDO::getAiChat, 1);
List<AdminUserDO> aiUserList = userMapper.selectList(aiUserQueryWrapper);
int aiAccountNum = 0 ;
if (minutes >= 0) {

View File

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