Browse Source

大改版

wuweihao 4 years ago
parent
commit
f5b2ac8fe7

+ 0 - 1
COMMIT_EDITMSG

@@ -1 +0,0 @@
-首次提交123

+ 64 - 57
README.md

@@ -1,58 +1,65 @@
-# 德国相机
-    demo-url:
-    api:http://indoor.popsmart.cn:8084/sxswsw/api/site_model/within?location=120.58645186143931&location=29.991567318555767&location=1.1677126884460454&type=BUILDING
-    demo:http://indoor.popsmart.cn:8084/sxswsw-sx/
-        type 返回都是相应坐标的参数
-            BUILDING: 建筑物 -> 只返回建筑物数据
-            FLOOR: 楼层 -> 只返回楼层数据 - 多边形数据为null, 把找到坐标房间信息返回给前端
-            ROOM: 房间 -> 只返回房间数据
-            type=null -> 返回相应参数的建筑物.楼层.房间数据
-            
-            
-  服务器信息
-    /阿里云-四维时代-官网测试服务器-120.25.146.52/root/user/java/jar_run/
-    
-    
-    aip: http://127.0.0.1:9294/indoor/aa/api/images/1288 
-    221.4.210.172:9294/indoor/aa/api/images/1288    
-    
-    
-#API
-    https://testlaser.4dkankan.com/indoor/test1/api/site_model/within?location=120.58629809780416&location=29.991469096442984&location=2.050019474815037&type=FLOOR    
-    https://testlaser.4dkankan.com/indoor/test1/api/site_model/within?location=120.58629809780416&location=29.991469096442984&location=2.050019474815037&type=FLOOR  
-    
-    http://127.0.0.1:9294/indoor
-    https://testlaser.4dkankan.com/indoor
-    
-    http://indoor.popsmart.cn:8084/sxswsw/api/site_model/within?location=120.58629809780416&location=29.991469096442984&location=2.050019474815037&type=FLOOR
-    
-    
-    http://test.4dkankan.com:9294/indoor/{test1}/api/images/{id} 
-    
-    
-    # 测试计算最小距离
-    http://127.0.0.1:9294/indoor/test1/api/images/filter?hidden=false&lat=29.99150810503829&limit=1&lon=120.58627208336249&z=2.050019474815037 
-    
-    # 有半径的
-    http://127.0.0.1:9294/indoor/test2/api/images/filter?hidden=false&lat=22.3668029722544&lon=113.595671720124&radius=20&site_model_entity=
-    
-    
-# 日志
-    # 2021-07-15
-    这个接口还有问题:
-    https://testlaser.4dkankan.com/indoor/test1/api/images/filter?hidden=false&lat_max=29.99143363257292&lat_min=29.991244191301476&lon_max=120.5867345486961&lon_min=120.58598839339827&site_model_entity=2&site_model_entity=&spacing=1.56
-    
-    
-    https://testlaser.4dkankan.com/indoor/test1/api/images/filter?hidden=false&lat_max=29.99143363257292&lat_min=29.991244191301476&lon_max=120.5867345486961&lon_min=120.58598839339827&site_model_entity=2&site_model_entity=&step=4&spacing=1.56
-    
-    这两个接口,一个有值,一个没有,这个不应该,都应该有值才对。估计是没有step这个参数导致的,这里要改改,step可以没有。  
-    
-    
-    # 2021-07-16
-        filte查询接口, 测试过是成功的
-          http://127.0.0.1:9294/indoor/test1/api/filter/filter?dataset=45&hidden=false&limit=100&site_model_entity=17&sort_by=asc&sort_order=file_id
-    
-    
-# mongodb
-    导入数据是,嵌套数据的id不需要改成_id
+# 德国相机
+    demo-url:
+    api:http://indoor.popsmart.cn:8084/sxswsw/api/site_model/within?location=120.58645186143931&location=29.991567318555767&location=1.1677126884460454&type=BUILDING
+    demo:http://indoor.popsmart.cn:8084/sxswsw-sx/
+        type 返回都是相应坐标的参数
+            BUILDING: 建筑物 -> 只返回建筑物数据
+            FLOOR: 楼层 -> 只返回楼层数据 - 多边形数据为null, 把找到坐标房间信息返回给前端
+            ROOM: 房间 -> 只返回房间数据
+            type=null -> 返回相应参数的建筑物.楼层.房间数据
+            
+            
+  服务器信息
+    /阿里云-四维时代-官网测试服务器-120.25.146.52/root/user/java/jar_run/
+    
+    
+    aip: http://127.0.0.1:9294/indoor/aa/api/images/1288 
+    221.4.210.172:9294/indoor/aa/api/images/1288    
+    
+    
+#API
+    https://testlaser.4dkankan.com/indoor/test1/api/site_model/within?location=120.58629809780416&location=29.991469096442984&location=2.050019474815037&type=FLOOR    
+    https://testlaser.4dkankan.com/indoor/test1/api/site_model/within?location=120.58629809780416&location=29.991469096442984&location=2.050019474815037&type=FLOOR  
+    
+    http://127.0.0.1:9294/indoor
+    https://testlaser.4dkankan.com/indoor
+    
+    http://indoor.popsmart.cn:8084/sxswsw/api/site_model/within?location=120.58629809780416&location=29.991469096442984&location=2.050019474815037&type=FLOOR
+    
+    
+    http://test.4dkankan.com:9294/indoor/{test1}/api/images/{id} 
+    
+    
+    # 测试计算最小距离
+    http://127.0.0.1:9294/indoor/test1/api/images/filter?hidden=false&lat=29.99150810503829&limit=1&lon=120.58627208336249&z=2.050019474815037 
+    
+    # 有半径的
+    http://127.0.0.1:9294/indoor/test2/api/images/filter?hidden=false&lat=22.3668029722544&lon=113.595671720124&radius=20&site_model_entity=
+    
+    
+# 日志
+    # 2021-07-15
+    这个接口还有问题:
+    https://testlaser.4dkankan.com/indoor/test1/api/images/filter?hidden=false&lat_max=29.99143363257292&lat_min=29.991244191301476&lon_max=120.5867345486961&lon_min=120.58598839339827&site_model_entity=2&site_model_entity=&spacing=1.56
+    
+    
+    https://testlaser.4dkankan.com/indoor/test1/api/images/filter?hidden=false&lat_max=29.99143363257292&lat_min=29.991244191301476&lon_max=120.5867345486961&lon_min=120.58598839339827&site_model_entity=2&site_model_entity=&step=4&spacing=1.56
+    
+    这两个接口,一个有值,一个没有,这个不应该,都应该有值才对。估计是没有step这个参数导致的,这里要改改,step可以没有。  
+    
+    
+    # 2021-07-16
+        filte查询接口, 测试过是成功的
+          http://127.0.0.1:9294/indoor/test1/api/filter/filter?dataset=45&hidden=false&limit=100&site_model_entity=17&sort_by=asc&sort_order=file_id
+    
+    
+# mongodb
+    导入数据是,嵌套数据的id不需要改成_id
+    
+    导入list数据, 在192.168.0.47服务器操作
+    docker cp /root/user/owen/filter3.json mongo:/root/filter3.json
+    docker exec -it mongo /bin/sh
+    mongoimport --authenticationDatabase=json_data --username=4dage --password=1234  --collection=json_data_3 --db=json_data --jsonArray /root/filter3.json
+    
+    嵌套实体对象, 如果要使用id, 需要录入数据库时把id -> _id
              

+ 0 - 13
config

@@ -1,13 +0,0 @@
-[core]
-	repositoryformatversion = 0
-	filemode = false
-	bare = false
-	logallrefupdates = true
-	symlinks = false
-	ignorecase = true
-[remote "origin"]
-	url = http://192.168.0.115:3000/zhujinghui/sxswsw.git
-	fetch = +refs/heads/*:refs/remotes/origin/*
-[branch "master"]
-	remote = origin
-	merge = refs/heads/master

+ 0 - 1
description

@@ -1 +0,0 @@
-Unnamed repository; edit this file 'description' to name the repository.

+ 23 - 7
laser/src/main/java/com/fdkankan/indoor/core/controller/FilterController.java

@@ -19,6 +19,8 @@ import java.util.List;
 
 /**
  * Created by owen on 2021/7/15 0015 15:58
+ *
+ * filter表需要实体映射,需要把id -> _id
  */
 @Slf4j
 @Api(tags = "filter数据接口")
@@ -28,24 +30,38 @@ public class FilterController {
     @Autowired
     FilterService filterService;
 
+    /**
+     * http://127.0.0.1:9294/indoor/test3/api/images/1
+     * @param sceneCode
+     * @param id
+     * @return
+     */
     @WebControllerLog(description = "根据id获取数据")
     @ApiOperation(value = "根据id获取数据")
-    @GetMapping("indoor/{sceneCode}/api/filter/{id}")
-    public JsonData getDataById(@PathVariable String sceneCode, @PathVariable Integer id) {
+    @GetMapping("indoor/{sceneCode}/api/images/{id}")
+    public Object getDataById(@PathVariable String sceneCode, @PathVariable Integer id) {
         log.info("sceneCode: {}", sceneCode);
         Result result = filterService.findById(sceneCode, id);
-        return (JsonData)result.getData();
+        return result.getData();
     }
 
-
+    /**
+     * http://127.0.0.1:9294/indoor/test1/api/images/filter?dataset=56&hidden=false&limit=100&sort_by=FILE_ID&sort_order=ASC
+     * http://127.0.0.1:9294/indoor/test1/api/filter/filter?dataset=56&hidden=false&limit=100&sort_by=FILE_ID&sort_order=ASC
+     * @param code
+     * @param queryJsonDataOne
+     * @param queryJsonDataTwo
+     * @param jsonDataDetailDto
+     * @return
+     */
     @WebControllerLog(description = "filter查询接口")
     @ApiOperation(value = "filter查询接口")
-    @GetMapping("indoor/{code}/api/filter/filter")
-    public List<JsonData> filter(@PathVariable String code,
+    @GetMapping("indoor/{code}/api/images/filter")
+    public Object filter(@PathVariable String code,
                                  QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo, JsonDataDetailDto jsonDataDetailDto) {
         Result result = filterService.query(code, queryJsonDataOne, queryJsonDataTwo, jsonDataDetailDto);
 
-        return (List<JsonData>)result.getData();
+        return result.getData();
     }
 
 

+ 92 - 92
laser/src/main/java/com/fdkankan/indoor/core/controller/JsonDataController.java

@@ -1,92 +1,92 @@
-package com.fdkankan.indoor.core.controller;
-
-import cn.hutool.core.bean.BeanUtil;
-import com.fdkankan.indoor.core.dto.JsonDataDetailDto;
-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.JsonData2Service;
-import com.fdkankan.indoor.core.service.JsonDataService;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.ValidationUtils;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Admin
- */
-@Slf4j
-@Api(tags = "jsonData数据接口")
-@RestController
-@AllArgsConstructor
-public class JsonDataController {
-
-
-
-    @Autowired
-    JsonData2Service jsonData2Service;
-
-
-
-
-    /**
-     * 测试api
-     * http://127.0.0.1:9294/indoor/test1/api/images/filter?dataset=56&hidden=false&limit=100&sort_by=FILE_ID&sort_order=ASC
-     * @param queryJsonDataOne 坐标参数
-     * @param queryJsonDataTwo 距离参数
-     * @param jsonDataDetailDto 距离参数
-     * @return
-     */
-    @ApiOperation(value = "(正)json数据")
-    @ApiOperationSupport(order = 1)
-    @GetMapping("indoor/{code}/api/images/filter")
-    public List<JsonData> filter(@PathVariable String code,
-                                 QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo, JsonDataDetailDto jsonDataDetailDto) {
-        log.info("one: {}", BeanUtil.isEmpty(queryJsonDataOne));
-        log.info("two: {}", BeanUtil.isEmpty(queryJsonDataTwo));
-        if (queryJsonDataOne.getLat() != null || queryJsonDataTwo.getLat_max() != null){
-            QueryJsonDataBase data = switchQueryData(queryJsonDataOne, queryJsonDataTwo);
-            return  jsonData2Service.filterJsonData(code, data);
-        }
-
-        if (jsonDataDetailDto != null){
-            return jsonData2Service.filterJsonDataDetail(code, jsonDataDetailDto);
-        }
-
-        return null;
-    }
-
-
-    @ApiOperation(value = "(正)根据id获取数据")
-    @ApiOperationSupport(order = 1)
-    @GetMapping("indoor/{code}/api/images/{id}")
-    public JsonData getDataById(@PathVariable String code, @PathVariable String id) {
-        log.info("code: {}", code);
-        return jsonData2Service.findById(id, code);
-    }
-
-
-    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;
-    }
-
-
-}
+//package com.fdkankan.indoor.core.controller;
+//
+//import cn.hutool.core.bean.BeanUtil;
+//import com.fdkankan.indoor.core.dto.JsonDataDetailDto;
+//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.JsonData2Service;
+//import com.fdkankan.indoor.core.service.JsonDataService;
+//import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+//import io.swagger.annotations.Api;
+//import io.swagger.annotations.ApiOperation;
+//import lombok.AllArgsConstructor;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.validation.ValidationUtils;
+//import org.springframework.web.bind.annotation.GetMapping;
+//import org.springframework.web.bind.annotation.PathVariable;
+//import org.springframework.web.bind.annotation.RestController;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//
+///**
+// * @author Admin
+// */
+//@Slf4j
+//@Api(tags = "jsonData数据接口")
+//@RestController
+//@AllArgsConstructor
+//public class JsonDataController {
+//
+//
+//
+//    @Autowired
+//    JsonData2Service jsonData2Service;
+//
+//
+//
+//
+//    /**
+//     * 测试api
+//     * http://127.0.0.1:9294/indoor/test1/api/images/filter?dataset=56&hidden=false&limit=100&sort_by=FILE_ID&sort_order=ASC
+//     * @param queryJsonDataOne 坐标参数
+//     * @param queryJsonDataTwo 距离参数
+//     * @param jsonDataDetailDto 距离参数
+//     * @return
+//     */
+//    @ApiOperation(value = "(正)json数据")
+//    @ApiOperationSupport(order = 1)
+//    @GetMapping("indoor/{code}/api/images/filter")
+//    public List<JsonData> filter(@PathVariable String code,
+//                                 QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo, JsonDataDetailDto jsonDataDetailDto) {
+//        log.info("one: {}", BeanUtil.isEmpty(queryJsonDataOne));
+//        log.info("two: {}", BeanUtil.isEmpty(queryJsonDataTwo));
+//        if (queryJsonDataOne.getLat() != null || queryJsonDataTwo.getLat_max() != null){
+//            QueryJsonDataBase data = switchQueryData(queryJsonDataOne, queryJsonDataTwo);
+//            return  jsonData2Service.filterJsonData(code, data);
+//        }
+//
+//        if (jsonDataDetailDto != null){
+//            return jsonData2Service.filterJsonDataDetail(code, jsonDataDetailDto);
+//        }
+//
+//        return null;
+//    }
+//
+//
+//    @ApiOperation(value = "(正)根据id获取数据")
+//    @ApiOperationSupport(order = 1)
+//    @GetMapping("indoor/{code}/api/images/{id}")
+//    public JsonData getDataById(@PathVariable String code, @PathVariable String id) {
+//        log.info("code: {}", code);
+//        return jsonData2Service.findById(id, code);
+//    }
+//
+//
+//    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;
+//    }
+//
+//
+//}

+ 118 - 115
laser/src/main/java/com/fdkankan/indoor/core/controller/SiteModelController.java

@@ -1,115 +1,118 @@
-package com.fdkankan.indoor.core.controller;
-
-import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.indoor.base.aop.WebControllerLog;
-import com.fdkankan.indoor.base.util.Result;
-import com.fdkankan.indoor.core.dto.SiteModelSearchDto;
-import com.fdkankan.indoor.core.entity.siteModel.SiteModel;
-import com.fdkankan.indoor.core.service.SiteModel2Service;
-import com.fdkankan.indoor.core.service.TsiteModelService;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author Admin
- *
- * http://127.0.0.1:9294/indoor/
- */
-@Slf4j
-@Api(tags = "SiteModel数据接口")
-@RestController
-@AllArgsConstructor
-public class SiteModelController {
-
-
-    @Autowired
-    SiteModel2Service siteModel2Service;
-
-    @Autowired
-    TsiteModelService tsiteModelService;
-
-
-    /**
-     * http://127.0.0.1:9294/indoor/test1/api/site_model/within?location=120.58645186143931&location=29.991567318555767&location=1.1677126884460454&type=FLOOR
-     * http://127.0.0.1:9294/indoor/test2/api/site_model/within?location=113.595542719717&location=22.366858049261&location=-0.299806&type=FLOOR
-     * @param code
-     * @param location
-     * @param type
-     * @return
-     */
-    @ApiOperation(value = "(正)siteModel数据")
-    @ApiOperationSupport(order = 2)
-    @GetMapping("indoor/{code}/api/site_model/within")
-    //todo
-    public SiteModel within2(@PathVariable String code, Double[] location, String type) {
-        log.info("code: {}", code);
-        return siteModel2Service.withinType(code, location, type);
-    }
-
-
-
-    @ApiOperation(value = "(正)根据id获取数据")
-    @ApiOperationSupport(order = 1)
-    @GetMapping("indoor/{code}/api/site_model/{id}")
-    public SiteModel getDataById(@PathVariable String code, @PathVariable Long id) {
-        log.info("code: {}", code);
-        return siteModel2Service.findById(id, code);
-    }
-
-
-    @WebControllerLog(description = "SiteModel数据接口-获取building数据")
-    @ApiOperation(value = "获取building数据",notes = "参数直接传个json对象")
-    @PostMapping("indoor/{code}/api/site_model/within_polygon")
-    public Result getData(@RequestBody JSONObject param, @PathVariable String code) {
-        return siteModel2Service.getData(param, code);
-//        return Result.success(param);
-    }
-
-
-    /**
-     * 2021-07-16
-     * 参考api: http://indoor.popsmart.cn:8094/zdoblh/api/search/site_model?from=0&lang=zh&query=%E6%88%BF%E9%97%B4&size=5
-     *
-     * 测试:
-     * http://127.0.0.1:9294/indoor/test1/api/search/site_model?from=0&lang=zh&query=%E4%B8%80%E6%A5%BC&size=5
-     * @return
-     */
-    @WebControllerLog(description = "SiteModel查询")
-    @ApiOperation(value = "查询",notes = "参数直接传个json对象")
-    @GetMapping("indoor/{sceneCode}/api/search/site_model")
-    public Object search(@PathVariable String sceneCode, SiteModelSearchDto searchDto) {
-        Result search = siteModel2Service.search(sceneCode, searchDto);
-        return search.getData();
-//        return siteModel2Service.search(sceneCode, searchDto);
-    }
-
-
-    /**
-     * 2021-07-16
-     * 参考: http://indoor.popsmart.cn:8094/zdoblh/api/site_model/closest?location=121.61088492160654&location=29.8770318786046&location=0.6624369924962523&radius=0.01
-     *
-     * 测试api
-     *
-     * http://127.0.0.1:9294/indoor/test2/api/site_model/closest?location=113.595495811839&location=22.3668188213553&location=0.6624369924962523&radius=0.01
-     * location1=x
-     * location2=y
-     * location3=z 这个值目前还没判断
-     * radius: 半径
-     * @return
-     */
-    @WebControllerLog(description = "找最近的点")
-    @ApiOperation(value = "查询",notes = "参数直接传个json对象")
-    @GetMapping("indoor/{sceneCode}/api/site_model/closest")
-    public Object latest(@PathVariable String sceneCode, Double[] location, Double radius) {
-        Result search = siteModel2Service.latest(sceneCode, location, radius);
-        return search.getData();
-//        return siteModel2Service.search(sceneCode, searchDto);
-    }
-
-
-}
+//package com.fdkankan.indoor.core.controller;
+//
+//import com.alibaba.fastjson.JSONObject;
+//import com.fdkankan.indoor.base.aop.WebControllerLog;
+//import com.fdkankan.indoor.base.util.Result;
+//import com.fdkankan.indoor.core.dto.SiteModelSearchDto;
+//import com.fdkankan.indoor.core.entity.siteModel.SiteModel;
+//import com.fdkankan.indoor.core.service.SiteModel2Service;
+//import com.fdkankan.indoor.core.service.TsiteModelService;
+//import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+//import io.swagger.annotations.Api;
+//import io.swagger.annotations.ApiOperation;
+//import lombok.AllArgsConstructor;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.web.bind.annotation.*;
+//
+///**
+// * @author Admin
+// *
+// * http://127.0.0.1:9294/indoor/
+// */
+//@Slf4j
+//@Api(tags = "SiteModel数据接口")
+//@RestController
+//@AllArgsConstructor
+//public class SiteModelController {
+//
+//
+//    @Autowired
+//    SiteModel2Service siteModel2Service;
+//
+////    @Autowired
+////    TsiteModelService tsiteModelService;
+//
+//
+//    /**
+//     * http://127.0.0.1:9294/indoor/test1/api/site_model/within?location=120.58645186143931&location=29.991567318555767&location=1.1677126884460454&type=FLOOR
+//     * http://127.0.0.1:9294/indoor/test2/api/site_model/within?location=113.595542719717&location=22.366858049261&location=-0.299806&type=FLOOR
+//     *
+//     * https://testlaser.4dkankan.com/indoor
+//     *
+//     * https://testlaser.4dkankan.com/indoor/test2/api/site_model/within?location=113.595542719717&location=22.366858049261&location=-0.299806&type=FLOOR
+//     * @param code
+//     * @param location
+//     * @param type
+//     * @return
+//     */
+//    @ApiOperation(value = "(正)siteModel数据")
+//    @GetMapping("indoor/{code}/api/site_model/within")
+//    public Object within(@PathVariable String code, Double[] location, String type) {
+//        log.info("code: {}", code);
+//        Result result = siteModel2Service.withinType(code, location, type);
+//        return result.getData();
+//    }
+//
+//
+//
+//    @ApiOperation(value = "(正)根据id获取数据")
+//    @ApiOperationSupport(order = 1)
+//    @GetMapping("indoor/{code}/api/site_model/{id}")
+//    public SiteModel getDataById(@PathVariable String code, @PathVariable Long id) {
+//        log.info("code: {}", code);
+//        return siteModel2Service.findById(id, code);
+//    }
+//
+//
+//    @WebControllerLog(description = "SiteModel数据接口-获取building数据")
+//    @ApiOperation(value = "获取building数据",notes = "参数直接传个json对象")
+//    @PostMapping("indoor/{code}/api/site_model/within_polygon")
+//    public Result getData(@RequestBody JSONObject param, @PathVariable String code) {
+//        return siteModel2Service.getData(param, code);
+////        return Result.success(param);
+//    }
+//
+//
+//    /**
+//     * 2021-07-16
+//     * 参考api: http://indoor.popsmart.cn:8094/zdoblh/api/search/site_model?from=0&lang=zh&query=%E6%88%BF%E9%97%B4&size=5
+//     *
+//     * 测试:
+//     * http://127.0.0.1:9294/indoor/test1/api/search/site_model?from=0&lang=zh&query=%E4%B8%80%E6%A5%BC&size=5
+//     * @return
+//     */
+//    @WebControllerLog(description = "SiteModel查询")
+//    @ApiOperation(value = "查询",notes = "参数直接传个json对象")
+//    @GetMapping("indoor/{sceneCode}/api/search/site_model")
+//    public Object search(@PathVariable String sceneCode, SiteModelSearchDto searchDto) {
+//        Result search = siteModel2Service.search(sceneCode, searchDto);
+//        return search.getData();
+////        return siteModel2Service.search(sceneCode, searchDto);
+//    }
+//
+//
+//    /**
+//     * 2021-07-16
+//     * 参考: http://indoor.popsmart.cn:8094/zdoblh/api/site_model/closest?location=121.61088492160654&location=29.8770318786046&location=0.6624369924962523&radius=0.01
+//     *
+//     * 测试api
+//     *
+//     * http://127.0.0.1:9294/indoor/test2/api/site_model/closest?location=113.595495811839&location=22.3668188213553&location=0.6624369924962523&radius=0.01
+//     * location1=x
+//     * location2=y
+//     * location3=z 这个值目前还没判断
+//     * radius: 半径
+//     * @return
+//     */
+//    @WebControllerLog(description = "找最近的点")
+//    @ApiOperation(value = "查询",notes = "参数直接传个json对象")
+//    @GetMapping("indoor/{sceneCode}/api/site_model/closest")
+//    public Object latest(@PathVariable String sceneCode, Double[] location, Double radius) {
+//        Result search = siteModel2Service.latest(sceneCode, location, radius);
+//        return search.getData();
+////        return siteModel2Service.search(sceneCode, searchDto);
+//    }
+//
+//
+//}

+ 127 - 0
laser/src/main/java/com/fdkankan/indoor/core/controller/TSiteModelController.java

@@ -0,0 +1,127 @@
+package com.fdkankan.indoor.core.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.indoor.base.aop.WebControllerLog;
+import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.dto.SiteModelSearchDto;
+import com.fdkankan.indoor.core.entity.siteModel.SiteModel;
+import com.fdkankan.indoor.core.service.SiteModel2Service;
+import com.fdkankan.indoor.core.service.TSiteModel2Service;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author Admin
+ *
+ * http://127.0.0.1:9294/indoor/
+ *
+ * 2021-07-20
+ * site_model.json的原始数据是数组, 目前存数据库是对象
+ */
+@Slf4j
+@Api(tags = "TSiteModel数据接口")
+@RestController
+@AllArgsConstructor
+public class TSiteModelController {
+
+
+    @Autowired
+    TSiteModel2Service tSiteModel2Service;
+
+
+    /**
+     * http://127.0.0.1:9294/indoor/test1/api/site_model/within?location=120.58645186143931&location=29.991567318555767&location=1.1677126884460454&type=FLOOR
+     * http://127.0.0.1:9294/indoor/test2/api/site_model/within?location=113.595542719717&location=22.366858049261&location=-0.299806&type=FLOOR
+     *
+     * https://testlaser.4dkankan.com/indoor
+     *
+     * https://testlaser.4dkankan.com/indoor/test2/api/site_model/within?location=113.595542719717&location=22.366858049261&location=-0.299806&type=FLOOR
+     * @param code
+     * @param location
+     * @param type
+     * @return
+     */
+    @ApiOperation(value = "(正)siteModel数据")
+    @GetMapping("indoor/{code}/api/site_model/within")
+    public Object within(@PathVariable String code, Double[] location, String type) {
+        log.info("code: {}", code);
+        Result result = tSiteModel2Service.withinType(code, location, type);
+        return result.getData();
+    }
+
+
+
+    @ApiOperation(value = "(正)根据id获取数据")
+    @ApiOperationSupport(order = 1)
+    @GetMapping("indoor/{code}/api/site_model/{id}")
+    public SiteModel getDataById(@PathVariable String code, @PathVariable Long id) {
+        log.info("code: {}", code);
+        return tSiteModel2Service.findById(id, code);
+    }
+
+
+    @WebControllerLog(description = "SiteModel数据接口-获取building数据")
+    @ApiOperation(value = "获取building数据",notes = "参数直接传个json对象")
+    @PostMapping("indoor/{code}/api/site_model/within_polygon")
+    public Result getData(@RequestBody JSONObject param, @PathVariable String code) {
+        return tSiteModel2Service.getData(param, code);
+//        return Result.success(param);
+    }
+
+
+    /**
+     * 2021-07-16
+     * 参考api: http://indoor.popsmart.cn:8094/zdoblh/api/search/site_model?from=0&lang=zh&query=%E6%88%BF%E9%97%B4&size=5
+     *
+     * 测试:
+     * http://127.0.0.1:9294/indoor/test1/api/search/site_model?from=0&lang=zh&query=%E4%B8%80%E6%A5%BC&size=5
+     * @return
+     */
+    @WebControllerLog(description = "SiteModel查询")
+    @ApiOperation(value = "查询",notes = "参数直接传个json对象")
+    @GetMapping("indoor/{sceneCode}/api/search/site_model")
+    public Object search(@PathVariable String sceneCode, SiteModelSearchDto searchDto) {
+        Result search = tSiteModel2Service.search(sceneCode, searchDto);
+        return search.getData();
+//        return siteModel2Service.search(sceneCode, searchDto);
+    }
+
+
+    /**
+     * 2021-07-16
+     * 参考: http://indoor.popsmart.cn:8094/zdoblh/api/site_model/closest?location=121.61088492160654&location=29.8770318786046&location=0.6624369924962523&radius=0.01
+     *
+     * 测试api
+     *
+     * http://127.0.0.1:9294/indoor/test2/api/site_model/closest?location=113.595495811839&location=22.3668188213553&location=0.6624369924962523&radius=0.01
+     * location1=x
+     * location2=y
+     * location3=z 这个值目前还没判断
+     * radius: 半径
+     * @return
+     */
+    @WebControllerLog(description = "找最近的点")
+    @ApiOperation(value = "查询",notes = "参数直接传个json对象")
+    @GetMapping("indoor/{sceneCode}/api/site_model/closest")
+    public Object latest(@PathVariable String sceneCode, Double[] location, Double radius) {
+        Result search = tSiteModel2Service.latest(sceneCode, location, radius);
+        return search.getData();
+//        return siteModel2Service.search(sceneCode, searchDto);
+    }
+
+
+    @WebControllerLog(description = "测试获取对象")
+    @ApiOperation(value = "测试获取对象",notes = "参数直接传个json对象")
+    @GetMapping("indoor/{sceneCode}/api/site_model/testData")
+    public Object latest(@PathVariable String sceneCode) {
+        Result search = tSiteModel2Service.testData(sceneCode);
+        return search.getData();
+//        return siteModel2Service.search(sceneCode, searchDto);
+    }
+
+}

+ 2 - 1
laser/src/main/java/com/fdkankan/indoor/core/entity/jsonData/FilterEntity.java

@@ -18,9 +18,10 @@ import java.util.List;
 public class FilterEntity implements Serializable {
 
     private static final long serialVersionUID = 2974313673840996620L;
-    private Long id;
+    private Integer id;
 
     private String sceneCode;
 
+    // mongodb实体映射,存入数据库的id -> _id
     private List<JsonData> data;
 }

+ 3 - 1
laser/src/main/java/com/fdkankan/indoor/core/entity/siteModel/SiteModel.java

@@ -8,6 +8,7 @@ import org.springframework.data.annotation.Transient;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -34,7 +35,8 @@ public class SiteModel implements Serializable {
     private Double area;
     private Double volume;
     private Long geometry_hash;
-    private List<SiteModel> children;
+//    private List<SiteModel> children ;
+    private List<SiteModel> children = new ArrayList<>();
 
     // 父级id, 后端需要,前端不用
     @Transient

+ 2 - 2
laser/src/main/java/com/fdkankan/indoor/core/service/SiteModel2Service.java

@@ -10,9 +10,9 @@ import com.fdkankan.indoor.core.entity.siteModel.SiteModel;
  */
 public interface SiteModel2Service {
 
-    SiteModel within(Double[] location, String type);
 
-    SiteModel withinType(String code, Double[] location, String type);
+
+    Result withinType(String code, Double[] location, String type);
 
     SiteModel findById(Long id, String code);
 

+ 26 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/TSiteModel2Service.java

@@ -0,0 +1,26 @@
+package com.fdkankan.indoor.core.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.dto.SiteModelSearchDto;
+import com.fdkankan.indoor.core.entity.siteModel.SiteModel;
+
+/**
+ * @author Admin
+ */
+public interface TSiteModel2Service {
+
+
+
+    Result withinType(String code, Double[] location, String type);
+
+    SiteModel findById(Long id, String code);
+
+    Result getData(JSONObject param, String code);
+
+    Result search(String sceneCode, SiteModelSearchDto searchDto);
+
+    Result latest(String sceneCode, Double[] location, Double radius);
+
+    Result testData(String sceneCode);
+}

+ 130 - 101
laser/src/main/java/com/fdkankan/indoor/core/service/impl/FilterServiceImpl.java

@@ -69,13 +69,6 @@ public class FilterServiceImpl implements FilterService {
         Query query = new Query();
         query.addCriteria(Criteria.where("sceneCode").is(sceneCode).and("data.file_id").is("00004"));
 
-//        BasicDBObject queryObject = new BasicDBObject();
-//        queryObject.put("data._id",1);
-//
-//        DBObject fields = new BasicDBObject();
-//        fields.put("_id",true);
-//        fields.put("dataset_id",true);
-
         FilterEntity entity = mongoTemplate.findOne(query, FilterEntity.class);
         List<JsonData> data = entity.getData();
 
@@ -83,18 +76,25 @@ public class FilterServiceImpl implements FilterService {
     }
 
 
-    private List<Document> flowGruop(){
-        Criteria criteria = Criteria.where("sceneCode").is("test2");
-        Aggregation agg = Aggregation.newAggregation(
-                Aggregation.match(criteria),
-                Aggregation.group("data").first("data").as("data").count().as("count")
-        );
-
-        AggregationResults<Document> aggregate = mongoTemplate.aggregate(agg, FilterEntity.class, Document.class);
-        return aggregate.getMappedResults();
+    /**
+     * 根据场景码查询数据
+     * @param sceneCode
+     * @return
+     */
+    private List<JsonData>  findBySceneCode(String sceneCode) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("sceneCode").is(sceneCode));
+        FilterEntity entity = mongoTemplate.findOne(query, FilterEntity.class, "t_filter");
+        if (entity == null) {
+            throw new RuntimeException("没有此场景数据");
+        }
+        List<JsonData> list = entity.getData();
+        log.info("JsonData数量:{}", list.size());
+        return list;
     }
 
 
+
     /**
      * 查询细节根据排序
      * @param code
@@ -120,9 +120,18 @@ public class FilterServiceImpl implements FilterService {
 
 
         // todo 这里的排序还需要处理一下, 如有异常看了hidden值
-        Stream<JsonData> dataStream = dbList.stream().filter(p -> datasetId == p.getDataset_id().longValue()
-                && siteModelEntityId == p.getSite_model_entity_id().longValue() && !hidden)
-                .limit(limit);
+//        Stream<JsonData> dataStream = dbList.stream().filter(p -> datasetId == p.getDataset_id().longValue()
+//                && siteModelEntityId == p.getSite_model_entity_id().longValue() && !hidden)
+//                .limit(limit);
+        Stream<JsonData> dataStream = dbList.stream();
+        if (datasetId != null) {
+            dataStream = dataStream.filter(p -> datasetId == p.getDataset_id().longValue());
+        }
+
+        if (siteModelEntityId != null) {
+            dataStream = dataStream.filter(p -> siteModelEntityId == p.getSite_model_entity_id().longValue());
+        }
+
 
         // 处理排序reversed()降序, 默认是升序
         if ("desc".equals(sortBy) && "file_id".equals(sortOrder)) {
@@ -137,26 +146,37 @@ public class FilterServiceImpl implements FilterService {
         return collect;
     }
 
-    private Boolean getHidden(Boolean hidden, JsonData dbData){
-        Boolean dbHidden = dbData.getHidden();
-        log.info("输入hidden: {}, 匹配结果:{}", hidden.equals(dbHidden));
-        return dbHidden;
+    /**
+     * 封装基础数据
+     * @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> dbList = findBySceneCode(code);
-
-        List<JsonData> list;
+//        List<JsonData> list;
+//        String code1 = code;
+        List<JsonData> list = findBySceneCode(code);
         if (data instanceof QueryJsonDataOne) {
             QueryJsonDataOne one = (QueryJsonDataOne) data;
-            list = queryDataOne(one, dbList);
+            list = queryDataOne(one, list);
             log.info("走one");
         } else if (data instanceof QueryJsonDataTwo) {
             QueryJsonDataTwo two = (QueryJsonDataTwo) data;
-            list = queryDataTwo(two, dbList);
+            list = queryDataTwo(two, list);
             log.info("走two");
         } else {
             throw new RuntimeException("没有查询到数据,请检查入参");
@@ -165,6 +185,47 @@ public class FilterServiceImpl implements FilterService {
     }
 
 
+//    private List<JsonData> queryDataOne(QueryJsonDataOne queryJsonData, String code) {
+//        log.info("run queryDataOne");
+//        List<JsonData> newJsonData = new ArrayList<>();
+//        Query query = new Query();
+//        if (queryJsonData.getSiteModelEntity() != null) {
+//            query.addCriteria(Criteria.where("site_model_entity_id").is(queryJsonData.getSiteModelEntity()));
+//        }
+//
+//        List<JsonData> jsonDataList = new ArrayList<>();
+//        if ("test1".equals(code)) {
+//            jsonDataList = mongoTemplate.find(query, JsonData.class, "json_data");
+//            log.info("走test1");
+//
+//        } else if ("test2".equals(code)){
+//            log.info("走test2");
+//
+//            jsonDataList = mongoTemplate.find(query, JsonData.class, "json_data_2");
+//            log.info("list转换成功, jsonDataList.size: {}", jsonDataList.size());
+//        } else if ("test3".equals(code)){
+//            jsonDataList = mongoTemplate.find(query, JsonData.class, "json_data_3");
+//        }
+//        if (queryJsonData.getZ() != null) {
+//            jsonDataList = jsonDataList.stream().filter(jsonData ->
+//                    jsonData.getLocation()[2] >= queryJsonData.getZ() && jsonData.getFloor_location()[2] <= queryJsonData.getZ())
+//                    .collect(Collectors.toList());
+//        }
+//        // radius:半径
+//        if (queryJsonData.getRadius() != null) {
+//            newJsonData = calcule(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> queryDataOne(QueryJsonDataOne queryJsonData, List<JsonData> dbList) {
         log.info("run queryDataOne");
 
@@ -195,13 +256,14 @@ public class FilterServiceImpl implements FilterService {
         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) {
-            jsonDataList = dbList.stream().filter(p -> siteModelEntityId == p.getSite_model_entity_id().longValue()).collect(Collectors.toList());
+            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()
@@ -214,6 +276,43 @@ public class FilterServiceImpl implements FilterService {
     }
 
 
+    /**
+     * 处理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<>();
@@ -237,6 +336,7 @@ public class FilterServiceImpl implements FilterService {
         return newJsonData;
     }
 
+
     /**
      * 计算最小距离
      * @param queryJsonData
@@ -284,76 +384,5 @@ public class FilterServiceImpl implements FilterService {
         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;
-    }
-
-
-    /**
-     * 根据场景码查询数据
-     * @param sceneCode
-     * @return
-     */
-    private List<JsonData>  findBySceneCode(String sceneCode) {
-        Query query = new Query();
-        query.addCriteria(Criteria.where("sceneCode").is(sceneCode));
-        FilterEntity entity = mongoTemplate.findOne(query, FilterEntity.class);
-        if (entity == null) {
-            throw new RuntimeException("没有此场景数据");
-        }
-        List<JsonData> list = entity.getData();
-        log.info("JsonData数量:{}", list.size());
-        return list;
-    }
-
-
-    /**
-     * 封装基础数据
-     * @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;
-    }
 }

+ 32 - 20
laser/src/main/java/com/fdkankan/indoor/core/service/impl/JsonData2ServiceImpl.java

@@ -58,11 +58,14 @@ public class JsonData2ServiceImpl implements JsonData2Service {
         log.info("id: {}, code:{}", id, code);
         JsonData result = null;
         if ("test1".equals(code)){
-            result = mongoTemplate.findById(Long.valueOf(id), JsonData.class);
-        } else {
-            JsonData2 entity2 = mongoTemplate.findById(Long.valueOf(id), JsonData2.class);
-            result = new JsonData();
-            BeanUtils.copyProperties(entity2, result);
+            result = mongoTemplate.findById(Long.valueOf(id), JsonData.class, "json_data");
+        } else if ("test2".equals(code)){
+//            JsonData2 entity2 = mongoTemplate.findById(Long.valueOf(id), JsonData2.class);
+//            result = new JsonData();
+//            BeanUtils.copyProperties(entity2, result);
+            result = mongoTemplate.findById(Long.valueOf(id), JsonData.class, "json_data_2");
+        } else if ("test3".equals(code)){
+            result = mongoTemplate.findById(Long.valueOf(id), JsonData.class, "json_data_3");
         }
 
         log.info("entity: {}", result);
@@ -78,7 +81,7 @@ public class JsonData2ServiceImpl implements JsonData2Service {
     @Override
     public List<JsonData> filterJsonDataDetail(String code, JsonDataDetailDto jsonDataDetailDto) {
 
-        List<JsonData> jsonDataList ;
+        List<JsonData> jsonDataList = new ArrayList<>();
         Integer limit = jsonDataDetailDto.getLimit();
         limit = limit==null ? 10: limit;
 
@@ -108,13 +111,16 @@ public class JsonData2ServiceImpl implements JsonData2Service {
 
         if ("test1".equals(code)) {
             log.info("走test1");
-            jsonDataList = mongoTemplate.find(query, JsonData.class);
+            jsonDataList = mongoTemplate.find(query, JsonData.class, "json_data");
 
-        } else {
+        } else if ("test2".equals(code)){
             log.info("走test2");
-            List<JsonData2> jsonDataList2 = mongoTemplate.find(query, JsonData2.class);
-            jsonDataList = copyList(jsonDataList2);
+//            List<JsonData2> jsonDataList2 = mongoTemplate.find(query, JsonData2.class);
+//            jsonDataList = copyList(jsonDataList2);
+            jsonDataList = mongoTemplate.find(query, JsonData.class, "json_data_2");
             log.info("list转换成功");
+        } else if ("test3".equals(code)){
+            jsonDataList = mongoTemplate.find(query, JsonData.class, "json_data_3");
         }
         log.info("返回数据数量: {}", jsonDataList.size());
         return jsonDataList;
@@ -128,17 +134,20 @@ public class JsonData2ServiceImpl implements JsonData2Service {
             query.addCriteria(Criteria.where("site_model_entity_id").is(queryJsonData.getSiteModelEntity()));
         }
 
-        List<JsonData> jsonDataList ;
+        List<JsonData> jsonDataList = new ArrayList<>();
         if ("test1".equals(code)) {
             log.info("走test1");
-            jsonDataList = mongoTemplate.find(query, JsonData.class);
+            jsonDataList = mongoTemplate.find(query, JsonData.class, "json_data");
 
-        } else {
+        } else if ("test2".equals(code)){
             log.info("走test2");
-            List<JsonData2> jsonDataList2 = mongoTemplate.find(query, JsonData2.class);
+//            List<JsonData2> jsonDataList2 = mongoTemplate.find(query, JsonData2.class);
 //            jsonDataList = ConvertUtils.convertList(jsonDataList2, JsonData.class);
-            jsonDataList = copyList(jsonDataList2);
+//            jsonDataList = copyList(jsonDataList2);
+            jsonDataList = mongoTemplate.find(query, JsonData.class, "json_data_2");
             log.info("list转换成功");
+        } else if ("test3".equals(code)){
+            jsonDataList = mongoTemplate.find(query, JsonData.class, "json_data_3");
         }
 
         jsonDataList = jsonDataList.stream().filter(jsonData ->
@@ -196,16 +205,19 @@ public class JsonData2ServiceImpl implements JsonData2Service {
             query.addCriteria(Criteria.where("site_model_entity_id").is(queryJsonData.getSiteModelEntity()));
         }
 
-        List<JsonData> jsonDataList ;
+        List<JsonData> jsonDataList = new ArrayList<>();
         if ("test1".equals(code)) {
-            jsonDataList = mongoTemplate.find(query, JsonData.class);
+            jsonDataList = mongoTemplate.find(query, JsonData.class, "json_data");
             log.info("走test1");
 
-        } else {
+        } else if ("test2".equals(code)){
             log.info("走test2");
-            List<JsonData2> jsonDataList2 = mongoTemplate.find(query, JsonData2.class);
-            jsonDataList = copyList(jsonDataList2);
+//            List<JsonData2> jsonDataList2 = mongoTemplate.find(query, JsonData2.class);
+//            jsonDataList = copyList(jsonDataList2);
+            jsonDataList = mongoTemplate.find(query, JsonData.class, "json_data_2");
             log.info("list转换成功, jsonDataList.size: {}", jsonDataList.size());
+        } else if ("test3".equals(code)){
+            jsonDataList = mongoTemplate.find(query, JsonData.class, "json_data_3");
         }
         if (queryJsonData.getZ() != null) {
             jsonDataList = jsonDataList.stream().filter(jsonData ->

+ 2 - 2
laser/src/main/java/com/fdkankan/indoor/core/service/impl/LoginServiceImpl.java

@@ -100,7 +100,7 @@ public class LoginServiceImpl implements LoginService {
     @Override
     public Result user(String sceneCode) {
         Query query = new Query();
-        query.addCriteria(Criteria.where("sceneCode").is(sceneCode));
+//        query.addCriteria(Criteria.where("sceneCode").is(sceneCode));
         BaseVo vo = mongoTemplate.findOne(query, BaseVo.class, "t_user");
         return Result.success(vo.getData());
     }
@@ -108,7 +108,7 @@ public class LoginServiceImpl implements LoginService {
     @Override
     public Result users(String sceneCode) {
         Query query = new Query();
-        query.addCriteria(Criteria.where("sceneCode").is(sceneCode));
+//        query.addCriteria(Criteria.where("sceneCode").is(sceneCode));
         BaseVo vo = mongoTemplate.findOne(query, BaseVo.class, "t_users");
         return Result.success(vo.getData());
     }

+ 28 - 56
laser/src/main/java/com/fdkankan/indoor/core/service/impl/SiteModel2ServiceImpl.java

@@ -34,27 +34,10 @@ public class SiteModel2ServiceImpl implements SiteModel2Service {
     private final MongoTemplate mongoTemplate;
 
 
-    @Override
-    public SiteModel within(Double[] location, String type) {
-        List<SiteModel> models = new ArrayList<>();
-
-        SiteModel siteModel = mongoTemplate.findOne(new Query(), SiteModel.class);
 
-        models.add(copyModelNotContainChildren(siteModel));
-        if (!CollectionUtils.isEmpty(siteModel.getChildren())) {
-            organizeModels(siteModel, models);
-        }
-        models = models.stream().filter(mod -> filterModels(mod, location, type)).collect(Collectors.toList());
-        
-        Point2D.Double pointParam = new Point2D.Double(location[0], location[1]);
-        log.info("pointParam: {}", pointParam);
-        SiteModel siteModel1 = models.stream().filter(sm -> getSm(sm, pointParam)).findAny()
-                .orElseThrow(() -> new RuntimeException("没有找到符合多边形的点"));
-        return siteModel1;
-    }
 
     @Override
-    public SiteModel withinType(String code, Double[] location, String type) {
+    public Result withinType(String code, Double[] location, String type) {
         log.info("code: {}", code);
         log.info("location: {}", location);
         log.info("code: {}", type);
@@ -64,8 +47,10 @@ public class SiteModel2ServiceImpl implements SiteModel2Service {
         SiteModel siteModel = null;
         if ("test1".equals(code)) {
              siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model");
-        } else {
+        } else if("test2".equals(code)){
             siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model_2");
+        } else if("test3".equals(code)){
+            siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model_3");
         }
 
         // copy实体对象
@@ -109,8 +94,9 @@ public class SiteModel2ServiceImpl implements SiteModel2Service {
         }
 
         log.info("result: {}", result);
-
-        return result;
+        ArrayList<Object> list = new ArrayList<>();
+        list.add(result);
+        return Result.success(list);
 
     }
 
@@ -118,11 +104,14 @@ public class SiteModel2ServiceImpl implements SiteModel2Service {
     public SiteModel findById(Long id, String code) {
         SiteModel siteModel= null;
         if ("test1".equals(code)) {
-            siteModel = mongoTemplate.findById(id, SiteModel.class);
-        } else {
-            SiteModel2 siteMode2 = mongoTemplate.findById(id, SiteModel2.class);
-            siteModel = new SiteModel();
-            BeanUtils.copyProperties(siteMode2, siteModel);
+            siteModel = mongoTemplate.findById(id, SiteModel.class, "site_model");
+        } else if ("test2".equals(code)){
+//            SiteModel2 siteMode2 = mongoTemplate.findById(id, SiteModel2.class);
+//            siteModel = new SiteModel();
+//            BeanUtils.copyProperties(siteMode2, siteModel);
+            siteModel = mongoTemplate.findById(id, SiteModel.class, "site_model_2");
+        } else if ("test3".equals(code)){
+            siteModel = mongoTemplate.findById(id, SiteModel.class, "site_model_3");
         }
         return siteModel;
     }
@@ -136,11 +125,14 @@ public class SiteModel2ServiceImpl implements SiteModel2Service {
 
         SiteModel siteModel= null;
         if ("test1".equals(code)) {
-            siteModel = mongoTemplate.findOne(new Query(), SiteModel.class);
-        } else {
-            SiteModel2 siteMode2 = mongoTemplate.findOne(new Query(), SiteModel2.class);
-            siteModel = new SiteModel();
-            BeanUtils.copyProperties(siteMode2, siteModel);
+            siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model");
+        } else if ("test2".equals(code)){
+//            SiteModel2 siteMode2 = mongoTemplate.findById(id, SiteModel2.class);
+//            siteModel = new SiteModel();
+//            BeanUtils.copyProperties(siteMode2, siteModel);
+            siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model_2");
+        } else if ("test3".equals(code)){
+            siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model_3");
         }
         if (siteModel != null) {
             siteModel.setChildren(new ArrayList<>());
@@ -350,41 +342,21 @@ public class SiteModel2ServiceImpl implements SiteModel2Service {
     }
 
 
-    // 复制数据的作用?
+    // 把当前节点的children 设为空数组
     private SiteModel copyModelNotContainChildren(SiteModel siteModel) {
         SiteModel newSiteModel = new SiteModel();
         BeanUtils.copyProperties(siteModel, newSiteModel);
-        newSiteModel.setChildren(null);
+//        newSiteModel.setChildren(null);
+        // 设置空数组
+        newSiteModel.setChildren(new ArrayList<>());
         return newSiteModel;
     }
 
 
-    // 递归的作用是?
-    private void organizeModels(SiteModel siteModel, List<SiteModel> models) {
-        List<SiteModel> children = siteModel.getChildren();
-         children = ConvertUtils.convertList(children, SiteModel.class);
-//        copyList(children)
-        log.info("children.size: {}", children.size());
-        for (SiteModel child : children) {
-            models.add(copyModelNotContainChildren(child));
-            if (!CollectionUtils.isEmpty(child.getChildren())) {
-                organizeModels(child, models);
-            }
-        }
-        log.info("models.size: {}", models.size());
-    }
 
 
-    private List<SiteModel> copyList(List<SiteModel2> list){
-        List<SiteModel> objects = new ArrayList<>();
-        for (SiteModel2 data : list) {
-            SiteModel entity = new SiteModel();
-            BeanUtils.copyProperties(data, entity);
-            objects.add(entity);
-        }
-        return objects;
 
-    }
+
 
 
     /**

+ 442 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/impl/TSiteModel2ServiceImpl.java

@@ -0,0 +1,442 @@
+package com.fdkankan.indoor.core.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.indoor.base.util.GisUtils;
+import com.fdkankan.indoor.base.util.JsonUtil;
+import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.dto.SiteModelSearchDto;
+import com.fdkankan.indoor.core.entity.BaseEntity;
+import com.fdkankan.indoor.core.entity.siteModel.Polygon;
+import com.fdkankan.indoor.core.entity.siteModel.SiteModel;
+import com.fdkankan.indoor.core.service.SiteModel2Service;
+import com.fdkankan.indoor.core.service.TSiteModel2Service;
+import com.fdkankan.indoor.core.vo.BaseVo;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+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 org.springframework.util.StringUtils;
+
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author Admin
+ */
+@Service
+@Slf4j
+@AllArgsConstructor
+public class TSiteModel2ServiceImpl implements TSiteModel2Service {
+
+    private final MongoTemplate mongoTemplate;
+
+
+
+
+    @Override
+    public Result withinType(String code, Double[] location, String type) {
+        log.info("code: {}", code);
+        log.info("location: {}", location);
+        log.info("code: {}", type);
+
+        // 总对象
+        List<SiteModel> models = new ArrayList<>();
+//        SiteModel siteModel = null;
+//        if ("test1".equals(code)) {
+//             siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model");
+//        } else if("test2".equals(code)){
+//            siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model_2");
+//        } else if("test3".equals(code)){
+//            siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model_3");
+//        }
+        SiteModel siteModel = findBySceneCode(code);
+        // copy实体对象
+        SiteModel newSiteModel = copyModelNotContainChildren(siteModel);
+        // 做为父节点的低一条
+        models.add(newSiteModel);
+        if (!CollectionUtils.isEmpty(siteModel.getChildren())) {
+            organizeModels2(siteModel, models);
+        }
+
+
+        // 按type封装成对象数组
+        List<SiteModel> resultList = new ArrayList<>();
+        SiteModel result = null;
+
+        Point2D.Double pointParam = new Point2D.Double(location[0], location[1]);
+        log.info("pointParam: {}", pointParam);
+        if ("BUILDING".equals(type)) {
+             resultList =  models.stream().filter(data -> "BUILDING".equals(data.getType())).collect(Collectors.toList());
+            result = resultList.stream().filter(sm -> getSm(sm, pointParam)).findAny()
+                    .orElseThrow(() -> new RuntimeException("没有找到符合多边形的点"));
+        } else if ("FLOOR".equals(type)) {
+            resultList =  models.stream().filter(data -> "FLOOR".equals(data.getType())).collect(Collectors.toList());
+            log.info("resultList.size: {}", resultList.size());
+
+            result = resultList.stream().filter(sm -> getSmByFloor(sm, pointParam)).findAny().orElseThrow(() -> new RuntimeException("没有找到符合多边形的点"));
+        } else if ("ROOM".equals(type)) {
+            resultList =  models.stream().filter(data -> "ROOM".equals(data.getType())).collect(Collectors.toList());
+            result = resultList.stream().filter(sm -> getSm(sm, pointParam)).findAny()
+                    .orElseThrow(() -> new RuntimeException("没有找到符合多边形的点"));
+            // type为空,返回全部数据
+        } else {
+            resultList =  models.stream().filter(data -> "ROOM".equals(data.getType())).collect(Collectors.toList());
+            result = resultList.stream().filter(sm -> getSm(sm, pointParam)).findAny()
+                    .orElseThrow(() -> new RuntimeException("没有找到符合多边形的点"));
+
+            List<SiteModel> roomChildren = new ArrayList<>();
+            roomChildren.add(result);
+            siteModel.setChildren(roomChildren);
+            result = siteModel;
+        }
+
+        log.info("result: {}", result);
+        ArrayList<Object> list = new ArrayList<>();
+        list.add(result);
+        return Result.success(list);
+
+    }
+
+
+    /**
+     * 2021-07-20
+     * 根据场景码查询对象
+     * @param sceneCode
+     * @return
+     */
+    private SiteModel findBySceneCode(String sceneCode){
+        Query query = new Query();
+        query.addCriteria(Criteria.where("sceneCode").is(sceneCode));
+        BaseVo vo = mongoTemplate.findOne(query, BaseVo.class, "t_site_model");
+        log.info("vo: {}", vo);
+        Object data = vo.getData();
+        String s = JSON.toJSONString(data);
+        SiteModel siteModel = JSONObject.parseObject(s, SiteModel.class);
+        return siteModel;
+    }
+
+    @Override
+    public SiteModel findById(Long id, String code) {
+//        SiteModel siteModel= null;
+//        if ("test1".equals(code)) {
+//            siteModel = mongoTemplate.findById(id, SiteModel.class, "site_model");
+//        } else if ("test2".equals(code)){
+//            siteModel = mongoTemplate.findById(id, SiteModel.class, "site_model_2");
+//        } else if ("test3".equals(code)){
+//            siteModel = mongoTemplate.findById(id, SiteModel.class, "site_model_3");
+//        }
+        SiteModel siteModel = findBySceneCode(code);
+        return siteModel;
+    }
+
+    @Override
+    public Result getData(JSONObject param, String code) {
+        String type = param.getString("type");
+        if (!"BUILDING".equals(type)) {
+            throw new RuntimeException("非BUILDING类型");
+        }
+
+//        SiteModel siteModel= null;
+//        if ("test1".equals(code)) {
+//            siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model");
+//        } else if ("test2".equals(code)){
+//            siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model_2");
+//        } else if ("test3".equals(code)){
+//            siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model_3");
+//        }
+
+        SiteModel siteModel = findBySceneCode(code);
+
+        if (siteModel != null) {
+            siteModel.setChildren(new ArrayList<>());
+            return Result.success(siteModel);
+        }
+
+        return Result.success();
+    }
+
+    @Override
+    public Result search(String sceneCode, SiteModelSearchDto searchDto) {
+//        SiteModel siteModel = getSceneCode(sceneCode);
+        SiteModel siteModel = findBySceneCode(sceneCode);
+
+        List<SiteModel> loopModel = getLoopModel(siteModel);
+        String searchKey = searchDto.getQuery();
+        Integer size = searchDto.getSize();
+        size = size==null?10: size;
+        List<SiteModel> collect = loopModel.stream().filter(p -> getContent(p, searchKey)).limit(size).collect(Collectors.toList());
+        log.info("返回collect数量: {}", collect.size());
+
+        // 映射实体名称
+        List<Object> result = ormSiteModel(collect);
+
+        return Result.success(result);
+    }
+
+    @Override
+    public Result latest(String sceneCode, Double[] location, Double radius) {
+//        SiteModel siteModel = getSceneCode(sceneCode);
+        SiteModel siteModel = findBySceneCode(sceneCode);
+
+        // 递归为对象
+        List<SiteModel> loopModel = getLoopModel(siteModel);
+
+        // 获取点在多边形的集合
+        List<SiteModel> result = loopModel.stream().filter(p -> pointIsArea(location, p)).collect(Collectors.toList());
+
+        log.info("没有父级的数量:{}", result.size());
+        // 将父级有parenId的对象添加到result
+        addSiteMode(loopModel, result);
+        log.info("添加父级后的数量:{}", result.size());
+
+
+        return Result.success(loopModel);
+    }
+
+    @Override
+    public Result testData(String sceneCode) {
+        SiteModel SiteModel = findBySceneCode(sceneCode);
+        return Result.success(SiteModel);
+    }
+
+    /**
+     * 将父节点添加到结果集
+     * @param loopModel
+     * @param result
+     */
+    private void addSiteMode(List<SiteModel> loopModel, List<SiteModel> result) {
+        Set<SiteModel> parentSiteModel = getParentSiteModel(loopModel, result);
+        for (SiteModel siteModel : parentSiteModel) {
+            result.add(siteModel);
+        }
+    }
+
+    /**
+     * 获取父节点
+     * @param loopModel
+     * @param result
+     * @return
+     */
+    private Set<SiteModel> getParentSiteModel(List<SiteModel> loopModel, List<SiteModel> result){
+        Set<SiteModel>  parent = new HashSet<>();
+        for (SiteModel siteModel : loopModel) {
+            for (SiteModel model : result) {
+                if (model.getParentId() == siteModel.getId()) {
+                    parent.add(siteModel);
+                }
+            }
+        }
+        return parent;
+    }
+
+
+    /**
+     * 输入点是否在多边形内
+     * @param point
+     * @param param
+     * @return
+     */
+    private boolean pointIsArea(Double[] point, SiteModel param){
+        // 获取多边行点
+        Polygon polygon = param.getPolygon();
+        if (polygon == null) {
+            return false;
+        }
+        List<List<List<Double>>> coordinates = polygon.getCoordinates();
+        if (CollectionUtils.isEmpty(coordinates)){
+            return false;
+        }
+        List<List<Double>> lists = coordinates.get(0);
+        if (CollectionUtils.isEmpty(lists)){
+            return false;
+        }
+
+        Point2D.Double pointDouble = new Point2D.Double();
+        pointDouble.setLocation(point[0], point[1]);
+
+
+        List<Point2D.Double> allPoints = lists.stream()
+                .map(points -> new Point2D.Double(points.get(0), points.get(1))).collect(Collectors.toList());
+
+        Boolean inArea = GisUtils.rayCasting(allPoints, pointDouble);
+        log.info("是否在多边型内: {}",  inArea);
+
+        return inArea;
+    }
+
+
+
+
+
+    // 前端需要, 映射实体
+    private List<Object> ormSiteModel(List<SiteModel> collect){
+        List<Object> list = new ArrayList<>();
+        for (SiteModel siteModel : collect) {
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("id", siteModel.getId());
+            jsonObject.put("title", siteModel.getName());
+            jsonObject.put("matching_title", siteModel.getName());
+            jsonObject.put("matching_description", null);
+            list.add(jsonObject);
+        }
+        return list;
+
+    }
+
+    // 模糊匹配
+    private Boolean getContent(SiteModel p, String searchKey){
+        String name = p.getName();
+        log.info("name: {}, 配备结果:{}", name, name.contains(searchKey));
+        return name.contains(searchKey);
+    }
+
+    /**
+     * 根据场景码获取对象
+     * @return
+     */
+//    private SiteModel getSceneCode(String sceneCode){
+//        SiteModel siteModel;
+//
+//        if ("test1".equals(sceneCode)) {
+//            siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model");
+//        } else {
+//            siteModel = mongoTemplate.findOne(new Query(), SiteModel.class, "site_model_2");
+//        }
+//        return siteModel;
+//    }
+
+
+
+//    private boolean filterModels(SiteModel mod, Double[] location, String type) {
+//        if (!StringUtils.isEmpty(type)) {
+//            if (mod.getPolygon() == null || !type.equals(mod.getPolygon().getType())) {
+//                return false;
+//            }
+//        }
+//
+//        if (location != null && location.length == 3) {
+//            if (mod.getZ_max() == null || mod.getZ_min() == null) {
+//                return false;
+//            }
+//            if (mod.getZ_max() >= location[2] && mod.getZ_min() <= location[2]) {
+//                return true;
+//            }
+//        }
+//        return false;
+//    }
+
+
+    // 判断的坐标在那个空间位置
+    private boolean getSm(SiteModel model, Point2D.Double pointParam) {
+        if (CollectionUtils.isEmpty(model.getPolygon().getCoordinates())
+                || CollectionUtils.isEmpty(model.getPolygon().getCoordinates().get(0))
+                || CollectionUtils.isEmpty(model.getPolygon().getCoordinates().get(0).get(0))) {
+            return false;
+        }
+
+        List<Point2D.Double> allPoints = model.getPolygon().getCoordinates().get(0).stream()
+                .map(points -> new Point2D.Double(points.get(0), points.get(1))).collect(Collectors.toList());
+        if (JsonUtil.IsPtInPoly(pointParam, allPoints)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * type=FLOOR 时,polygon=null
+     * @param model
+     * @param pointParam
+     * @return
+     */
+    private boolean getSmByFloor(SiteModel model, Point2D.Double pointParam) {
+        Polygon polygon = model.getPolygon();
+        if (polygon == null) {
+            return true;
+        }
+
+        List<Point2D.Double> allPoints = model.getPolygon().getCoordinates().get(0).stream()
+                .map(points -> new Point2D.Double(points.get(0), points.get(1))).collect(Collectors.toList());
+        if (JsonUtil.IsPtInPoly(pointParam, allPoints)) {
+            return true;
+        }
+        return false;
+    }
+
+
+    // 把当前节点的children 设为空数组
+    private SiteModel copyModelNotContainChildren(SiteModel siteModel) {
+        SiteModel newSiteModel = new SiteModel();
+        BeanUtils.copyProperties(siteModel, newSiteModel);
+//        newSiteModel.setChildren(null);
+        // 设置空数组
+        newSiteModel.setChildren(new ArrayList<>());
+        return newSiteModel;
+    }
+
+
+
+
+
+
+
+
+    /**
+     * 2021-07-14
+     * 获取原来的对象test1 一共是17条
+     * @param siteModel
+     * @param models 数量回保存到原来的数据
+     */
+    private void organizeModels2(SiteModel siteModel, List<SiteModel> models) {
+        for (SiteModel child : siteModel.getChildren()) {
+            models.add(copyModelNotContainChildren(child));
+            if (!CollectionUtils.isEmpty(child.getChildren())) {
+                organizeModels2(child, models);
+            }
+        }
+//        log.info("models.size: {}", models.size());
+    }
+
+
+    private void organizeModels3(SiteModel siteModel, List<SiteModel> models) {
+        for (SiteModel child : siteModel.getChildren()) {
+            Integer id = siteModel.getId();
+            child.setParentId(id);
+            models.add(copyModelNotContainChildren(child));
+            if (!CollectionUtils.isEmpty(child.getChildren())) {
+                organizeModels3(child, models);
+            }
+        }
+//        log.info("models.size: {}", models.size());
+    }
+
+
+    /**
+     * 2021-07-16
+     * 递归出每一个对象
+     * @param siteModel
+     * @return
+     */
+    private List<SiteModel> getLoopModel(SiteModel siteModel){
+        List<SiteModel> models = new ArrayList<>();
+        // copy实体对象
+        SiteModel newSiteModel = copyModelNotContainChildren(siteModel);
+        // 做为父节点的低一条
+        models.add(newSiteModel);
+        if (!CollectionUtils.isEmpty(siteModel.getChildren())) {
+//            organizeModels2(siteModel, models);
+            organizeModels3(siteModel, models);
+        }
+        log.info("models.size: {}", models.size());
+        return models;
+
+    }
+}

+ 0 - 159
pom.xml

@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.springframework.boot</groupId>
-		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>2.2.2.RELEASE</version>
-		<relativePath/> <!-- lookup parent from repository -->
-	</parent>
-	<groupId>com.fdkankan</groupId>
-	<artifactId>indoor</artifactId>
-	<version>0.0.1-SNAPSHOT</version>
-	<packaging>jar</packaging>
-	<name>indoor</name>
-	<description>Demo project for Spring Boot</description>
-
-	<properties>
-		<java.version>1.8</java.version>
-		<fastjson.version>1.2.75</fastjson.version>
-		<knife4j.version>2.0.2</knife4j.version>
-		<hutool.version>5.3.3</hutool.version>
-		<jwt.version>3.2.0</jwt.version>
-		<jjwt.version>0.6.0</jjwt.version>
-		<spring.boot.version>2.3.4.RELEASE</spring.boot.version>
-	</properties>
-
-	<dependencies>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-web</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>org.springframework.boot</groupId>
-					<artifactId>spring-boot-starter-tomcat</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-tomcat</artifactId>
-			<scope>provided</scope>
-		</dependency>
-
-		<!-- MONGODB -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-data-mongodb</artifactId>
-		</dependency>
-
-
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-			<version>1.18.6</version>
-		</dependency>
-
-
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-test</artifactId>
-			<version>2.2.2.RELEASE</version>
-			<scope>test</scope>
-		</dependency>
-
-
-		<!-- fastjson -->
-		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>fastjson</artifactId>
-			<version>${fastjson.version}</version>
-		</dependency>
-
-
-		<!-- 对象拷贝 -->
-		<dependency>
-			<groupId>cglib</groupId>
-			<artifactId>cglib</artifactId>
-			<version>3.2.5</version>
-		</dependency>
-
-
-		<!-- knife4j aip 包-->
-		<dependency>
-			<groupId>com.github.xiaoymin</groupId>
-			<artifactId>knife4j-spring-boot-starter</artifactId>
-			<version>${knife4j.version}</version>
-		</dependency>
-
-
-		<!-- 工具类 -->
-		<dependency>
-			<groupId>cn.hutool</groupId>
-			<artifactId>hutool-all</artifactId>
-			<version>${hutool.version}</version>
-		</dependency>
-
-		<!-- aop , jpa包含这个包 -->
-		<dependency>
-			<groupId>org.aspectj</groupId>
-			<artifactId>aspectjweaver</artifactId>
-			<version>1.9.6</version>
-		</dependency>
-
-
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-		</dependency>
-
-
-		<!-- jwt -->
-		<dependency>
-			<groupId>com.auth0</groupId>
-			<artifactId>java-jwt</artifactId>
-			<version>${jwt.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>io.jsonwebtoken</groupId>
-			<artifactId>jjwt</artifactId>
-			<version>${jjwt.version}</version>
-		</dependency>
-
-
-		<!--springboot中的redis依赖-->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-data-redis</artifactId>
-			<version>${spring.boot.version}</version>
-		</dependency>
-
-	</dependencies>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-maven-plugin</artifactId>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.18.1</version>
-				<configuration>
-					<skipTests>true</skipTests>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-
-</project>

+ 0 - 0
测试.txt