From 6a8d1873fbd76ddc099917048f3bdb2b3661d7fd Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 26 Dec 2025 11:24:48 +0800
Subject: [PATCH] perf(symbols): 降低K线数据加载限制以提升性能
---
src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java | 76 +++++++++++++++----------------------
1 files changed, 31 insertions(+), 45 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 d833f9b..efcd089 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,15 +1,11 @@
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;
@@ -17,21 +13,16 @@
import com.xcong.excoin.modules.platform.entity.PlatformCnyUsdtExchangeEntity;
import com.xcong.excoin.modules.symbols.parameter.dto.KlineDetailDto;
import com.xcong.excoin.modules.symbols.parameter.vo.HomeSymbolsVo;
-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;
-import com.xcong.excoin.utils.api.response.KlineResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -111,27 +102,20 @@
synchronized (this) {
//更新币币交易K线历史数据
for (SymbolEnum symbol : SymbolEnum.values()) {
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
String[] symbols = symbol.getValue().toLowerCase().split("/");
- log.info("加载OKX-KLINE,{}", symbols[0] +"-"+ symbols[1]);
String instId = symbols[0] +"-"+ symbols[1];
+ instId = instId.toUpperCase() ;
String bar = time;
LinkedHashMap<String, Object> requestParam = new LinkedHashMap<>();
requestParam.put("instId",instId);
requestParam.put("bar",bar);
- requestParam.put("limit","300");
+ requestParam.put("limit","50");
String result = ExchangeLoginService.getInstance(ExchangeInfoEnum.OKX_UAT.name()).lineHistory(requestParam);
- log.info("加载OKX-KLINE,{}", result);
+ log.info("加载OKX-KLINE,{}", instId);
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);
- }
+ log.info("加载OKX-KLINE,{}", data);
+ redisUtils.set("KINE_" + instId + "_" + time, data);
}
}
}
@@ -189,34 +173,36 @@
String key = "KINE_{}_{}";
// 币币k线数据
if (AppContants.HOME_SYMBOLS_COIN == klineDetailDto.getType()) {
- key = StrUtil.format(key, klineDetailDto.getSymbol(), klineDetailDto.getPeriod());
+ key = StrUtil.format(key, klineDetailDto.getInstId(), klineDetailDto.getBar());
// 合约k线数据
} else {
- key = StrUtil.format(key, klineDetailDto.getSymbol(), klineDetailDto.getPeriod());
+ key = StrUtil.format(key, klineDetailDto.getInstId(), klineDetailDto.getBar());
}
- Object data = redisUtils.get(key);
- if (data != null) {
- List list = (List) data;
- int length = 0;
- // 默认获取k线900个柱状(超出会报错)
- int size = 900;
-
- if (list.size() > size) {
- length = size - 1;
- } else {
- length = list.size() - 1;
- }
-
- List<KlineDataVo> result = new ArrayList<>(length);
- for (int i = length; i > 0; i--) {
- Candlestick object = (Candlestick) list.get(i);
- KlineDataVo klineDataVo = CandlestickMapper.INSTANCE.toKlineDataVo(object);
- result.add(klineDataVo);
- }
- return Result.ok(result);
- }
- return Result.fail("获取数据失败");
+ String data = redisUtils.getString(key);
+ List<String[]> klinesList = JSON.parseArray(data, String[].class);
+ return Result.ok(klinesList);
+// if (data != null) {
+// List list = (List) data;
+// int length = 0;
+// // 默认获取k线900个柱状(超出会报错)
+// int size = 900;
+//
+// if (list.size() > size) {
+// length = size - 1;
+// } else {
+// length = list.size() - 1;
+// }
+//
+// List<KlineDataVo> result = new ArrayList<>(length);
+// for (int i = length; i > 0; i--) {
+// Candlestick object = (Candlestick) list.get(i);
+// KlineDataVo klineDataVo = CandlestickMapper.INSTANCE.toKlineDataVo(object);
+// result.add(klineDataVo);
+// }
+// return Result.ok(result);
+// }
+// return Result.fail("获取数据失败");
}
@Override
--
Gitblit v1.9.1