|
@@ -4,21 +4,17 @@ import com.fdkankan.indoor.base.convert.DistanceUtil;
|
|
|
import com.fdkankan.indoor.base.util.*;
|
|
|
import com.fdkankan.indoor.core.entity.dto.*;
|
|
|
import com.fdkankan.indoor.core.entity.FilterEntity;
|
|
|
-import com.fdkankan.indoor.core.entity.jsonData.FilterEntity1;
|
|
|
-import com.fdkankan.indoor.core.entity.jsonData.JsonData;
|
|
|
import com.fdkankan.indoor.core.mapper.FilterMapper;
|
|
|
import com.fdkankan.indoor.core.service.FilterService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.junit.Test;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.mongodb.core.MongoTemplate;
|
|
|
-import org.springframework.data.mongodb.core.query.Criteria;
|
|
|
-import org.springframework.data.mongodb.core.query.Query;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
-import java.util.stream.Stream;
|
|
|
|
|
|
/**
|
|
|
* Created by owen on 2021/7/15 0015 16:00
|
|
@@ -34,720 +30,34 @@ public class FilterServiceImpl implements FilterService {
|
|
|
MongoTemplate mongoTemplate;
|
|
|
|
|
|
|
|
|
-// @Override
|
|
|
-// public Result findById(String sceneCode, Integer id) {
|
|
|
-// List<JsonData> array = findBySceneCode(sceneCode);
|
|
|
-// List<JsonData> result = array.stream().filter(p -> id.equals(p.getId()))
|
|
|
-// .collect(Collectors.toList());
|
|
|
-// if (result.size() == 0) {
|
|
|
-// throw new RuntimeException("此场景没有数据");
|
|
|
-// }
|
|
|
-//
|
|
|
-// return Result.success(result.get(0));
|
|
|
-// }
|
|
|
-
|
|
|
-// @Override
|
|
|
-// public Result query(String code, QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo, JsonDataDetailDto jsonDataDetailDto) {
|
|
|
-//
|
|
|
-// if (queryJsonDataOne.getLat() != null || queryJsonDataTwo.getLat_max() != null){
|
|
|
-// QueryJsonDataBase data = switchQueryData(queryJsonDataOne, queryJsonDataTwo);
|
|
|
-// return Result.success(filterJsonData(code, data));
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (jsonDataDetailDto != null){
|
|
|
-// return Result.success(filterJsonDataDetail(code, jsonDataDetailDto));
|
|
|
-// }
|
|
|
-// return null;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
-// @Override
|
|
|
-// public Result query_5(String code, QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo, JsonDataDetailDto jsonDataDetailDto) {
|
|
|
-//
|
|
|
-//
|
|
|
-// QueryJsonDataBase data = switchQueryData(queryJsonDataOne, queryJsonDataTwo);
|
|
|
-// return Result.success(filterJsonData_5(code, data, jsonDataDetailDto));
|
|
|
-//
|
|
|
-//
|
|
|
-// }
|
|
|
-
|
|
|
-// @Override
|
|
|
-// public Result findById1(String sceneCode, Integer id) {
|
|
|
-//
|
|
|
-// Query query = new Query();
|
|
|
-// query.addCriteria(Criteria.where("sceneCode").is(sceneCode).and("data.file_id").is("00004"));
|
|
|
-//
|
|
|
-// FilterEntity1 entity = mongoTemplate.findOne(query, FilterEntity1.class);
|
|
|
-// List<JsonData> data = entity.getData();
|
|
|
-//
|
|
|
-// return Result.success(data);
|
|
|
-// }
|
|
|
|
|
|
@Override
|
|
|
public void save(FilterEntity entity) {
|
|
|
- filterMapper.insert(entity);
|
|
|
+ filterMapper.save(entity);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- /**
|
|
|
- * 根据场景码查询数据
|
|
|
- * @param sceneCode
|
|
|
- * @return
|
|
|
- */
|
|
|
- private List<JsonData> findBySceneCode(String sceneCode) {
|
|
|
- Query query = new Query();
|
|
|
- query.addCriteria(Criteria.where("sceneCode").is(sceneCode));
|
|
|
- FilterEntity1 entity = mongoTemplate.findOne(query, FilterEntity1.class, "t_filter");
|
|
|
- if (entity == null) {
|
|
|
- throw new RuntimeException("没有此场景数据");
|
|
|
- }
|
|
|
- List<JsonData> list = entity.getData();
|
|
|
- log.info("JsonData数量:{}", list.size());
|
|
|
- return list;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 查询细节根据排序
|
|
|
- * @param code
|
|
|
- * @param jsonDataDetailDto
|
|
|
- * @return
|
|
|
- */
|
|
|
-
|
|
|
-// private List<JsonData> filterJsonDataDetail(String code, JsonDataDetailDto jsonDataDetailDto) {
|
|
|
-// List<JsonData> dbList = findBySceneCode(code);
|
|
|
-//
|
|
|
-// Integer datasetId = jsonDataDetailDto.getDataset();
|
|
|
-// Integer siteModelEntityId = jsonDataDetailDto.getSite_model_entity();
|
|
|
-// Integer limit = jsonDataDetailDto.getLimit();
|
|
|
-// limit = limit==null ? 10 : limit;
|
|
|
-// Boolean hidden = jsonDataDetailDto.getHidden();
|
|
|
-// // 对应db 根据那个字段排序
|
|
|
-// String sortOrder = jsonDataDetailDto.getSort_order();
|
|
|
-// sortOrder = sortOrder==null ? null :sortOrder.toLowerCase();
|
|
|
-// // 升序还是降序
|
|
|
-// String sortBy = jsonDataDetailDto.getSort_by();
|
|
|
-// sortBy = sortBy==null ? null :sortBy.toLowerCase();
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-// // todo 这里的排序还需要处理一下, 如有异常看了hidden值
|
|
|
-//
|
|
|
-// Stream<JsonData> dataStream = dbList.stream();
|
|
|
-// if (datasetId != null) {
|
|
|
-// dataStream = dataStream.filter(p -> datasetId.equals(p.getDataset_id()));
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (siteModelEntityId != null) {
|
|
|
-// dataStream = dataStream.filter(p -> siteModelEntityId.equals(p.getSite_model_entity_id()));
|
|
|
-// }
|
|
|
-//
|
|
|
-//
|
|
|
-// // 处理排序reversed()降序, 默认是升序
|
|
|
-// if ("desc".equals(sortBy) && "file_id".equals(sortOrder)) {
|
|
|
-// dataStream = dataStream.sorted(Comparator.comparing(JsonData::getFile_id).reversed());
|
|
|
-// } else if ("asc".equals(sortBy) && "file_id".equals(sortOrder)){
|
|
|
-// dataStream = dataStream.sorted(Comparator.comparing(JsonData::getFile_id));
|
|
|
-// }
|
|
|
-//
|
|
|
-// List<JsonData> collect = dataStream.collect(Collectors.toList());
|
|
|
-//
|
|
|
-// log.info("返回数据数量: {}", collect.size());
|
|
|
-// return collect;
|
|
|
-// }
|
|
|
-
|
|
|
- /**
|
|
|
- * 封装基础数据
|
|
|
- * @param queryJsonDataOne
|
|
|
- * @param queryJsonDataTwo
|
|
|
- * @return
|
|
|
- */
|
|
|
-// private QueryJsonDataBase switchQueryData(QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo) {
|
|
|
-// QueryJsonDataBase data = new QueryJsonDataBase();
|
|
|
-// if (queryJsonDataOne.getLat() != null && queryJsonDataOne.getLon() != null) {
|
|
|
-// data = queryJsonDataOne;
|
|
|
-// } else if (queryJsonDataTwo.getLat_min() != null && queryJsonDataTwo.getLat_max() != null
|
|
|
-// && queryJsonDataTwo.getLon_min() != null && queryJsonDataTwo.getLon_max() != null) {
|
|
|
-// data = queryJsonDataTwo;
|
|
|
-// }
|
|
|
-// log.info("base data: {}", data.toString());
|
|
|
-// return data;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
-// private List<JsonData> filterJsonData(String code, QueryJsonDataBase data) {
|
|
|
-// log.info("code:{}, data:{}", code, data.toString());
|
|
|
-//
|
|
|
-// List<JsonData> list = findBySceneCode(code);
|
|
|
-// if (data instanceof QueryJsonDataOne) {
|
|
|
-// QueryJsonDataOne one = (QueryJsonDataOne) data;
|
|
|
-// list = queryDataOne(one, list);
|
|
|
-// log.info("走one");
|
|
|
-// } else if (data instanceof QueryJsonDataTwo) {
|
|
|
-// QueryJsonDataTwo two = (QueryJsonDataTwo) data;
|
|
|
-// list = queryDataTwo(two, list);
|
|
|
-// log.info("走two");
|
|
|
-// } else {
|
|
|
-// throw new RuntimeException("没有查询到数据,请检查入参");
|
|
|
-// }
|
|
|
-// return list;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
-// private List<FilterHotDto> filterJsonData_5(String code, QueryJsonDataBase data, JsonDataDetailDto jsonDataDetailDto) {
|
|
|
-// log.info("code:{}, data:{}", code, data.toString());
|
|
|
-//
|
|
|
-// List<FilterHotDto> list = getDataBySceneCode_5(code);
|
|
|
-// if (data instanceof QueryJsonDataOne) {
|
|
|
-// QueryJsonDataOne one = (QueryJsonDataOne) data;
|
|
|
-// list = queryDataOne_5(one, list);
|
|
|
-// log.info("走one");
|
|
|
-// } else if (data instanceof QueryJsonDataTwo) {
|
|
|
-// QueryJsonDataTwo two = (QueryJsonDataTwo) data;
|
|
|
-// list = queryDataTwo_5(two, list);
|
|
|
-// log.info("走two");
|
|
|
-// } else {
|
|
|
-// throw new RuntimeException("没有查询到数据,请检查入参");
|
|
|
-// }
|
|
|
-//
|
|
|
-//
|
|
|
-// // QueryJsonDataOne:lat、lon
|
|
|
-//
|
|
|
-// // QueryJsonDataTwo:lat_max、lat_min、lon_max、lon_min
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-// // 过滤参数
|
|
|
-// list = filterJsonDataDetail_5_1(list, jsonDataDetailDto);
|
|
|
-//
|
|
|
-//
|
|
|
-// return list;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
-// private List<JsonData> filterJsonDataDetail_5(List<JsonData> dbList, JsonDataDetailDto jsonDataDetailDto) {
|
|
|
-//// List<JsonData> dbList = findBySceneCode(code);
|
|
|
-//
|
|
|
-// Integer datasetId = jsonDataDetailDto.getDataset();
|
|
|
-// Integer siteModelEntityId = jsonDataDetailDto.getSite_model_entity();
|
|
|
-// Integer limit = jsonDataDetailDto.getLimit();
|
|
|
-// limit = limit==null ? 10 : limit;
|
|
|
-// Boolean hidden = jsonDataDetailDto.getHidden();
|
|
|
-// // 对应db 根据那个字段排序
|
|
|
-// String sortOrder = jsonDataDetailDto.getSort_order();
|
|
|
-// sortOrder = sortOrder==null ? null :sortOrder.toLowerCase();
|
|
|
-// // 升序还是降序
|
|
|
-// String sortBy = jsonDataDetailDto.getSort_by();
|
|
|
-// sortBy = sortBy==null ? null :sortBy.toLowerCase();
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-// // todo 这里的排序还需要处理一下, 如有异常看了hidden值
|
|
|
-//
|
|
|
-// Stream<JsonData> dataStream = dbList.stream();
|
|
|
-// if (datasetId != null) {
|
|
|
-// dataStream = dataStream.filter(p -> datasetId.equals(p.getDataset_id()));
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (siteModelEntityId != null) {
|
|
|
-// dataStream = dataStream.filter(p -> siteModelEntityId.equals(p.getSite_model_entity_id()));
|
|
|
-// }
|
|
|
-//
|
|
|
-//
|
|
|
-// // 处理排序reversed()降序, 默认是升序
|
|
|
-// if ("desc".equals(sortBy) && "file_id".equals(sortOrder)) {
|
|
|
-// dataStream = dataStream.sorted(Comparator.comparing(JsonData::getFile_id).reversed());
|
|
|
-// } else if ("asc".equals(sortBy) && "file_id".equals(sortOrder)){
|
|
|
-// dataStream = dataStream.sorted(Comparator.comparing(JsonData::getFile_id));
|
|
|
-// }
|
|
|
-//
|
|
|
-// List<JsonData> collect = dataStream.collect(Collectors.toList());
|
|
|
-//
|
|
|
-// log.info("返回数据数量: {}", collect.size());
|
|
|
-// return collect;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-// private List<JsonData> queryDataOne(QueryJsonDataOne queryJsonData, List<JsonData> dbList) {
|
|
|
-// log.info("run queryDataOne");
|
|
|
-//
|
|
|
-// List<JsonData> jsonDataList = new ArrayList<>();
|
|
|
-// Long siteModelEntityId = queryJsonData.getSiteModelEntity();
|
|
|
-//
|
|
|
-// //su 更改 7-21 18:18
|
|
|
-// if (siteModelEntityId != null) {
|
|
|
-// jsonDataList = dbList.stream().filter(p -> siteModelEntityId == p.getSite_model_entity_id().longValue()).collect(Collectors.toList());
|
|
|
-// }else{
|
|
|
-// jsonDataList = dbList;
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (queryJsonData.getZ() != null) {
|
|
|
-// jsonDataList = dbList.stream().filter(jsonData ->
|
|
|
-// jsonData.getLocation()[2] >= queryJsonData.getZ() && jsonData.getFloor_location()[2] <= queryJsonData.getZ())
|
|
|
-// .collect(Collectors.toList());
|
|
|
-// }
|
|
|
-//
|
|
|
-// List<JsonData> newJsonData = new ArrayList<>();
|
|
|
-// // radius:半径
|
|
|
-// if (queryJsonData.getRadius() != null) {
|
|
|
-//// newJsonData = calcule(queryJsonData, jsonDataList);
|
|
|
-// newJsonData = calcule_5(queryJsonData, jsonDataList);
|
|
|
-// } else {
|
|
|
-// // 没有半径,算最近的距离
|
|
|
-// newJsonData = calculeMin(queryJsonData, jsonDataList);
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (queryJsonData.getLimit() != null) {
|
|
|
-// newJsonData = newJsonData.stream().limit(queryJsonData.getLimit()).collect(Collectors.toList());
|
|
|
-// }
|
|
|
-// return newJsonData;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
-// private List<JsonData> queryDataTwo(QueryJsonDataTwo queryJsonData , List<JsonData> dbList) {
|
|
|
-// log.info("run queryDataTwo");
|
|
|
-//
|
|
|
-// List<JsonData> jsonDataList = new ArrayList<>();
|
|
|
-// Long siteModelEntityId = queryJsonData.getSiteModelEntity();
|
|
|
-// if (siteModelEntityId != null) {
|
|
|
-// dbList = dbList.stream().filter(p -> siteModelEntityId == p.getSite_model_entity_id().longValue()).collect(Collectors.toList());
|
|
|
-// }
|
|
|
-// jsonDataList = dbList.stream().filter(jsonData ->
|
|
|
-// jsonData.getLocation()[0] >= queryJsonData.getLon_min() && jsonData.getLocation()[0] <= queryJsonData.getLon_max()
|
|
|
-// && jsonData.getLocation()[1] >= queryJsonData.getLat_min() && jsonData.getLocation()[1] <= queryJsonData.getLat_max())
|
|
|
-// .collect(Collectors.toList());
|
|
|
-//
|
|
|
-// List<JsonData> newJsonData = fillNewJsonData(queryJsonData, jsonDataList);
|
|
|
-//
|
|
|
-// return newJsonData;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 处理step step的值会有影响
|
|
|
- * 当step=null, 0, 1不做处理
|
|
|
- * @param queryJsonData
|
|
|
- * @param jsonDataList
|
|
|
- * @return
|
|
|
- */
|
|
|
-// private List<JsonData> fillNewJsonData(QueryJsonDataTwo queryJsonData, List<JsonData> jsonDataList) {
|
|
|
-// List<JsonData> newJsonData = new ArrayList<>();
|
|
|
-// log.info("输入对象数量:{}", jsonDataList.size());
|
|
|
-// Integer inputStep = queryJsonData.getStep();
|
|
|
-// // 当inputStep为空、null、0、1 时返回全部数据
|
|
|
-// if (inputStep == null || inputStep==0 || inputStep==1) {
|
|
|
-// return jsonDataList;
|
|
|
-// }
|
|
|
-//
|
|
|
-// /**
|
|
|
-// * 当inputStep大于1, 数量为200, 隔多少步取一个点
|
|
|
-// * 2:100
|
|
|
-// * 3:67
|
|
|
-// * 4:50
|
|
|
-// *
|
|
|
-// */
|
|
|
-// int step = 0;
|
|
|
-// if (inputStep > 1) {
|
|
|
-// for (JsonData jsonData : jsonDataList) {
|
|
|
-// if (step % inputStep == 0 || step == 0) {
|
|
|
-// newJsonData.add(jsonData);
|
|
|
-// }
|
|
|
-// step++;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// log.info("输出对象数量:{}", newJsonData.size());
|
|
|
-// return newJsonData;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
-// private List<JsonData> calcule(QueryJsonDataOne queryJsonData, List<JsonData> jsonDataList) {
|
|
|
-// log.info("run calcule");
|
|
|
-// List<JsonData> newJsonData = new ArrayList<>();
|
|
|
-// for (JsonData jsonData : jsonDataList) {
|
|
|
-//// log.info("jsonData: {}", jsonData);
|
|
|
-// Double[] coordinates1 = new Double[2];
|
|
|
-// coordinates1[0] = queryJsonData.getLon();
|
|
|
-// coordinates1[1] = queryJsonData.getLat();
|
|
|
-//
|
|
|
-// Double[] coordinates2 = new Double[2];
|
|
|
-// coordinates2[0] = jsonData.getLocation()[0];
|
|
|
-// coordinates2[1] = jsonData.getLocation()[1];
|
|
|
-//
|
|
|
-// Double distance = DistanceUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
|
|
|
-//// log.info("计算出的距离:{}", distance);
|
|
|
-//
|
|
|
-// if (queryJsonData.getRadius() > distance) {
|
|
|
-// newJsonData.add(jsonData);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// return newJsonData;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 按最近距离排序
|
|
|
- * @param queryJsonData
|
|
|
- * @param jsonDataList
|
|
|
- * @return
|
|
|
- */
|
|
|
-// private List<JsonData> calcule_5(QueryJsonDataOne queryJsonData, List<JsonData> jsonDataList) {
|
|
|
-// log.info("run calcule");
|
|
|
-//// List<JsonData> newJsonData = new ArrayList<>();
|
|
|
-//
|
|
|
-//
|
|
|
-// // 计算距离后的结果集
|
|
|
-// Map<Double, JsonData> calResultMap = new HashMap<>();
|
|
|
-// for (JsonData jsonData : jsonDataList) {
|
|
|
-//// log.info("jsonData: {}", jsonData);
|
|
|
-// Double[] coordinates1 = new Double[2];
|
|
|
-// coordinates1[0] = queryJsonData.getLon();
|
|
|
-// coordinates1[1] = queryJsonData.getLat();
|
|
|
-//
|
|
|
-// Double[] coordinates2 = new Double[2];
|
|
|
-// coordinates2[0] = jsonData.getLocation()[0];
|
|
|
-// coordinates2[1] = jsonData.getLocation()[1];
|
|
|
-//
|
|
|
-//// Double distance = DistanceUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
|
|
|
-// Double distance = DistanceUtil.distance3(coordinates1, coordinates2);
|
|
|
-//// log.info("计算出的距离:{}", distance);
|
|
|
-//
|
|
|
-// if (queryJsonData.getRadius() > distance) {
|
|
|
-// // 缓存对象
|
|
|
-// calResultMap.put(distance, jsonData);
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 从小到大排序, 冒泡排序
|
|
|
-// List<Double> list = new ArrayList<>();
|
|
|
-// calResultMap.forEach((k,v) -> {
|
|
|
-// list.add(k);
|
|
|
-// });
|
|
|
-// log.info("排序前: {}", list);
|
|
|
-// // 升序排列
|
|
|
-// List<Double> collect = list.stream().sorted().collect(Collectors.toList());
|
|
|
-// log.info("排序后: {}", collect);
|
|
|
-//
|
|
|
-//
|
|
|
-// // 通过key获取对象
|
|
|
-// List<JsonData> result = new ArrayList<>();
|
|
|
-// collect.forEach(p -> {
|
|
|
-// result.add(calResultMap.get(p));
|
|
|
-// });
|
|
|
-//
|
|
|
-// return result;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 计算最小距离
|
|
|
- * @param queryJsonData
|
|
|
- * @param jsonDataList
|
|
|
- * @return 获取最小值对象
|
|
|
- */
|
|
|
-// private List<JsonData> calculeMin(QueryJsonDataOne queryJsonData, List<JsonData> jsonDataList) {
|
|
|
-// log.info("run calculeMin");
|
|
|
-// List<JsonData> newJsonData = new ArrayList<>();
|
|
|
-//
|
|
|
-// // 计算距离后的结果集
|
|
|
-// HashMap<Double, JsonData> calResultMap = new HashMap<>();
|
|
|
-//
|
|
|
-// int i = 1;
|
|
|
-// Double min = null;
|
|
|
-// for (JsonData jsonData : jsonDataList) {
|
|
|
-// Double[] coordinates1 = new Double[2];
|
|
|
-// coordinates1[0] = queryJsonData.getLon();
|
|
|
-// coordinates1[1] = queryJsonData.getLat();
|
|
|
-//
|
|
|
-// Double[] coordinates2 = new Double[2];
|
|
|
-// coordinates2[0] = jsonData.getLocation()[0];
|
|
|
-// coordinates2[1] = jsonData.getLocation()[1];
|
|
|
-//
|
|
|
-//// Double distance = DistanceUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
|
|
|
-// Double distance = DistanceUtil.distance3(coordinates1, coordinates2);
|
|
|
-//// log.info("计算出的距离:{}", distance);
|
|
|
-// // 默认取第一值
|
|
|
-// if (i==1) {
|
|
|
-// min = distance;
|
|
|
-// calResultMap.put(min, jsonData);
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (distance < min) {
|
|
|
-// min = distance;
|
|
|
-// calResultMap.put(min, jsonData);
|
|
|
-// }
|
|
|
-// i++;
|
|
|
-//
|
|
|
-// }
|
|
|
-//
|
|
|
-// log.info("循环次数:{}, 最小值:{}", i, min);
|
|
|
-// // 获取最小值
|
|
|
-// JsonData minJson = calResultMap.get(min);
|
|
|
-// newJsonData.add(minJson);
|
|
|
-// return newJsonData;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- /************************************ 2021-7-28 新接口********************************************/
|
|
|
- private FilterEntity findBySceneCode_5(String sceneCode){
|
|
|
- FilterEntity entity = filterMapper.findBySceneCode(sceneCode);
|
|
|
- return entity;
|
|
|
+ private FilterEntity findBySceneCode(String sceneCode){
|
|
|
+ Optional<FilterEntity> optional = filterMapper.findById(sceneCode);
|
|
|
+ return optional.get();
|
|
|
}
|
|
|
|
|
|
- private List<FilterHotDto> getDataBySceneCode_5(String sceneCode){
|
|
|
- FilterEntity entity = filterMapper.findBySceneCode(sceneCode);
|
|
|
+ private List<FilterHotDto> getDataBySceneCode(String sceneCode){
|
|
|
+ FilterEntity entity = findBySceneCode(sceneCode);
|
|
|
List<FilterHotDto> data = entity.getData();
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
|
|
|
-// private List<FilterHotDto> queryDataOne_5(QueryJsonDataOne queryJsonData, List<FilterHotDto> dbList) {
|
|
|
-// log.info("run queryDataOne");
|
|
|
-//
|
|
|
-// List<FilterHotDto> jsonDataList = new ArrayList<>();
|
|
|
-// Long siteModelEntityId = queryJsonData.getSiteModelEntity();
|
|
|
-//
|
|
|
-// //su 更改 7-21 18:18
|
|
|
-// if (siteModelEntityId != null) {
|
|
|
-// jsonDataList = dbList.stream().filter(p -> siteModelEntityId == p.getSite_model_entity_id().longValue()).collect(Collectors.toList());
|
|
|
-// }else{
|
|
|
-// jsonDataList = dbList;
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (queryJsonData.getZ() != null) {
|
|
|
-// jsonDataList = dbList.stream().filter(jsonData ->
|
|
|
-// jsonData.getLocation()[2] >= queryJsonData.getZ() && jsonData.getFloor_location()[2] <= queryJsonData.getZ())
|
|
|
-// .collect(Collectors.toList());
|
|
|
-// }
|
|
|
-//
|
|
|
-// List<FilterHotDto> newJsonData = new ArrayList<>();
|
|
|
-// // radius:半径
|
|
|
-// if (queryJsonData.getRadius() != null) {
|
|
|
-//// newJsonData = calcule(queryJsonData, jsonDataList);
|
|
|
-// newJsonData = calcule_5_1(queryJsonData, jsonDataList);
|
|
|
-// } else {
|
|
|
-// // 没有半径,算最近的距离
|
|
|
-// newJsonData = calculeMin_5(queryJsonData, jsonDataList);
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (queryJsonData.getLimit() != null) {
|
|
|
-// newJsonData = newJsonData.stream().limit(queryJsonData.getLimit()).collect(Collectors.toList());
|
|
|
-// }
|
|
|
-// return newJsonData;
|
|
|
-// }
|
|
|
-
|
|
|
- /**
|
|
|
- * 按最近距离排序
|
|
|
- * @param queryJsonData
|
|
|
- * @param jsonDataList
|
|
|
- * @return
|
|
|
- */
|
|
|
-// private List<FilterHotDto> calcule_5_1(QueryJsonDataOne queryJsonData, List<FilterHotDto> jsonDataList) {
|
|
|
-// log.info("run calcule");
|
|
|
-//// List<JsonData> newJsonData = new ArrayList<>();
|
|
|
-//
|
|
|
-//
|
|
|
-// // 计算距离后的结果集
|
|
|
-// Map<Double, FilterHotDto> calResultMap = new HashMap<>();
|
|
|
-// for (FilterHotDto jsonData : jsonDataList) {
|
|
|
-//// log.info("jsonData: {}", jsonData);
|
|
|
-// Double[] coordinates1 = new Double[2];
|
|
|
-// coordinates1[0] = queryJsonData.getLon();
|
|
|
-// coordinates1[1] = queryJsonData.getLat();
|
|
|
-//
|
|
|
-// Double[] coordinates2 = new Double[2];
|
|
|
-// coordinates2[0] = jsonData.getLocation()[0];
|
|
|
-// coordinates2[1] = jsonData.getLocation()[1];
|
|
|
-//
|
|
|
-// Double distance = DistanceUtil.distance3(coordinates1, coordinates2);
|
|
|
-//// log.info("计算出的距离:{}", distance);
|
|
|
-//
|
|
|
-// if (queryJsonData.getRadius() > distance) {
|
|
|
-// // 缓存对象
|
|
|
-// calResultMap.put(distance, jsonData);
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 从小到大排序, 冒泡排序
|
|
|
-// List<Double> list = new ArrayList<>();
|
|
|
-// calResultMap.forEach((k,v) -> {
|
|
|
-// list.add(k);
|
|
|
-// });
|
|
|
-// log.info("排序前: {}", list);
|
|
|
-// // 升序排列
|
|
|
-// List<Double> collect = list.stream().sorted().collect(Collectors.toList());
|
|
|
-// log.info("排序后: {}", collect);
|
|
|
-//
|
|
|
-//
|
|
|
-// // 通过key获取对象
|
|
|
-// List<FilterHotDto> result = new ArrayList<>();
|
|
|
-// collect.forEach(p -> {
|
|
|
-// result.add(calResultMap.get(p));
|
|
|
-// });
|
|
|
-//
|
|
|
-// return result;
|
|
|
-// }
|
|
|
|
|
|
|
|
|
- /**
|
|
|
- * 处理step step的值会有影响
|
|
|
- * 当step=null, 0, 1不做处理
|
|
|
- * @param queryJsonData
|
|
|
- * @param jsonDataList
|
|
|
- * @return
|
|
|
- */
|
|
|
-// private List<FilterHotDto> fillNewJsonData_5(QueryJsonDataTwo queryJsonData, List<FilterHotDto> jsonDataList) {
|
|
|
-// List<FilterHotDto> newJsonData = new ArrayList<>();
|
|
|
-// log.info("输入对象数量:{}", jsonDataList.size());
|
|
|
-// Integer inputStep = queryJsonData.getStep();
|
|
|
-// // 当inputStep为空、null、0、1 时返回全部数据
|
|
|
-// if (inputStep == null || inputStep==0 || inputStep==1) {
|
|
|
-// return jsonDataList;
|
|
|
-// }
|
|
|
-//
|
|
|
-// /**
|
|
|
-// * 当inputStep大于1, 数量为200, 隔多少步取一个点
|
|
|
-// * 2:100
|
|
|
-// * 3:67
|
|
|
-// * 4:50
|
|
|
-// *
|
|
|
-// */
|
|
|
-// int step = 0;
|
|
|
-// if (inputStep > 1) {
|
|
|
-// for (FilterHotDto jsonData : jsonDataList) {
|
|
|
-// if (step % inputStep == 0 || step == 0) {
|
|
|
-// newJsonData.add(jsonData);
|
|
|
-// }
|
|
|
-// step++;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// log.info("输出对象数量:{}", newJsonData.size());
|
|
|
-// return newJsonData;
|
|
|
-// }
|
|
|
-
|
|
|
-// private List<FilterHotDto> queryDataTwo_5(QueryJsonDataTwo queryJsonData , List<FilterHotDto> dbList) {
|
|
|
-// log.info("run queryDataTwo");
|
|
|
-//
|
|
|
-// List<FilterHotDto> jsonDataList = new ArrayList<>();
|
|
|
-// Long siteModelEntityId = queryJsonData.getSiteModelEntity();
|
|
|
-// if (siteModelEntityId != null) {
|
|
|
-// dbList = dbList.stream().filter(p -> siteModelEntityId == p.getSite_model_entity_id().longValue()).collect(Collectors.toList());
|
|
|
-// }
|
|
|
-// jsonDataList = dbList.stream().filter(jsonData ->
|
|
|
-// jsonData.getLocation()[0] >= queryJsonData.getLon_min() && jsonData.getLocation()[0] <= queryJsonData.getLon_max()
|
|
|
-// && jsonData.getLocation()[1] >= queryJsonData.getLat_min() && jsonData.getLocation()[1] <= queryJsonData.getLat_max())
|
|
|
-// .collect(Collectors.toList());
|
|
|
-//
|
|
|
-//// List<FilterHotDto> newJsonData = fillNewJsonData(queryJsonData, jsonDataList);
|
|
|
-// List<FilterHotDto> newJsonData = fillNewJsonData_5(queryJsonData, jsonDataList);
|
|
|
-//
|
|
|
-// return newJsonData;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
-// private List<FilterHotDto> filterJsonDataDetail_5_1(List<FilterHotDto> dbList, JsonDataDetailDto jsonDataDetailDto) {
|
|
|
-//// List<JsonData> dbList = findBySceneCode(code);
|
|
|
-//
|
|
|
-// Integer datasetId = jsonDataDetailDto.getDataset();
|
|
|
-// Integer siteModelEntityId = jsonDataDetailDto.getSite_model_entity();
|
|
|
-// Integer limit = jsonDataDetailDto.getLimit();
|
|
|
-// limit = limit==null ? 10 : limit;
|
|
|
-// Boolean hidden = jsonDataDetailDto.getHidden();
|
|
|
-// // 对应db 根据那个字段排序
|
|
|
-// String sortOrder = jsonDataDetailDto.getSort_order();
|
|
|
-// sortOrder = sortOrder==null ? null :sortOrder.toLowerCase();
|
|
|
-// // 升序还是降序
|
|
|
-// String sortBy = jsonDataDetailDto.getSort_by();
|
|
|
-// sortBy = sortBy==null ? null :sortBy.toLowerCase();
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-// // todo 这里的排序还需要处理一下, 如有异常看了hidden值
|
|
|
-//
|
|
|
-// Stream<FilterHotDto> dataStream = dbList.stream();
|
|
|
-// if (datasetId != null) {
|
|
|
-// dataStream = dataStream.filter(p -> datasetId.equals(p.getDataset_id()));
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (siteModelEntityId != null) {
|
|
|
-// dataStream = dataStream.filter(p -> siteModelEntityId.equals(p.getSite_model_entity_id()));
|
|
|
-// }
|
|
|
-//
|
|
|
-//
|
|
|
-// // 处理排序reversed()降序, 默认是升序
|
|
|
-// if ("desc".equals(sortBy) && "file_id".equals(sortOrder)) {
|
|
|
-// dataStream = dataStream.sorted(Comparator.comparing(FilterHotDto::getFile_id).reversed());
|
|
|
-// } else if ("asc".equals(sortBy) && "file_id".equals(sortOrder)){
|
|
|
-// dataStream = dataStream.sorted(Comparator.comparing(FilterHotDto::getFile_id));
|
|
|
-// }
|
|
|
-//
|
|
|
-// List<FilterHotDto> collect = dataStream.collect(Collectors.toList());
|
|
|
-//
|
|
|
-// log.info("返回数据数量: {}", collect.size());
|
|
|
-// return collect;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 计算最小距离
|
|
|
- * @return 获取最小值对象
|
|
|
- */
|
|
|
-// private List<FilterHotDto> calculeMin_5(QueryJsonDataOne queryJsonData, List<FilterHotDto> jsonDataList) {
|
|
|
-// log.info("run calculeMin");
|
|
|
-// List<FilterHotDto> newJsonData = new ArrayList<>();
|
|
|
-//
|
|
|
-// // 计算距离后的结果集
|
|
|
-// HashMap<Double, FilterHotDto> calResultMap = new HashMap<>();
|
|
|
-//
|
|
|
-// int i = 1;
|
|
|
-// Double min = null;
|
|
|
-// for (FilterHotDto jsonData : jsonDataList) {
|
|
|
-// Double[] coordinates1 = new Double[2];
|
|
|
-// coordinates1[0] = queryJsonData.getLon();
|
|
|
-// coordinates1[1] = queryJsonData.getLat();
|
|
|
-//
|
|
|
-// Double[] coordinates2 = new Double[2];
|
|
|
-// coordinates2[0] = jsonData.getLocation()[0];
|
|
|
-// coordinates2[1] = jsonData.getLocation()[1];
|
|
|
-//
|
|
|
-//// Double distance = DistanceUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
|
|
|
-// Double distance = DistanceUtil.distance3(coordinates1, coordinates2);
|
|
|
-//// log.info("计算出的距离:{}", distance);
|
|
|
-// // 默认取第一值
|
|
|
-// if (i==1) {
|
|
|
-// min = distance;
|
|
|
-// calResultMap.put(min, jsonData);
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (distance < min) {
|
|
|
-// min = distance;
|
|
|
-// calResultMap.put(min, jsonData);
|
|
|
-// }
|
|
|
-// i++;
|
|
|
-//
|
|
|
-// }
|
|
|
-//
|
|
|
-// log.info("循环次数:{}, 最小值:{}", i, min);
|
|
|
-// // 获取最小值
|
|
|
-// FilterHotDto minJson = calResultMap.get(min);
|
|
|
-// newJsonData.add(minJson);
|
|
|
-// return newJsonData;
|
|
|
-// }
|
|
|
|
|
|
|
|
|
@Override
|
|
|
- public Result findById_5(String sceneCode, Integer id) {
|
|
|
- FilterEntity entity = findBySceneCode_5(sceneCode);
|
|
|
+ public Result findById(String sceneCode, Integer id) {
|
|
|
+ FilterEntity entity = findBySceneCode(sceneCode);
|
|
|
List<FilterHotDto> data = entity.getData();
|
|
|
|
|
|
data = data.stream().filter(p -> id.equals(p.getId()))
|
|
@@ -760,11 +70,15 @@ public class FilterServiceImpl implements FilterService {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+ /**
|
|
|
+ * 条件查询
|
|
|
+ * @param code
|
|
|
+ * @param param
|
|
|
+ * @return
|
|
|
+ */
|
|
|
@Override
|
|
|
- public Result query_6(String code, FilterQueryDto param) {
|
|
|
- List<FilterHotDto> data = getDataBySceneCode_5(code);
|
|
|
+ public Result query(String code, FilterQueryDto param) {
|
|
|
+ List<FilterHotDto> data = getDataBySceneCode(code);
|
|
|
log.info("输入数量:{}", data.size());
|
|
|
|
|
|
// 过滤条件
|
|
@@ -778,15 +92,6 @@ public class FilterServiceImpl implements FilterService {
|
|
|
data = data.stream().filter(p -> site_model_entity.equals(p.getSite_model_entity_id())).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
- // 暂时不处理- 2021-08-02
|
|
|
-// Double z = param.getZ();
|
|
|
-// if (z != null) {
|
|
|
-// dataStream = dataStream.filter(p ->
|
|
|
-// p.getLocation()[2] >= z && p.getFloor_location()[2] <= z);
|
|
|
-// data = dataStream.collect(Collectors.toList());
|
|
|
-// log.info("z-输出数量:{}", data.size());
|
|
|
-// }
|
|
|
-
|
|
|
|
|
|
// 处理 lat, lon
|
|
|
Double lat = param.getLat();
|
|
@@ -795,10 +100,10 @@ public class FilterServiceImpl implements FilterService {
|
|
|
// 处理半径, radius:半径
|
|
|
Double radius = param.getRadius();
|
|
|
if (radius != null) {
|
|
|
- data = calcule_5_2(param, data);
|
|
|
+ data = calcule(param, data);
|
|
|
} else {
|
|
|
// 没有半径,算最近的距离, 返回值只有一天数据
|
|
|
- data = calculeMin_5_2(param, data);
|
|
|
+ data = calculeMin(param, data);
|
|
|
}
|
|
|
log.info("lat、lon-输出数量:{}", data.size());
|
|
|
}
|
|
@@ -852,6 +157,31 @@ public class FilterServiceImpl implements FilterService {
|
|
|
return Result.success(data);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Result update(String sceneCode, List<FilterHotDto> param) {
|
|
|
+ FilterEntity entity = findBySceneCode(sceneCode);
|
|
|
+ List<FilterHotDto> data = entity.getData();
|
|
|
+ log.info("db数据量: {}", data.size());
|
|
|
+
|
|
|
+ // 将热点id提取出来做过滤条件
|
|
|
+ List<Integer> argIds = param.stream().map(FilterHotDto::getId).collect(Collectors.toList());
|
|
|
+ log.info("参数id数量: {}", argIds.size());
|
|
|
+
|
|
|
+ data = data.stream().filter(p -> !argIds.contains(p.getId())).collect(Collectors.toList());
|
|
|
+ log.info("不需要更新的数据量: {}", data.size());
|
|
|
+
|
|
|
+ // 添加更新参数
|
|
|
+ data.addAll(param);
|
|
|
+ log.info("需要更新db数据量: {}", data.size());
|
|
|
+
|
|
|
+ // 更新db
|
|
|
+ entity.setUpdateTime(LocalDateTime.now());
|
|
|
+ entity.setData(data);
|
|
|
+ filterMapper.save(entity);
|
|
|
+
|
|
|
+ return Result.success();
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 处理step step的值会有影响
|
|
@@ -889,7 +219,7 @@ public class FilterServiceImpl implements FilterService {
|
|
|
}
|
|
|
|
|
|
|
|
|
- private List<FilterHotDto> calcule_5_2(FilterQueryDto queryJsonData, List<FilterHotDto> jsonDataList) {
|
|
|
+ private List<FilterHotDto> calcule(FilterQueryDto queryJsonData, List<FilterHotDto> jsonDataList) {
|
|
|
log.info("run calcule");
|
|
|
|
|
|
Double[] coordinates1 = new Double[3];
|
|
@@ -949,7 +279,7 @@ public class FilterServiceImpl implements FilterService {
|
|
|
* @param queryJsonData
|
|
|
* @return 获取最小值对象
|
|
|
*/
|
|
|
- private List<FilterHotDto> calculeMin_5_2(FilterQueryDto queryJsonData, List<FilterHotDto> jsonDataList) {
|
|
|
+ private List<FilterHotDto> calculeMin(FilterQueryDto queryJsonData, List<FilterHotDto> jsonDataList) {
|
|
|
log.info("run calculeMin");
|
|
|
List<FilterHotDto> newJsonData = new ArrayList<>();
|
|
|
|