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 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 currentKlineMap = processor.getCurrentKlineMap(); Collection values = currentKlineMap.values(); BigDecimal newPrice =null; for (Candlestick candlestick : values) { for (ExchangeTrade exchangeTrade : trades) { if(exchangeTrade==null){ continue; } processor.processTrade(candlestick, exchangeTrade); newPrice=exchangeTrade.getPrice(); } } // 存入redis,websocket去取 String key = "NEW_KINE_{}"; key = StrUtil.format(key, symbolUsdt); redisUtils.set(key,currentKlineMap); // 更新最新价 if(newPrice!=null){ redisUtils.set(CoinTypeConvert.convertToKey(symbolUsdt), newPrice); } } }