Administrator
14 hours ago aac24166b4e15146b0b4e18364cd1d154986f039
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,13 +102,7 @@
        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;
@@ -126,13 +111,11 @@
                requestParam.put("bar",bar);
                requestParam.put("limit","300");
                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);
            }
        }
    }
@@ -190,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