//package org.jk.rag.task;
//import cn.dev33.satoken.stp.StpUtil;
//import com.alibaba.fastjson2.JSON;
//import com.alibaba.fastjson2.JSONObject;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import okhttp3.*;
//import org.jk.common.core.config.DeepseekConfig;
//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.SysTokenLogBo;
//import org.jk.rag.domain.bo.SysUserOnlineLogBo;
//import org.jk.rag.service.IJkRagService;
//import org.jk.rag.service.IJkReviseService;
//import org.jk.rag.service.ISysTokenLogService;
//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.io.IOException;
//import java.time.LocalDateTime;
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.List;
//import java.util.concurrent.TimeUnit;
//
///**
// * 每 2 小时执行的定时任务
// */
//@Slf4j // 日志注解（替代System.out.println）
//@Component // 必须交给Spring容器管理
//@RequiredArgsConstructor
//public class TokenTask {
//
//    private final IJkRagService jkRagService;
//
//    private final ISysTokenLogService sysTokenLogService;
//
//    private final DeepseekConfig deepseekConfig;
//
//    //@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() {
//        SysTokenLogBo sysTokenLogBo = new SysTokenLogBo();
//        String url = deepseekConfig.getBaseurl() + deepseekConfig.getTokenSpeed();
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("query","你好");
//        jsonObject.put("model","Qwen3-30B");
//        RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), jsonObject.toJSONString());
//        Request request = buildPostRequest(url, requestBody);
//        OkHttpClient client = buildOkHttpClient();
//        try {
//            Response response = client.newCall(request).execute();
//            if (response.isSuccessful()) {
//                String body = response.body().string();
//                if (isJsonObject(body)) {
//                    JSONObject bod = JSONObject.parseObject(body);
//                    sysTokenLogBo.setTokenSpeed(bod.getString("token_speed"));
//                    sysTokenLogBo.setElapsedTime(bod.getString("elapsed_time"));
//                    sysTokenLogService.insertByBo(sysTokenLogBo);
//                }
//            }
//        } catch (IOException e) {
//            log.info("deepseek Request URL: {}", e.getMessage());
//        }
//
//    }
//
//    private Request buildPostRequest(String url, RequestBody requestBody) {
//        return new Request.Builder()
//            .addHeader("User-Agent", "insomnia/10.3.1")
//            .addHeader("Content-Type", "application/json")
//            .url(url).post(requestBody).build();
//    }
//
//    private OkHttpClient buildOkHttpClient() {
//        return new OkHttpClient.Builder()
//            .connectTimeout(10, TimeUnit.SECONDS)
//            .writeTimeout(50, TimeUnit.SECONDS)
//            .readTimeout(20, TimeUnit.MINUTES)
//            .build();
//    }
//
//    private boolean isJsonObject(String data) {
//        try {
//            JSON.parseObject(data);
//            return true;
//        } catch (Exception e) {
//            return false;
//        }
//    }
//
//
//
//}
