From b7a2fa0ea40b15bd5b60d737cb96764884dcaaaa Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 28 May 2026 11:07:12 +0800
Subject: [PATCH] config(gateApi): 更新任意仓位变化,检查多空两边那些需要同时取消挂单

---
 src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java |  144 +++++++++++++++++++++++++----------------------
 1 files changed, 77 insertions(+), 67 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 485bbae..cf1c956 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -428,40 +428,8 @@
                     tryGenerateQueues();
                 }else {
                     longPositionSize = size;
-                    List<GridElement> allShortOrders = GridElement.findAllLongOrders(longEntryPrice);
-                    if (CollUtil.isNotEmpty(allShortOrders)){
-                        GridElement keep = allShortOrders.stream()
-                                .max((a, b) -> a.getGridPrice().compareTo(b.getGridPrice()))
-                                .orElse(null);
-                        for (GridElement e : allShortOrders) {
-                            if (e == keep) {
-                                continue;
-                            }
-                            executor.cancelConditionalOrder(
-                                    e.getLongOrderId(),
-                                    orderId -> {
-                                        longEntryTraderIdParam(
-                                                e,
-                                                null,
-                                                false
-                                        );
-                                    }
-                            );
-
-                            if (e.getLongTakeProfitOrderId() != null){
-                                executor.cancelConditionalOrder(
-                                        e.getLongTakeProfitOrderId(),
-                                        orderId -> {
-                                            longTakeProfitTraderIdParam(
-                                                    e,
-                                                    null,
-                                                    false
-                                            );
-                                        }
-                                );
-                            }
-                        }
-                    }
+                    checkShortEntryOrderToCancel();
+                    checkLongEntryOrderToCancel();
                 }
             } else {
                 longActive = false;
@@ -479,39 +447,8 @@
                     tryGenerateQueues();
                 }else {
                     shortPositionSize = size.abs();
-                    List<GridElement> allLongOrders = GridElement.findAllShortOrders(shortEntryPrice);
-                    if (CollUtil.isNotEmpty(allLongOrders)){
-                        GridElement keep = allLongOrders.stream()
-                                .min((a, b) -> a.getGridPrice().compareTo(b.getGridPrice()))
-                                .orElse(null);
-                        for (GridElement e : allLongOrders) {
-                            if (e == keep) {
-                                continue;
-                            }
-                            executor.cancelConditionalOrder(
-                                    e.getShortOrderId(),
-                                    orderId -> {
-                                        shortEntryTraderIdParam(
-                                                e,
-                                                null,
-                                                false
-                                        );
-                                    }
-                            );
-                            if (e.getShortTakeProfitOrderId() != null){
-                                executor.cancelConditionalOrder(
-                                        e.getShortTakeProfitOrderId(),
-                                        orderId -> {
-                                            shortTakeProfitTraderIdParam(
-                                                    e,
-                                                    null,
-                                                    false
-                                            );
-                                        }
-                                );
-                            }
-                        }
-                    }
+                    checkShortEntryOrderToCancel();
+                    checkLongEntryOrderToCancel();
                 }
             } else {
                 shortActive = false;
@@ -520,6 +457,79 @@
         }
     }
 
+    private void checkShortEntryOrderToCancel() {
+        List<GridElement> allLongOrders = GridElement.findAllShortOrders(shortEntryPrice);
+        if (CollUtil.isNotEmpty(allLongOrders)){
+            GridElement keep = allLongOrders.stream()
+                    .min((a, b) -> a.getGridPrice().compareTo(b.getGridPrice()))
+                    .orElse(null);
+            for (GridElement e : allLongOrders) {
+                if (e == keep) {
+                    continue;
+                }
+                executor.cancelConditionalOrder(
+                        e.getShortOrderId(),
+                        orderId -> {
+                            shortEntryTraderIdParam(
+                                    e,
+                                    null,
+                                    false
+                            );
+                        }
+                );
+                if (e.getShortTakeProfitOrderId() != null){
+                    executor.cancelConditionalOrder(
+                            e.getShortTakeProfitOrderId(),
+                            orderId -> {
+                                shortTakeProfitTraderIdParam(
+                                        e,
+                                        null,
+                                        false
+                                );
+                            }
+                    );
+                }
+            }
+        }
+    }
+
+    private void checkLongEntryOrderToCancel() {
+        List<GridElement> allShortOrders = GridElement.findAllLongOrders(longEntryPrice);
+        if (CollUtil.isNotEmpty(allShortOrders)){
+            GridElement keep = allShortOrders.stream()
+                    .max((a, b) -> a.getGridPrice().compareTo(b.getGridPrice()))
+                    .orElse(null);
+            for (GridElement e : allShortOrders) {
+                if (e == keep) {
+                    continue;
+                }
+                executor.cancelConditionalOrder(
+                        e.getLongOrderId(),
+                        orderId -> {
+                            longEntryTraderIdParam(
+                                    e,
+                                    null,
+                                    false
+                            );
+                        }
+                );
+
+                if (e.getLongTakeProfitOrderId() != null){
+                    executor.cancelConditionalOrder(
+                            e.getLongTakeProfitOrderId(),
+                            orderId -> {
+                                longTakeProfitTraderIdParam(
+                                        e,
+                                        null,
+                                        false
+                                );
+                            }
+                    );
+                }
+            }
+        }
+    }
+
     // ---- 平仓推送回调 ----
 
     /**

--
Gitblit v1.9.1