From eb5e30f805f93f275f37fbe11cb1aefe6ccaa55e Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 22 Jun 2026 23:00:48 +0800
Subject: [PATCH] fix(gateApi): 修复双边持仓跨度计算逻辑
---
src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java | 17 +++++++++++++++--
1 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java b/src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java
index 4235df0..b5de170 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java
@@ -92,6 +92,13 @@
executor.shutdownNow();
}
}
+ /**
+ * 提交一个通用任务到交易线程池末尾。
+ * 利用单线程池的 FIFO 特性确保任务按提交顺序执行。
+ */
+ public void submitTask(Runnable task) {
+ executor.execute(task);
+ }
/**
* 异步 IOC 市价开多。quantity 为正数(如 "1")。
@@ -262,7 +269,7 @@
*
* @param orderId 订单 ID,为 null 时跳过
*/
- public void cancelOrder(String orderId) {
+ public void cancelOrder(String orderId,Consumer<String> onSuccess) {
if (orderId == null) {
return;
}
@@ -270,6 +277,9 @@
try {
FuturesOrder cancelled = futuresApi.cancelFuturesOrder(SETTLE, orderId, null);
log.info("[TradeExec] 订单已取消, id:{}, status:{}", orderId, cancelled.getStatus());
+ if (onSuccess != null) {
+ onSuccess.accept(orderId);
+ }
} catch (Exception e) {
log.warn("[TradeExec] 取消订单失败(可能已成交), id:{}", orderId);
}
@@ -335,7 +345,7 @@
*
* @param orderId 条件单 ID,为 null 时跳过
*/
- public void cancelConditionalOrder(String orderId) {
+ public void cancelConditionalOrder(String orderId,Consumer<String> onSuccess) {
if (orderId == null) {
return;
}
@@ -343,6 +353,9 @@
try {
futuresApi.cancelPriceTriggeredOrder(SETTLE, Long.parseLong(orderId));
log.info("[TradeExec] 条件单已取消, id:{}", orderId);
+ if (onSuccess != null) {
+ onSuccess.accept(orderId);
+ }
} catch (Exception e) {
log.warn("[TradeExec] 取消条件单失败(可能已触发), id:{}", orderId);
}
--
Gitblit v1.9.1