wzy
2021-06-15 9b8b1a8c660b04e49e4aa228858c45e2dd8f8c43
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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);
        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<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;
    }
 
    public static void main(String[] args) {
        List<String> 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);
    }
}