zainali5120
2020-09-25 286ea89f5f6cade73276f865effa5dcd2b19406d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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<Candlestick> 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<Candlestick> 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<KLine> 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<ExchangeTrade> 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);
        redisUtils.set(key, list);
        //  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<KLine> 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<ExchangeTrade> 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;
    }
}