Administrator
2026-06-05 430c0d98f3c4d654e0462040e6ba5d5aa1cbce74
refactor(gateApi): 优化网格交易重置逻辑确保任务按序执行

- 将startGrid()调用改为通过executor.submitTask提交到队列末尾
- 添加30秒延迟确保前置平仓和取消订单任务完成后再重启网格
- 在GateTradeExecutor中新增submitTask方法支持通用任务提交
- 利用单线程FIFO特性保证交易操作的串行化执行顺序
2 files modified
20 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java 13 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -1530,7 +1530,12 @@
                state = StrategyState.STOPPED;
                closeExistingPositions();
                futuresApi.cancelPriceTriggeredOrderList(SETTLE, config.getContract());
                startGrid();
                // 提交到 executor 末尾:单线程FIFO保证前面所有平仓/取消任务完成后才重置
                executor.submitTask(() -> {
                    try { Thread.sleep(30000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
                    startGrid();
                });
            }
        } catch (Exception e) {
            log.warn("[Gate] 盈亏检查失败", e);
@@ -1545,7 +1550,11 @@
            log.warn("[Gate] {}持仓归零后取消条件单失败", direction, e);
        }
        closeExistingPositions();
        startGrid();
        // 提交到 executor 末尾:单线程FIFO保证前面所有平仓/取消任务完成后才重置
        executor.submitTask(() -> {
            try { Thread.sleep(30000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
            startGrid();
        });
    }
    // ---- 保证金安全阀 ----
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")。