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