Explorar o código

新增测量模块

wuweihao %!s(int64=4) %!d(string=hai) anos
pai
achega
915b7d84d8

+ 52 - 0
laser/src/main/java/com/fdkankan/indoor/core/controller/MeasurementController.java

@@ -0,0 +1,52 @@
+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.MapDto;
+import com.fdkankan.indoor.core.entity.dto.MeasurementDto;
+import com.fdkankan.indoor.core.service.MapService;
+import com.fdkankan.indoor.core.service.MeasurementService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * Created by owen on 2021/8/12 0002 20:39
+ */
+@Api(tags = "Measurement-测量")
+@RestController
+public class MeasurementController {
+
+    @Autowired
+    MeasurementService entityService;
+
+    @WebControllerLog(description = "测量-新增/修改数据")
+    @ApiOperation(value = "新增/修改数据")
+    @PostMapping("indoor/{sceneCode}/api/newmeasurements")
+    public Object update(@PathVariable String sceneCode, @RequestBody List<MeasurementDto> param){
+        Result result = entityService.update(sceneCode, param);
+        return result.getData();
+    }
+
+
+    @WebControllerLog(description = "测量-获取测量信息列表")
+    @ApiOperation(value = "获取测量信息列表")
+    @GetMapping("indoor/{sceneCode}/api/newmeasurements")
+    public Object getList(@PathVariable String sceneCode){
+        Result result = entityService.getList(sceneCode);
+        return result.getData();
+    }
+
+
+    @WebControllerLog(description = "测量-删除")
+    @ApiOperation(value = "删除")
+    @DeleteMapping("indoor/{sceneCode}/api/newmeasurements/{dataId}")
+    public Object removeByDataId(@PathVariable String sceneCode, @PathVariable Integer dataId){
+        Result result = entityService.removeByDataId(sceneCode, dataId);
+        return result.getData();
+    }
+}

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

@@ -24,7 +24,6 @@ public class RouteController {
     RouteService entityService;
 
     /**
-     * http://127.0.0.1:9294/indoor/test3/api/route?destination_latitude=29.877832321748773&destination_longitude=121.61113968215992&destination_z=-0.36150911602493974&source_latitude=29.87753305947931&source_longitude=121.6110424052154&source_z=-0.2624532010303853
      * http://192.168.0.135:9294/indoor/test3/api/route?destination_latitude=-3.3754012098200965&destination_longitude=-2.143694831230416&destination_z=-1.1803865408990568&source_latitude=-7.905951689748807&source_longitude=5.358192084229412&source_z=-1.3145928255248511
      * @param sceneCode
      * @param param

+ 13 - 4
laser/src/main/java/com/fdkankan/indoor/core/controller/TestController.java

@@ -5,10 +5,7 @@ import com.fdkankan.indoor.base.util.Result;
 import com.fdkankan.indoor.base.util.SnowFlakeUUidUtils;
 import com.fdkankan.indoor.core.entity.OwenEntity;
 import com.fdkankan.indoor.core.entity.SpecialPointEntity;
-import com.fdkankan.indoor.core.service.OwenService;
-import com.fdkankan.indoor.core.service.SiteService;
-import com.fdkankan.indoor.core.service.SpecialPointService;
-import com.fdkankan.indoor.core.service.TestService;
+import com.fdkankan.indoor.core.service.*;
 import com.fdkankan.indoor.core.entity.vo.HaoVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -40,6 +37,9 @@ public class TestController {
     @Autowired
     SiteService siteService;
 
+    @Autowired
+    MeasurementService measurementService;
+
     @ApiOperation("修改数据")
     @PostMapping("edit/{sceneCode}")
     public Result edit(@PathVariable String sceneCode, @RequestBody List<HaoVo> param){
@@ -127,5 +127,14 @@ public class TestController {
     }
 
 
+    @ApiOperation("measure-初始化数据")
+    @GetMapping("measure/init/{sceneCode}")
+    public Result measureInit(@PathVariable String sceneCode){
+        return  measurementService.measureInit(sceneCode);
+
+
+    }
+
+
 
 }

+ 22 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/MeasurementEntity.java

@@ -0,0 +1,22 @@
+package com.fdkankan.indoor.core.entity;
+
+import com.fdkankan.indoor.core.entity.dto.MeasurementDto;
+import com.fdkankan.indoor.core.entity.dto.PoiHotDto;
+import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.List;
+
+/**
+ * Created by owen on 2021/7/27 0027 10:42
+ * 测量表
+ */
+@Document(collection = "t_measurement")
+@Data
+public class MeasurementEntity extends BaseEntity {
+
+
+    private List<MeasurementDto> data;
+
+
+}

+ 19 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/dto/MeasureGeometry.java

@@ -0,0 +1,19 @@
+package com.fdkankan.indoor.core.entity.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by owen on 2021/8/12 0012 12:02
+ * 测量子表
+ */
+@Data
+public class MeasureGeometry {
+
+    private String type;
+
+    private List<Double[]> coordinates;
+
+
+}

+ 21 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/dto/MeasurePoint.java

@@ -0,0 +1,21 @@
+package com.fdkankan.indoor.core.entity.dto;
+
+import lombok.Data;
+
+/**
+ * Created by owen on 2021/8/12 0012 12:02
+ * 测量子表
+ */
+@Data
+public class MeasurePoint {
+
+    private Integer image_id;
+
+    private Double[] location;
+
+    private Double[] orientation;
+
+    private String fov;
+
+
+}

+ 28 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/dto/MeasurementDto.java

@@ -0,0 +1,28 @@
+package com.fdkankan.indoor.core.entity.dto;
+
+import lombok.Data;
+
+/**
+ * Created by owen on 2021/8/12 0012 11:58
+ */
+@Data
+public class MeasurementDto {
+
+
+    private Integer id;
+
+    private String name;
+
+    private Boolean visible;
+
+    private MeasurePoint point_of_view;
+
+    private String type;
+
+    private MeasureGeometry geometry;
+
+    private Long created_date;
+
+    private String note;
+
+}

+ 13 - 0
laser/src/main/java/com/fdkankan/indoor/core/mapper/MeasurementMapper.java

@@ -0,0 +1,13 @@
+package com.fdkankan.indoor.core.mapper;
+
+import com.fdkankan.indoor.core.entity.MeasurementEntity;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by owen on 2021/8/12 0027 15:19
+ */
+@Component
+public interface MeasurementMapper extends MongoRepository<MeasurementEntity, String> {
+
+}

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

@@ -0,0 +1,26 @@
+package com.fdkankan.indoor.core.service;
+
+
+import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.entity.MeasurementEntity;
+import com.fdkankan.indoor.core.entity.dto.MeasurementDto;
+
+import java.util.List;
+
+/**
+ * Created by owen on 2021/7/28 0028 20:05
+ */
+public interface MeasurementService {
+
+    void remove(String sceneCode);
+
+    void save(MeasurementEntity entity);
+
+    Result update(String sceneCode, List<MeasurementDto> param);
+
+    Result getList(String sceneCode);
+
+    Result measureInit(String sceneCode);
+
+    Result removeByDataId(String sceneCode, Integer dataId);
+}

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

@@ -81,6 +81,9 @@ public class InitServiceImpl implements InitService {
     @Autowired
     RecountInfoService recountInfoService;
 
+    @Autowired
+    MeasurementService measurementService;
+
     /**
      * initDataStep1
      * 有顺序分,不能乱
@@ -139,6 +142,9 @@ public class InitServiceImpl implements InitService {
          //step8 替换index.html、/locat/addDataSet.html的场景码, @replace
         replaceHtml(sceneCode);
 
+        // step9 创建 t_measurement表, 测量表,空数据
+        createMeasurement(sceneCode);
+
         // 保存initDataStep1 状态
         if (init == null) {
              init = new InitEntity();
@@ -159,6 +165,15 @@ public class InitServiceImpl implements InitService {
         return Result.success();
     }
 
+    private void createMeasurement(String sceneCode) {
+        MeasurementEntity entity = new MeasurementEntity();
+        entity.setCreateTime(LocalDateTime.now());
+        entity.setId(sceneCode);
+        entity.setData(new ArrayList<>());
+        measurementService.save(entity);
+        log.info("初始化Measurement完成");
+    }
+
 
     /**
      * 这个方法可以本地调试
@@ -323,6 +338,8 @@ public class InitServiceImpl implements InitService {
         mapService.remove(sceneCode);
         routeService.remove(sceneCode);
         specialPointService.remove(sceneCode);
+        // 2021-08-12
+        measurementService.remove(sceneCode);
         log.info("删除初始化数据完成");
 
     }

+ 124 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/impl/MeasurementServiceImpl.java

@@ -0,0 +1,124 @@
+package com.fdkankan.indoor.core.service.impl;
+
+import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.entity.MeasurementEntity;
+import com.fdkankan.indoor.core.entity.dto.MeasurementDto;
+import com.fdkankan.indoor.core.mapper.MeasurementMapper;
+import com.fdkankan.indoor.core.service.MeasurementService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+
+/**
+ * Created by owen on 2021/7/28 0028 20:05
+ */
+@Service
+@Slf4j
+public class MeasurementServiceImpl extends IBaseServiceImpl implements MeasurementService {
+
+    @Autowired
+    MeasurementMapper entityMapper;
+
+
+    @Override
+    public void remove(String sceneCode) {
+        entityMapper.deleteById(sceneCode);
+    }
+
+    @Override
+    public void save(MeasurementEntity entity) {
+        entityMapper.save(entity);
+    }
+
+    @Override
+    public Result update(String sceneCode, List<MeasurementDto> param) {
+        MeasurementEntity entity = findById(sceneCode);
+        List<MeasurementDto> data = entity.getData();
+
+        Integer maxId = 0;
+        if (data.size() != 0){
+            // 遍历参数,获取id, 保存新list
+            List<Integer> collectId = param.stream().map(MeasurementDto::getId).collect(Collectors.toList());
+            log.info("参数id: {}", collectId);
+            // 判断原数据是否包含参数里的id, 包含则删除后重新添加
+            data = data.stream().filter(p -> !collectId.contains(p.getId())).collect(Collectors.toList());
+            log.info("过滤后数量: {}", data.size());
+
+            if (data.size() != 0){
+                // 获取最大id
+                Optional<MeasurementDto> max = data.stream().max(Comparator.comparingInt(MeasurementDto::getId));
+                maxId = max.get().getId();
+            }
+
+        }
+
+
+
+        // 合并两个流, 处理id
+        for (MeasurementDto dto : param) {
+            if (dto.getId() == null) {
+                maxId ++;
+                log.info("处理后maxId: {}", maxId);
+                dto.setId(maxId);
+            }
+
+            data.add(dto);
+        }
+
+        log.info("添加后数量: {}", data.size());
+
+        // 更新后数据保存数据库
+        entity.setData(data);
+
+        this.save(entity);
+
+        return Result.success(getDataBySceneCode(sceneCode));
+    }
+
+    @Override
+    public Result getList(String sceneCode) {
+        return Result.success(getDataBySceneCode(sceneCode));
+    }
+
+    @Override
+    public Result measureInit(String sceneCode) {
+        MeasurementEntity  entity =  new MeasurementEntity();
+            entity.setId(sceneCode);
+            entity.setCreateTime(LocalDateTime.now());
+        entity.setData(new ArrayList<>());
+            this.save(entity);
+        return Result.success();
+    }
+
+    @Override
+    public Result removeByDataId(String sceneCode, Integer dataId) {
+        MeasurementEntity entity = findById(sceneCode);
+        List<MeasurementDto> data = entity.getData();
+         data = data.stream().filter(p -> !dataId.equals(p.getId())).collect(Collectors.toList());
+
+         entity.setData(data);
+         entity.setUpdateTime(LocalDateTime.now());
+         this.save(entity);
+        return Result.success();
+    }
+
+    private MeasurementEntity findById(String sceneCode){
+        Optional<MeasurementEntity> optional = entityMapper.findById(sceneCode);
+        return optional.orElse(null);
+    }
+
+    private List<MeasurementDto> getDataBySceneCode(String sceneCode){
+        MeasurementEntity entity = findById(sceneCode);
+        return entity.getData();
+
+    }
+
+}

+ 64 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/impl/RouteServiceImpl.java

@@ -1,5 +1,9 @@
 package com.fdkankan.indoor.core.service.impl;
 
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import com.fdkankan.indoor.base.constant.ConfigConstant;
 import com.fdkankan.indoor.base.constant.MsgCode;
 import com.fdkankan.indoor.base.convert.GetRoute;
 import com.fdkankan.indoor.base.exception.BaseRuntimeException;
@@ -12,9 +16,12 @@ import com.fdkankan.indoor.core.service.ControlPointService;
 import com.fdkankan.indoor.core.service.RouteService;
 import lombok.extern.slf4j.Slf4j;
 import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 
@@ -31,6 +38,9 @@ public class RouteServiceImpl implements RouteService {
     @Autowired
     ControlPointService controlPointService;
 
+    @Autowired
+    ConfigConstant configConstant;
+
     @Override
     public void save(RouteEntity entity) {
         entityMapper.save(entity);
@@ -42,10 +52,64 @@ public class RouteServiceImpl implements RouteService {
 
         // 查询控制点
         ControlPointEntity controlPointEntity = controlPointService.findById(sceneCode);
+        // route数据:头尾数据是没有id值的,其他都有
         JSONArray route = GetRoute.getRoute(data, param, controlPointEntity);
+
+        // 2021-08-12 测试用
+        testRote(route, data, sceneCode);
+
         return Result.success(route);
     }
 
+    /**
+     * 2021-08-12
+     * 测试用
+     * @param route
+     * @param data
+     * @param sceneCode
+     */
+    private void testRote(JSONArray route, List<String> data, String sceneCode){
+        // id是行数 -> 起始, 汇总的行数ids
+        List<Integer> ids = new ArrayList<>();
+        for (Object o : route) {
+            JSONObject json = JSONObject.fromObject(o);
+            boolean flag = json.has("id");
+            if (flag){
+                int id = json.getInt("id");
+                // 行数 是id -1
+                ids.add(id -1 );
+            }
+        }
+        // 写文件
+        writeRouteData(ids, data, sceneCode);
+    }
+
+
+    // 根据id写文件
+    private void writeRouteData(List<Integer> ids, List<String> data, String  sceneCode){
+        List<String> result = new ArrayList<>();
+        // 行数
+        for (int i = 0; i < data.size() ; i++) {
+            // 从相等行数获取到结束, 数据格式: v x y z
+            if (ids.contains(i)) {
+                String s = data.get(i);
+                String[] str = s.split(" ");
+                String res = "v "+ str[0] + " " + str[1] + " " + str[2] ;
+                result.add(res);
+            }
+        }
+
+        log.info("ids数量: {}", ids.size());
+        log.info("result数量: {}", result.size());
+
+        // 保存地址
+        String time = DateUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmss");
+        String savePath = configConstant.serverBasePath + "/route/" + sceneCode + "_" + time + ".txt";
+        log.info("保存地址: {}", savePath);
+        FileUtil.writeLines(result, savePath, "utf-8");
+
+    }
+
     @Override
     public void remove(String sceneCode) {
         entityMapper.deleteById(sceneCode);