package com.xcong.excoin.modules.gateApi.wsHandler.handler; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.modules.gateApi.GateGridTradeService; import com.xcong.excoin.modules.gateApi.wsHandler.AbstractPrivateChannelHandler; import lombok.extern.slf4j.Slf4j; /** * 订单频道处理器(futures.orders)。 * *

数据用途

* 订阅订单更新推送。当订单状态变为 finished 且成交方式为 filled 时, * 通过订单 ID 匹配 {@code currentShortOrderIds} 中存储的止盈价格,自动挂止盈单。 * *

关键推送字段

* * *

回调数据(传给 GateGridTradeService)

* orderId (String), status (String), finishAs (String) * * @author Administrator */ @Slf4j public class OrdersChannelHandler extends AbstractPrivateChannelHandler { private static final String CHANNEL_NAME = "futures.orders"; public OrdersChannelHandler(String apiKey, String apiSecret, String contract, GateGridTradeService gridTradeService) { super(CHANNEL_NAME, apiKey, apiSecret, contract, gridTradeService); } @Override public boolean handleMessage(JSONObject response) { if (!CHANNEL_NAME.equals(response.getString("channel"))) { return false; } try { JSONArray resultArray = response.getJSONArray("result"); if (resultArray == null || resultArray.isEmpty()) { return true; } for (int i = 0; i < resultArray.size(); i++) { JSONObject order = resultArray.getJSONObject(i); if (!getContract().equals(order.getString("contract"))) { continue; } String orderId = String.valueOf(order.getLong("id")); String status = order.getString("status"); String finishAs = order.getString("finish_as"); log.info("[{}] 订单更新, id:{}, status:{}, finish_as:{}, price:{}, size:{}", CHANNEL_NAME, orderId, status, finishAs, order.get("price"), order.get("size")); if (getGridTradeService() != null) { getGridTradeService().onOrderUpdate(orderId, status, finishAs); } } } catch (Exception e) { log.error("[{}] 处理数据失败", CHANNEL_NAME, e); } return true; } }