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; /** *

* 服务实现类 *

* * @author moral * @since 2021-08-18 */ @Service public class SpecialDeviceServiceImpl extends ServiceImpl implements SpecialDeviceService { @Autowired private HistorySecondSpecialMapper historySecondSpecialMapper; @Autowired private SensorService sensorService; @Autowired private SysDictDataService sysDictDataService; private final static Double dis = 50d; @Override public List> carTrajectory(Map params) { params.put("dateFormat", "%Y-%m-%d %H:%i:%s"); //查询传感器单位 /*QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("default_unit_key").eq("code", sensorCode); String defaultUnitKey = sensorService.getOne(queryWrapper).getDefaultUnitKey(); QueryWrapper 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> 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> filterData(List> data) { List> result = new ArrayList<>(); result.add(data.remove(0)); for (Map map : data) { boolean flag = true; for (Map 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; } }