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 | 121 ++++++++++++++++++++++++++++++----------
1 files changed, 91 insertions(+), 30 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 aec29a5..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
@@ -1,12 +1,18 @@
package com.xcong.excoin.modules.symbols.service.impl;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.huobi.client.model.Candlestick;
import com.xcong.excoin.common.contants.AppContants;
import com.xcong.excoin.common.enumerates.SymbolEnum;
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.common.system.mapper.CandlestickMapper;
+import com.xcong.excoin.modules.newPrice.ExchangeInfoEnum;
+import com.xcong.excoin.modules.newPrice.ExchangeLoginService;
+import com.xcong.excoin.modules.newPrice.KlineVo;
import com.xcong.excoin.modules.platform.dao.PlatformCnyUsdtExchangeDao;
import com.xcong.excoin.modules.platform.entity.PlatformCnyUsdtExchangeEntity;
import com.xcong.excoin.modules.symbols.parameter.dto.KlineDetailDto;
@@ -14,6 +20,7 @@
import com.xcong.excoin.modules.symbols.parameter.vo.KlineDataVo;
import com.xcong.excoin.modules.symbols.service.SymbolsService;
import com.xcong.excoin.utils.CoinTypeConvert;
+import com.xcong.excoin.utils.MessageSourceUtils;
import com.xcong.excoin.utils.RedisUtils;
import com.xcong.excoin.utils.api.ApiClient;
import com.xcong.excoin.utils.api.response.Kline;
@@ -24,6 +31,8 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
/**
@@ -57,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) {
@@ -68,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);
}
}
}
@@ -126,22 +165,19 @@
public HomeSymbolsVo getSymbolReturnData(String symbol) {
PlatformCnyUsdtExchangeEntity cnyUsdtExchange = platformCnyUsdtExchangeDao.getCNYAndUSDTOne();
- // 获取当日k线数据
- Candlestick symbolObject = (Candlestick) redisUtils.get(symbol);
// 获取当前币种最新价
BigDecimal newestPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol)));
- // 获取当日k线的开盘价
- BigDecimal openPrice = symbolObject.getOpen();
-
+ BigDecimal openPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToOpenKey(symbol)));
+ BigDecimal volume = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToVolumeKey(symbol)));
BigDecimal upOrDown = newestPrice.subtract(openPrice).divide(openPrice, 8, BigDecimal.ROUND_HALF_UP);
HomeSymbolsVo homeSymbolsVo = new HomeSymbolsVo();
homeSymbolsVo.setSymbol(symbol);
homeSymbolsVo.setCurrentPrice(newestPrice);
homeSymbolsVo.setUpOrDown(upOrDown);
- homeSymbolsVo.setVolume(symbolObject.getVolume());
+ homeSymbolsVo.setVolume(volume);
if (cnyUsdtExchange != null) {
- BigDecimal cnyPrice = openPrice.multiply(cnyUsdtExchange.getValue()).setScale(2, BigDecimal.ROUND_HALF_UP);
+ BigDecimal cnyPrice = newestPrice.multiply(cnyUsdtExchange.getValue()).setScale(2, BigDecimal.ROUND_HALF_UP);
homeSymbolsVo.setCnyPrice(cnyPrice);
}
@@ -182,4 +218,29 @@
}
return Result.fail("获取数据失败");
}
+
+ @Override
+ public Result findKlineList(KlineVo klineDetailDto) {
+ Integer type = klineDetailDto.getType();
+ String instId = klineDetailDto.getInstId();
+// String instId = null;
+// if (AppContants.HOME_SYMBOLS_COIN == type){
+// instId = CoinTypeConvert.convertToCoinKlineKey(klineDetailDto.getInstId());
+// }else if (AppContants.HOME_SYMBOLS_CONTRACT == type){
+// instId = CoinTypeConvert.convertToKlineKey(klineDetailDto.getInstId());
+// }else{
+// return Result.fail("参数错误");
+// }
+ String bar = klineDetailDto.getBar();
+ 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);
+ return Result.ok(klinesList);
+ }
}
--
Gitblit v1.9.1