Sfoglia il codice sorgente

增加处理dataSet 相关接口

wuweihao 4 anni fa
parent
commit
a636314ada

+ 5 - 0
laser/src/main/java/com/fdkankan/indoor/base/convert/DistanceUtil.java

@@ -21,6 +21,7 @@ public class DistanceUtil {
      * @return
      */
     private static double distance(Double[] coordinates1, Double[] coordinates2, Options options) {
+
         double dLat = degreesToRadians(coordinates2[1] - coordinates1[1]);
         double dLon = degreesToRadians(coordinates2[0] - coordinates1[0]);
         double lat1 = degreesToRadians(coordinates1[1]);
@@ -33,6 +34,9 @@ public class DistanceUtil {
                 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)),
                 options.getUnits()
         );
+
+        //double l=Math.pow(coordinates1[0]-coordinates2[0],2) +Math.pow(coordinates1[1]-coordinates2[1],2);
+        //return Math.sqrt(l);
     }
 
     /**
@@ -46,6 +50,7 @@ public class DistanceUtil {
         double[] p1= GisCoordinateTransform.Convert2000BLToGauss(coordinates1[0],coordinates1[1]);
         double[] p2= GisCoordinateTransform.Convert2000BLToGauss(coordinates2[0],coordinates2[1]);
         double l=Math.pow(p1[0]-p2[0],2) +Math.pow(p1[1]-p2[1],2)+Math.pow(coordinates1[2]-coordinates2[2],2);
+        //double l=Math.pow(coordinates1[0]-coordinates2[0],2) +Math.pow(coordinates1[1]-coordinates2[1],2)+Math.pow(coordinates1[2]-coordinates2[2],2);
         return Math.sqrt(l);
     }
 

+ 2 - 2
laser/src/main/java/com/fdkankan/indoor/base/convert/GetRoute_1.java

@@ -120,8 +120,8 @@ public class GetRoute_1
 			item.put("x", strArray[0]);
 			item.put("y", strArray[1]);
 			item.put("z", strArray[2]);
-			item.put("weight", strArray[3]);
-
+			//item.put("weight", strArray[3]);
+			item.put("weight", 1);
 			String linkedIds = "";
 			for(int j = 4;j<strArray.length;++j) {
 				if(Integer.valueOf(strArray[j])>0) {

+ 2 - 0
laser/src/main/java/com/fdkankan/indoor/base/convert/TransformGPS.java

@@ -31,6 +31,7 @@ public class TransformGPS {
 	 * @return
 	 */
 	public static double[] convert(double[] position, ControlPointEntity dto) {
+
 		double[] controlLocation1 = dto.getAgeControlLocation1();
 		double[] controlLocation2 = dto.getAgeControlLocation2();
 
@@ -45,6 +46,7 @@ public class TransformGPS {
 				controlLocation2[0],controlLocation2[1]);
 		double[] d = GisCoordinateUtil.transformLocationToBL(position[0], position[1]);
 		return d;
+
 	}
 
 	public static double[][] convert(double[][] positions,  ControlPointEntity dto){

+ 9 - 0
laser/src/main/java/com/fdkankan/indoor/core/controller/DateSetController.java

@@ -47,4 +47,13 @@ public class DateSetController {
         Result result = entityService.update(sceneCode, param);
         return result.getData();
     }
+
+
+    @WebControllerLog(description = "场景信息接口-根据id查询")
+    @ApiOperation(value = "根据id查询")
+    @GetMapping("indoor/{sceneCode}/api/datasets/{dataSetId}")
+    public Object findByDataSetId(@PathVariable String sceneCode, @PathVariable Integer dataSetId) {
+        Result result = entityService.findByDataSetId(sceneCode, dataSetId);
+        return result.getData();
+    }
 }

+ 27 - 0
laser/src/main/java/com/fdkankan/indoor/core/controller/FilterController.java

@@ -49,6 +49,8 @@ public class FilterController {
      * 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/test3/api/images/filter?dataset=1&hidden=false&limit=10&sort_by=FILE_ID&sort_order=ASC&site_model_entity=11
+     *
+     * http://127.0.0.1:9294/indoor/t-SNZRfWt/api/images/filter?hidden=false&lat=-1.858297&lon=1.59676&radius=200
      * @param code
      * @return
      */
@@ -71,5 +73,30 @@ public class FilterController {
     }
 
 
+    @WebControllerLog(description = "更新dataset_floor_orientation,dataset_orientation")
+    @ApiOperation(value = "更新热点dataset_floor_orientation,dataset_orientation", notes = "测试用, {0.0, 0.0, 0.0, 1.0}")
+    @GetMapping("indoor/{sceneCode}/api/edit/datasetOrientation")
+    public Object editDatasetOrientation(@PathVariable String sceneCode, Double[] orientation) {
+        Result result = filterService.editDatasetOrientation(sceneCode, orientation);
+        return result.getData();
+    }
+
+
+    @WebControllerLog(description = "filter查询DataSetId接口")
+    @ApiOperation(value = "filter查询DataSetId接口")
+    @GetMapping("indoor/{sceneCode}/api/poses")
+    public Object findByDataSetId(@PathVariable String sceneCode, Integer dataset_id) {
+        Result result = filterService.findByDataSetId(sceneCode, dataset_id);
+        return result.getData();
+    }
+
+    @WebControllerLog(description = "更新dataSet数据")
+    @ApiOperation(value = "更新dataSet数据")
+    @PutMapping("indoor/{sceneCode}/api/poses")
+    public Object updateDataSet(@PathVariable String sceneCode, @RequestBody List<FilterDataSetPutDto> param) {
+        Result result = filterService.updateDataSet(sceneCode, param);
+        return result.getData();
+    }
+
 
 }

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

@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RestController;
  * Created by owen on 2021/7/29 0029 12:03
  */
 @Slf4j
-@Api(tags = "最优路径接口")
+@Api(tags = "路径规划(route)")
 @RestController
 public class RouteController {
 

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

@@ -1,6 +1,5 @@
 package com.fdkankan.indoor.core.entity;
 
-import com.fdkankan.indoor.core.entity.dto.ConfigDto;
 import lombok.Data;
 import org.springframework.data.mongodb.core.mapping.Document;
 
@@ -9,14 +8,13 @@ import java.util.List;
 
 /**
  * Created by owen on 2021/7/28 0027 10:42
- *
+ * 路径规划
  */
 @Document(collection = "t_route")
 @Data
 public class RouteEntity extends BaseEntity {
 
 
-//    private String sceneCode;
 
     private List<String> data;
 

+ 38 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/dto/FilterDataSetPutDto.java

@@ -0,0 +1,38 @@
+package com.fdkankan.indoor.core.entity.dto;
+
+import lombok.Data;
+
+/**
+ * Created by owen on 2021/7/27 0027 14:55
+ *
+ * filter表是漫游点数据
+ */
+@Data
+public class FilterDataSetPutDto {
+
+    private Integer id;
+
+
+    private Double[] location;
+
+    private Double[] floor_location;
+
+    private Double[] orientation;
+
+    private Integer dataset_id;
+
+    private Double[] dataset_location;
+
+    private Double[] dataset_floor_location;
+
+    private Double[] dataset_orientation ;
+
+
+    private String file_id;
+
+
+
+//    private Double[] dataset_floor_orientation ;
+
+
+}

+ 5 - 1
laser/src/main/java/com/fdkankan/indoor/core/entity/dto/FilterHotDto.java

@@ -34,7 +34,11 @@ public class FilterHotDto {
 
     private String file_id;
 
-//
+
+    // 2021-8-6 新增
+    private Double[] dataset_orientation = {0.0, 0.0, 0.0, 1.0};
+
+    private Double[] dataset_floor_orientation =  {0.0, 0.0, 0.0, 1.0};
 
 
 }

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

@@ -42,6 +42,9 @@ public class DataSetPo {
     // 读写权限
     private SecurityDto security;
 
+    // 2021-08-09
+    private Boolean has_webmesh = false;
+
 
 
 }

+ 47 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/vo/FilterDataSetHotVo.java

@@ -0,0 +1,47 @@
+package com.fdkankan.indoor.core.entity.vo;
+
+import lombok.Data;
+
+/**
+ * Created by owen on 2021/8/6 0027 14:55
+ *
+ * filter表是漫游点数据
+ */
+@Data
+public class FilterDataSetHotVo {
+
+    private Integer id;
+
+//    private Integer camera_head_id;
+
+    private Integer dataset_id;
+
+//    private String file_path;
+
+//    private Boolean hidden;
+
+//    private Integer site_model_entity_id;
+
+    private Double[] location;
+
+    private Double[] floor_location;
+
+    private Double[] dataset_location;
+
+    private Double[] dataset_floor_location;
+
+    private Double[] orientation;
+
+    private String file_id;
+
+
+    // 2021-8-6 新增
+    private Double[] dataset_orientation = {0.0, 0.0, 0.0, 1.0};
+
+
+    private Long last_modified;
+
+//    private Double[] dataset_floor_orientation =  {0.0, 0.0, 0.0, 1.0};
+
+
+}

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

@@ -17,4 +17,6 @@ public interface DataSetService {
     Result update(String sceneCode, List<DataSetPo> param);
 
     void remove(String sceneCode);
+
+    Result findByDataSetId(String sceneCode, Integer dataSetId);
 }

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

@@ -20,4 +20,10 @@ public interface FilterService {
     Result update(String sceneCode, List<FilterHotDto> param);
 
     void remove(String sceneCode);
+
+    Result editDatasetOrientation(String sceneCode, Double[] orientation);
+
+    Result findByDataSetId(String code, Integer dataset_id);
+
+    Result updateDataSet(String sceneCode, List<FilterDataSetPutDto> param);
 }

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

@@ -94,6 +94,23 @@ public class DataSetServiceImpl extends IBaseServiceImpl implements DataSetServi
         dataSetMapper.deleteById(sceneCode);
     }
 
+    @Override
+    public Result findByDataSetId(String sceneCode, Integer dataSetId) {
+        List<DataSetPo> data = getDataBySceneCode(sceneCode);
+        if (data.size() > 0){
+            data = data.stream().filter(p -> dataSetId.equals(p.getId())).collect(Collectors.toList());
+            // 处理登录问题
+            data = changeSecurityUnLoginList(data);
+        }
+        return Result.success(data);
+    }
+
+
+    private List<DataSetPo> getDataBySceneCode(String sceneCode){
+        DataSetEntity entity = findById(sceneCode);
+        return entity.getData();
+    }
+
     /**
      * 处理是否登录问题
      * @param sceneCode

+ 90 - 14
laser/src/main/java/com/fdkankan/indoor/core/service/impl/FilterServiceImpl.java

@@ -1,14 +1,19 @@
 package com.fdkankan.indoor.core.service.impl;
 
+import cn.hutool.core.util.StrUtil;
+import com.fdkankan.indoor.base.constant.MsgCode;
 import com.fdkankan.indoor.base.convert.DistanceUtil;
+import com.fdkankan.indoor.base.exception.BaseRuntimeException;
 import com.fdkankan.indoor.base.util.*;
 import com.fdkankan.indoor.core.entity.dto.*;
 import com.fdkankan.indoor.core.entity.FilterEntity;
 import com.fdkankan.indoor.core.entity.po.DataSetPo;
+import com.fdkankan.indoor.core.entity.vo.FilterDataSetHotVo;
 import com.fdkankan.indoor.core.mapper.FilterMapper;
 import com.fdkankan.indoor.core.service.FilterService;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.stereotype.Service;
@@ -42,7 +47,7 @@ public class FilterServiceImpl implements FilterService {
 
     private FilterEntity findBySceneCode(String sceneCode){
         Optional<FilterEntity> optional = filterMapper.findById(sceneCode);
-        return optional.get();
+        return optional.orElse(null);
     }
 
     private List<FilterHotDto> getDataBySceneCode(String sceneCode){
@@ -164,6 +169,7 @@ public class FilterServiceImpl implements FilterService {
         List<FilterHotDto> data = entity.getData();
         log.info("db数据量: {}", data.size());
 
+
         Integer maxId = 0;
         if (data.size() != 0){
             // 将热点id提取出来做过滤条件
@@ -189,6 +195,14 @@ public class FilterServiceImpl implements FilterService {
                 dto.setId(maxId);
             }
 
+            // 处理file_path: 默认取最后一个data后缀
+            String filePath = dto.getFile_path();
+            if (StrUtil.isNotBlank(filePath)){
+                filePath =  StrUtil.subAfter(filePath, "data/", true);
+                filePath = "data/" + filePath;
+                dto.setFile_path(filePath);
+            }
+
             data.add(dto);
         }
 
@@ -207,6 +221,77 @@ public class FilterServiceImpl implements FilterService {
         filterMapper.deleteById(sceneCode);
     }
 
+    @Override
+    public Result editDatasetOrientation(String sceneCode, Double[] orientation) {
+        FilterEntity entity = findBySceneCode(sceneCode);
+        List<FilterHotDto> data = entity.getData();
+
+        List<FilterHotDto> result = new ArrayList<>();
+        for (FilterHotDto dto : data) {
+            dto.setDataset_orientation(orientation);
+            dto.setDataset_floor_orientation(orientation);
+            result.add(dto);
+        }
+        entity.setData(result);
+        entity.setUpdateTime(LocalDateTime.now());
+        save(entity);
+
+        return Result.success(getDataBySceneCode(sceneCode));
+    }
+
+    @Override
+    public Result findByDataSetId(String code, Integer dataset_id) {
+        if (dataset_id == null) {
+            throw new BaseRuntimeException(MsgCode.e3001, "dataset_id不能为空");
+        }
+        List<FilterHotDto> data = getDataBySceneCode(code);
+        data = data.stream().filter(p -> dataset_id.equals(p.getDataset_id())).collect(Collectors.toList());
+
+        List<FilterDataSetHotVo> result = new ArrayList<>();
+        for (FilterHotDto hot : data) {
+            FilterDataSetHotVo vo = new FilterDataSetHotVo();
+            BeanUtils.copyProperties(hot, vo);
+            vo.setLast_modified(System.currentTimeMillis());
+            result.add(vo);
+        }
+
+        return Result.success(result);
+    }
+
+    @Override
+    public Result updateDataSet(String sceneCode, List<FilterDataSetPutDto> param) {
+
+        FilterEntity entity = findBySceneCode(sceneCode);
+        if (entity == null){
+            throw new BaseRuntimeException(MsgCode.e3001, "此场景不存在");
+        }
+
+        List<FilterHotDto> data = entity.getData();
+        log.info("元数据数量:{}", data.size());
+        log.info("参数数量:{}", param.size());
+
+        if (data.size() > 0) {
+         // 复制参数到原数组
+            data.forEach(p -> {
+                Integer id = p.getId();
+                param.forEach(d -> {
+                    Integer dId = d.getId();
+                    if (dId.equals(id)){
+                        // 参数复制
+                        BeanUtils.copyProperties(d, p);
+                    }
+                        }
+                );
+            });
+        }
+
+        entity.setData(data);
+        entity.setUpdateTime(LocalDateTime.now());
+        this.save(entity);
+
+        return Result.success(this.getDataBySceneCode(sceneCode));
+    }
+
 
     /**
      *   处理step step的值会有影响
@@ -258,17 +343,13 @@ public class FilterServiceImpl implements FilterService {
         // 计算距离后的结果集
         Map<Double, FilterHotDto> calResultMap = new HashMap<>();
         for (FilterHotDto jsonData : jsonDataList) {
-//            Double[] coordinates1 = new Double[3];
-//            coordinates1[0] = queryJsonData.getLon();
-//            coordinates1[1] = queryJsonData.getLat();
-//            coordinates1[2] = queryJsonData.getZ();
+
 
             Double[] coordinates2 = new Double[3];
             coordinates2[0] = jsonData.getLocation()[0];
             coordinates2[1] = jsonData.getLocation()[1];
             coordinates2[2] = jsonData.getLocation()[2];
 
-//            Double distance = DistanceUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
             Double distance = DistanceUtil.distance3(coordinates1, coordinates2);
 //            log.info("计算出的距离:{}", distance);
 
@@ -322,17 +403,13 @@ public class FilterServiceImpl implements FilterService {
         int i = 1;
         Double min = null;
         for (FilterHotDto jsonData : jsonDataList) {
-//            Double[] coordinates1 = new Double[2];
-//            coordinates1[0] = queryJsonData.getLon();
-//            coordinates1[1] = queryJsonData.getLat();
-//            coordinates1[2] = queryJsonData.getZ();
+
 
             Double[] coordinates2 = new Double[3];
             coordinates2[0] = jsonData.getLocation()[0];
             coordinates2[1] = jsonData.getLocation()[1];
             coordinates2[2] = jsonData.getLocation()[2];
 
-//            Double distance = DistanceUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
             Double distance = DistanceUtil.distance3(coordinates1, coordinates2);
 //            log.info("计算出的距离:{}", distance);
             // 默认取第一值
@@ -359,9 +436,8 @@ public class FilterServiceImpl implements FilterService {
 
     @Test
     public void test(){
-        double a= 8.346455383936777E-4;
-        double b= 0.001518440040006915;
-        System.out.println( a < b);
+       String path = "data/aa/ldata/bbb/data/cc";
+        System.out.println(StrUtil.subAfter(path, "/data/", true));
     }
 
 

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

@@ -122,7 +122,7 @@ public class InitServiceImpl implements InitService {
         String laserDataPath = path + "/laserData";
         log.info("laserDataPath: {}", laserDataPath);
 
-        // step1 创建t_route表
+        // step1 创建t_route表(路径规划)
         createRoute(sceneCode, laserDataPath);
 
         // step3 创建poi表, 热点,默认没有
@@ -674,7 +674,6 @@ public class InitServiceImpl implements InitService {
 
 
         ConfigEntity entity = new ConfigEntity();
-//        entity.setId(SnowFlakeUUidUtils.getUuid("CF"));
         entity.setId(sceneCode);
         entity.setUpdateTime(LocalDateTime.now());
         entity.setData(resData);

+ 1 - 3
laser/src/main/resources/sh/startup.sh

@@ -1,12 +1,10 @@
 #!/bin/sh
 RESOURCE_NAME=indoor.jar
 rm -f tpid
-nohup java -jar ./$RESOURCE_NAME --spring.profiles.active=sit &
-echo $! > tpid
+nohup java -jar ./$RESOURCE_NAME --spring.profiles.active=sit & echo $! > tpid
 echo Start Success!
 echo
 
-#tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`