From a2fbe22cb3067cf4d51cb9861a5a6fa78a936366 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 25 Dec 2025 18:06:40 +0800
Subject: [PATCH] feat(kline): 启用K线数据更新任务并优化更新逻辑

---
 src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java |   76 +++++++++++++-----
 src/main/resources/application-app.yml                                              |    2 
 src/main/java/com/xcong/excoin/quartz/job/KlineDataUpdateJob.java                   |  123 ++++++++----------------------
 3 files changed, 87 insertions(+), 114 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java b/src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java
index 1926bfd..7c8b91d 100644
--- a/src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java
@@ -66,6 +66,46 @@
         return client;
     }
 
+//    @Override
+//    public void updateSymbolsKine(String time) {
+//        synchronized (this) {
+//            //更新币币交易K线历史数据
+//            for (SymbolEnum symbol : SymbolEnum.values()) {
+//                try {
+//                    Thread.sleep(500);
+//                } catch (InterruptedException e) {
+//                    e.printStackTrace();
+//                }
+//                String[] symbols = symbol.getValue().toLowerCase().split("/");
+//                ApiClient client = getClient();
+//                KlineResponse kline = client.kline(symbols[0] + symbols[1], time, 1000 + "");
+//                if (kline != null) {
+//                    if ("ok".equalsIgnoreCase(kline.getStatus())) {
+//                        List<Kline> klines = (List<Kline>) kline.data;
+//                        List<Candlestick> list = new ArrayList<Candlestick>();
+//                        Candlestick candlestick = null;
+//                        for (Kline kline1 : klines) {
+//                            candlestick = new Candlestick();
+//                            candlestick.setAmount(BigDecimal.valueOf(kline1.getAmount()));
+//                            candlestick.setClose(BigDecimal.valueOf(kline1.getClose()));
+//                            candlestick.setCount(kline1.getCount());
+//                            candlestick.setHigh(BigDecimal.valueOf(kline1.getHigh()));
+//                            candlestick.setLow(BigDecimal.valueOf(kline1.getLow()));
+//                            candlestick.setVolume(BigDecimal.valueOf(kline1.getVol()));
+//                            candlestick.setTimestamp(kline1.getId() * 1000);
+//                            candlestick.setOpen(BigDecimal.valueOf(kline1.getOpen()));
+//                            list.add(candlestick);
+//                        }
+//
+//                        if (klines.size() > 0) {
+//                            redisUtils.set("KINE_" + symbol.getValue() + "_" + time, list);
+//                        }
+//                    }
+//                }
+//            }
+//        }
+//    }
+
     @Override
     public void updateSymbolsKine(String time) {
         synchronized (this) {
@@ -77,30 +117,20 @@
                     e.printStackTrace();
                 }
                 String[] symbols = symbol.getValue().toLowerCase().split("/");
-                ApiClient client = getClient();
-                KlineResponse kline = client.kline(symbols[0] + symbols[1], time, 1000 + "");
-                if (kline != null) {
-                    if ("ok".equalsIgnoreCase(kline.getStatus())) {
-                        List<Kline> klines = (List<Kline>) kline.data;
-                        List<Candlestick> list = new ArrayList<Candlestick>();
-                        Candlestick candlestick = null;
-                        for (Kline kline1 : klines) {
-                            candlestick = new Candlestick();
-                            candlestick.setAmount(BigDecimal.valueOf(kline1.getAmount()));
-                            candlestick.setClose(BigDecimal.valueOf(kline1.getClose()));
-                            candlestick.setCount(kline1.getCount());
-                            candlestick.setHigh(BigDecimal.valueOf(kline1.getHigh()));
-                            candlestick.setLow(BigDecimal.valueOf(kline1.getLow()));
-                            candlestick.setVolume(BigDecimal.valueOf(kline1.getVol()));
-                            candlestick.setTimestamp(kline1.getId() * 1000);
-                            candlestick.setOpen(BigDecimal.valueOf(kline1.getOpen()));
-                            list.add(candlestick);
-                        }
 
-                        if (klines.size() > 0) {
-                            redisUtils.set("KINE_" + symbol.getValue() + "_" + time, list);
-                        }
-                    }
+                String instId = symbols[0] +"-"+ symbols[1];
+                String bar = time;
+                LinkedHashMap<String, Object> requestParam = new LinkedHashMap<>();
+                requestParam.put("instId",instId);
+                requestParam.put("bar",bar);
+                requestParam.put("limit","300");
+                String result = ExchangeLoginService.getInstance(ExchangeInfoEnum.OKX_UAT.name()).lineHistory(requestParam);
+                log.info("加载OKX-KLINE,{}", result);
+                JSONObject json = JSON.parseObject(result);
+                String data = json.getString("data");
+                List<String[]> klinesList = JSON.parseArray(data, String[].class);
+                if (klinesList != null) {
+                    redisUtils.set("KINE_" + instId + "_" + time, klinesList);
                 }
             }
         }
diff --git a/src/main/java/com/xcong/excoin/quartz/job/KlineDataUpdateJob.java b/src/main/java/com/xcong/excoin/quartz/job/KlineDataUpdateJob.java
index ca41425..1553646 100644
--- a/src/main/java/com/xcong/excoin/quartz/job/KlineDataUpdateJob.java
+++ b/src/main/java/com/xcong/excoin/quartz/job/KlineDataUpdateJob.java
@@ -21,133 +21,76 @@
     private SymbolsService symbolsService;
 
 
-    private static boolean min1 = true;
-    private static boolean min5 = true;
-    private static boolean min30 = true;
-    private static boolean min60 = true;
-    private static boolean hour4 = true;
-    private static boolean day1 = true;
-    private static boolean week = true;
-
-
     /**
      * 定时更新每一分钟的K线数据
      */
-    @Scheduled(cron = "0/1 * * * * ? ")
+    @Scheduled(cron = "0/10 * * * * ? ")
     public void updateSymbolsKineOneMin() {
-        if (min1) {
-            min1 = false;
-            try {
-                symbolsService.updateSymbolsKine("1min");
-            } catch (Exception e) {
-                // e.printStackTrace();
-            } finally {
-                min1 = true;
-            }
-        }
+        symbolsService.updateSymbolsKine("1m");
     }
 
     /**
-     * 定时更新每十分钟的K线数据
+     * 定时更新每5分钟的K线数据
      */
-    @Scheduled(cron = "0/10 * * * * ? ")
+    @Scheduled(cron = "0 0/5 * * * ?")
     public void updateSymbolsKineFiveMin() {
-        if (min5) {
-            min5 = false;
-            try {
-                symbolsService.updateSymbolsKine("5min");
-            } catch (Exception e) {
-                //e.printStackTrace();
-            } finally {
-                min5 = true;
-            }
-        }
+        symbolsService.updateSymbolsKine("5m");
     }
 
     /**
      * 定时更新每30分钟的K线数据
      */
-    @Scheduled(cron = "0/120 * * * * ? ")
+    @Scheduled(cron = "0 0/15 * * * ?")
     public void updateSymbolsKineMin() {
-        if (min30) {
-            min30 = false;
-            try {
-                symbolsService.updateSymbolsKine("30min");
-            } catch (Exception e) {
-                //e.printStackTrace();
-            } finally {
-                min30 = true;
-            }
-        }
+        symbolsService.updateSymbolsKine("15m");
+    }
+
+    /**
+     * 定时更新每30分钟的K线数据
+     */
+    @Scheduled(cron = "0 0/30 * * * ?")
+    public void updateSymbolsKineMin30() {
+        symbolsService.updateSymbolsKine("30m");
     }
 
     /**
      * 定时更新1小时的K线数据
      */
-    @Scheduled(cron = "* 0/2 * * * ? ")
+    @Scheduled(cron = "0 0 * * * ?")
     public void updateSymbolsKineOneHour() {
-        if (min60) {
-            min60 = false;
-            try {
-                symbolsService.updateSymbolsKine("60min");
-            } catch (Exception e) {
-                //e.printStackTrace();
-            } finally {
-                min60 = true;
-            }
-        }
+        symbolsService.updateSymbolsKine("1H");
     }
 
     /**
-     * 定时更新4小时的K线数据
+     * 定时更新1小时的K线数据
      */
-    @Scheduled(cron = "* 0/1 * * * ? ")
-    public void updateSymbolsKineFourHour() {
-        if (hour4) {
-            hour4 = false;
-            try {
-                symbolsService.updateSymbolsKine("4hour");
-            } catch (Exception e) {
-                //e.printStackTrace();
-            } finally {
-                hour4 = true;
-            }
-        }
+    @Scheduled(cron = "0 0 * * * ?")
+    public void updateSymbolsKineTwoHour() {
+        symbolsService.updateSymbolsKine("2H");
     }
 
+    /**
+     * 定时更新1小时的K线数据
+     */
+    @Scheduled(cron = "0 0 * * * ?")
+    public void updateSymbolsKinefourHour() {
+        symbolsService.updateSymbolsKine("4H");
+    }
 
     /**
      * 定时更新1天的K线数据
      */
-    @Scheduled(cron = "* 0/1 * * * ? ")
+    @Scheduled(cron = "0 0 * * * ?")
     public void updateSymbolsKineOneDay() {
-        if (day1) {
-            day1 = false;
-            try {
-                symbolsService.updateSymbolsKine("1day");
-            } catch (Exception e) {
-                //e.printStackTrace();
-            } finally {
-                day1 = true;
-            }
-        }
+        symbolsService.updateSymbolsKine("1D");
     }
 
     /**
-     * 定时更新1周的K线数据
+     * 定时更新1天的K线数据
      */
-    @Scheduled(cron = "* 0/1 * * * ? ")
+    @Scheduled(cron = "0 0 * * * ?")
     public void updateSymbolsKineOneWeek() {
-        if (week) {
-            week = false;
-            try {
-                symbolsService.updateSymbolsKine("1week");
-            } catch (Exception e) {
-                // e.printStackTrace();
-            } finally {
-                week = true;
-            }
-        }
+        symbolsService.updateSymbolsKine("1W");
     }
 
 }
diff --git a/src/main/resources/application-app.yml b/src/main/resources/application-app.yml
index 7208cfb..ecd94cf 100644
--- a/src/main/resources/application-app.yml
+++ b/src/main/resources/application-app.yml
@@ -93,7 +93,7 @@
 app:
   debug: false
   redis_expire: 3000
-  kline-update-job: false
+  kline-update-job: true
   newest-price-update-job: false
   #日线 该任务不能与最新价处于同一个服务器
   day-line: false

--
Gitblit v1.9.1