Files
Jarvis_java/src/main/java/cn/van/business/util/QLUtil.java

354 lines
13 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package cn.van.business.util;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.concurrent.TimeUnit;
import static cn.hutool.core.thread.ThreadUtil.sleep;
/**
* @author Leo
* @version 1.0
* @create 2023/12/22 0022 上午 09:59
* @description
*/
@Component
public class QLUtil {
//client_id
public static final String CLIENT_ID = "Ouv_S9gk5LpV";
//client_secret
public static final String CLIENT_SECRET = "1pLjAIfBBzu1_UA9q-hOj778";
public static final String QL_TOKEN_KEY = "QL_TOKEN_KEY";
//private static final RedisCache redisCache = SpringUtil.getBean(RedisCache.class);
private static final Logger logger = LoggerFactory.getLogger(QLUtil.class);
/**
* 1. 在系统设置 -> 应用设置 -> 添加应用权限目前支持5个模块可以选择多个模块。选择一个模块之后可读写此模块的所有接口。
* 2. 使用生成的 client_id 和 client_secret 请求获取token接口 http://localhost:5700/open/auth/token?client_id=xxxxxx&client_secret=xxxxxxxx
* 3. 上面接口返回的token有效期为30天可用于请求青龙的接口 curl 'http://localhost:5700/open/envs?searchValue=&t=1630032278171' -H 'Authorization: Bearer
* 接口返回的token'
* 4. openapi的接口与系统正常接口的区别就是青龙里的是/api/envsopenapi是/open/envs即就是青龙接口中的api换成open
*/
public static String QL_BASE_URL = "http://134.175.126.60:45700";
public static final String GET_TOKEN = QL_BASE_URL + "/open/auth/token";
// /open/envs
public static final String GET_ENV = QL_BASE_URL + "/open/envs";
// /open/crons
public static final String GET_CRON = QL_BASE_URL + "/open/crons";
private Environment env;
@Autowired
private StringRedisTemplate redisTemplate;
public QLUtil(Environment env) {
this.env = env;
QL_BASE_URL = env.getProperty("config.QL_BASE_URL");
}
public String getToken() {
String token = null;
token = redisTemplate.opsForValue().get(QL_TOKEN_KEY);
if (StrUtil.isNotEmpty(token)) {
} else {
//HashMap<String, String> map = new HashMap<>();
//map.put("client_id", CLIENT_ID);
//map.put("client_secret", CLIENT_SECRET);
//String jsonStr = JSON.toJSONString(map);
while (Util.isNotEmpty(token)) {
//* 2. 使用生成的 client_id 和 client_secret 请求获取token接口 http://localhost:5700/open/auth/token?client_id=xxxxxx&client_secret=xxxxxxxx
String responseStr = HttpRequest.get(GET_TOKEN + "?client_id=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET).execute().body();
if (ObjectUtil.isNotEmpty(responseStr)) {
//{"code":200,"data":{"token":"950e3060-d714-4f6a-9839-c098a116f0a8","token_type":"Bearer","expiration":1705743778}}
JSONObject jsonObject = JSON.parseObject(responseStr);
if (Objects.equals(String.valueOf(jsonObject.getString("code")), "200")) {
JSONObject response = jsonObject.getJSONObject("data");
redisTemplate.opsForValue().set(QL_TOKEN_KEY, (String) response.get("token"), (int) response.get("expiration"), TimeUnit.SECONDS);
token = (String) response.get("token");
}
}
sleep(500);
}
}
return token;
}
// get /envs
/**
* @return
* @throws
* @description 获取所有环境变量
*/
public JSONArray getEnv(String searchKey) {
String token = getToken();
JSONArray result = new JSONArray();
int maxRetryCount = 3;
int retryCount = 0;
String getUrl = GET_ENV + "?searchValue=&t=1630032278171";
if (Util.isNotEmpty(searchKey)) {
getUrl = GET_ENV + "?searchValue=" + searchKey + "&t=1630032278171";
}
while (result.size() == 0 && retryCount < maxRetryCount) {
String responseStr = HttpRequest.get(getUrl).header("Authorization", "Bearer " + token).execute().body();
if (ObjectUtil.isNotEmpty(responseStr)) {
JSONObject qlResponse = JSONObject.parseObject(responseStr);
if (qlResponse.getString("code").equals("200")) {
result = (JSONArray) qlResponse.get("data");
//result = null;
}
}
retryCount++;
sleep(1000);
}
return result;
}
/**
* @param name
* @return
* @throws
* @description 检查是否存在环境变量存在返回值不存在返回null
*/
//public String getEnvValue(String name) {
// JSONObject jsonObject = getEnv();
// if (ObjectUtil.isNotEmpty(jsonObject)) {
// return jsonObject.getJSONObject(name).getString("value");
// }
// return null;
//}
// post /envs
// {
// "value": "123",
// "name": "test_add",
// "remarks": "新建测试"
//}
/**
* @param name
* @param remarks
* @param value
* @return
* @throws
* @description 添加环境变量 name 环境变量名value 环境变量值remarks 环境变量备注
* 如果存在一样的value 会返回 400
* 如果添加成功,就返回 TRUE ,否则返回 FALSE
*/
public Boolean addEnv(String value, String name, String remarks) {
String token = getToken();
JSONObject result = new JSONObject();
List<QLEnv> bodyArr = Collections.singletonList(new QLEnv(value, name, remarks));
logger.info("addEnv 请求body {}", JSON.toJSONString(bodyArr));
// 设置最大重试次数
int maxRetryCount = 3;
int retryCount = 0;
while (Util.isEmpty(result) && retryCount < maxRetryCount) {
String responseStr = HttpRequest.post(GET_ENV)
.header("Authorization", "Bearer " + token)
.body(JSON.toJSONString(bodyArr))
.execute()
.body();
logger.info("responseStr 响应 {}", responseStr);
if (Util.isNotEmpty(responseStr)) {
JSONObject qlResponse = JSONObject.parseObject(responseStr);
String code = qlResponse.getString("code");
if ("200".equals(code)) {
logger.info("200 响应 {}", qlResponse);
result = (JSONObject) qlResponse.get("data");
return true;
} else if ("400".equals(code)) {
logger.info("400 响应 {}", qlResponse);
result = (JSONObject) qlResponse.get("message");
break;
}
}
retryCount++;
sleep(1000);
}
return false;
}
// http://134.175.126.60:45700/api/crons?searchValue=&page=1&size=20&filters={}&queryString={%22filters%22:null,%22sorts%22:null,%22filterRelation%22:%22and%22}&t=1703148561868
/**
* @param searchKey
* @return
* @throws
* @description 获取定时任务列表
*/
public List<Cron> getCron(String searchKey) {
String token = getToken();
List<Cron> cronList = new ArrayList<>();
int maxRetryCount = 3;
int retryCount = 0;
String getUrl = GET_CRON + "?searchValue=&t=1630032278171";
if (Util.isNotEmpty(searchKey)) {
getUrl = GET_CRON + "?searchValue=" + searchKey + "&t=1630032278171";
}
while (cronList.size() == 0 && retryCount < maxRetryCount) {
String responseStr = HttpRequest.get(getUrl).header("Authorization", "Bearer " + token).execute().body();
if (ObjectUtil.isNotEmpty(responseStr)) {
JSONObject qlResponse = JSONObject.parseObject(responseStr);
String code = qlResponse.getString("code");
//{"code":200,"data":{"data":[],"total":0}}
if ("200".equals(code)) {
logger.info("200 响应 {}", qlResponse);
JSONObject dataObj = qlResponse.getJSONObject("data");
if (dataObj.getInteger("total") == 0) {
} else {
ArrayList data = JSONObject.parseObject(dataObj.getString("data"), ArrayList.class);
System.out.println(data.size());
}
} else if ("400".equals(code)) {
logger.info("400 响应 {}", qlResponse);
//result = (JSONArray) qlResponse.get("message");
}
retryCount++;
sleep(500);
}
}
return null;
}
/*
* 请求网址:
* http://134.175.126.60:45700/api/crons/run?t=1703148561868
* 请求方法:
* PUT*/
//public JSONObject runCron(String cronId) {
// String token = getToken();
// if (StrUtil.isNotEmpty(token)) {
// for (int i = 0; i < 3; i++) {
// String responseStr = HttpRequest.put(GET_CRON + "?cronId=" + cronId).header("Authorization", "Bearer " + token).execute().body();
// if (ObjectUtil.isNotEmpty(responseStr)) {
// QLResponse qlResponse = JSON.parseObject(responseStr, QLResponse.class);
// if (Objects.equals(String.valueOf(qlResponse.getCode()), "200")) {
// return qlResponse.getData();
// }
// }
// sleep(500);
// }
// }
// return null;
//}
/**
* }
* async ["getLoginedUserInfo"](_0x4ef1fe = {}) {
* let _0x26ac1b = false;
* try {
* const _0x3daa7c = {
* "token": this.token
* };
* const _0xe8bb64 = {
* "fn": "getLoginedUserInfo",
* "method": "get",
* "url": "https://i.meituan.com/wrapapi/getLoginedUserInfo",
* "searchParams": _0x3daa7c
* };
* let {
* result: _0x48e5d7
* } = await this.request(_0xe8bb64);
* if (_0x48e5d7?.["mobile"]) {
* _0x26ac1b = true;
* this.name = _0x48e5d7.nickName;
* this.userId = Number(_0x48e5d7.userId);
* this.log("登录成功");
* } else {
* this.log("获取账号信息失败, ck可能失效");//, {"notify": true}
* await expireNotify(this.userId, this.index);
* }
* } catch (_0x232c57) {
* console.log(_0x232c57);
* } finally {
* return _0x26ac1b;
* }
* }
*/
// 通过token 获取用户信息
// url https://i.meituan.com/wrapapi/getLoginedUserInfo
// 参数 token
// get
public HashMap<String, String> getLoginedUserInfo(String token) {
String responseStr = HttpRequest.get("https://i.meituan.com/wrapapi/getLoginedUserInfo" + "?token=" + token).header("token", token).execute().body();
HashMap<String, String> result = new HashMap<>();
if (ObjectUtil.isNotEmpty(responseStr)) {
JSONObject qlResponse = JSON.parseObject(responseStr);
//{"userId":"3822095266","nickName":"XLP200660795","growthValue":null,"growthLevel":null,"avatarUrl":"","mobile":"15817969021"}
if (qlResponse.containsKey("mobile")) {
result.put("mobile", qlResponse.getString("mobile"));
}
if (qlResponse.containsKey("nickName")) {
result.put("nickName", qlResponse.getString("nickName"));
}
}
return result;
}
// new QLEnv(value, name, remarks)
@Data
@AllArgsConstructor
@NoArgsConstructor
private static class QLEnv {
private String value;
private String name;
private String remarks;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
private class Cron {
private long id;
private String name;
private String command;
private String schedule;
private String timestamp;
private boolean saved;
private long status;
private long isSystem;
private long pid;
private long isDisabled;
private long isPinned;
private String logPath;
private List<Object> labels;
private long lastRunningTime;
private long lastExecutionTime;
private long subID;
private String createdAt;
private String updatedAt;
}
}