diff --git a/pom.xml b/pom.xml
index c234b20..5e1db2e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,7 +64,23 @@
+
+ org.java-websocket
+ Java-WebSocket
+ 1.5.1
+
+
+
+ org.codehaus.jackson
+ jackson-mapper-asl
+ 1.9.2
+
+
+ org.codehaus.jackson
+ jackson-core-asl
+ 1.9.2
+
org.springframework.boot
spring-boot-starter-test
diff --git a/src/lib/open-api-sdk-2.0-2024-10-21.jar b/src/lib/open-api-sdk-2.0-2024-10-21.jar
new file mode 100644
index 0000000..58745e4
Binary files /dev/null and b/src/lib/open-api-sdk-2.0-2024-10-21.jar differ
diff --git a/src/main/java/cn/van333/mt2ql/wxMessage/WXListener.java b/src/main/java/cn/van333/mt2ql/wxMessage/WXListener.java
index 4cf0e04..e5c6080 100644
--- a/src/main/java/cn/van333/mt2ql/wxMessage/WXListener.java
+++ b/src/main/java/cn/van333/mt2ql/wxMessage/WXListener.java
@@ -58,7 +58,7 @@ public class WXListener {
* }
**/
@RequestMapping("/message")
- public String message(@RequestBody String requestBody) {
+ public String message(@RequestBody String requestBody) throws Exception {
WxMessage message = JSONObject.parseObject(requestBody, WxMessage.class);
wxMessageConsumer.consume(message);
return "OK";
@@ -70,5 +70,15 @@ public class WXListener {
System.out.println(requestBody);
return "OK";
}
+ @RequestMapping("/receive_msg")
+ public String receiveMsg(@RequestBody String requestBody) throws Exception {
+
+ System.out.println("测试接口收到数据:");
+ System.out.println(requestBody);
+ WxMessage message = JSONObject.parseObject(requestBody, WxMessage.class);
+ wxMessageConsumer.consume(message);
+
+ return "OK";
+ }
}
diff --git a/src/main/java/cn/van333/mt2ql/wxMessage/binance/WSClient.java b/src/main/java/cn/van333/mt2ql/wxMessage/binance/WSClient.java
new file mode 100644
index 0000000..b1fef29
--- /dev/null
+++ b/src/main/java/cn/van333/mt2ql/wxMessage/binance/WSClient.java
@@ -0,0 +1,64 @@
+package cn.van333.mt2ql.wxMessage.binance;
+
+import cn.van333.mt2ql.wxMessage.utils.SpringContextUtil;
+import cn.van333.mt2ql.wxMessage.utils.WXUtil;
+import com.alibaba.fastjson2.JSONObject;
+import org.java_websocket.client.WebSocketClient;
+import org.java_websocket.handshake.ServerHandshake;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Leo
+ * @version 1.0
+ * @create 2024/03/11 0011 下午 03:52
+ * @description:
+ */
+public class WSClient extends WebSocketClient {
+ private List dataList = new ArrayList<>();
+
+ public WSClient(String url) throws URISyntaxException {
+ super(new URI(url));
+ }
+
+ @Override
+ public void onOpen(ServerHandshake handshakedata) {
+ System.out.println("连接建立");
+ }
+
+ @Override
+ public void onMessage(String message) {
+ /** 数据结构 {"e":"avgPrice","E":1710146170238,"s":"APTUSDT","i":"5m","w":"13.26427038","T":1710146170230}
+ 拿出所有的数据 */
+ JSONObject data = JSONObject.parseObject(message);
+ dataList.add(data);
+ if (dataList.size() == 5) {
+ StringBuilder text = new StringBuilder();
+ for (JSONObject jsonObject : dataList) {
+ String type = jsonObject.getString("s");
+ String price = jsonObject.getString("w");
+ Long start = jsonObject.getLong("T");
+ Long end = jsonObject.getLong("E");
+ text.append(type).append(" ").append(price).append(" ").append(start).append(" ").append(end).append("\n");
+ }
+ WXUtil wxUtil = SpringContextUtil.getBean(WXUtil.class);
+ wxUtil.sendTextMessage("wxid_kr145nk7l0an31", text.toString(), 2, "wxid_kr145nk7l0an31"); // 假设send方法接受List作为参数,如果不是,你需要修改这行代码
+ dataList.clear();
+ }
+
+
+ }
+
+ @Override
+ public void onClose(int code, String reason, boolean remote) {
+ System.out.println("连接关闭");
+ }
+
+ @Override
+ public void onError(Exception ex) {
+ System.out.println("发生错误: " + ex.getMessage());
+ }
+}
diff --git a/src/main/java/cn/van333/mt2ql/wxMessage/config/WebSocketConfig.java b/src/main/java/cn/van333/mt2ql/wxMessage/config/WebSocketConfig.java
new file mode 100644
index 0000000..1018aee
--- /dev/null
+++ b/src/main/java/cn/van333/mt2ql/wxMessage/config/WebSocketConfig.java
@@ -0,0 +1,30 @@
+package cn.van333.mt2ql.wxMessage.config;
+
+import cn.van333.mt2ql.wxMessage.binance.WSClient;
+import org.java_websocket.client.WebSocketClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PostConstruct;
+import java.net.URISyntaxException;
+
+/**
+ * @author Leo
+ * @version 1.0
+ * @create 2024/03/11 0011 下午 03:57
+ * @description:
+ */
+//@Configuration
+public class WebSocketConfig {
+ private WebSocketClient client;
+
+ @PostConstruct
+ public void init() throws URISyntaxException{
+ //client = new WSClient("wss://data-stream.binance.vision/ws/aptusdt@avgPrice");
+ }
+
+ @Bean
+ public WebSocketClient webSocketClient() {
+ return client;
+ }
+}
diff --git a/src/main/java/cn/van333/mt2ql/wxMessage/config/WebSocketInitializer.java b/src/main/java/cn/van333/mt2ql/wxMessage/config/WebSocketInitializer.java
new file mode 100644
index 0000000..40919d4
--- /dev/null
+++ b/src/main/java/cn/van333/mt2ql/wxMessage/config/WebSocketInitializer.java
@@ -0,0 +1,28 @@
+package cn.van333.mt2ql.wxMessage.config;
+
+import org.java_websocket.client.WebSocketClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @author Leo
+ * @version 1.0
+ * @create 2024/03/11 0011 下午 04:34
+ * @description:
+ */
+//@Component
+public class WebSocketInitializer {
+
+ private final WebSocketClient webSocketClient;
+
+ public WebSocketInitializer(WebSocketClient webSocketClient) {
+ this.webSocketClient = webSocketClient;
+ }
+
+ @PostConstruct
+ public void startWebSocketClient() {
+ webSocketClient.connect();
+ }
+}
diff --git a/src/main/java/cn/van333/mt2ql/wxMessage/enums/EventType.java b/src/main/java/cn/van333/mt2ql/wxMessage/enums/EventType.java
index c4f073f..c1c6fd2 100644
--- a/src/main/java/cn/van333/mt2ql/wxMessage/enums/EventType.java
+++ b/src/main/java/cn/van333/mt2ql/wxMessage/enums/EventType.java
@@ -16,23 +16,38 @@ import java.util.Map;
public enum EventType implements IEnum {
/**
- * 账号变动事件 (10014)
- * 收到群聊消息 (10008)
- * 收到私聊消息 (10009)
- * 自己发出消息 (10010)
- * 转账事件 (10006)
- * 撤回事件 (10013)
- * 好友请求 (10011)
- * 支付事件 (10007)
+ 1 文本消息
+ 3 图片消息
+ 34 语音消息
+ 37 好友确认消息
+ 40 好友推荐消息
+ 42 共享名片
+ 43 视频消息
+ 44 主动撤回
+ 47 动画表情
+ 48 位置消息
+ 49 APP分享链接/文件
+ 50 VOIP消息
+ 51 微信初始化消息
+ 52 VOIP结束消息
+ 53 VOIP邀请
+ 62 小视频
*/
- ACCOUNT_CHANGE(10014, "账号变动事件"),
- SELF_MESSAGE(10010, "自己发出消息"),
- TRANSFER_EVENT(10006, "转账事件"),
- PAY_EVENT(10007, "支付事件"),
- GROUP_MESSAGE(10008, "收到群聊消息"),
- PRIVATE_MESSAGE(10009, "收到私聊消息"),
- REVOKE_EVENT(10013, "撤回事件"),
- FRIEND_REQUEST(10011, "好友请求");
+ TEXT(1, "文本消息"),
+ IMAGE(3, "图片消息"),
+ VOICE(34, "语音消息"),
+ FRIEND_CONFIRM(37, "好友确认消息"),
+ FRIEND_RECOMMEND(40, "好友推荐消息"),
+ SHARE_CARD(42, "共享名片"),
+ VIDEO(43, "视频消息"),
+ REVOKE(44, "主动撤回"),
+ ANIMATION(47, "动画表情"),
+ LOCATION(48, "位置消息"),
+ APP_SHARE_LINK(49, "APP分享链接/文件"),
+ VOIP(50, "微信初始化消息"),
+ VOIP_END(52, "VOIP结束消息"),
+ VOIP_INVITE(53, "VOIP邀请"),
+ SMALL_VIDEO(62, "小视频");
private final int key;
private final String name;
@@ -63,7 +78,7 @@ public enum EventType implements IEnum {
return "";
}
- public static Map getKeyVlue() {
+ public static Map getKeyValue() {
Map map = new HashMap<>();
EventType[] items = EventType.values();
for (EventType item : items) {
diff --git a/src/main/java/cn/van333/mt2ql/wxMessage/enums/MsgTypeEnum.java b/src/main/java/cn/van333/mt2ql/wxMessage/enums/MsgTypeEnum.java
index fb63d8f..d3b2ec0 100644
--- a/src/main/java/cn/van333/mt2ql/wxMessage/enums/MsgTypeEnum.java
+++ b/src/main/java/cn/van333/mt2ql/wxMessage/enums/MsgTypeEnum.java
@@ -13,13 +13,21 @@ import java.util.Map;
*/
public enum MsgTypeEnum implements IEnum {
/**
- msgType 消息类型:1|文本 3|图片 34|语音 42|名片 43|视频 47|动态表情 48|地理位置 49|分享链接或附件 2001|红包 2002|小程序 2003|群邀请 10000|系统消息
- * */
+ msgType :
+ 1|文本 3|图片 34|语音
+ 42|名片 43|视频 47|动态表情
+ 48|地理位置 49|分享链接或附件 2001|红包
+ 2002|小程序 2003|群邀请 10000|系统消息 * */
TEXT(1, "文本"),
IMAGE(3, "图片"),
VOICE(34, "语音"),
+ ANIMATION(47, "动态表情"),
+ //名片 42
+ CARD(42, "名片"),
+
+
VIDEO(43, "视频"),
- SHARE(49, "分享"),
+ SHARE(49, "分享链接或附件"),
LOCATION(48, "位置"),
REDPACKET(2001, "红包"),
MINIPROGRAM(2002, "小程序"),
diff --git a/src/main/java/cn/van333/mt2ql/wxMessage/enums/WXReqType.java b/src/main/java/cn/van333/mt2ql/wxMessage/enums/WXReqType.java
index 0f2f9b7..1a1e079 100644
--- a/src/main/java/cn/van333/mt2ql/wxMessage/enums/WXReqType.java
+++ b/src/main/java/cn/van333/mt2ql/wxMessage/enums/WXReqType.java
@@ -67,18 +67,18 @@ public enum WXReqType {
DELETE_FRIEND("Q0022", "删除好友"),
MODIFY_OBJECT_REMARK("Q0023", "修改对象备注"),
MODIFY_GROUP_NAME("Q0024", "修改群聊名称");
- private final String key;
+ private final String url;
private final String name;
- WXReqType(String key, String name) {
- this.key = key;
+ WXReqType(String url, String name) {
+ this.url = url;
this.name = name;
}
public static WXReqType get(String key) {
for (WXReqType e : WXReqType.values()) {
- if (Objects.equals(e.getKey(), key)) {
+ if (Objects.equals(e.getUrl(), key)) {
return e;
}
}
@@ -89,7 +89,7 @@ public enum WXReqType {
//if (Object.isNotEmpty(key)) {
WXReqType[] items = WXReqType.values();
for (WXReqType item : items) {
- if (Objects.equals(item.getKey(), key)) {
+ if (Objects.equals(item.getUrl(), key)) {
return item.getName();
}
}
@@ -101,7 +101,7 @@ public enum WXReqType {
Map map = new HashMap<>();
WXReqType[] items = WXReqType.values();
for (WXReqType item : items) {
- map.put(item.getKey() + "", item.getName());
+ map.put(item.getUrl() + "", item.getName());
}
return map;
}
@@ -112,15 +112,15 @@ public enum WXReqType {
for (WXReqType item : items) {
Map map = new HashMap<>();
map.put("label", item.getName());
- map.put("value", item.getKey());
+ map.put("value", item.getUrl());
result.add(map);
}
return result;
}
@JsonValue
- public String getKey() {
- return key;
+ public String getUrl() {
+ return url;
}
public String getName() {
diff --git a/src/main/java/cn/van333/mt2ql/wxMessage/model/WxMessage.java b/src/main/java/cn/van333/mt2ql/wxMessage/model/WxMessage.java
index 9aec95c..682f101 100644
--- a/src/main/java/cn/van333/mt2ql/wxMessage/model/WxMessage.java
+++ b/src/main/java/cn/van333/mt2ql/wxMessage/model/WxMessage.java
@@ -17,16 +17,32 @@ public class WxMessage {
// "wxid": "wxid_3sq4tklb6c3121", //收到这条事件的微信
// "data": {} //事件的主要内容,不同事件,具体对象参数也不尽相同
//}
- private Integer event;
- private String wxid;
- private JSONObject data;
- public WxMessage() {
- }
+ /**
+ * {
+ * "ServerPort":"30001",
+ * "selfwxid":"wxid_kr145nk7l0an31",
+ * "time":"1714465284",
+ * "type":"1",
+ * "msgsvrid":"4355263386657895005",
+ * "msg":"【京东】https://3.cn/1Y-DPkR9「可口可乐(Coca-Cola)雪碧 Sprite零卡无糖零卡汽水饮料330ml*24瓶整箱装」\n点击链接直接打开",
+ * "sougrce":"\n \n \n 1\n \n \n 1\n V1_NQ5b5w2k|v1_NQ5b5w2k\n \n \n \n\n",
+ * "file_path":"C:\\Users\\雷神\\Documents\\WeChat Files\\",
+ * "fromtype":"1",
+ * "fromid":"wxid_ytpc72mdoskt22",
+ * "toid":"wxid_kr145nk7l0an31"
+ * }*/
+ private String serverPort;
+ private String selfwxid;
+ private String time;
+ private String type;
+ private String msgsvrid;
+ private String msg;
+ private String sougrce;
+ private String filePath;
+ private String fromtype;
+ private String fromid;
+ private String toid;
+ private String fromgid;
- public WxMessage(Integer event, String wxid, JSONObject data) {
- this.event = event;
- this.wxid = wxid;
- this.data = data;
- }
}
diff --git a/src/main/java/cn/van333/mt2ql/wxMessage/model/WxUser.java b/src/main/java/cn/van333/mt2ql/wxMessage/model/WxUser.java
index f1b9a71..1703735 100644
--- a/src/main/java/cn/van333/mt2ql/wxMessage/model/WxUser.java
+++ b/src/main/java/cn/van333/mt2ql/wxMessage/model/WxUser.java
@@ -47,10 +47,15 @@ public class WxUser implements Serializable {
private String name;
/**
- * 1 正常 2 拉黑
+ * 0 正常 1 拉黑
*/
private Integer status;
+ /**
+ * 0 是 1 不是
+ */
+ private Integer isnew;
+
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@@ -72,7 +77,8 @@ public class WxUser implements Serializable {
&& (this.getCountChongzhi() == null ? other.getCountChongzhi() == null : this.getCountChongzhi().equals(other.getCountChongzhi()))
&& (this.getCountXiaofei() == null ? other.getCountXiaofei() == null : this.getCountXiaofei().equals(other.getCountXiaofei()))
&& (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
- && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()));
+ && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+ && (this.getIsnew() == null ? other.getIsnew() == null : this.getIsnew().equals(other.getIsnew()));
}
@Override
@@ -86,6 +92,7 @@ public class WxUser implements Serializable {
result = prime * result + ((getCountXiaofei() == null) ? 0 : getCountXiaofei().hashCode());
result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+ result = prime * result + ((getIsnew() == null) ? 0 : getIsnew().hashCode());
return result;
}
@@ -102,6 +109,7 @@ public class WxUser implements Serializable {
sb.append(", countXiaofei=").append(countXiaofei);
sb.append(", name=").append(name);
sb.append(", status=").append(status);
+ sb.append(", isnew=").append(isnew);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
diff --git a/src/main/java/cn/van333/mt2ql/wxMessage/utils/QLUtil.java b/src/main/java/cn/van333/mt2ql/wxMessage/utils/QLUtil.java
index acf830f..7297c04 100644
--- a/src/main/java/cn/van333/mt2ql/wxMessage/utils/QLUtil.java
+++ b/src/main/java/cn/van333/mt2ql/wxMessage/utils/QLUtil.java
@@ -5,10 +5,17 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
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.core.env.Environment;
+import org.springframework.stereotype.Component;
-import java.util.HashMap;
-import java.util.Objects;
+import java.util.*;
import java.util.concurrent.TimeUnit;
import static cn.hutool.core.thread.ThreadUtil.sleep;
@@ -19,6 +26,7 @@ import static cn.hutool.core.thread.ThreadUtil.sleep;
* @create 2023/12/22 0022 上午 09:59
* @description:
*/
+@Component
public class QLUtil {
/**
* 1. 在系统设置 -> 应用设置 -> 添加应用,权限目前支持5个模块,可以选择多个模块。选择一个模块之后,可读写此模块的所有接口。
@@ -27,7 +35,7 @@ public class QLUtil {
* 接口返回的token'
* 4. openapi的接口与系统正常接口的区别就是青龙里的是/api/envs,openapi是/open/envs,即就是青龙接口中的api换成open
*/
- public static final String QL_BASE_URL = "http://134.175.126.60:45700";
+ 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
@@ -42,35 +50,42 @@ public class QLUtil {
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);
+
+ private Environment env;
+
+ public QLUtil(Environment env) {
+ this.env = env;
+ QL_BASE_URL = env.getProperty("config.QL_BASE_URL");
+ }
public String getToken() {
- String token = redisCache.getCacheObject(QL_TOKEN_KEY);
+ String token = null;
+ token = redisCache.getCacheObject(QL_TOKEN_KEY);
if (StrUtil.isNotEmpty(token)) {
- return token;
+
} else {
//HashMap map = new HashMap<>();
//map.put("client_id", CLIENT_ID);
//map.put("client_secret", CLIENT_SECRET);
//String jsonStr = JSON.toJSONString(map);
- for (int i = 0; i < 3; i++) {
+ 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);
-
- System.out.println(jsonObject.getString("code"));
if (Objects.equals(String.valueOf(jsonObject.getString("code")), "200")) {
JSONObject response = jsonObject.getJSONObject("data");
redisCache.setCacheObject(QL_TOKEN_KEY, (String) response.get("token"), (int) response.get("expiration"), TimeUnit.SECONDS);
- return (String) response.get("token");
+ token = (String) response.get("token");
}
}
sleep(500);
}
- return null;
}
+ return token;
}
@@ -81,21 +96,30 @@ public class QLUtil {
* @throws
* @description 获取所有环境变量
*/
- public JSONObject getEnv() {
+ public JSONArray getEnv(String searchKey) {
String token = getToken();
- if (StrUtil.isNotEmpty(token)) {
- for (int i = 0; i < 3; i++) {
- String responseStr = HttpRequest.get(GET_ENV + "?searchValue=&t=1630032278171").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);
- }
+ 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";
}
- return null;
+ 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;
}
/**
@@ -104,13 +128,13 @@ public class QLUtil {
* @throws
* @description 检查是否存在环境变量,存在返回值,不存在返回null
*/
- public String getEnvValue(String name) {
- JSONObject jsonObject = getEnv();
- if (ObjectUtil.isNotEmpty(jsonObject)) {
- return jsonObject.getJSONObject(name).getString("value");
- }
- return null;
- }
+ //public String getEnvValue(String name) {
+ // JSONObject jsonObject = getEnv();
+ // if (ObjectUtil.isNotEmpty(jsonObject)) {
+ // return jsonObject.getJSONObject(name).getString("value");
+ // }
+ // return null;
+ //}
// post /envs
// {
@@ -125,54 +149,92 @@ public class QLUtil {
* @param value
* @return
* @throws
- * @description 添加环境变量
+ * @description 添加环境变量 name 环境变量名,value 环境变量值,remarks 环境变量备注
+ * 如果存在一样的value 会返回 400
+ * 如果添加成功,就返回 TRUE ,否则返回 FALSE
*/
- public JSONObject addEnv(String value, String name, String remarks) {
+ public Boolean addEnv(String value, String name, String remarks) {
String token = getToken();
- if (StrUtil.isNotEmpty(token)) {
- for (int i = 0; i < 3; i++) {
- String responseStr = HttpRequest.post(GET_ENV).header("Authorization", "Bearer " + token).body(JSON.toJSONString(new QLEnv(value, name, remarks))).execute().body();
- if (ObjectUtil.isNotEmpty(responseStr)) {
- QLResponse qlResponse = JSON.parseObject(responseStr, QLResponse.class);
- if (Objects.equals(String.valueOf(qlResponse.getCode()), "200")) {
- return qlResponse.getData();
- }
+ JSONObject result = new JSONObject();
+ List 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;
}
- sleep(500);
}
+
+ retryCount++;
+ sleep(1000);
}
- return null;
+ 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 queryString
+ * @param searchKey
* @return
* @throws
* @description 获取定时任务列表
*/
- public JSONObject getCron(String queryString) {
- if (StrUtil.isNotEmpty(queryString)) {
- for (int i = 0; i < 3; i++) {
- String responseStr = HttpRequest.get(GET_CRON + "?" + queryString).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);
- }
- } else {
- for (int i = 0; i < 3; i++) {
- String responseStr = HttpRequest.get(GET_CRON).execute().body();
- if (ObjectUtil.isNotEmpty(responseStr)) {
- QLResponse qlResponse = JSON.parseObject(responseStr, QLResponse.class);
- if (Objects.equals(String.valueOf(qlResponse.getCode()), "200")) {
- return qlResponse.getData();
+ public List getCron(String searchKey) {
+ String token = getToken();
+ List 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);
}
}
@@ -180,134 +242,113 @@ public class QLUtil {
}
/*
- * 请求网址:
- * 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;
- }
+ * 请求网址:
+ * 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;
- * }
- * }*/
+ * }
+ * 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 getLoginedUserInfo(String token) {
- String responseStr = HttpRequest.get("https://i.meituan.com/wrapapi/getLoginedUserInfo"+"?token="+token).header("token", token).execute().body();
- HashMap 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;
+ public HashMap getLoginedUserInfo(String token) {
+ String responseStr = HttpRequest.get("https://i.meituan.com/wrapapi/getLoginedUserInfo" + "?token=" + token).header("token", token).execute().body();
+ HashMap 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;
-
- public QLEnv(String value, String name, String remarks) {
- this.value = value;
- this.name = name;
- this.remarks = remarks;
- }
-
- public String getValue() {
- return value;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getRemarks() {
- return remarks;
- }
-
- public void setRemarks(String remarks) {
- this.remarks = remarks;
- }
}
- private static class QLResponse {
- private String code;
- private JSONObject data;
-
- public String getCode() {
- return code;
- }
-
- public void setCode(String code) {
- this.code = code;
- }
-
- public JSONObject getData() {
- return data;
- }
-
- public void setData(JSONObject data) {
- this.data = data;
- }
+ @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