admin
2021-12-04 c79b1ebed5a42a4cbb2f824232da2a51ff22a9a1
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
package com.yeshi.location.app.service.impl.location;
 
import com.yeshi.location.app.dao.location.LocationTravelDao;
import com.yeshi.location.app.dao.location.LocationTravelDao.DaoQuery;
import com.yeshi.location.app.entity.location.LocationTravel;
import com.yeshi.location.app.entity.location.UserLatestLocation;
import com.yeshi.location.app.service.inter.location.LocationTravelService;
import com.yeshi.location.app.service.inter.location.UserLatestLocationService;
import com.yeshi.location.app.service.query.location.LocationTravelQuery;
import com.yeshi.location.app.utils.GeoUtils;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.yeshi.utils.bean.BeanUtil;
 
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
 
@Service
public class LocationTravelServiceImpl implements LocationTravelService {
 
    @Resource
    private LocationTravelDao locationTravelDao;
 
    @Resource
    private UserLatestLocationService userLatestLocationService;
 
    @Override
    public List<LocationTravel> list(LocationTravelQuery locationTravelQuery, int page, int pageSize) {
        DaoQuery daoQuery = new DaoQuery();
        try {
            BeanUtil.copyProperties(locationTravelQuery, daoQuery);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        daoQuery.start = (page - 1) * pageSize;
        daoQuery.count = pageSize;
        daoQuery.sortList = Arrays.asList(new Sort.Order[]{Sort.Order.desc("createTime")});
        return locationTravelDao.list(daoQuery);
    }
 
    @Override
    public long count(LocationTravelQuery locationTravelQuery) {
        DaoQuery daoQuery = new DaoQuery();
        try {
            BeanUtil.copyProperties(locationTravelQuery, daoQuery);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return locationTravelDao.count(daoQuery);
    }
 
    @Override
    public LocationTravel get(String id) {
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(id));
        return locationTravelDao.findOne(query);
    }
 
    @Override
    public void add(LocationTravel locationTravel) throws Exception {
 
        if (locationTravel == null || locationTravel.getUid() == null || locationTravel.getLocation() == null || locationTravel.getLocation().getLatitude() == null || locationTravel.getLocation().getLongitude() == null) {
            throw new Exception("信息不完整");
        }
 
        if (locationTravel.getCreateTime() == null) {
            locationTravel.setCreateTime(new Date());
        }
 
        if (locationTravel.getId() == null) {
            locationTravel.setId(LocationTravel.createId(locationTravel.getUid(), locationTravel.getCreateTime()));
        }
 
 
        //获取最新的位置
        DaoQuery daoQuery = new DaoQuery();
        daoQuery.uid = locationTravel.getUid();
        daoQuery.sortList = Arrays.asList(new Sort.Order[]{Sort.Order.desc("createTime")});
        daoQuery.count = 1;
        List<LocationTravel> travelList = locationTravelDao.list(daoQuery);
        if (travelList != null && travelList.size() > 0) {
            //判断距离
            if (GeoUtils.getDistance(travelList.get(0).getLocation(), locationTravel.getLocation()) >= 10) {
                //保存
                locationTravelDao.save(locationTravel);
            }
        } else {
            locationTravelDao.save(locationTravel);
        }
 
        UserLatestLocation latest = new UserLatestLocation();
        latest.setLocation(locationTravel.getLocation());
        latest.setUid(locationTravel.getUid());
        userLatestLocationService.add(latest);
    }
 
    @Override
    public void update(LocationTravel locationTravel) {
        //更新
        locationTravelDao.updateSelective(locationTravel);
    }
 
    @Override
    public void delete(List<String> idList) {
        for (String id : idList) {
            locationTravelDao.delete(id);
        }
    }
 
    @Override
    public List<LocationTravel> getTravelList(Long uid, Date startTime, Date endTime, int page, int pageSize) {
 
        DaoQuery daoQuery = new DaoQuery();
        daoQuery.minCreateTime = startTime;
        daoQuery.maxCreateTime = endTime;
        daoQuery.uid = uid;
        daoQuery.start = (page - 1) * pageSize;
        daoQuery.count = pageSize;
        List<LocationTravel> travelList = locationTravelDao.list(daoQuery);
        return travelList;
    }
 
    @Override
    public long countTravel(Long uid, Date startTime, Date endTime) {
        DaoQuery daoQuery = new DaoQuery();
        daoQuery.minCreateTime = startTime;
        daoQuery.maxCreateTime = endTime;
        daoQuery.uid = uid;
        return locationTravelDao.count(daoQuery);
    }
 
 
}