package com.xcong.excoin.processor; import com.huobi.client.model.Candlestick; import com.xcong.excoin.modules.coin.dao.OrderCoinDealDao; import com.xcong.excoin.trade.ExchangeTrade; 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.ArrayList; import java.util.Date; import java.util.List; @Service public class MarketService { // @Autowired // private MongoTemplate mongoTemplate; @Resource private OrderCoinDealDao orderCoinDealDao; @Resource private RedisUtils redisUtils; public List findAllKLine(String symbol, String peroid) { // Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC,"time")); // Query query = new Query().with(sort).limit(1000); // // return mongoTemplate.find(query,KLine.class,"exchange_kline_"+symbol+"_"+peroid); return null; } public List findAllKLine(String symbol, long fromTime, long toTime, String period) { // Criteria criteria = Criteria.where("time").gte(fromTime).andOperator(Criteria.where("time").lte(toTime)); // Sort sort = new Sort(new Sort.Order(Sort.Direction.ASC,"time")); // Query query = new Query(criteria).with(sort); // List kLines = mongoTemplate.find(query,KLine.class,"exchange_kline_"+symbol+"_"+ period); // return kLines; String key = "KINE_" + symbol + "_" + period; Object data = redisUtils.get(key); List list = new ArrayList(); if (data != null) { list = (List) data; } return list; } // // public ExchangeTrade findFirstTrade(String symbol,long fromTime,long toTime){ // Criteria criteria = Criteria.where("time").gte(fromTime).andOperator(Criteria.where("time").lte(toTime)); // Sort sort = new Sort(new Sort.Order(Sort.Direction.ASC,"time")); // Query query = new Query(criteria).with(sort); // return mongoTemplate.findOne(query,ExchangeTrade.class,"exchange_trade_"+symbol); // } // public ExchangeTrade findLastTrade(String symbol,long fromTime,long toTime){ // Criteria criteria = Criteria.where("time").gte(fromTime).andOperator(Criteria.where("time").lte(toTime)); // Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC,"time")); // Query query = new Query(criteria).with(sort); // return mongoTemplate.findOne(query,ExchangeTrade.class,"exchange_trade_"+symbol); // } // // public ExchangeTrade findTrade(String symbol, long fromTime, long toTime, Sort.Order order){ // Criteria criteria = Criteria.where("time").gte(fromTime).andOperator(Criteria.where("time").lte(toTime)); // Sort sort = new Sort(order); // Query query = new Query(criteria).with(sort); // return mongoTemplate.findOne(query,ExchangeTrade.class,"exchange_trade_"+symbol); // } public List findTradeByTimeRange(String symbol, long timeStart, long timeEnd) { // Criteria criteria = Criteria.where("time").gte(timeStart).andOperator(Criteria.where("time").lt(timeEnd)); // Sort sort = new Sort(new Sort.Order(Sort.Direction.ASC,"time")); // Query query = new Query(criteria).with(sort); // // return mongoTemplate.find(query,ExchangeTrade.class,"exchange_trade_"+symbol); return orderCoinDealDao.selectOrderCoinDealByTime(symbol, new Date(timeStart), new Date(timeEnd)); // return null; } public void saveKLine(String symbol, String period, Candlestick kLine) { // 先获取 String key = "KINE_" + symbol + "/USDT_" + period; Object data = redisUtils.get(key); List list = new ArrayList(); if (data != null) { list = (List) data; } list.add(kLine); int size = list.size(); if(size>500){ list = list.subList(size-500,size); } List lines = new ArrayList(); if(CollectionUtils.isNotEmpty(list)){ for(Object object:list){ lines.add(object); } } redisUtils.set(key, lines); // mongoTemplate.insert(kLine,"exchange_kline_"+symbol+"_"+kLine.getPeriod()); } /** * 查找某时间段内的交易量 * * @param symbol * @param timeStart * @param timeEnd * @return */ public BigDecimal findTradeVolume(String symbol, long timeStart, long timeEnd) { // Criteria criteria = Criteria.where("time").gt(timeStart) // .andOperator(Criteria.where("time").lte(timeEnd)); // //.andOperator(Criteria.where("volume").gt(0)); // Sort sort = new Sort(new Sort.Order(Sort.Direction.ASC,"time")); // Query query = new Query(criteria).with(sort); // List kLines = mongoTemplate.find(query,KLine.class,"exchange_kline_"+symbol+"_1min"); // BigDecimal totalVolume = BigDecimal.ZERO; // for(KLine kLine:kLines){ // totalVolume = totalVolume.add(kLine.getVolume()); // } // return totalVolume; List exchangeTrades = orderCoinDealDao.selectOrderCoinDealByTime(symbol, new Date(timeStart), new Date(timeStart)); BigDecimal totalVolume = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(exchangeTrades)) { for (ExchangeTrade kLine : exchangeTrades) { totalVolume = totalVolume.add(kLine.getBuyTurnover()); } } return totalVolume; } public static void main(String[] args) { List list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list=list.subList(2,5); System.out.println(list); } }