package com.xcong.excoin.modules.symbols.service.impl; import com.alibaba.fastjson.JSONObject; import com.huobi.client.model.Candlestick; import com.xcong.excoin.common.enumerates.SymbolEnum; import com.xcong.excoin.modules.symbols.service.SymbolsService; 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.List; /** * @author wzy * @date 2020-05-26 **/ @Slf4j @Service public class SymbolsServiceImpl implements SymbolsService { @Resource private RedisUtils redisUtils; private static final String API_KEY = "3938f004-bfe31905-f7581c1a-6abe0"; private static final String API_SECRET = "a0f7a154-ghxertfvbf-6ce2d90c-a0bab"; private static volatile ApiClient client; private static ApiClient getClient() { if (client == null) { synchronized (ApiClient.class) { if (client == null) { client = new ApiClient(API_KEY, API_SECRET); } } } return client; } @Override public void updateSymbolsKine(String time) { synchronized (this) { //更新币币交易K线历史数据 for (SymbolEnum symbol : SymbolEnum.values()) { log.info(symbol.getValue()); String[] symbols = symbol.getValue().toLowerCase().split("/"); ApiClient client = new ApiClient(API_KEY, API_SECRET); KlineResponse kline = client.kline(symbols[0] + symbols[1], time, 1000 + ""); log.info("{}", JSONObject.toJSONString(kline)); if (kline != null) { if ("ok".equalsIgnoreCase(kline.getStatus())) { List klines = (List) kline.data; List list = new ArrayList(); 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); } } } } } } }