|
@@ -2,7 +2,9 @@ package com.fdkankan.indoor.core.service.impl;
|
|
|
|
|
|
import com.fdkankan.indoor.base.util.JsonUtil.JsonUtil;
|
|
|
import com.fdkankan.indoor.base.util.JsonUtil.Options;
|
|
|
-import com.fdkankan.indoor.core.dto.QueryJsonData;
|
|
|
+import com.fdkankan.indoor.core.dto.QueryJsonDataBase;
|
|
|
+import com.fdkankan.indoor.core.dto.QueryJsonDataOne;
|
|
|
+import com.fdkankan.indoor.core.dto.QueryJsonDataTwo;
|
|
|
import com.fdkankan.indoor.core.entity.jsonData.JsonData;
|
|
|
import com.fdkankan.indoor.core.service.JsonDataService;
|
|
|
import lombok.AllArgsConstructor;
|
|
@@ -11,8 +13,11 @@ 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 org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Collection;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -26,13 +31,60 @@ public class JsonDataServiceImpl implements JsonDataService {
|
|
|
|
|
|
private final MongoTemplate mongoTemplate;
|
|
|
|
|
|
+
|
|
|
@Override
|
|
|
- public List<JsonData> filterJsonData(QueryJsonData queryJsonData) {
|
|
|
+ public List<JsonData> filterJsonData(QueryJsonDataBase data) {
|
|
|
+ List<JsonData> list;
|
|
|
+ if (data instanceof QueryJsonDataOne) {
|
|
|
+ QueryJsonDataOne one = (QueryJsonDataOne) data;
|
|
|
+ list = queryDataOne(one);
|
|
|
+ } else if (data instanceof QueryJsonDataTwo) {
|
|
|
+ QueryJsonDataTwo two = (QueryJsonDataTwo) data;
|
|
|
+ list = queryDataTwo(two);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("没有查询到数据,请检查入参");
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<JsonData> queryDataTwo(QueryJsonDataTwo queryJsonData) {
|
|
|
+ Query query = new Query();
|
|
|
+ if (queryJsonData.getSiteModelEntity() != null) {
|
|
|
+ query.addCriteria(Criteria.where("site_model_entity_id").is(queryJsonData.getSiteModelEntity()));
|
|
|
+ }
|
|
|
+ List<JsonData> jsonDataList = mongoTemplate.find(query, JsonData.class);
|
|
|
+
|
|
|
+ jsonDataList = jsonDataList.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;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<JsonData> fillNewJsonData(QueryJsonDataTwo queryJsonData, List<JsonData> jsonDataList) {
|
|
|
+ List<JsonData> newJsonData = new ArrayList<>();
|
|
|
+ int step = 0;
|
|
|
+ if (queryJsonData.getStep() != null) {
|
|
|
+ for (JsonData jsonData : jsonDataList) {
|
|
|
+ if (step % queryJsonData.getStep() == 0 || step == 0) {
|
|
|
+ newJsonData.add(jsonData);
|
|
|
+ }
|
|
|
+ step++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return newJsonData;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<JsonData> queryDataOne(QueryJsonDataOne queryJsonData) {
|
|
|
List<JsonData> newJsonData = new ArrayList<>();
|
|
|
Query query = new Query();
|
|
|
- if (queryJsonData.getSiteModelEntityId() != null) {
|
|
|
- query.addCriteria(Criteria.where("site_model_entity_id").is(queryJsonData.getSiteModelEntityId()));
|
|
|
+ if (queryJsonData.getSiteModelEntity() != null) {
|
|
|
+ query.addCriteria(Criteria.where("site_model_entity_id").is(queryJsonData.getSiteModelEntity()));
|
|
|
}
|
|
|
+ // todo
|
|
|
// if (queryJsonData.getZ() != null) {
|
|
|
// query.addCriteria(Criteria.where("location[3]")..lte(queryJsonData.getZ())
|
|
|
// .and("floor_location[3]").gte(queryJsonData.getZ()));
|
|
@@ -43,6 +95,21 @@ public class JsonDataServiceImpl implements JsonDataService {
|
|
|
jsonData.getLocation()[2] >= queryJsonData.getZ() && jsonData.getFloor_location()[2] <= queryJsonData.getZ())
|
|
|
.collect(Collectors.toList());
|
|
|
}
|
|
|
+
|
|
|
+ if (queryJsonData.getRadius() != null) {
|
|
|
+ newJsonData = calcule(queryJsonData, jsonDataList);
|
|
|
+ } else {
|
|
|
+ newJsonData.addAll(jsonDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (queryJsonData.getLimit() != null) {
|
|
|
+ newJsonData = newJsonData.stream().limit(queryJsonData.getLimit()).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ return newJsonData;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<JsonData> calcule(QueryJsonDataOne queryJsonData, List<JsonData> jsonDataList) {
|
|
|
+ List<JsonData> newJsonData = new ArrayList<>();
|
|
|
for (JsonData jsonData : jsonDataList) {
|
|
|
Double[] coordinates1 = new Double[2];
|
|
|
coordinates1[0] = queryJsonData.getLon();
|
|
@@ -52,14 +119,14 @@ public class JsonDataServiceImpl implements JsonDataService {
|
|
|
coordinates2[0] = jsonData.getLocation()[0];
|
|
|
coordinates2[1] = jsonData.getLocation()[1];
|
|
|
|
|
|
+ // todo
|
|
|
Double distance = JsonUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
|
|
|
if (queryJsonData.getRadius() > distance) {
|
|
|
newJsonData.add(jsonData);
|
|
|
}
|
|
|
}
|
|
|
- if (queryJsonData.getLimit() != null) {
|
|
|
- newJsonData = newJsonData.stream().limit(queryJsonData.getLimit()).collect(Collectors.toList());
|
|
|
- }
|
|
|
return newJsonData;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|