package com.xcong.excoin.modules.okxNewPrice.okxWs;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.xcong.excoin.modules.okxNewPrice.okxpi.MallUtils;
|
import com.xcong.excoin.modules.okxNewPrice.utils.WsParamBuild;
|
import lombok.extern.slf4j.Slf4j;
|
import org.java_websocket.client.WebSocketClient;
|
|
/**
|
* @author Administrator
|
*/
|
@Slf4j
|
public class BalanceAndPositionWs {
|
|
public static final String CHANNEL_NAME = "balance_and_position";
|
private static final String LOG_PREFIX = "账户余额和持仓频道";
|
|
public static void subscribeBalanceAndPositionChannel(WebSocketClient webSocketClient, String option) {
|
try {
|
JSONArray argsArray = new JSONArray();
|
JSONObject args = new JSONObject();
|
args.put("channel", CHANNEL_NAME);
|
argsArray.add(args);
|
|
String connId = MallUtils.getOrderNum("bap");
|
JSONObject jsonObject = WsParamBuild.buildJsonObject(connId, option, argsArray);
|
webSocketClient.send(jsonObject.toJSONString());
|
log.info("账户余额和持仓频道订阅成功: {}", LOG_PREFIX, option);
|
} catch (Exception e) {
|
log.error("账户余额和持仓频道订阅构建失败", LOG_PREFIX, e);
|
}
|
}
|
|
public static void handleEvent(JSONObject response) {
|
|
log.info("开始执行BalanceAndPositionWs......");
|
try {
|
JSONArray dataArray = response.getJSONArray("data");
|
if (dataArray == null || dataArray.isEmpty()) {
|
log.warn("{}数据为空", LOG_PREFIX);
|
return;
|
}
|
|
JSONObject firstData = dataArray.getJSONObject(0);
|
processBalData(firstData);
|
processPosData(firstData);
|
} catch (Exception e) {
|
log.error("{}推送数据处理失败", LOG_PREFIX, e);
|
}
|
}
|
|
private static void processBalData(JSONObject dataObject) {
|
JSONArray balDataArray = dataObject.getJSONArray("balData");
|
if (balDataArray == null || balDataArray.isEmpty()) {
|
return;
|
}
|
|
for (int i = 0; i < balDataArray.size(); i++) {
|
JSONObject balData = balDataArray.getJSONObject(i);
|
if (!balData.containsKey("ccy") || !balData.containsKey("cashBal") || !balData.containsKey("uTime")) {
|
continue;
|
}
|
|
String ccy = balData.getString("ccy");
|
String cashBal = balData.getString("cashBal");
|
String uTime = balData.getString("uTime");
|
|
log.info("币种: {}, 余额: {}, 更新时间: {}", ccy, cashBal, uTime);
|
}
|
}
|
|
private static void processPosData(JSONObject dataObject) {
|
JSONArray posDataArray = dataObject.getJSONArray("posData");
|
if (posDataArray == null || posDataArray.isEmpty()) {
|
return;
|
}
|
|
for (int i = 0; i < posDataArray.size(); i++) {
|
JSONObject posData = posDataArray.getJSONObject(i);
|
if (!posData.containsKey("posId") || !posData.containsKey("instId")
|
|| !posData.containsKey("instType") || !posData.containsKey("posSide")
|
|| !posData.containsKey("pos") || !posData.containsKey("avgPx")
|
|| !posData.containsKey("ccy")) {
|
continue;
|
}
|
|
String posId = posData.getString("posId");
|
String instId = posData.getString("instId");
|
String instType = posData.getString("instType");
|
String posSide = posData.getString("posSide");
|
String pos = posData.getString("pos");
|
String avgPx = posData.getString("avgPx");
|
String ccy = posData.getString("ccy");
|
|
log.info("持仓ID: {}, 产品ID: {}, 类型: {}, 方向: {}, 数量: {}, 平均价: {}, 币种: {}",
|
posId, instId, instType, posSide, pos, avgPx, ccy);
|
}
|
}
|
}
|