From e4934031411acd1a86f3e99922cf857763934023 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 08 May 2026 10:18:18 +0800
Subject: [PATCH] feat(gateApi): 添加用户ID获取和WebSocket私有频道订阅功能
---
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java | 13 +++++++++++++
src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java | 9 +++++++--
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
index f15b8b2..17edd84 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -3,7 +3,9 @@
import io.gate.gateapi.ApiClient;
import io.gate.gateapi.ApiException;
import io.gate.gateapi.GateApiException;
+import io.gate.gateapi.api.AccountApi;
import io.gate.gateapi.api.FuturesApi;
+import io.gate.gateapi.models.AccountDetail;
import io.gate.gateapi.models.FuturesAccount;
import io.gate.gateapi.models.FuturesInitialOrder;
import io.gate.gateapi.models.FuturesOrder;
@@ -72,6 +74,8 @@
private volatile BigDecimal lastKlinePrice;
/** 服务器返回的累计已实现盈亏 */
private BigDecimal totalHistoryPnl = BigDecimal.ZERO;
+ /** 用户 ID,用于 WebSocket 私有频道订阅 */
+ private Long userId;
/**
* 构造函数,初始化 Gate 期货 API 客户端。
@@ -111,6 +115,11 @@
*/
public void init() {
try {
+ AccountApi accountApi = new AccountApi(apiClient);
+ AccountDetail accountDetail = accountApi.getAccountDetail();
+ this.userId = accountDetail.getUserId();
+ log.info("[GateGrid] 用户ID: {}", userId);
+
futuresApi.updateContractPositionLeverageCall(
SETTLE, contract, leverage, marginMode, positionMode, null);
log.info("[GateGrid] 已设置杠杆: {}x, 保证金模式: {}", leverage, marginMode);
@@ -447,4 +456,8 @@
public BigDecimal getTotalHistoryPnl() {
return totalHistoryPnl;
}
+
+ public Long getUserId() {
+ return userId;
+ }
}
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java b/src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java
index 6b900e6..6fe824a 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java
@@ -301,11 +301,16 @@
private void subscribePositionsChannels() {
JSONObject subscribeMsg = new JSONObject();
long timeSec = System.currentTimeMillis() / 1000;
+ subscribeMsg.put("id", timeSec * 1000000 + (System.currentTimeMillis() % 1000));
subscribeMsg.put("time", timeSec);
subscribeMsg.put("channel", POSITIONS_CHANNEL);
subscribeMsg.put("event", "subscribe");
+
+ String uid = gridTradeService != null && gridTradeService.getUserId() != null
+ ? String.valueOf(gridTradeService.getUserId()) : "";
+
JSONArray payload = new JSONArray();
- payload.add("user_id");
+ payload.add(uid);
payload.add(GATE_CONTRACT);
subscribeMsg.put("payload", payload);
@@ -316,7 +321,7 @@
subscribeMsg.put("auth", auth);
webSocketClient.send(subscribeMsg.toJSONString());
- log.info("已发送仓位频道订阅请求(含认证),合约: {}", GATE_CONTRACT);
+ log.info("已发送仓位频道订阅请求(含认证),userId:{}, 合约: {}", uid, GATE_CONTRACT);
}
/**
--
Gitblit v1.9.1