From 40c0f9651882ca56a5b649b76f9275824dc86e21 Mon Sep 17 00:00:00 2001 From: ziin Date: Thu, 11 Dec 2025 20:58:23 +0800 Subject: [PATCH] =?UTF-8?q?feat(system):=20=E6=96=B0=E5=A2=9E=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E4=BB=BB=E5=8A=A1=E7=A6=81=E7=94=A8=E8=BF=87=E6=9C=9F?= =?UTF-8?q?WebAI=E8=B4=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../job/disableWebAIExpiredAccount.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/job/disableWebAIExpiredAccount.java diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/job/disableWebAIExpiredAccount.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/job/disableWebAIExpiredAccount.java new file mode 100644 index 0000000..6372429 --- /dev/null +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/job/disableWebAIExpiredAccount.java @@ -0,0 +1,68 @@ +package cn.iocoder.yudao.module.system.job; + +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; +import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; +import cn.iocoder.yudao.framework.tenant.core.job.TenantJob; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.dal.mysql.tenant.TenantMapper; +import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.List;/* + * @author: ziin + * @date: 2025/12/11 20:55 + */ +@Slf4j +@Component +public class disableWebAIExpiredAccount implements JobHandler{ + + /** + * 租户数据访问对象 + * 用于查询租户信息和过期时间 + */ + @Resource + TenantMapper tenantMapper; + + /** + * 管理员用户数据访问对象 + * 用于查询和更新用户权限状态 + */ + @Resource + private AdminUserMapper userMapper; + + + @Override + @TenantJob + public String execute(String param) throws Exception { + Long tenantId = TenantContextHolder.getTenantId(); + TenantDO tenant = tenantMapper.selectById(tenantId); + if (tenant.getExpireTime()!=null) { + Duration brotherDuration = LocalDateTimeUtil.between(tenant.getExpireTime(), LocalDateTime.now()); + long minutes = brotherDuration.toMinutes(); + LambdaQueryWrapper aiUserQueryWrapper = new LambdaQueryWrapper<>(); + aiUserQueryWrapper.eq(AdminUserDO::getTenantId, tenantId); + aiUserQueryWrapper.eq(AdminUserDO::getWebAi, 1); + List aiUserList = userMapper.selectList(aiUserQueryWrapper); + int aiAccountNum = 0 ; + if (minutes >= 0) { + for (AdminUserDO adminUserDO : aiUserList) { + adminUserDO.setWebAi((byte) 0); + userMapper.updateById(adminUserDO); + aiAccountNum++; + log.info("禁用过期爬虫账号,账号ID:{}", adminUserDO.getId()); + } + } + // 返回操作结果:包含禁用的AI账号和大哥账号数量统计 + return "禁用过期账号成功,禁用了 " + aiAccountNum + " 个 WebAI 账号。"; + } + return "租户未配置过期时间"; + } +} +