| | |
| | | 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.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; |
| | | |
| | |
| | | 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"); |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | 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 |