From b79d3cb9f15589eb311479c5f772c63bea58dbf1 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Sat, 13 Dec 2025 21:49:43 +0800
Subject: [PATCH] fix(okxWs): 修复仓位通道就绪状态空指针异常

---
 src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java
index 0199950..0a3c5a6 100644
--- a/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java
@@ -273,7 +273,7 @@
                     log.error("WebSocket登录失败, code: {}, msg: {}", code, response.getString("msg"));
                 }
             } else if ("subscribe".equals(event)) {
-                log.info("订阅成功: {}", response.getJSONObject("arg"));
+                subscribeEvent(response);
             } else if ("error".equals(event)) {
                 log.error("订阅错误: code={}, msg={}",
                          response.getString("code"), response.getString("msg"));
@@ -288,6 +288,19 @@
         }
     }
 
+    private void subscribeEvent(JSONObject response) {
+        String channel = response.getString("channel");
+        if (OrderInfoWs.ORDERINFOWS_CHANNEL.equals(channel)) {
+            OrderInfoWs.initEvent(response);
+        }
+        if (AccountWs.ACCOUNTWS_CHANNEL.equals(channel)) {
+            AccountWs.initEvent(response);
+        }
+        if (PositionsWs.POSITIONSWS_CHANNEL.equals(channel)) {
+            PositionsWs.initEvent(response);
+        }
+    }
+
     /**
      * 解析并处理价格推送数据。
      * 将最新的标记价格存入 Redis 并触发后续业务逻辑比较处理。
@@ -298,8 +311,10 @@
         String op = response.getString("op");
         if (op != null){
             if (TradeOrderWs.ORDERWS_CHANNEL.equals(op)) {
-                log.info("收到下单推动结果: {}", response.getJSONObject("data"));
-                return ;
+                // 直接使用Object类型接收,避免强制类型转换
+                Object data = response.get("data");
+                log.info("收到下单推送结果: {}", JSON.toJSONString(data));
+                return;
             }
         }
         JSONObject arg = response.getJSONObject("arg");
@@ -318,13 +333,13 @@
             OrderInfoWs.handleEvent(response, redisUtils);
         }else if (AccountWs.ACCOUNTWS_CHANNEL.equals(channel)) {
             AccountWs.handleEvent(response);
-            String side = caoZuoService.caoZuo();
-            TradeOrderWs.orderEvent(webSocketClient, side);
         } else if (PositionsWs.POSITIONSWS_CHANNEL.equals(channel)) {
             PositionsWs.handleEvent(response);
         } else if (BalanceAndPositionWs.CHANNEL_NAME.equals(channel)) {
             BalanceAndPositionWs.handleEvent(response);
         }
+        String side = caoZuoService.caoZuo();
+        TradeOrderWs.orderEvent(webSocketClient, side);
     }
 
     /**

--
Gitblit v1.9.1