From 00f42b535ae2001903ef18168f16fbe477e59a23 Mon Sep 17 00:00:00 2001
From: zyy3 <zyy3@zy.com>
Date: Thu, 06 Nov 2025 16:40:30 +0800
Subject: [PATCH] 1

---
 trading-order-admin/src/main/java/com/yami/trading/admin/task/StockTask.java |  134 +++++++++++++++++++++++++++++++++-----------
 1 files changed, 100 insertions(+), 34 deletions(-)

diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/task/StockTask.java b/trading-order-admin/src/main/java/com/yami/trading/admin/task/StockTask.java
index a2959a3..f43d66c 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/task/StockTask.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/task/StockTask.java
@@ -7,8 +7,6 @@
 import com.yami.trading.bean.data.domain.Realtime;
 import com.yami.trading.bean.item.domain.Item;
 import com.yami.trading.bean.model.StockRealTimeBean;
-import com.yami.trading.common.constants.RedisKeys;
-import com.yami.trading.common.util.RedisUtil;
 import com.yami.trading.huobi.data.DataCache;
 import com.yami.trading.huobi.websocket.constant.enums.EStockType;
 import com.yami.trading.service.item.ItemService;
@@ -16,6 +14,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Component;
@@ -30,7 +29,7 @@
 
 
 @Component
-public class StockTask {
+public class StockTask implements CommandLineRunner {
     private static final Logger log = LoggerFactory.getLogger(StockTask.class);
 
     private final AtomicBoolean syncINStockData = new AtomicBoolean(false);
@@ -124,43 +123,43 @@
                     continue;
                 }
 
-
                 Item item = stockList.stream()
                         .filter(x -> x.getSymbol().equals(o.getSymbol()) &&
                                 x.getStockCode().equals(o.getId()))
                         .findFirst()
                         .orElse(null);
-                if (item == null) {
-                    item = new Item();
-                    String name = StringUtils.trim(o.getName());
-                    item.setEnName(name);
-                    item.setName(name);
-                    item.setSymbolFullName(name);
-                    item.setSymbol(o.getSymbol());
-                    item.setSymbolData(o.getSymbol());
-                    item.setPips(BigDecimal.valueOf(0.01).doubleValue());
-                    item.setPipsAmount(BigDecimal.valueOf(0.02).doubleValue());
-                    item.setAdjustmentValue(BigDecimal.ZERO.doubleValue());
-                    item.setUnitAmount(BigDecimal.valueOf(1000).doubleValue());
-                    item.setUnitFee(BigDecimal.valueOf(30).doubleValue());
-                    item.setMarket("FOREVER");
-                    item.setDecimals(2);
-                    item.setMultiple(BigDecimal.ZERO.doubleValue());
-                    item.setBorrowingRate(BigDecimal.ZERO.doubleValue());
-                    item.setDelFlag(0);
-                    item.setType(Item.US_STOCKS);
-                    item.setCategory(Item.US_STOCKS);
-                    item.setSorted("100");
-                    item.setOpenCloseType(Item.US_STOCKS);
-                    item.setFake("0");
-                    item.setShowStatus("1");
-                    item.setTradeStatus("1");
-                    item.setQuoteCurrency("USDT");
-                    item.setCrawlStatus("default_active");
-                    item.setStockCode(o.getId());
-
-                    updateStockList.add(item);
+                if (item != null) {    //已有不添加
+                    continue;
                 }
+                item = new Item();
+                String name = StringUtils.trim(o.getName());
+                item.setEnName(name);
+                item.setName(name);
+                item.setSymbolFullName(name);
+                item.setSymbol(o.getSymbol());
+                item.setSymbolData(o.getSymbol());
+                item.setPips(BigDecimal.valueOf(0.01).doubleValue());
+                item.setPipsAmount(BigDecimal.valueOf(0.02).doubleValue());
+                item.setAdjustmentValue(BigDecimal.ZERO.doubleValue());
+                item.setUnitAmount(BigDecimal.valueOf(1000).doubleValue());
+                item.setUnitFee(BigDecimal.valueOf(30).doubleValue());
+                item.setMarket("FOREVER");
+                item.setDecimals(2);
+                item.setMultiple(BigDecimal.ZERO.doubleValue());
+                item.setBorrowingRate(BigDecimal.ZERO.doubleValue());
+                item.setDelFlag(0);
+                item.setType(Item.US_STOCKS);
+                item.setCategory(Item.US_STOCKS);
+                item.setSorted("100");
+                item.setOpenCloseType(Item.US_STOCKS);
+                item.setFake("0");
+                item.setShowStatus("1");
+                item.setTradeStatus("1");
+                item.setQuoteCurrency("USDT");
+                item.setCrawlStatus("default_active");
+                item.setStockCode(o.getId());
+
+                updateStockList.add(item);
 
 
                 Realtime realtime = new Realtime();
@@ -192,6 +191,68 @@
         }
     }
 
+    /**
+     * 初始化所有股票数据
+     */
+    public void initAllStock(EStockType eStockType) {
+        log.info("init US股票 数据 {}", eStockType.getCode());
+        List<StockRealTimeBean> list = new ArrayList<>();
+        int totleStock = 1;
+        int page = 0;
+        try {
+            while (totleStock > list.size()) {
+                try {
+                    String result = HttpClientRequest.doGet(eStockType.stockUrl + "list?country_id=" + eStockType.getContryId() + "&size=100000&page=" + page + "&key=" + eStockType.stockKey);
+                    ReponseBase reponseBase = new Gson().fromJson(result, ReponseBase.class);
+                    list.addAll(reponseBase.getData());
+                    page++;
+                    totleStock = reponseBase.getTotal();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    break;
+                }
+            }
+            if (list.isEmpty()) {
+                return;
+            }
+
+            List<Item> indicesList = itemService.list(new QueryWrapper<Item>()
+                    .eq("type", Item.indices));
+            for (StockRealTimeBean o : list) {
+                Item indices = indicesList.stream()
+                        .filter(x -> x.getSymbol().equals(o.getSymbol()))
+                        .findFirst()
+                        .orElse(null);
+                if (indices != null) {  //指数不添加
+                    continue;
+                }
+
+                Realtime realtime = new Realtime();
+                realtime.setUuid(o.getId());
+                realtime.setSymbol(o.getSymbol());
+                realtime.setName(o.getName());
+                realtime.setClose(new BigDecimal(o.getLast().trim()).doubleValue());
+                realtime.setLow(new BigDecimal(o.getLow().trim()).doubleValue());
+                realtime.setHigh(new BigDecimal(o.getHigh().trim()).doubleValue());
+                realtime.setOpen(new BigDecimal(o.getOpen().trim()).doubleValue());
+                realtime.setPrevClose(new BigDecimal(o.getPrevClose().trim()).doubleValue());
+                realtime.setTs(Long.valueOf(o.getTime() + "000"));
+                realtime.setVolume(new BigDecimal(o.getVolume().trim()).doubleValue());
+                realtime.setNetChange(new BigDecimal(o.getChg().trim()).doubleValue());
+                realtime.setChangeRatio(new BigDecimal(o.getChgPct()).doubleValue());
+                realtime.setType(o.getType());
+                realtime.setBid(new BigDecimal(o.getBid()).doubleValue());
+                realtime.setAsk(new BigDecimal(o.getAsk()).doubleValue());
+
+                DataCache.putRealtime(realtime.getSymbol(), realtime);
+            }
+            log.info("init US股票 数据 成功");
+        } catch (
+                Exception e) {
+            log.error("同步出错", e);
+        }
+    }
+
 
 
 
@@ -200,4 +261,9 @@
         StockTask task = new StockTask();
         task.loadAllStock(EStockType.US);
     }
+
+    @Override
+    public void run(String... args) throws Exception {
+        initAllStock(EStockType.US);
+    }
 }

--
Gitblit v1.9.3