package com.xcong.excoin.modules.exchange.service.impl;
|
|
import cn.hutool.core.util.StrUtil;
|
import com.huobi.client.model.Candlestick;
|
import com.xcong.excoin.modules.exchange.service.HandleKlineService;
|
import com.xcong.excoin.processor.CoinProcessor;
|
import com.xcong.excoin.processor.CoinProcessorFactory;
|
import com.xcong.excoin.trade.ExchangeTrade;
|
import com.xcong.excoin.utils.CoinTypeConvert;
|
import com.xcong.excoin.utils.RedisUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.Collection;
|
import java.util.List;
|
import java.util.Map;
|
|
@Service
|
public class HandleKlineServiceImpl implements HandleKlineService {
|
|
@Resource
|
private CoinProcessorFactory processorFactory;
|
|
@Resource
|
private RedisUtils redisUtils;
|
|
@Override
|
public void handleExchangeOrderToKline(List<ExchangeTrade> trades) {
|
if (CollectionUtils.isEmpty(trades)) {
|
return;
|
}
|
String symbol = trades.get(0).getSymbol();
|
String symbolUsdt = symbol;
|
if(!symbol.contains("USDT")){
|
symbolUsdt = symbol+"/USDT";
|
}
|
CoinProcessor processor = processorFactory.getProcessor(symbol);
|
Map<String, Candlestick> currentKlineMap = processor.getCurrentKlineMap();
|
Collection<Candlestick> values = currentKlineMap.values();
|
BigDecimal newPrice = trades.get(trades.size()-1).getPrice();
|
for (Candlestick candlestick : values) {
|
for (ExchangeTrade exchangeTrade : trades) {
|
processor.processTrade(candlestick, exchangeTrade);
|
}
|
}
|
|
// 存入redis,websocket去取
|
String key = "NEW_KINE_{}";
|
key = StrUtil.format(key, symbolUsdt);
|
redisUtils.set(key,currentKlineMap);
|
// 更新最新价
|
redisUtils.set(CoinTypeConvert.convertToKey(symbolUsdt), newPrice);
|
}
|
}
|