admin
2022-05-07 15bedcc619b1edb6eb987f9288db7670e5b38c46
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
package com.yeshi.makemoney.app.service.impl.goldcorn;
 
import java.lang.Exception;
import javax.annotation.Resource;
 
import com.yeshi.makemoney.app.entity.SystemEnum;
import com.yeshi.makemoney.app.entity.goldcorn.GoldCornGetType;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationOperation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.stereotype.Service;
 
import java.util.*;
 
import org.yeshi.utils.StringUtil;
import org.yeshi.utils.TimeUtil;
import org.yeshi.utils.bean.BeanUtil;
 
import com.yeshi.makemoney.app.dao.goldcorn.GoldCornGetFrequencyConfigDao;
import com.yeshi.makemoney.app.entity.goldcorn.GoldCornGetFrequencyConfig;
import com.yeshi.makemoney.app.service.inter.goldcorn.GoldCornGetFrequencyConfigService;
import com.yeshi.makemoney.app.service.query.goldcorn.GoldCornGetFrequencyConfigQuery;
import com.yeshi.makemoney.app.dao.goldcorn.GoldCornGetFrequencyConfigDao.DaoQuery;
 
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
 
@Service
public class GoldCornGetFrequencyConfigServiceImpl implements GoldCornGetFrequencyConfigService {
 
    @Resource
    private GoldCornGetFrequencyConfigDao goldCornGetFrequencyConfigDao;
 
    @Override
    public List<GoldCornGetFrequencyConfig> list(GoldCornGetFrequencyConfigQuery goldCornGetFrequencyConfigQuery, int page, int pageSize) {
        DaoQuery daoQuery = new DaoQuery();
        daoQuery.type = goldCornGetFrequencyConfigQuery.getType();
        daoQuery.minValidateTime = goldCornGetFrequencyConfigQuery.toStartTime();
        daoQuery.maxValidateTime = goldCornGetFrequencyConfigQuery.toEndTime();
        daoQuery.start = (page - 1) * pageSize;
        daoQuery.count = pageSize;
        return goldCornGetFrequencyConfigDao.list(daoQuery);
    }
 
    @Override
    public long count(GoldCornGetFrequencyConfigQuery goldCornGetFrequencyConfigQuery) {
        DaoQuery daoQuery = new DaoQuery();
        daoQuery.type = goldCornGetFrequencyConfigQuery.getType();
        daoQuery.minValidateTime = goldCornGetFrequencyConfigQuery.toStartTime();
        daoQuery.maxValidateTime = goldCornGetFrequencyConfigQuery.toEndTime();
        return goldCornGetFrequencyConfigDao.count(daoQuery);
    }
 
    @Override
    public GoldCornGetFrequencyConfig get(String id) {
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(id));
        return goldCornGetFrequencyConfigDao.findOne(query);
    }
 
    @Override
    public void add(GoldCornGetFrequencyConfig goldCornGetFrequencyConfig) throws Exception {
 
        if (goldCornGetFrequencyConfig.getId() == null) {
            goldCornGetFrequencyConfig.setId(goldCornGetFrequencyConfig.toId());
        }
 
        //查询主键ID是否存在
        if (goldCornGetFrequencyConfigDao.get(goldCornGetFrequencyConfig.getId()) != null) {
            throw new Exception("已存在");
        }
 
        if (goldCornGetFrequencyConfig.getCreateTime() == null) {
            goldCornGetFrequencyConfig.setCreateTime(new Date());
        }
        //保存
        goldCornGetFrequencyConfigDao.save(goldCornGetFrequencyConfig);
    }
 
    @Override
    public void update(GoldCornGetFrequencyConfig goldCornGetFrequencyConfig) {
        if (goldCornGetFrequencyConfig.getUpdateTime() == null) {
            goldCornGetFrequencyConfig.setUpdateTime(new Date());
        }
        //更新
        goldCornGetFrequencyConfigDao.updateSelective(goldCornGetFrequencyConfig);
    }
 
    @Override
    public void delete(List<String> idList) {
        for (String id : idList) {
            goldCornGetFrequencyConfigDao.delete(id);
        }
    }
 
    @Override
    public GoldCornGetFrequencyConfig getConfig(SystemEnum system, GoldCornGetType type, Date time) {
        DaoQuery daoQuery = new DaoQuery();
        daoQuery.maxValidateTime = time;
        daoQuery.type = type;
        daoQuery.system = system;
        daoQuery.count = 1;
        daoQuery.sortList = Arrays.asList(new Sort.Order[]{Sort.Order.desc("validateTime")});
 
 
        List<GoldCornGetFrequencyConfig> list = goldCornGetFrequencyConfigDao.list(daoQuery);
        if (list != null && list.size() > 0) {
            return list.get(0);
        }
 
        return null;
    }
 
    @Override
    public List<GoldCornGetFrequencyConfig> listByTypes(List<GoldCornGetType> typeList, SystemEnum system, Date date) {
 
        Criteria[] ors = new Criteria[typeList.size()];
        for (int i = 0; i < ors.length; i++) {
            ors[i] = Criteria.where("type").is(typeList.get(i));
        }
 
        List<AggregationOperation> list = new ArrayList<>();
        list.add(Aggregation.match(new Criteria().orOperator(ors).and("validateTime").lte(date)));
        list.add(Aggregation.sort(Sort.Direction.DESC, "validateTime"));
        list.add(Aggregation.group("type").first("id").as("id"));
        list.add(Aggregation.lookup("goldCornGetFrequencyConfig", "id", "_id", "config"));
        list.add(Aggregation.project("config"));
        AggregationResults<Map> results = goldCornGetFrequencyConfigDao.aggregate(list, Map.class);
        List<GoldCornGetFrequencyConfig> resultList = new ArrayList<>();
        for (Map map : results.getMappedResults()) {
            List<GoldCornGetFrequencyConfig> config = (List<GoldCornGetFrequencyConfig>) map.get("config");
            resultList.addAll(config);
        }
        return resultList;
    }
 
 
}