wuweihao před 4 roky
rodič
revize
691a7c9ae5
30 změnil soubory, kde provedl 711 přidání a 179 odebrání
  1. 1 1
      README.md
  2. 57 0
      laser/src/main/java/com/fdkankan/indoor/base/config/MyRedisConfig.java
  3. 2 1
      laser/src/main/java/com/fdkankan/indoor/base/config/Swagger2.java
  4. 4 1
      laser/src/main/java/com/fdkankan/indoor/base/constant/CmdConstant.java
  5. 3 1
      laser/src/main/java/com/fdkankan/indoor/base/convert/ConvertToVision.java
  6. 50 40
      laser/src/main/java/com/fdkankan/indoor/base/convert/ModifyDataSets.java
  7. 49 1
      laser/src/main/java/com/fdkankan/indoor/base/util/JwtUtil.java
  8. 25 0
      laser/src/main/java/com/fdkankan/indoor/base/util/RedisUtil.java
  9. 1 4
      laser/src/main/java/com/fdkankan/indoor/core/controller/MergeSceneController.java
  10. 32 0
      laser/src/main/java/com/fdkankan/indoor/core/controller/PoseController.java
  11. 2 1
      laser/src/main/java/com/fdkankan/indoor/core/controller/SceneController.java
  12. 17 0
      laser/src/main/java/com/fdkankan/indoor/core/controller/TestController.java
  13. 5 2
      laser/src/main/java/com/fdkankan/indoor/core/entity/InitEntity.java
  14. 7 4
      laser/src/main/java/com/fdkankan/indoor/core/entity/dto/SceneAgePageDto.java
  15. 8 0
      laser/src/main/java/com/fdkankan/indoor/core/entity/merge/MergeDateSetDto.java
  16. 14 0
      laser/src/main/java/com/fdkankan/indoor/core/entity/po/DataSetPo.java
  17. 0 25
      laser/src/main/java/com/fdkankan/indoor/core/entity/vo/GroupsVo.java
  18. 24 0
      laser/src/main/java/com/fdkankan/indoor/core/entity/vo/PoseVo.java
  19. 2 0
      laser/src/main/java/com/fdkankan/indoor/core/service/InitService.java
  20. 6 0
      laser/src/main/java/com/fdkankan/indoor/core/service/OwenService.java
  21. 11 0
      laser/src/main/java/com/fdkankan/indoor/core/service/PoseService.java
  22. 1 1
      laser/src/main/java/com/fdkankan/indoor/core/service/SceneService.java
  23. 17 9
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/DataSetServiceImpl.java
  24. 39 8
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/IBaseServiceImpl.java
  25. 36 13
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/InitServiceImpl.java
  26. 1 21
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/LoginServiceImpl.java
  27. 49 38
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/MergeSceneServiceImpl.java
  28. 61 5
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/OwenServiceImpl.java
  29. 174 0
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/PoseServiceImpl.java
  30. 13 3
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/SceneServiceImpl.java

+ 1 - 1
README.md

@@ -99,7 +99,7 @@ t-p307mDm   /mnt/data/00001001/872174780395028480/74ee2a32dbde_20210803173654643
 aa-p307mDm
 
 db.getCollection('t_special_point').find({"sceneCode":"t-SNZRfWt"})
-db.getCollection('t_init').find({"_id":"t-gWKRICl"})
+db.getCollection('t_init').find({"_id":"t-XOfAU0t"})
 
 
 t-gWKRICl /mnt/data/00001002/872519700045627392/74ee2a39e656_202108041610248900/results

+ 57 - 0
laser/src/main/java/com/fdkankan/indoor/base/config/MyRedisConfig.java

@@ -0,0 +1,57 @@
+package com.fdkankan.indoor.base.config;
+
+import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * Created by owen on 2021/7/16 0016 17:21
+ *
+ * redis 全局序列化
+ * redis管理界面可以看到参数
+ * 对象序列化有字段泛型字段值不丢失
+ *
+ * 不序列化有机会拿不到redis数据
+ */
+
+@Configuration
+public class MyRedisConfig {
+
+
+
+        @Bean
+        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
+            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
+            redisTemplate.setConnectionFactory(connectionFactory);
+
+            // 使用Jackson2JsonRedisSerialize替换默认序列化
+            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+
+            ObjectMapper objectMapper = new ObjectMapper();
+            objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+            objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+
+            jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
+
+            // 设置key和value的序列化规则
+            redisTemplate.setKeySerializer(new StringRedisSerializer());
+//            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
+            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+            redisTemplate.setHashValueSerializer(new StringRedisSerializer());
+            redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));
+
+            redisTemplate.afterPropertiesSet();
+
+            return redisTemplate;
+
+        }
+
+
+}

+ 2 - 1
laser/src/main/java/com/fdkankan/indoor/base/config/Swagger2.java

@@ -67,7 +67,8 @@ public class Swagger2 {
     private List<ApiKey> securitySchemes() {
         //设置请求头信息
         List<ApiKey> result = new ArrayList<>();
-        ApiKey apiKey = new ApiKey("Authorization", "token", "header");
+//        ApiKey apiKey = new ApiKey("Authorization", "token", "header");X-Authorization
+        ApiKey apiKey = new ApiKey("Authorization", "X-Authorization", "header");
         result.add(apiKey);
         return result;
 

+ 4 - 1
laser/src/main/java/com/fdkankan/indoor/base/constant/CmdConstant.java

@@ -23,9 +23,12 @@ public class CmdConstant {
      *  bash /opt/ossutil/ossupload.sh /mnt/720yun_fd_manage_data/fd720_1A4Tba8mA 720yun_fd_manage/fd720_1A4Tba8mA
      *  @uploadDir :服务器资源目录
      *  @target oss目录名字
+     *  @mergeCode 合并的场景码
      */
 //    public final static String OSSUTIL_UPLOAD_DIR = "bash /opt/ossutil/ossupload.sh /mnt/720yun_fd_manage_data/@sceneCode 720yun_fd_manage/@sceneCode";
-    public final static String OSSUTIL_UPLOAD_DIR_CHUNK = "bash /root/user/java/jar_run/ossupload.sh @uploadDir data/@sceneCode/data/chunk1/@target";
+//    public final static String OSSUTIL_UPLOAD_DIR_CHUNK = "bash /root/user/java/jar_run/ossupload.sh @uploadDir data/@sceneCode/data/chunk1/@target";
+    // 2021-08-26 - chunk1 -> 改场景码
+    public final static String OSSUTIL_UPLOAD_DIR_CHUNK = "bash /root/user/java/jar_run/ossupload.sh @uploadDir data/@sceneCode/data/@mergeCode/@target";
 
     public final static String OSSUTIL_UPLOAD_DIR = "bash /root/user/java/jar_run/ossupload.sh @uploadDir @target";
 

+ 3 - 1
laser/src/main/java/com/fdkankan/indoor/base/convert/ConvertToVision.java

@@ -75,7 +75,9 @@ public class ConvertToVision {
 			int id = item.getInt("id");
 			laserPano.put("camera_head_id", 12);
 			laserPano.put("dataset_id", 1);
-			laserPano.put("file_path", "data/chunk1");
+//			laserPano.put("file_path", "data/chunk1");
+			// 2021-8-26
+			laserPano.put("file_path", "data/" + sceneCode);
 			laserPano.put("hidden", false);
 			laserPano.put("id", id);
 			laserPano.put("site_model_entity_id", 12);

+ 50 - 40
laser/src/main/java/com/fdkankan/indoor/base/convert/ModifyDataSets.java

@@ -58,46 +58,46 @@ public class ModifyDataSets {
 	}
 
 
-	public static DataSetPo createDataSetPo(Map<String ,Double[]> param){
-		DataSetPo po = new DataSetPo();
-
-		SecurityDto securityDto = new SecurityDto();
-
-		securityDto.setGroup_read(0);
-		securityDto.setGroup_write(1);
-		// 默认true
-		securityDto.setCan_write(true);
-		// 默认true
-		po.setSecurity(securityDto);
-
-		po.setId(1);
-		po.setBundle_id(1);
-		po.setType("4dage");
-		po.setName("chunk1");
-		po.setTitle("chunk1");
-		po.setColor("pink");
-		po.setVisible(false);
-
-		//double[] location = {0,0,0};
-		//location = TransformGPS.convert(location);
-		//原点 ,获取特征点的原点
-//		Double[] doubles = param.get(TypeConstant.POI_ORIGIN);
-		po.setLocation(param.get(TypeConstant.POI_ORIGIN));
-		po.setOrientation(0.0);
-		Integer[] site_model_entity_ids = {10,11,12};
-		po.setSite_model_entity_ids(site_model_entity_ids);
-		po.setPoint_cloud_type("POTREE");
-
-		//添加boundingbox,从modifyCloud里的convertFromBoundingBox获取
-
-		// 使用的是虚拟坐标
-		po.setBounding_box_max(param.get(TypeConstant.POI_BOUNDINGBOX_MAX));
-		po.setBounding_box_min(param.get(TypeConstant.POI_BOUNDINGBOX_MIN));
-
-		po.setHas_depth_images(true);
-		po.setHas_images(true);
-		return po;
-	}
+//	public static DataSetPo createDataSetPo(Map<String ,Double[]> param){
+//		DataSetPo po = new DataSetPo();
+//
+//		SecurityDto securityDto = new SecurityDto();
+//
+//		securityDto.setGroup_read(0);
+//		securityDto.setGroup_write(1);
+//		// 默认true
+//		securityDto.setCan_write(true);
+//		// 默认true
+//		po.setSecurity(securityDto);
+//
+//		po.setId(1);
+//		po.setBundle_id(1);
+//		po.setType("4dage");
+//		po.setName("chunk1");
+//		po.setTitle("chunk1");
+//		po.setColor("pink");
+//		po.setVisible(false);
+//
+//		//double[] location = {0,0,0};
+//		//location = TransformGPS.convert(location);
+//		//原点 ,获取特征点的原点
+////		Double[] doubles = param.get(TypeConstant.POI_ORIGIN);
+//		po.setLocation(param.get(TypeConstant.POI_ORIGIN));
+//		po.setOrientation(0.0);
+//		Integer[] site_model_entity_ids = {10,11,12};
+//		po.setSite_model_entity_ids(site_model_entity_ids);
+//		po.setPoint_cloud_type("POTREE");
+//
+//		//添加boundingbox,从modifyCloud里的convertFromBoundingBox获取
+//
+//		// 使用的是虚拟坐标
+//		po.setBounding_box_max(param.get(TypeConstant.POI_BOUNDINGBOX_MAX));
+//		po.setBounding_box_min(param.get(TypeConstant.POI_BOUNDINGBOX_MIN));
+//
+//		po.setHas_depth_images(true);
+//		po.setHas_images(true);
+//		return po;
+//	}
 
 
 	/**
@@ -131,10 +131,14 @@ public class ModifyDataSets {
 //		Double[] doubles = param.get(TypeConstant.POI_ORIGIN);
 		po.setLocation(param.get(TypeConstant.POI_ORIGIN));
 		po.setOrientation(0.0);
+		// 2021.08.26
+//		Double[] doubles = {0.0};
+//		po.setOrientation(doubles);
 //		Integer[] site_model_entity_ids = {mergeDto.getSite_model_entity_ids()};
 		po.setSite_model_entity_ids(mergeDto.getSite_model_entity_ids());
 		po.setPoint_cloud_type("POTREE");
 
+
 		//添加boundingbox,从modifyCloud里的convertFromBoundingBox获取
 
 		// 使用的是虚拟坐标
@@ -143,6 +147,12 @@ public class ModifyDataSets {
 
 		po.setHas_depth_images(true);
 		po.setHas_images(true);
+
+
+		// 2021-08-26
+		po.setSceneNum(mergeDto.getSceneNum());
+		po.setPath(mergeDto.getPath());
+
 		return po;
 	}
 

+ 49 - 1
laser/src/main/java/com/fdkankan/indoor/base/util/JwtUtil.java

@@ -248,7 +248,8 @@ public class JwtUtil {
      */
     @Test
     public void testCheckToken(){
-        String token = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMzExMjMxMTE3OCIsInVzZXJOYW1lIjoiMTMxMTIzMTExNzgiLCJpYXQiOjE2MTM2MjAzNjcsImp0aSI6IjMyYTAwZDNiLTE2ODctNDUzNi04NmIwLWY4OTMzODQzNzNjMiJ9.5sV47Yf0HU4m6u77jmCziR3KhAGfiL5aUKxo57MImTI";
+//        String token = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMzExMjMxMTE3OCIsInVzZXJOYW1lIjoiMTMxMTIzMTExNzgiLCJpYXQiOjE2MTM2MjAzNjcsImp0aSI6IjMyYTAwZDNiLTE2ODctNDUzNi04NmIwLWY4OTMzODQzNzNjMiJ9.5sV47Yf0HU4m6u77jmCziR3KhAGfiL5aUKxo57MImTI";
+        String token = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxNTkxNTgxNjA0MSIsInVzZXJOYW1lIjoiMTU5MTU4MTYwNDEiLCJpYXQiOjE2MzAwMzQxMzIsImp0aSI6IjI2YTY4MWRmLTU1MWMtNGIyNy1hMmU4LTA5OWY1ODBkMTg5MCJ9.9nAJH_nLvAUXfoVv6ip4hxl29YdVApUiGwiiCsSCuCg";
         String username = getUsername(token);
         Long userId = getUserId(token);
         System.out.println(username);
@@ -274,4 +275,51 @@ public class JwtUtil {
         System.out.println(parseJWT(token));
     }
 
+
+//    public static SSOUser get(String sessionId) {
+//
+//        String redisKey = redisKey(sessionId);
+//        Object objectValue = JedisUtil.getObjectValue(redisKey);
+//        if (objectValue != null) {
+//            SSOUser ssoUser = (SSOUser) objectValue;
+//            return ssoUser;
+//        }
+//        return null;
+//    }
+
+//    public static SSOUser get(String sessionId) {
+//
+//        String redisKey = redisKey(sessionId);
+//        Object objectValue = JedisUtil.getObjectValue(redisKey);
+//        if (objectValue != null) {
+//            SSOUser ssoUser = (SSOUser) objectValue;
+//            return ssoUser;
+//        }
+//        return null;
+//    }
+
+
+    /**
+     * Get Object
+     *
+     * @param key
+     * @return
+     */
+//    public static Object getObjectValue(String key) {
+//        Object obj = null;
+//        ShardedJedis client = getInstance();
+//        try {
+//            byte[] bytes = client.get(key.getBytes());
+//            if (bytes != null && bytes.length > 0) {
+//                obj = unserialize(bytes);
+//            }
+//        } catch (Exception e) {
+//            log.info("", e);
+//        } finally {
+//            client.close();
+//        }
+//        return obj;
+//    }
+
+
 }

+ 25 - 0
laser/src/main/java/com/fdkankan/indoor/base/util/RedisUtil.java

@@ -18,6 +18,8 @@ public class RedisUtil {
     private RedisTemplate<String, Object> redisTemplate;
 
 
+
+
     /**
      * 普通缓存放入并设置时间
      *
@@ -58,6 +60,20 @@ public class RedisUtil {
 
     }
 
+    public boolean set(String key, Object value, long time, TimeUnit timeUnit) {
+        try {
+            if (time > 0) {
+                redisTemplate.opsForValue().set(key, value, time, timeUnit);
+            } else {
+                set(key, value);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
     /**
      * 删除缓存
      *
@@ -84,4 +100,13 @@ public class RedisUtil {
     public Object get(String key) {
         return key == null ? null : redisTemplate.opsForValue().get(key);
     }
+
+    /**
+     * 判断redis key是否存在
+     * @param key
+     * @return true:存在
+     */
+    public Boolean hasKey(String key){
+        return redisTemplate.hasKey(key);
+    }
 }

+ 1 - 4
laser/src/main/java/com/fdkankan/indoor/core/controller/MergeSceneController.java

@@ -8,17 +8,14 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
 
-import java.util.Map;
 
 /**
  * Created by owen on 2021/8/25 0025 10:03
  *
  */
-@Api(tags = "合并场景管理")
+@Api(tags = "merge-合并场景管理")
 @RestController
 public class MergeSceneController {
 

+ 32 - 0
laser/src/main/java/com/fdkankan/indoor/core/controller/PoseController.java

@@ -0,0 +1,32 @@
+package com.fdkankan.indoor.core.controller;
+
+import com.fdkankan.indoor.base.aop.WebControllerLog;
+import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.service.ConfigService;
+import com.fdkankan.indoor.core.service.PoseService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Created by owen on 2021/8/5 0005 20:56
+ * 生成pose.json 给算法部用
+ */
+@Api(tags = "pose")
+@RestController
+public class PoseController {
+
+    @Autowired
+    PoseService poseService;
+
+    @WebControllerLog(description = "生成pose.json")
+    @ApiOperation(value = "生成pose.json")
+    @GetMapping("indoor/{sceneCode}/api/reposes")
+    public Object reposes(@PathVariable String sceneCode){
+        Result result = poseService.reposes(sceneCode);
+        return result;
+    }
+}

+ 2 - 1
laser/src/main/java/com/fdkankan/indoor/core/controller/SceneController.java

@@ -2,6 +2,7 @@ package com.fdkankan.indoor.core.controller;
 
 import com.fdkankan.indoor.base.aop.WebControllerLog;
 import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.entity.dto.PageDto;
 import com.fdkankan.indoor.core.entity.dto.SceneAgePageDto;
 import com.fdkankan.indoor.core.service.SceneService;
 import io.swagger.annotations.Api;
@@ -26,7 +27,7 @@ public class SceneController {
     @WebControllerLog(description = "场景接口-列表")
     @ApiOperation(value = "列表")
     @PostMapping("indoor/scene/list")
-    public Result list(@RequestBody SceneAgePageDto param){
+    public Result list(@RequestBody PageDto param){
         return sceneService.list(param);
     }
 

+ 17 - 0
laser/src/main/java/com/fdkankan/indoor/core/controller/TestController.java

@@ -174,5 +174,22 @@ public class TestController {
 
     }
 
+    @ApiOperation("redis-get")
+    @GetMapping("redisGet/{key}")
+    public Result redisGet(@PathVariable String key){
+        return  owenService.redisGet(key);
+    }
+
 
+    @ApiOperation("redis-get1")
+    @GetMapping("redisGet1/{key}")
+    public Result redisGet1(@PathVariable String key){
+        return  owenService.redisGet1(key);
+    }
+
+    @ApiOperation("redis-set")
+    @GetMapping("redisSet/{value}")
+    public Result redisSet(@PathVariable String value){
+        return  owenService.redisSet(value);
+    }
 }

+ 5 - 2
laser/src/main/java/com/fdkankan/indoor/core/entity/InitEntity.java

@@ -51,7 +51,10 @@ public class InitEntity {
     @ApiModelProperty(value = "用户Id")
     private Long userId;
 
-    @ApiModelProperty(value = "手机号")
-    private String phone;
+//    @ApiModelProperty(value = "手机号")
+//    private String phone;
+
+    @ApiModelProperty(value = "(用户名)手机号")
+    private String userName;
 
 }

+ 7 - 4
laser/src/main/java/com/fdkankan/indoor/core/entity/dto/SceneAgePageDto.java

@@ -11,11 +11,14 @@ import lombok.Data;
 public class SceneAgePageDto extends PageDto {
 
 
-    @ApiModelProperty(value = "用户id", required = true)
-    private Long userId;
+//    @ApiModelProperty(value = "用户id", required = true)
+//    private Long userId;
 
-    @ApiModelProperty(value = "sn码")
-    private String snCode;
+//    @ApiModelProperty(value = "sn码")
+//    private String snCode;
+
+//    @ApiModelProperty(value = "用户名(手机号)")
+//    private String userName;
 
 
 

+ 8 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/merge/MergeDateSetDto.java

@@ -1,5 +1,6 @@
 package com.fdkankan.indoor.core.entity.merge;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 /**
@@ -16,4 +17,11 @@ public class MergeDateSetDto {
 
     // 这里入参不用数组
     private Integer[] site_model_entity_ids;
+
+    // sceneNum,path 合并后才会有数据, 提供pose数据使用
+    @ApiModelProperty(value = "场景码")
+    private String sceneNum;
+
+    @ApiModelProperty(value = "nas场景文件地址")
+    private String path;
 }

+ 14 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/po/DataSetPo.java

@@ -1,6 +1,8 @@
 package com.fdkankan.indoor.core.entity.po;
 
 import com.fdkankan.indoor.core.entity.dto.SecurityDto;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
 import lombok.Data;
 
 /**
@@ -25,7 +27,11 @@ public class DataSetPo {
 
     // 原点转的
     private Double[] location;
+
+    // 2021.08.26
     private Double orientation;
+
+    // siteModeld.id: 自己以及父id
     private Integer[] site_model_entity_ids;
 
     private String point_cloud_type;
@@ -46,5 +52,13 @@ public class DataSetPo {
     private Boolean has_webmesh = false;
 
 
+    // sceneNum,path 合并后才会有数据, 提供pose数据使用
+    @ApiModelProperty(value = "场景码")
+    private String sceneNum;
+
+    @ApiModelProperty(value = "nas场景文件地址")
+    private String path;
+
+
 
 }

+ 0 - 25
laser/src/main/java/com/fdkankan/indoor/core/entity/vo/GroupsVo.java

@@ -1,25 +0,0 @@
-package com.fdkankan.indoor.core.entity.vo;
-
-import com.alibaba.fastjson.JSONObject;
-import lombok.Data;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by owen on 2021/7/19 0019 16:40
- *
- */
-@Data
-public class GroupsVo {
-
-    private JSONObject security;
-
-    private Integer id;
-
-    private String name;
-
-    private List<String> attributes = new ArrayList<>();
-
-    private List<String> child_groups = new ArrayList<>();
-}

+ 24 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/vo/PoseVo.java

@@ -0,0 +1,24 @@
+package com.fdkankan.indoor.core.entity.vo;
+
+import lombok.Data;
+
+/**
+ * Created by owen on 2021/8/26 0026 10:51
+ */
+@Data
+public class PoseVo {
+
+    private String sceneNum;
+
+    private Integer dataSetId;
+
+    private String path;
+
+    // rotation对应的是dataset.orientation处理的值
+    private Object rotation;
+
+    //translation对应的是还原dataset.location的值
+    private Object translation;
+
+
+}

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

@@ -27,4 +27,6 @@ public interface InitService {
     void testInitDataStep2(String id);
 
     void initSiteModel(String sceneCode);
+
+    void ossUploadDirByLaserData(String sceneCode, String path, String mergeCode);
 }

+ 6 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/OwenService.java

@@ -22,4 +22,10 @@ public interface OwenService {
     Result controlPoint(String sceneCode);
 
     Result cutModel(String sceneCode);
+
+    Result redisGet(String key);
+
+    Result redisSet(String value);
+
+    Result redisGet1(String key);
 }

+ 11 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/PoseService.java

@@ -0,0 +1,11 @@
+package com.fdkankan.indoor.core.service;
+
+import com.fdkankan.indoor.base.util.Result;
+
+/**
+ * Created by owen on 2021/8/26 0026 12:25
+ */
+public interface PoseService {
+
+    Result reposes(String sceneCode);
+}

+ 1 - 1
laser/src/main/java/com/fdkankan/indoor/core/service/SceneService.java

@@ -11,5 +11,5 @@ public interface SceneService {
 
 
 
-    Result list(SceneAgePageDto param);
+    Result list(PageDto param);
 }

+ 17 - 9
laser/src/main/java/com/fdkankan/indoor/core/service/impl/DataSetServiceImpl.java

@@ -129,18 +129,26 @@ public class DataSetServiceImpl extends IBaseServiceImpl implements DataSetServi
     }
 
 
+    /**
+     *
+     * @param location
+     * @param orientation 改数组了 2021.08.26
+     * @param sceneCode
+     * @throws Exception
+     */
     private void fixRouteMap(Double[] location, Double orientation, String sceneCode) throws Exception {
         String initKey = TypeConstant.REDIS_INIT_PATH + sceneCode;
         log.info("initKey: {}", initKey);
-        String initPath = redisTemplate.opsForValue().get(initKey);
-        if (initPath == null) {
-            InitEntity initEntity = initService.findById(sceneCode);
-            if (initEntity == null) {
-                throw new BaseRuntimeException("init初始化数据不存: {}" +sceneCode);
-            }
-            initPath = initEntity.getPath();
-            redisTemplate.opsForValue().set(initKey, initPath, 24, TimeUnit.HOURS);
-        }
+//        String initPath = redisTemplate.opsForValue().get(initKey);
+//        if (initPath == null) {
+//            InitEntity initEntity = initService.findById(sceneCode);
+//            if (initEntity == null) {
+//                throw new BaseRuntimeException("init初始化数据不存: {}" +sceneCode);
+//            }
+//            initPath = initEntity.getPath();
+//            redisTemplate.opsForValue().set(initKey, initPath, 24, TimeUnit.HOURS);
+//        }
+        String initPath = redisPath(sceneCode);
 
         initPath = initPath + "/laserData";
         log.info("initPath: {}", initPath);

+ 39 - 8
laser/src/main/java/com/fdkankan/indoor/core/service/impl/IBaseServiceImpl.java

@@ -2,14 +2,19 @@ package com.fdkankan.indoor.core.service.impl;
 
 import com.fdkankan.indoor.base.constant.ConfigConstant;
 import com.fdkankan.indoor.base.constant.TypeConstant;
+import com.fdkankan.indoor.base.exception.BaseRuntimeException;
+import com.fdkankan.indoor.base.util.JwtUtil;
 import com.fdkankan.indoor.base.util.RedisUtil;
+import com.fdkankan.indoor.core.entity.InitEntity;
 import com.fdkankan.indoor.core.entity.dto.PageDto;
 import com.fdkankan.indoor.core.entity.dto.SecurityDto;
+import com.fdkankan.indoor.core.service.InitService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Created by owen on 2021/7/29 0029 11:02
@@ -23,13 +28,16 @@ public class IBaseServiceImpl {
     @Autowired
     ConfigConstant configConstant;
 
-    @Autowired
-    RedisTemplate<String, String> redisTemplate;
+//    @Autowired
+//    RedisTemplate<String, String> redisTemplate;
 
 
     @Autowired
     RedisUtil redisUtil;
 
+    @Autowired
+    InitService initService;
+
 
 
 
@@ -47,12 +55,12 @@ public class IBaseServiceImpl {
             return false;
         }
         String tokenKey = TypeConstant.REDIS_PREFIX + token;
-        String redisToken = redisTemplate.opsForValue().get(tokenKey);
-        log.info("redisToken: {}", redisToken);
-//        if (redisToken == null) {
-//            log.error("redis token is null");
-//            return false;
-//        }
+        boolean redisToken  = redisUtil.hasKey(tokenKey);
+        log.info("redisToken是否存在: {}", redisToken);
+        if (!redisToken) {
+            log.error("redis token is null");
+            return false;
+        }
 
         return true;
 
@@ -88,6 +96,29 @@ public class IBaseServiceImpl {
     }
 
 
+    public String redisPath(String sceneCode) {
+        String initKey = TypeConstant.REDIS_INIT_PATH + sceneCode;
+        log.info("initKey: {}", initKey);
+        String initPath = (String) redisUtil.get(initKey);
+        if (initPath == null) {
+            log.info("initPath走数据库");
+            InitEntity initEntity = initService.findById(sceneCode);
+            if (initEntity == null) {
+                throw new BaseRuntimeException("init初始化数据不存: {}" +sceneCode);
+            }
+            initPath = initEntity.getPath();
+            redisUtil.set(initKey, initPath, 24, TimeUnit.HOURS);
+        }
+        return initPath;
+    }
+
+
+    public String getTokenByUserName(){
+        String token = request.getHeader("X-Authorization");
+        return JwtUtil.getUsername(token);
+    }
+
+
 
 }
 

+ 36 - 13
laser/src/main/java/com/fdkankan/indoor/core/service/impl/InitServiceImpl.java

@@ -14,6 +14,7 @@ import com.fdkankan.indoor.base.util.Result;
 import com.fdkankan.indoor.base.util.SnowFlakeUUidUtils;
 import com.fdkankan.indoor.core.entity.dto.*;
 import com.fdkankan.indoor.core.entity.*;
+import com.fdkankan.indoor.core.entity.merge.MergeDateSetDto;
 import com.fdkankan.indoor.core.entity.po.DataSetPo;
 import com.fdkankan.indoor.core.mapper.InitMapper;
 import com.fdkankan.indoor.core.service.*;
@@ -139,7 +140,8 @@ public class InitServiceImpl implements InitService {
             // https://testlaser.4dkankan.com/maxkk/ + 场景码
             init.setWebSite(configConstant.webSitePath + sceneCode);
             init.setUserId(param.getUserId());
-            init.setPhone(param.getPhone());
+//            init.setPhone(param.getPhone());
+            init.setUserName(param.getPhone());
 
             initMapper.save(init);
 
@@ -265,11 +267,11 @@ public class InitServiceImpl implements InitService {
         createConfig(sceneCode);
 
         // step7 创建t_datasets表, 使用的是代码, 需要处理原点之后执行
-        createDataSet(sceneCode);
+        createDataSet(sceneCode, laserDataPath);
 
 
-        // step8 目录pano、pano_depth、webcloud上传oss,
-        ossUploadDir(sceneCode, laserDataPath);
+        // step8 目录pano、pano_depth、webcloud上传oss, 初始化合并场景码跟原来的一样
+        ossUploadDirByLaserData(sceneCode, laserDataPath, sceneCode);
 
         // 更新 initDataStep2 状态
         init.setUpdateTime(LocalDateTime.now());
@@ -519,7 +521,7 @@ public class InitServiceImpl implements InitService {
         createConfig(sceneCode);
 
         // step7 创建t_datasets表, 使用的是代码, 需要处理原点之后执行
-        createDataSet(sceneCode);
+        createDataSet(sceneCode, laserDataPath);
 
 
         // step8 目录pano、pano_depth、webcloud上传oss,
@@ -779,7 +781,7 @@ public class InitServiceImpl implements InitService {
      * bounding_box_min:(特殊点表)
      * @param sceneCode
      */
-    private void createDataSet(String sceneCode){
+    private void createDataSet(String sceneCode, String laserDataPath){
         DataSetEntity entity = new DataSetEntity();
         entity.setId(sceneCode);
         entity.setUpdateTime(LocalDateTime.now());
@@ -803,7 +805,20 @@ public class InitServiceImpl implements InitService {
             }
         }
 
-        DataSetPo po = ModifyDataSets.createDataSetPo(map);
+        MergeDateSetDto mergeDto = new MergeDateSetDto();
+        mergeDto.setId(1);
+        // 使用场景码
+        mergeDto.setName(sceneCode);
+        mergeDto.setTitle(sceneCode);
+        Integer[] site_model_entity_ids = {10,11,12};
+        mergeDto.setSite_model_entity_ids(site_model_entity_ids);
+        mergeDto.setSceneNum(sceneCode);
+
+        laserDataPath = StrUtil.subBefore(laserDataPath, "/results", true);
+
+        mergeDto.setPath(laserDataPath);
+
+        DataSetPo po = ModifyDataSets.mergeDataSetPo(map, mergeDto);
         entity.setData(Arrays.asList(po));
         dataSetService.save(entity);
         log.info("DataSet数据初始化创建完成");
@@ -882,25 +897,33 @@ public class InitServiceImpl implements InitService {
        return controlPointService.findById(sceneCode);
     }
 
-
-    private void ossUploadDir(String sceneCode, String path){
+    /**
+     *
+     * @param sceneCode 场景码
+     * @param path 基础路径
+     * @param mergeCode 合并的场景码
+     *
+     */
+    @Override
+    public void ossUploadDirByLaserData(String sceneCode, String path, String mergeCode){
         String panoPath = path + "/pano";
         String panoDepthPath = path + "/pano_depth";
         String webCloudPath = path + "/webcloud";
 
 
 
-        executeCmd(sceneCode, panoPath, "pano");
+        executeCmd(sceneCode, panoPath, "pano", mergeCode);
         log.info("pano目录上传oss完成");
-        executeCmd(sceneCode, panoDepthPath, "pano_depth");
+        executeCmd(sceneCode, panoDepthPath, "pano_depth",mergeCode);
         log.info("pano_depth目录上传oss完成");
-        executeCmd(sceneCode, webCloudPath,"webcloud");
+        executeCmd(sceneCode, webCloudPath,"webcloud", mergeCode);
         log.info("webcloud目录上传oss完成");
     }
 
-    private void executeCmd(String sceneCode, String uploadDir, String targetDir){
+    private void executeCmd(String sceneCode, String uploadDir, String targetDir, String mergeCode){
         String cmd = CmdConstant.OSSUTIL_UPLOAD_DIR_CHUNK;
         cmd = cmd.replaceAll("@sceneCode", sceneCode);
+        cmd = cmd.replaceAll("@mergeCode", mergeCode);
         cmd = cmd.replaceAll("@uploadDir", uploadDir);
         cmd = cmd.replaceAll("@target", targetDir);
         CmdUtils.ossUploadDir(cmd);

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

@@ -68,9 +68,6 @@ public class LoginServiceImpl  extends IBaseServiceImpl implements LoginService
 
 
         String token = JwtUtil.createJWT(TOKEN_EXPIRE, tokenMap);
-//        String token =  JwtUtil.createJWT(TOKEN_EXPIRE, "aa");
-//        String token =  JwtUtil.createJWT(1000 * 60 * 60, "aa");
-//        String token = JwtUtil.createJWT(-1, "test");
 
         log.info("token: {}", token);
 
@@ -112,24 +109,7 @@ public class LoginServiceImpl  extends IBaseServiceImpl implements LoginService
 
 
 
-//    @Override
-//    public Result configs(String sceneCode) {
-//        Query query = new Query();
-//        query.addCriteria(Criteria.where("sceneCode").is(sceneCode));
-//        ConfigEntity configs = mongoTemplate.findOne(query, ConfigEntity.class, "t_configs");
-//        List<ConfigDto> data = configs.getData();
-//        List<ConfigDto> result = new ArrayList<>();
-//        if (!checkToken()) {
-//            for (ConfigDto dto : data) {
-//                dto.setSecurity(changeSecurity(dto.getSecurity()));
-//                result.add(dto);
-//            }
-//        } else {
-//            result = data;
-//        }
-//
-//        return Result.success(result);
-//    }
+
 
     @Override
     public Result user(String sceneCode) {

+ 49 - 38
laser/src/main/java/com/fdkankan/indoor/core/service/impl/MergeSceneServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.indoor.core.service.impl;
 
+import cn.hutool.core.util.StrUtil;
 import com.fdkankan.indoor.base.constant.ConfigConstant;
 import com.fdkankan.indoor.base.constant.MsgCode;
 import com.fdkankan.indoor.base.constant.TypeConstant;
@@ -18,13 +19,13 @@ import com.fdkankan.indoor.core.service.*;
 import lombok.extern.slf4j.Slf4j;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
+import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
 import java.time.LocalDateTime;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 
 /**
  * Created by owen on 2021/8/25 0025 10:59
@@ -74,7 +75,7 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
         String mergePath = "";
 
         if ("dev".equals(configConstant.active)) {
-            mergePath = configConstant.serverBasePath  + "/" + mergeCode + "/laserData";
+            mergePath = configConstant.serverBasePath  + "/" + mergeCode + "/results/laserData";
         } else {
             mergePath = redisPath(mergeCode) + "/laserData";
         }
@@ -83,20 +84,25 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
         // siteMode要优先处理;
         Map<Object, Object> resMap = mergeSiteModel(sceneCode, mergeCode, mergePath, controlPoint);
 
-        Integer maxId = (Integer)resMap.get("maxId");
+        Integer siteModelId = (Integer)resMap.get("maxId");
 
-        // dateSet.siteModelId是数组
-        List<Integer> siteModeIds = (List<Integer>)resMap.get("ids");
-        mergeDateSet(sceneCode, mergeCode, siteModeIds);
+        // dateSet.siteModelId是数组, 如果siteModel的模板id改了,这里要重新设置
+        List<Integer> siteModeIds = Arrays.asList(10,11, siteModelId);
+        Integer dataSetId = mergeDateSet(sceneCode, mergeCode, siteModeIds, mergePath);
 
 
-        mergeFilter(sceneCode, mergeCode, controlPoint, mergePath, maxId);
+        mergeFilter(sceneCode, mergeCode, controlPoint, mergePath, siteModelId, dataSetId);
+
+        // 上传数据到oss:目录pano、pano_depth、webcloud上传oss 外层目录以场景码命名
+        initService.ossUploadDirByLaserData(sceneCode, mergePath, mergeCode);
+        log.info("文件上传oss完成, 合并数据完成");
+
 
 
         return Result.success();
     }
 
-    private void  mergeDateSet(String sceneCode, String mergeCode, List<Integer> siteModeIds){
+    private Integer  mergeDateSet(String sceneCode, String mergeCode, List<Integer> siteModeIds, String mergePath){
 
         // 获取原场景数据
         DataSetEntity entity = dataSetService.findById(sceneCode);
@@ -116,12 +122,19 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
 
         // 更新添加数据
         MergeDateSetDto mergeDto = new MergeDateSetDto();
-        mergeDto.setId(originalMaxId + 1);
+        originalMaxId = originalMaxId + 1;
+        mergeDto.setId(originalMaxId);
         // 使用场景码
         mergeDto.setName(mergeCode);
         mergeDto.setTitle(mergeCode);
-        // new Integer[0]:实例化一个Integer类的对象,并给该对象附值为0
+        // new Integer[0]:实例化一个Integer类的对象,并给该对象附值为0, siteModelIds: 取它自己,以及父类
         mergeDto.setSite_model_entity_ids(siteModeIds.toArray(new Integer[0]));
+        mergeDto.setSceneNum(mergeCode);
+
+        mergePath = StrUtil.subBefore(mergePath, "/results", true);
+
+        mergeDto.setPath(mergePath);
+
 
 
         List<DataSetPo> dataSetPos = initMergeDataSet(sceneCode, mergeDto);
@@ -134,11 +147,11 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
         dataSetService.save(entity);
         log.info("dataSet合并完成");
 
-
+        return originalMaxId;
     }
 
 
-    private void  mergeFilter(String sceneCode, String mergeCode, ControlPointEntity controlPoint, String mergePath, Integer newSiteModelId){
+    private void  mergeFilter(String sceneCode, String mergeCode, ControlPointEntity controlPoint, String mergePath, Integer newSiteModelId, Integer dataSetId){
 
 
         // 获取原场景数据
@@ -167,6 +180,7 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
             merge.setId(originalMaxId);
 
             // todo 使用场景码作为路径
+            merge.setDataset_id(dataSetId);
             merge.setFile_path("data/" + mergeCode);
             merge.setSite_model_entity_id(newSiteModelId);
             // 添加数据
@@ -220,6 +234,7 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
     private Map<Object, Object> setRoom(List<SiteDto> dto, SiteDto roomDto) {
         // 用来获取最大id
         List<Integer> ids = new ArrayList<>();
+
         dto.forEach(p -> {
             ids.add(p.getId());
             List<SiteDto> floorChild = p.getChildren();
@@ -257,9 +272,12 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
         result.put("maxId", maxId);
         result.put("data", dto);
 
+//         删除最后一个
+//        ids.remove(ids.size()-1);
+
         // 提供给dataSet使用
         ids.add(maxId);
-        result.put("ids", ids);
+//        result.put("ids", ids);
         return result;
 
     }
@@ -326,7 +344,6 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
 
     /**
      * 初始化点云、siteModel
-     * @param maxId
      * @param mergeCode
      * @param mergePath
      * @param dto
@@ -348,25 +365,26 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
             // 修改cloud.js文件
             JSONObject info = ModifyCloud.fixCloud(path);
 
-            cn.hutool.core.io.FileUtil.writeUtf8String(info.toString(), path);
-            log.info("新的cloud.js写入服务器完成:{}", path);
+             // 2021.08.26 合并不需要, 初始化时已经更新写入服务器了
+//            cn.hutool.core.io.FileUtil.writeUtf8String(info.toString(), path);
+//            log.info("新的cloud.js写入服务器完成:{}", path);
 
             /**
              * 将boundingBox坐标转换成gis坐标, site_model需要
              * boundingBox:虚拟点坐标,存特殊点, dataSet数据要使用
              */
             JSONObject boundingBox = ModifyCloud.getBoundingBox(info);
-            Double maxX = boundingBox.getDouble("maxX");
-            Double maxY = boundingBox.getDouble("maxY");
+//            Double maxX = boundingBox.getDouble("maxX");
+//            Double maxY = boundingBox.getDouble("maxY");
             Double maxZ = boundingBox.getDouble("maxZ");
 
-            Double minX = boundingBox.getDouble("minX");
-            Double minY = boundingBox.getDouble("minY");
+//            Double minX = boundingBox.getDouble("minX");
+//            Double minY = boundingBox.getDouble("minY");
             Double minZ = boundingBox.getDouble("minZ");
 
-            Double centreX = boundingBox.getDouble("centreX");
-            Double centreY = boundingBox.getDouble("centreY");
-            Double centreZ = boundingBox.getDouble("centreZ");
+//            Double centreX = boundingBox.getDouble("centreX");
+//            Double centreY = boundingBox.getDouble("centreY");
+//            Double centreZ = boundingBox.getDouble("centreZ");
 
 
             // 虚拟点坐标(四维看看坐标)
@@ -384,7 +402,7 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
 //            saveSpecialPoint(sceneCode, TypeConstant.POI_BOUNDINGBOX_MAX, ageMax, gpsMax);
 //            saveSpecialPoint(sceneCode, TypeConstant.POI_BOUNDINGBOX_MIN, ageMin, gpsMin);
 //            saveSpecialPoint(sceneCode, TypeConstant.POI_CENTRE, ageCentre, gpsCentre);
-            log.info("max、min、中心点保存成功");
+//            log.info("max、min、中心点保存成功");
 
 
             // 创建sitModel
@@ -464,20 +482,13 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
     }
 
 
-    private String redisPath(String sceneCode) {
-        String initKey = TypeConstant.REDIS_INIT_PATH + sceneCode;
-        log.info("initKey: {}", initKey);
-        String initPath = redisTemplate.opsForValue().get(initKey);
-        if (initPath == null) {
-            log.info("initPath走数据库");
-            InitEntity initEntity = initService.findById(sceneCode);
-            if (initEntity == null) {
-                throw new BaseRuntimeException("init初始化数据不存: {}" +sceneCode);
-            }
-            initPath = initEntity.getPath();
-            redisTemplate.opsForValue().set(initKey, initPath, 24, TimeUnit.HOURS);
-        }
-        return initPath;
+
+
+
+    @Test
+    public void testsub(){
+        String path = "/mnt/data/00001002/872519700045627392/74ee2a39e656_202108041610248900/results/aaaaa";
+        System.out.println(StrUtil.subBefore(path, "/results", true));
     }
 
 

+ 61 - 5
laser/src/main/java/com/fdkankan/indoor/core/service/impl/OwenServiceImpl.java

@@ -5,24 +5,26 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.indoor.base.constant.CmdConstant;
 import com.fdkankan.indoor.base.constant.ConfigConstant;
+import com.fdkankan.indoor.base.constant.TypeConstant;
+import com.fdkankan.indoor.base.exception.BaseRuntimeException;
 import com.fdkankan.indoor.base.util.CmdUtils;
+import com.fdkankan.indoor.base.util.RedisUtil;
 import com.fdkankan.indoor.base.util.Result;
-import com.fdkankan.indoor.core.entity.ControlPointEntity;
-import com.fdkankan.indoor.core.entity.OwenEntity;
-import com.fdkankan.indoor.core.entity.PoiTypeEntity;
-import com.fdkankan.indoor.core.entity.PoiTypeGroupEntity;
-import com.fdkankan.indoor.core.entity.dto.PoiTypeDto;
+import com.fdkankan.indoor.core.entity.*;
 import com.fdkankan.indoor.core.entity.dto.PoiTypeGroupDto;
 import com.fdkankan.indoor.core.mapper.OwenMapper;
+import com.fdkankan.indoor.core.service.InitService;
 import com.fdkankan.indoor.core.service.OwenService;
 import com.fdkankan.indoor.core.service.PoiTypeGroupService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Created by owen on 2021/7/28 0028 20:05
@@ -40,9 +42,16 @@ public class OwenServiceImpl implements OwenService {
     @Autowired
     PoiTypeGroupService poiTypeGroupService;
 
+    @Autowired
+    RedisUtil redisUtil;
+
+    @Autowired
+    InitService initService;
 
 
 
+//    @Autowired
+//    RedisTemplate<String, String> redisTemplate;
 
 
     /**
@@ -165,5 +174,52 @@ public class OwenServiceImpl implements OwenService {
         return Result.success(cmd);
     }
 
+    @Override
+    public Result redisGet(String key) {
+//        String key = "token#eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIwMDAwMDAwMyIsInVzZXJOYW1lIjoiMDAwMDAwMDMiLCJpYXQiOjE2Mjk5Njk2NzEsImp0aSI6ImIzZTk1NWQ1LTNlYzEtNGFiZC1hNDdhLWVlNWVlY2RkNDdlYiJ9.dmecb_JH0aBptud5HI6rZjaNMqFjDX378CFm1DcpMRk";
+//        String key = "user:token:13168655585";
+//        Object o = redisUtil.get(key);
+//        System.out.println();
+
+        String s = redisPath(key);
+
+        return Result.success(s);
+    }
+
+    @Override
+    public Result redisSet(String value) {
+        redisUtil.set("owen", value, 1000*100);
+
+        return Result.success(value);
+    }
+
+    @Override
+    public Result redisGet1(String key) {
+        key = "token#eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMzU3MDY0NzgyMyIsInVzZXJOYW1lIjoiMTM1NzA2NDc4MjMiLCJpYXQiOjE2MzAwMjY1MDgsImp0aSI6IjQ5MmFkOWYxLTA2YjUtNDg1YS1iZGE1LTA3ODg4NmRiNWE4YiJ9.d--o2vrZEJVjs8uEXZLdbrq4vk0_XVsVUHZ_x5wenVQ";
+//        Object o = redisUtil.get(key);
+//        Object s = redisTemplate.opsForValue().get(key);
+        boolean s = redisUtil.hasKey(key);
+        System.out.println(s);
+        return Result.success(s);
+    }
+
+
+    private String redisPath(String sceneCode) {
+        String initKey = TypeConstant.REDIS_INIT_PATH + sceneCode;
+        log.info("initKey: {}", initKey);
+        String initPath = (String) redisUtil.get(initKey);
+        if (initPath == null) {
+            log.info("initPath走数据库");
+            InitEntity initEntity = initService.findById(sceneCode);
+            if (initEntity == null) {
+                throw new BaseRuntimeException("init初始化数据不存: {}" +sceneCode);
+            }
+            initPath = initEntity.getPath();
+//            redisTemplate.opsForValue().set(initKey, initPath, 24, TimeUnit.HOURS);
+            redisUtil.set(initKey, initPath, 24, TimeUnit.HOURS);
+        }
+        return initPath;
+    }
+
 
 }

+ 174 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/impl/PoseServiceImpl.java

@@ -0,0 +1,174 @@
+package com.fdkankan.indoor.core.service.impl;
+
+import cn.hutool.core.io.FileUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.fdkankan.indoor.base.constant.TypeConstant;
+import com.fdkankan.indoor.base.convert.GisCoordinateUtil;
+import com.fdkankan.indoor.base.exception.BaseRuntimeException;
+import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.entity.ControlPointEntity;
+import com.fdkankan.indoor.core.entity.InitEntity;
+import com.fdkankan.indoor.core.entity.po.DataSetPo;
+import com.fdkankan.indoor.core.entity.vo.PoseVo;
+import com.fdkankan.indoor.core.service.ControlPointService;
+import com.fdkankan.indoor.core.service.DataSetService;
+import com.fdkankan.indoor.core.service.InitService;
+import com.fdkankan.indoor.core.service.PoseService;
+import lombok.extern.slf4j.Slf4j;
+import net.sf.json.JSONObject;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created by owen on 2021/8/26 0028 20:05
+ */
+@Service
+@Slf4j
+public class PoseServiceImpl extends IBaseServiceImpl implements PoseService {
+
+
+    @Autowired
+    DataSetService dataSetService;
+
+    @Autowired
+    InitService initService;
+
+    @Autowired
+    ControlPointService controlPointService;
+
+    @Override
+    public Result reposes(String sceneCode) {
+        List<DataSetPo> data = dataSetService.getDataBySceneCode(sceneCode);
+
+        ControlPointEntity controlPoint = controlPointService.findById(sceneCode);
+
+
+
+        List<PoseVo> resList = new ArrayList<>();
+        for (DataSetPo po : data) {
+            PoseVo vo = new PoseVo();
+            vo.setSceneNum(po.getSceneNum());
+            vo.setDataSetId(po.getId());
+            vo.setPath(po.getPath());
+
+            //rotation对应的是orientation处理的值
+            vo.setRotation(setFromEuler(po.getOrientation()));
+
+            //translation对应的是还原location的值
+            vo.setTranslation(exeTranslation(po.getLocation(), controlPoint));
+
+            resList.add(vo);
+        }
+
+        String initPath = "";
+        if ("dev".equals(configConstant.active)) {
+             initPath = configConstant.serverBasePath + "/" + sceneCode + "/results";
+        } else {
+            initPath = redisPath(sceneCode);
+        }
+        String savePath = initPath  + "/pose.json";
+        log.info("pose.json保存路径: {}", savePath);
+        JSONArray array = JSONArray.parseArray(JSON.toJSONString(resList));
+        FileUtil.writeUtf8String(array.toJSONString(), savePath );
+        log.info("pose.json完成");
+
+
+        return Result.success(savePath);
+    }
+
+    // 本地gps坐标转本地坐标
+    private static JSONObject exeTranslation(Double[] location, ControlPointEntity controlPoint){
+        double[] gpsLocation = {location[0], location[1], location[2]};
+        double[] translation = GisCoordinateUtil.convertGpsToLocation(gpsLocation, controlPoint);
+        JSONObject translationJson = new JSONObject();
+        translationJson.put("x", translation[0]);
+        translationJson.put("y", translation[1]);
+        // z:不变
+        translationJson.put("z", gpsLocation[2]);
+        return translationJson;
+    }
+
+    @Test
+    public void gpsToAge(){
+        double[] location = {113.595725873559, 22.366579192566, 0.075};
+
+        // 控制点
+        ControlPointEntity controlPoint = new ControlPointEntity();
+        double[] controlCoordinate1 = {113.595725873337,22.366579193007}; //gps坐标
+        double[] controlCoordinate2 = {113.595757230122,22.3666213677456};  //gps坐标
+
+        double[] controlLocation1 = {0.617759,-2.904041};  // 四维看看坐标
+        double[] controlLocation2 = {3.859914,1.75765}; // 四维看看坐标
+
+        controlPoint.setGpsControlCoordinate1(controlCoordinate1);
+        controlPoint.setGpsControlCoordinate2(controlCoordinate2);
+        controlPoint.setAgeControlLocation1(controlLocation1);
+        controlPoint.setAgeControlLocation2(controlLocation2);
+
+        double[] doubles = GisCoordinateUtil.convertGpsToLocation(location, controlPoint);
+        System.out.println(doubles[0]);
+        System.out.println(doubles[1]);
+        System.out.println(location[2]);
+
+    }
+
+
+//    private String redisPath(String sceneCode) {
+//        String initKey = TypeConstant.REDIS_INIT_PATH + sceneCode;
+//        log.info("initKey: {}", initKey);
+//        String initPath = redisTemplate.opsForValue().get(initKey);
+//        if (initPath == null) {
+//            log.info("initPath走数据库");
+//            InitEntity initEntity = initService.findById(sceneCode);
+//            if (initEntity == null) {
+//                throw new BaseRuntimeException("init初始化数据不存: {}" +sceneCode);
+//            }
+//            initPath = initEntity.getPath();
+//            redisTemplate.opsForValue().set(initKey, initPath, 24, TimeUnit.HOURS);
+//        }
+//        return initPath;
+//    }
+
+    @Test
+    public void testSetFromEuler(){
+        Double orientation = 0.0;
+        JSONObject jsonObject = setFromEuler(orientation);
+
+    }
+
+    // 欧拉定理(几何)
+    private static JSONObject setFromEuler(Double orientation) {
+        // x、y 默认0.0;
+        Double x = 0.0;
+        Double y = 0.0;
+        Double z = orientation;
+
+
+        double c1 = Math.cos( x / 2 );
+        double c2 = Math.cos( y / 2 );
+        double c3 = Math.cos( z / 2 );
+
+        double s1 = Math.sin( x / 2 );
+        double s2 = Math.sin( y / 2 );
+        double s3 = Math.sin( z / 2 );
+
+        JSONObject quaternion = new JSONObject();
+        double _x = s1 * c2 * c3 + c1 * s2 * s3;
+        double _y = c1 * s2 * c3 - s1 * c2 * s3;
+        double _z = c1 * c2 * s3 + s1 * s2 * c3;
+        double _w = c1 * c2 * c3 - s1 * s2 * s3;
+
+        quaternion.put("x", _x);
+        quaternion.put("y", _y);
+        quaternion.put("z", _z);
+        quaternion.put("w", _w);
+
+        return quaternion;
+    }
+}

+ 13 - 3
laser/src/main/java/com/fdkankan/indoor/core/service/impl/SceneServiceImpl.java

@@ -2,6 +2,7 @@ package com.fdkankan.indoor.core.service.impl;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.PageUtil;
+import com.fdkankan.indoor.base.constant.MsgCode;
 import com.fdkankan.indoor.base.util.Result;
 import com.fdkankan.indoor.core.entity.InitEntity;
 import com.fdkankan.indoor.core.entity.dto.PageDto;
@@ -37,13 +38,21 @@ public class SceneServiceImpl extends IBaseServiceImpl implements SceneService {
 
 
     @Override
-    public Result list(SceneAgePageDto param) {
+    public Result list(PageDto param) {
         Integer pageNum = param.getPageNum();
         Integer pageSize = param.getPageSize();
 
+
+
         pageNum = pageNum == null ? 0 : pageNum;
         pageSize = pageSize == null ? 10 : pageSize;
 
+        // 重token中获取用户名
+        String tokenByUserName = getTokenByUserName();
+        if (tokenByUserName == null) {
+            return Result.failure(MsgCode.e3001, "请检查token是否正确");
+        }
+
         // 这里的"recordNo"是实体类的主键,记住一定要是实体类的属性,而不能是数据库的字段
         Sort sort = Sort.by(Sort.Direction.DESC, "createTime");
         // (当前页, 每页记录数, 排序方式)
@@ -53,8 +62,9 @@ public class SceneServiceImpl extends IBaseServiceImpl implements SceneService {
         InitEntity search = new InitEntity();
         search.setTitle(param.getSearchKey());
         // 必要的查询条件
-        search.setUserId(param.getUserId());
-        search.setSnCode(param.getSnCode());
+//        search.setUserId(param.getUserId());
+//        search.setSnCode(param.getSnCode());
+        search.setUserName(tokenByUserName);
 
         // 模糊查询条件
         // 参考:https://blog.csdn.net/wonder_dog/article/details/82319216