| | |
| | | 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; |
| | |
| | | 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 javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | 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) { |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | 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.getAmount()); |
| | | 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); |
| | | } |
| | | |
| | |
| | | } |
| | | 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); |
| | | } |
| | | } |