Administrator
3 hours ago 1e792f025712da88d5f53e7ef22462301d6cf071
refactor(okxNewPrice): 账户配置
3 files modified
46 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/okxApi/OkxKlineWebSocketClient.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/okxApi/OkxWebSocketClientManager.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/okxApi/wsHandler/handler/OkxAccountChannelHandler.java 16 ●●●● patch | view | raw | blame | history
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"));
                }
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);
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);