|
@@ -68,6 +68,15 @@ public class SiteModelServiceImpl implements SiteModelService {
|
|
public Result search(String sceneCode, SiteModelSearchDto searchDto) {
|
|
public Result search(String sceneCode, SiteModelSearchDto searchDto) {
|
|
|
|
|
|
List<SiteDto> data = getDataBySceneCode(sceneCode);
|
|
List<SiteDto> data = getDataBySceneCode(sceneCode);
|
|
|
|
+ // 2021-09-18
|
|
|
|
+ if (data.size() == 0) {
|
|
|
|
+ String msg = "siteModel表数据为空, 返回一个空数组";
|
|
|
|
+ log.info(msg);
|
|
|
|
+
|
|
|
|
+ return Result.success();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
SiteDto siteDto = data.get(0);
|
|
SiteDto siteDto = data.get(0);
|
|
|
|
|
|
List<SiteDto> loopModel = getLoopModel(siteDto);
|
|
List<SiteDto> loopModel = getLoopModel(siteDto);
|
|
@@ -87,6 +96,15 @@ public class SiteModelServiceImpl implements SiteModelService {
|
|
@Override
|
|
@Override
|
|
public Result latest(String sceneCode, Double[] location, Double radius) {
|
|
public Result latest(String sceneCode, Double[] location, Double radius) {
|
|
List<SiteDto> data = getDataBySceneCode(sceneCode);
|
|
List<SiteDto> data = getDataBySceneCode(sceneCode);
|
|
|
|
+
|
|
|
|
+ // 2021-09-18
|
|
|
|
+ if (data.size() == 0) {
|
|
|
|
+ String msg = "siteModel表数据为空, 返回一个空数组";
|
|
|
|
+ log.info(msg);
|
|
|
|
+
|
|
|
|
+ return Result.success();
|
|
|
|
+ }
|
|
|
|
+
|
|
SiteDto siteDto = data.get(0);
|
|
SiteDto siteDto = data.get(0);
|
|
// 递归为对象
|
|
// 递归为对象
|
|
List<SiteDto> loopModel = getLoopModel(siteDto);
|
|
List<SiteDto> loopModel = getLoopModel(siteDto);
|
|
@@ -106,38 +124,71 @@ public class SiteModelServiceImpl implements SiteModelService {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Result withinType(String sceneCode, Double[] location, String type) {
|
|
public Result withinType(String sceneCode, Double[] location, String type) {
|
|
- // 总对象
|
|
|
|
- List<SiteDto> models = new ArrayList<>();
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
List<SiteDto> resData = getDataBySceneCode(sceneCode);
|
|
List<SiteDto> resData = getDataBySceneCode(sceneCode);
|
|
|
|
+ // 2021-09-18
|
|
|
|
+ if (resData.size() == 0) {
|
|
|
|
+ String msg = "siteModel表数据为空, 返回一个空数组";
|
|
|
|
+ log.info(msg);
|
|
|
|
+
|
|
|
|
+ return Result.success();
|
|
|
|
+ }
|
|
SiteDto siteModel = resData.get(0);
|
|
SiteDto siteModel = resData.get(0);
|
|
|
|
|
|
// copy实体对象
|
|
// copy实体对象
|
|
SiteDto newSiteModel = copyModelNotContainChildren(siteModel);
|
|
SiteDto newSiteModel = copyModelNotContainChildren(siteModel);
|
|
|
|
+
|
|
|
|
+ // 总对象
|
|
|
|
+ List<SiteDto> models = new ArrayList<>();
|
|
|
|
+
|
|
// 做为父节点的低一条
|
|
// 做为父节点的低一条
|
|
models.add(newSiteModel);
|
|
models.add(newSiteModel);
|
|
if (!CollectionUtils.isEmpty(siteModel.getChildren())) {
|
|
if (!CollectionUtils.isEmpty(siteModel.getChildren())) {
|
|
organizeModels2(siteModel, models);
|
|
organizeModels2(siteModel, models);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 2021-09-18 将siteModel存在的类型添加
|
|
|
|
+ HashSet<String> setTypes = new HashSet<>();
|
|
|
|
+ for (SiteDto model : models) {
|
|
|
|
+ String cType = model.getType();
|
|
|
|
+ setTypes.add(cType.toUpperCase());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
// 按type封装成对象数组
|
|
// 按type封装成对象数组
|
|
List<SiteDto> resultList = new ArrayList<>();
|
|
List<SiteDto> resultList = new ArrayList<>();
|
|
SiteDto result = null;
|
|
SiteDto result = null;
|
|
|
|
|
|
|
|
+ ArrayList<Object> list = new ArrayList<>();
|
|
|
|
+
|
|
Point2D.Double pointParam = new Point2D.Double(location[0], location[1]);
|
|
Point2D.Double pointParam = new Point2D.Double(location[0], location[1]);
|
|
log.info("pointParam: {}", pointParam);
|
|
log.info("pointParam: {}", pointParam);
|
|
if ("BUILDING".equals(type)) {
|
|
if ("BUILDING".equals(type)) {
|
|
|
|
+ if (!setTypes.contains(type)) {
|
|
|
|
+ log.warn(type + ": 数据不存在,返回空数组");
|
|
|
|
+ return Result.success();
|
|
|
|
+ }
|
|
resultList = models.stream().filter(data -> "BUILDING".equals(data.getType())).collect(Collectors.toList());
|
|
resultList = models.stream().filter(data -> "BUILDING".equals(data.getType())).collect(Collectors.toList());
|
|
result = resultList.stream().filter(sm -> getSm(sm, pointParam)).findAny()
|
|
result = resultList.stream().filter(sm -> getSm(sm, pointParam)).findAny()
|
|
.orElseThrow(() -> new RuntimeException("没有找到符合多边形的点"));
|
|
.orElseThrow(() -> new RuntimeException("没有找到符合多边形的点"));
|
|
- } else if ("FLOOR".equals(type)) {
|
|
|
|
|
|
+ } else if ("FLOOR".equals(type) ) {
|
|
|
|
+ if (!setTypes.contains(type)) {
|
|
|
|
+ log.warn(type + ": 数据不存在,返回空数组");
|
|
|
|
+ return Result.success();
|
|
|
|
+ }
|
|
resultList = models.stream().filter(data -> "FLOOR".equals(data.getType())).collect(Collectors.toList());
|
|
resultList = models.stream().filter(data -> "FLOOR".equals(data.getType())).collect(Collectors.toList());
|
|
log.info("resultList.size: {}", resultList.size());
|
|
log.info("resultList.size: {}", resultList.size());
|
|
|
|
|
|
result = resultList.stream().filter(sm -> getSmByFloor(sm, pointParam)).findAny().orElseThrow(() -> new RuntimeException("没有找到符合多边形的点"));
|
|
result = resultList.stream().filter(sm -> getSmByFloor(sm, pointParam)).findAny().orElseThrow(() -> new RuntimeException("没有找到符合多边形的点"));
|
|
} else if ("ROOM".equals(type)) {
|
|
} else if ("ROOM".equals(type)) {
|
|
|
|
+ if (!setTypes.contains(type)) {
|
|
|
|
+ log.warn(type + ": 数据不存在,返回空数组");
|
|
|
|
+ return Result.success();
|
|
|
|
+ }
|
|
|
|
+
|
|
resultList = models.stream().filter(data -> "ROOM".equals(data.getType())).collect(Collectors.toList());
|
|
resultList = models.stream().filter(data -> "ROOM".equals(data.getType())).collect(Collectors.toList());
|
|
result = resultList.stream().filter(sm -> getSm(sm, pointParam)).findAny()
|
|
result = resultList.stream().filter(sm -> getSm(sm, pointParam)).findAny()
|
|
.orElseThrow(() -> new RuntimeException("没有找到符合多边形的点"));
|
|
.orElseThrow(() -> new RuntimeException("没有找到符合多边形的点"));
|
|
@@ -154,7 +205,7 @@ public class SiteModelServiceImpl implements SiteModelService {
|
|
}
|
|
}
|
|
|
|
|
|
log.info("result: {}", result);
|
|
log.info("result: {}", result);
|
|
- ArrayList<Object> list = new ArrayList<>();
|
|
|
|
|
|
+// ArrayList<Object> list = new ArrayList<>();
|
|
list.add(result);
|
|
list.add(result);
|
|
return Result.success(list);
|
|
return Result.success(list);
|
|
}
|
|
}
|
|
@@ -168,6 +219,9 @@ public class SiteModelServiceImpl implements SiteModelService {
|
|
|
|
|
|
|
|
|
|
List<SiteDto> resData = getDataBySceneCode(sceneCode);
|
|
List<SiteDto> resData = getDataBySceneCode(sceneCode);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
SiteDto siteModel = resData.get(0);
|
|
SiteDto siteModel = resData.get(0);
|
|
|
|
|
|
if (siteModel != null) {
|
|
if (siteModel != null) {
|
|
@@ -196,6 +250,16 @@ public class SiteModelServiceImpl implements SiteModelService {
|
|
@Override
|
|
@Override
|
|
public List<Integer> findBySceneCodeAndIdAndSon(String code, Integer site_model_entity) {
|
|
public List<Integer> findBySceneCodeAndIdAndSon(String code, Integer site_model_entity) {
|
|
List<SiteDto> data = getDataBySceneCode(code);
|
|
List<SiteDto> data = getDataBySceneCode(code);
|
|
|
|
+
|
|
|
|
+ // 2021-09-18
|
|
|
|
+ if (data.size() == 0) {
|
|
|
|
+ String msg = "siteModel表数据为空, 返回一个空数组";
|
|
|
|
+ log.info(msg);
|
|
|
|
+ return new ArrayList<>();
|
|
|
|
+
|
|
|
|
+// return Result.success();
|
|
|
|
+ }
|
|
|
|
+
|
|
// 递归为对象
|
|
// 递归为对象
|
|
SiteDto siteDto = data.get(0);
|
|
SiteDto siteDto = data.get(0);
|
|
List<Integer> result = new ArrayList<>();
|
|
List<Integer> result = new ArrayList<>();
|
|
@@ -295,7 +359,8 @@ public class SiteModelServiceImpl implements SiteModelService {
|
|
|
|
|
|
// 去掉房间数据
|
|
// 去掉房间数据
|
|
List<SiteDto> data = entity.getData();
|
|
List<SiteDto> data = entity.getData();
|
|
- recursionRemoveRoom(data);
|
|
|
|
|
|
+// recursionRemoveRoom(data);
|
|
|
|
+ data = removeRoom(data);
|
|
|
|
|
|
entity.setData(data);
|
|
entity.setData(data);
|
|
this.save(entity);
|
|
this.save(entity);
|
|
@@ -310,6 +375,8 @@ public class SiteModelServiceImpl implements SiteModelService {
|
|
/**
|
|
/**
|
|
* 2021-9-16
|
|
* 2021-9-16
|
|
* 处理dataSet.site_model_ids, 是否在site_model.z_min,z_max范围内,且去掉房间ids
|
|
* 处理dataSet.site_model_ids, 是否在site_model.z_min,z_max范围内,且去掉房间ids
|
|
|
|
+ *
|
|
|
|
+ * 2021-9-17 building只留一个楼层
|
|
*/
|
|
*/
|
|
private void executeDateSetBySetModelIds(String sceneCode, List<SiteDto> data){
|
|
private void executeDateSetBySetModelIds(String sceneCode, List<SiteDto> data){
|
|
DataSetEntity dataSetEntity = dataSetService.findById(sceneCode);
|
|
DataSetEntity dataSetEntity = dataSetService.findById(sceneCode);
|
|
@@ -340,6 +407,7 @@ public class SiteModelServiceImpl implements SiteModelService {
|
|
Double z_min = childFloor.getZ_min();
|
|
Double z_min = childFloor.getZ_min();
|
|
// 高度在该楼层范围之内
|
|
// 高度在该楼层范围之内
|
|
if (z_max > z && z > z_min) {
|
|
if (z_max > z && z > z_min) {
|
|
|
|
+ log.info("z_max:{}, z:{}, z_min:{}, id:{}", z_max, z, z_min, childFloor.getId());
|
|
siteModelIds.add(childFloor.getId());
|
|
siteModelIds.add(childFloor.getId());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -400,25 +468,51 @@ public class SiteModelServiceImpl implements SiteModelService {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
- * 2021-9-16
|
|
|
|
- * 递归方法遍历, 删除房间
|
|
|
|
|
|
+ * 1.删除房间
|
|
|
|
+ * 2.如果有多个楼层,删除多个楼层保留第一个
|
|
|
|
+ *
|
|
|
|
+ * @param param
|
|
*/
|
|
*/
|
|
- private void recursionRemoveRoom(List<SiteDto> param){
|
|
|
|
|
|
+ private List<SiteDto> removeRoom(List<SiteDto> param){
|
|
|
|
+
|
|
|
|
+ List<SiteDto> resSite = new ArrayList<>();
|
|
|
|
+
|
|
for (SiteDto dto : param) {
|
|
for (SiteDto dto : param) {
|
|
- // 递归调用
|
|
|
|
- List<SiteDto> children = dto.getChildren();
|
|
|
|
- if ("FLOOR".equals(dto.getType())){
|
|
|
|
- children = new ArrayList<>();
|
|
|
|
- dto.setChildren(children);
|
|
|
|
- }
|
|
|
|
- if (children.size() > 0) {
|
|
|
|
- recursionRemoveRoom(children);
|
|
|
|
|
|
+ List<SiteDto> childFloor = dto.getChildren();
|
|
|
|
+ // 只要一个楼层, 并情况房间
|
|
|
|
+ List<SiteDto> newFloors = new ArrayList<>();
|
|
|
|
+ if (childFloor.size() > 0) {
|
|
|
|
+ SiteDto siteDto = childFloor.get(0);
|
|
|
|
+ siteDto.setChildren(new ArrayList<>());
|
|
|
|
+ newFloors.add(siteDto);
|
|
|
|
+ dto.setChildren(newFloors);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ resSite.add(dto);
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
+ return resSite;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 2021-9-16
|
|
|
|
+ * 递归方法遍历, 删除房间
|
|
|
|
+ */
|
|
|
|
+// private void recursionRemoveRoom(List<SiteDto> param){
|
|
|
|
+//// for (SiteDto dto : param) {
|
|
|
|
+//// // 递归调用
|
|
|
|
+//// List<SiteDto> children = dto.getChildren();
|
|
|
|
+//// if ("FLOOR".equals(dto.getType())){
|
|
|
|
+//// children = new ArrayList<>();
|
|
|
|
+//// dto.setChildren(children);
|
|
|
|
+//// }
|
|
|
|
+//// if (children.size() > 0) {
|
|
|
|
+//// recursionRemoveRoom(children);
|
|
|
|
+//// }
|
|
|
|
+//// }
|
|
|
|
+//// }
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
// 判断的坐标在那个空间位置
|
|
// 判断的坐标在那个空间位置
|