|
@@ -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));
|
|
|
}
|
|
|
|
|
|
|