package com.yami.trading.huobi.data; import com.yami.trading.bean.data.domain.*; import com.yami.trading.huobi.data.internal.DepthTimeObject; import com.yami.trading.huobi.data.internal.KlineTimeObject; import com.yami.trading.huobi.data.internal.TradeTimeObject; import com.yami.trading.huobi.data.internal.TrendTimeObject; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; public class DataCache { /** * 分时 */ private volatile static Map trend = new ConcurrentHashMap(); /** * K线 */ private volatile static Map panKou = new ConcurrentHashMap(); /** * K线 */ private volatile static Map kline = new ConcurrentHashMap(); /** * 24小时的历史记录 */ private volatile static Map> realtimeHistory = new ConcurrentHashMap>(); /** * 最高最低 */ private volatile static Map realtimeHigh = new ConcurrentHashMap(); private volatile static Map realtimeLow = new ConcurrentHashMap(); /** * 向前24小时时间点的开盘价 */ private volatile static Map realtime24HBeforeOpen = new ConcurrentHashMap(); private volatile static Map kline_hobi = new ConcurrentHashMap(); /** * 市场深度数据 */ private volatile static Map depth = new ConcurrentHashMap(); /** * 市场深度数据 */ private volatile static Map> tradeList = new ConcurrentHashMap>(); /** * 近期交易记录 */ private volatile static Map trade = new ConcurrentHashMap(); /** * 最近60s实时价格信息列表 */ public static Map> latestRealTimeMap_60s = new ConcurrentHashMap<>(); public static Realtime getLatestRealTime(String symbol) { return latestRealTime.get(symbol); } /** * 最新的实时价格信息缓存 <币种code, RealTime> */ public static Map latestRealTime = new ConcurrentHashMap<>(); //股票时区暂存 public static Map realMarketMap = new ConcurrentHashMap<>(); public static void depthToTrade(Depth depth) { String symbol = depth.getSymbol(); TradeTimeObject timeObject = DataCache.getTrade().get(symbol); if (timeObject == null) { timeObject = new TradeTimeObject(); } timeObject.setLastTime(new Date()); List data = new ArrayList(); List asks = depth.getAsks(); List bids = depth.getBids(); List sell = asks.stream().map(a -> { TradeEntry tradeEntry = new TradeEntry(); tradeEntry.setDirection("sell"); tradeEntry.setAmount(a.getAmount()); tradeEntry.setPrice(a.getPrice()); tradeEntry.setTs(depth.getTs()); return tradeEntry; }).collect(Collectors.toList()); List buy = bids.stream().map(a -> { TradeEntry tradeEntry = new TradeEntry(); tradeEntry.setDirection("buy"); tradeEntry.setAmount(a.getAmount()); tradeEntry.setPrice(a.getPrice()); tradeEntry.setTs(depth.getTs()); return tradeEntry; }).collect(Collectors.toList()); data.addAll(sell); data.addAll(buy); timeObject.put(symbol, data); DataCache.getTrade().put(symbol, timeObject); } public static KlineTimeObject getKline(String symbol, String line) { String key = symbol; if (!StringUtils.isBlank(line)) { key = key + "_" + line; } return kline.get(key); } public static TrendTimeObject getTrend(String symbol) { return trend.get(symbol); } public static void putTrend(String symbol, TrendTimeObject model) { trend.put(symbol, model); } public static void putKline(String symbol, String line, KlineTimeObject model) { String key = symbol; if (!StringUtils.isBlank(line)) { key = key + "_" + line; } kline.put(key, model); } public static List getStockTradeList(String symbol) { return tradeList.get(symbol); } public static void putStockTradeList(String symbol, List model) { tradeList.put(symbol, model); } public static Realtime getRealtime(String symbol) { Realtime realtime = latestRealTime.get(symbol); if (realtime == null) { if (StringUtils.isAllLowerCase(symbol)) { symbol = symbol.toUpperCase(); } else if (StringUtils.isAllUpperCase(symbol)) { symbol = symbol.toLowerCase(); } return latestRealTime.get(symbol); } else { return realtime; } } public static void putRealtime(String symbol, Realtime model) { latestRealTime.put(symbol, model); } public static void putMarket(String symbol, StockMarket market) { realMarketMap.put(symbol, market); } public static StockMarket getMarket(String symbol) { return realMarketMap.get(symbol); } public static Map> getRealtimeHistory() { return realtimeHistory; } public static void setRealtimeHistory(Map> realtimeHistory) { DataCache.realtimeHistory = realtimeHistory; } public static Map getDepth() { return depth; } public static Map getTrade() { return trade; } public static Map getRealtimeHigh() { return realtimeHigh; } public static Map getRealtimeLow() { return realtimeLow; } public static Map getKline_hobi() { return kline_hobi; } public static Map getRealtime24HBeforeOpen() { return realtime24HBeforeOpen; } public static void putLatestRealTime(String symbol, Realtime model) { latestRealTime.put(symbol, model); } }