From 1e792f025712da88d5f53e7ef22462301d6cf071 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 13 May 2026 17:22:06 +0800
Subject: [PATCH] refactor(okxNewPrice): 账户配置
---
src/main/java/com/xcong/excoin/modules/okxApi/OkxKlineWebSocketClient.java | 9 +++++++++
src/main/java/com/xcong/excoin/modules/okxApi/wsHandler/handler/OkxAccountChannelHandler.java | 16 +++++++++++++---
src/main/java/com/xcong/excoin/modules/okxApi/OkxWebSocketClientManager.java | 21 ++++++++++++++-------
3 files changed, 36 insertions(+), 10 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/okxApi/OkxKlineWebSocketClient.java b/src/main/java/com/xcong/excoin/modules/okxApi/OkxKlineWebSocketClient.java
index 014d2f5..b043658 100644
--- a/src/main/java/com/xcong/excoin/modules/okxApi/OkxKlineWebSocketClient.java
+++ b/src/main/java/com/xcong/excoin/modules/okxApi/OkxKlineWebSocketClient.java
@@ -66,8 +66,14 @@
private final List<OkxChannelHandler> channelHandlers = new ArrayList<>();
+ private volatile Runnable onLoginSuccess;
+
public WebSocketClient getWebSocketClient() {
return webSocketClient;
+ }
+
+ public void setOnLoginSuccess(Runnable onLoginSuccess) {
+ this.onLoginSuccess = onLoginSuccess;
}
private final ExecutorService sharedExecutor = Executors.newCachedThreadPool(r -> {
@@ -249,6 +255,9 @@
handler.subscribe(webSocketClient);
}
sendPing();
+ if (onLoginSuccess != null) {
+ onLoginSuccess.run();
+ }
} else {
log.error("[WS] WebSocket登录失败, code:{}, msg:{}", code, response.getString("msg"));
}
diff --git a/src/main/java/com/xcong/excoin/modules/okxApi/OkxWebSocketClientManager.java b/src/main/java/com/xcong/excoin/modules/okxApi/OkxWebSocketClientManager.java
index 56ef6d1..510fb0c 100644
--- a/src/main/java/com/xcong/excoin/modules/okxApi/OkxWebSocketClientManager.java
+++ b/src/main/java/com/xcong/excoin/modules/okxApi/OkxWebSocketClientManager.java
@@ -48,11 +48,6 @@
gridTradeService = new OkxGridTradeService(config, accountName);
gridTradeService.startGrid();
- wsKlineClient = new OkxKlineWebSocketClient(config.getWsKlineUrl());
- wsKlineClient.addChannelHandler(new OkxCandlestickChannelHandler(config.getContract(), gridTradeService));
- wsKlineClient.init();
- log.info("[管理器] K线WS已连接, 已注册K线频道处理器");
-
wsPrivateClient = new OkxKlineWebSocketClient(
config.getWsPrivateUrl(),
config.getApiKey(),
@@ -61,10 +56,22 @@
wsPrivateClient.addChannelHandler(new OkxPositionsChannelHandler(config.getContract(), gridTradeService));
wsPrivateClient.addChannelHandler(new OkxAccountChannelHandler());
wsPrivateClient.addChannelHandler(new OkxOrderInfoChannelHandler(config.getContract(), gridTradeService, config));
- wsPrivateClient.init();
- log.info("[管理器] 私有WS已连接, 已注册 3 个频道处理器");
+ wsPrivateClient.setOnLoginSuccess(() -> {
+ log.info("[管理器] 私有WS登录完成,启动K线订阅");
+ try {
+ wsKlineClient = new OkxKlineWebSocketClient(config.getWsKlineUrl());
+ wsKlineClient.addChannelHandler(new OkxCandlestickChannelHandler(config.getContract(), gridTradeService));
+ wsKlineClient.init();
+ log.info("[管理器] K线WS已连接, 已注册K线频道处理器");
+ } catch (Exception e) {
+ log.error("[管理器] K线WS初始化失败", e);
+ }
+ });
+
+ wsPrivateClient.init();
gridTradeService.setWebSocketClient(wsPrivateClient.getWebSocketClient());
+ log.info("[管理器] 私有WS已连接, 等待登录完成...");
} catch (Exception e) {
log.error("[管理器] 初始化失败", e);
diff --git a/src/main/java/com/xcong/excoin/modules/okxApi/wsHandler/handler/OkxAccountChannelHandler.java b/src/main/java/com/xcong/excoin/modules/okxApi/wsHandler/handler/OkxAccountChannelHandler.java
index af0c07e..285394c 100644
--- a/src/main/java/com/xcong/excoin/modules/okxApi/wsHandler/handler/OkxAccountChannelHandler.java
+++ b/src/main/java/com/xcong/excoin/modules/okxApi/wsHandler/handler/OkxAccountChannelHandler.java
@@ -77,10 +77,20 @@
}
for (int i = 0; i < dataArray.size(); i++) {
JSONObject acct = dataArray.getJSONObject(i);
- log.info("[{}] 账户更新, 可用余额:{}, 现金余额:{}, 权益:{}, 未实现盈亏:{}, 保证金:{}",
+ log.info("[{}] 账户更新, 总权益:{}, 未实现盈亏:{}, 保证金:{}",
CHANNEL_NAME,
- acct.get("availBal"), acct.get("cashBal"),
- acct.get("eq"), acct.get("upl"), acct.get("imr"));
+ acct.get("totalEq"), acct.get("upl"), acct.get("imr"));
+
+ JSONArray details = acct.getJSONArray("details");
+ if (details != null) {
+ for (int j = 0; j < details.size(); j++) {
+ JSONObject detail = details.getJSONObject(j);
+ log.info("[{}] 币种:{}, 可用余额:{}, 现金余额:{}, 权益:{}",
+ CHANNEL_NAME,
+ detail.get("ccy"), detail.get("availBal"),
+ detail.get("cashBal"), detail.get("eq"));
+ }
+ }
}
} catch (Exception e) {
log.error("[{}] 处理数据失败", CHANNEL_NAME, e);
--
Gitblit v1.9.1