jinpengyong
2021-08-19 c98bb582d6a313940310a5e05bc80bafe386e3a2
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
package com.moral.api.service.impl;
 
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.HistorySecondSpecial;
import com.moral.api.entity.Sensor;
import com.moral.api.entity.SpecialDevice;
import com.moral.api.entity.SysDictData;
import com.moral.api.mapper.HistorySecondSpecialMapper;
import com.moral.api.mapper.SpecialDeviceMapper;
import com.moral.api.service.HistorySecondSpecialService;
import com.moral.api.service.SensorService;
import com.moral.api.service.SpecialDeviceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.api.service.SysDictDataService;
import com.moral.constant.Constants;
import com.moral.util.DateUtils;
import com.moral.util.GeodesyUtils;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
 
/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author moral
 * @since 2021-08-18
 */
@Service
public class SpecialDeviceServiceImpl extends ServiceImpl<SpecialDeviceMapper, SpecialDevice> implements SpecialDeviceService {
 
    @Autowired
    private HistorySecondSpecialMapper historySecondSpecialMapper;
 
    @Autowired
    private SensorService sensorService;
 
    @Autowired
    private SysDictDataService sysDictDataService;
 
    private final static Double dis = 50d;
 
    @Override
    public List<Map<String, Object>> carTrajectory(Map<String, Object> params) {
        params.put("dateFormat", "%Y-%m-%d %H:%i:%s");
 
        //查询传感器单位
        /*QueryWrapper<Sensor> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("default_unit_key").eq("code", sensorCode);
        String defaultUnitKey = sensorService.getOne(queryWrapper).getDefaultUnitKey();
        QueryWrapper<SysDictData> sysDictDataQueryWrapper = new QueryWrapper<>();
        sysDictDataQueryWrapper.select("dataValue").eq("dict_type_id", 14).eq("dataKey", defaultUnitKey);
        String sensorUnit = sysDictDataService.getOne(sysDictDataQueryWrapper).getDataValue();
 
        params.put("sensorUnit", sensorUnit);*/
        //从秒数据表获取走航车数据
        List<Map<String, Object>> data = historySecondSpecialMapper.getSpecialDeviceData(params);
        data.removeIf(o -> {
            //经度
            double lng = Double.parseDouble(o.get(Constants.SENSOR_CODE_LON).toString());
            //纬度
            double lat = Double.parseDouble(o.get(Constants.SENSOR_CODE_LAT).toString());
            return lng < 70 || lng > 150 || lat > 60 || lat < 20;
        });
        return filterData(data);
    }
 
    //根据距离筛选数据
    private List<Map<String, Object>> filterData(List<Map<String, Object>> data) {
        List<Map<String, Object>> result = new ArrayList<>();
        result.add(data.remove(0));
        for (Map<String, Object> map : data) {
            boolean flag = true;
            for (Map<String, Object> resultMap : result) {
                double lng1 = Double.parseDouble(map.get(Constants.SENSOR_CODE_LON).toString());
                double lat1 = Double.parseDouble(map.get(Constants.SENSOR_CODE_LAT).toString());
                double lng2 = Double.parseDouble(resultMap.get(Constants.SENSOR_CODE_LON).toString());
                double lat2 = Double.parseDouble(resultMap.get(Constants.SENSOR_CODE_LAT).toString());
                double distance = GeodesyUtils.getDistance(lat1, lng1, lat2, lng2);
                if (distance < dis) {
                    flag = false;
                }
            }
            if (flag) {
                result.add(map);
            }
        }
        return result;
    }
}