Helius
2021-05-13 1b44a9a25a51324dba8e8640cb405440f2cf7d48
src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java
@@ -1,13 +1,17 @@
package com.xcong.excoin.modules.symbols.service.impl;
import cn.hutool.core.util.StrUtil;
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.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.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.RedisUtils;
@@ -52,7 +56,6 @@
        }
        return client;
    }
    @Override
    public void updateSymbolsKine(String time) {
@@ -100,12 +103,28 @@
        // 币币行情
        if (AppContants.HOME_SYMBOLS_COIN == type) {
            for (SymbolEnum symbolEnum : SymbolEnum.values()) {
                list.add(getSymbolReturnData(symbolEnum.getName()));
                list.add(getSymbolReturnData(symbolEnum.getValue()));
            }
//
//            HomeSymbolsVo xch = new HomeSymbolsVo();
//            xch.setSymbol("XCH/USDT");
//            BigDecimal xchNewPrice = new BigDecimal(redisUtils.getString("XCH_NEW_PRICE"));
//            xch.setCurrentPrice(xchNewPrice);
//
//            BigDecimal xchUpDown = new BigDecimal(redisUtils.getString("XCH_UP_DOWN"));
//            xch.setUpOrDown(xchUpDown);
//
//            PlatformCnyUsdtExchangeEntity cnyUsdtExchange = platformCnyUsdtExchangeDao.getCNYAndUSDTOne();
//            if (cnyUsdtExchange != null) {
//                BigDecimal cnyPrice = xchNewPrice.multiply(cnyUsdtExchange.getValue().add(cnyUsdtExchange.getDiff())).setScale(2, BigDecimal.ROUND_HALF_UP);
//                xch.setCnyPrice(cnyPrice);
//            }
//
//            list.add(xch);
            // 合约行情
        } else if (AppContants.HOME_SYMBOLS_CONTRACT == type) {
            for (SymbolEnum symbolEnum : SymbolEnum.values()) {
                list.add(getSymbolReturnData(symbolEnum.getName()));
                list.add(getSymbolReturnData(symbolEnum.getValue()));
            }
            // 自选行情
        } else {
@@ -113,6 +132,12 @@
        }
        return Result.ok(list);
    }
    @Override
    public Result findSymbolData(String symbol) {
        HomeSymbolsVo homeSymbolsVo = getSymbolReturnData(symbol);
        return Result.ok(homeSymbolsVo);
    }
    public HomeSymbolsVo getSymbolReturnData(String symbol) {
@@ -130,12 +155,47 @@
        homeSymbolsVo.setSymbol(symbol);
        homeSymbolsVo.setCurrentPrice(newestPrice);
        homeSymbolsVo.setUpOrDown(upOrDown);
        homeSymbolsVo.setVolume(symbolObject.getVolume());
        homeSymbolsVo.setVolume(symbolObject.getAmount());
        if (cnyUsdtExchange != null) {
            BigDecimal cnyPrice = openPrice.multiply(cnyUsdtExchange.getValue()).setScale(2, BigDecimal.ROUND_HALF_UP);
            BigDecimal cnyPrice = newestPrice.multiply(cnyUsdtExchange.getValue().add(cnyUsdtExchange.getDiff())).setScale(2, BigDecimal.ROUND_HALF_UP);
            homeSymbolsVo.setCnyPrice(cnyPrice);
        }
        return homeSymbolsVo;
    }
    @Override
    public Result findKlineDetails(KlineDetailDto klineDetailDto) {
        String key = "KINE_{}_{}";
        // 币币k线数据
        if (AppContants.HOME_SYMBOLS_COIN == klineDetailDto.getType()) {
            key = StrUtil.format(key, klineDetailDto.getSymbol(), klineDetailDto.getPeriod());
            // 合约k线数据
        } else {
            key = StrUtil.format(key, klineDetailDto.getSymbol(), klineDetailDto.getPeriod());
        }
        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("获取数据失败");
    }
}