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) { 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); } } }