//package org.jk.rag.task;
//import cn.dev33.satoken.stp.StpUtil;
//import jakarta.annotation.Resource;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.jk.common.core.constant.CacheConstants;
//import org.jk.common.core.domain.dto.UserOnlineDTO;
//import org.jk.common.core.utils.StringUtils;
//import org.jk.common.redis.utils.RedisUtils;
//import org.jk.rag.domain.bo.SysUserOnlineLogBo;
//import org.jk.rag.service.ISysUserOnlineLogService;
//import org.jk.system.domain.vo.SysTenantVo;
//import org.jk.system.service.ISysTenantService;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//import java.time.LocalDateTime;
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.List;
//import java.util.Set;
//
///**
// * 每 2 小时执行的定时任务
// */
//@Slf4j // 日志注解（替代System.out.println）
//@Component // 必须交给Spring容器管理
//@RequiredArgsConstructor
//public class OnlineUsersTask {
//
//    private final ISysUserOnlineLogService service;
//
//    private final ISysTenantService sysTenantService;
//
//    //@Scheduled(cron = "0 0 */2 * * ?")
////    @Scheduled(cron = "*/30 * * * * ?")
////    public void executeTwoHourJob() {
////        try {
////            // 1. 核心业务逻辑（替换为你的实际代码）
////            log.info("===== 每2小时任务开始执行 =====");
////            log.info("当前时间：{}", LocalDateTime.now());
////            // 示例：执行业务操作（如数据同步、报表生成、接口调用等）
////            doBusinessLogic();
////            log.info("===== 每2小时任务执行完成 =====\n");
////
////        } catch (Exception e) {
////            // 2. 异常处理（避免任务异常导致后续不执行）
////            log.error("每2小时任务执行失败", e);
////        }
////    }
//
//    /**
//     * 模拟业务逻辑（替换为你的实际代码）
//     */
//    private void doBusinessLogic() {
//        List<SysTenantVo> tenantVos = sysTenantService.queryListWithOnlineUser();
//        String onlineTokenKey = "*:"+CacheConstants.ONLINE_TOKEN_KEY;
//        log.info("【定时任务】ONLINE_TOKEN_KEY = {}", onlineTokenKey);
//        String queryPattern = onlineTokenKey + "*";
//        log.info("【定时任务】查询 Redis Key 前缀 = {}", queryPattern);
//        Collection<String> keys = RedisUtils.keys(queryPattern);
//        log.info("【定时任务】RedisUtils 查询 Key 结果：{}，数量：{}", keys, keys == null ? 0 : keys.size());
//        List<UserOnlineDTO> userOnlineDTOList = new ArrayList<>();
//        for (String key : keys) {
//            String token = StringUtils.substringAfterLast(key, ":");
//            // 如果已经过期则跳过
//            if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) < -1) {
//                continue;
//            }
//            userOnlineDTOList.add(RedisUtils.getCacheObject(CacheConstants.ONLINE_TOKEN_KEY + token));
//        }
//        SysUserOnlineLogBo bo = new SysUserOnlineLogBo();
//        bo.setOnlineNum(String.valueOf(userOnlineDTOList.size()));
//        service.insertByBo(bo);
//        log.info("插入在线人数..."+userOnlineDTOList.size());
//
//    }
//
//
//
//}
