|
|
@@ -1,9 +1,11 @@
|
|
|
package com.fdkankan.contro.mq.listener;
|
|
|
|
|
|
import cn.hutool.core.codec.Base64;
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.io.FileUtil;
|
|
|
import cn.hutool.core.util.CharsetUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.fdkankan.common.constant.ErrorCode;
|
|
|
@@ -38,6 +40,8 @@ import javax.annotation.Resource;
|
|
|
import java.io.File;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Slf4j
|
|
|
@Component
|
|
|
@@ -66,6 +70,8 @@ public class UploadSceneListener {
|
|
|
private ICommonService commonService;
|
|
|
@Resource
|
|
|
private RedisUtil redisUtil;
|
|
|
+ @Autowired
|
|
|
+ private IRelocationInitService relocationInitService;
|
|
|
|
|
|
|
|
|
|
|
|
@@ -84,6 +90,7 @@ public class UploadSceneListener {
|
|
|
String num = jsonObject.getString("num");;
|
|
|
String zipPath = jsonObject.getString("zipPath");
|
|
|
String sourceType = jsonObject.getString("sourceType");
|
|
|
+ boolean relocation = jsonObject.getBooleanValue("relocation");
|
|
|
String zipDir = FileUtil.getParent(zipPath, 1) + File.separator;
|
|
|
String zipName = FileUtil.getName(zipPath);
|
|
|
String uuid = FileUtil.getPrefix(zipName);
|
|
|
@@ -98,7 +105,11 @@ public class UploadSceneListener {
|
|
|
}
|
|
|
//资源包类型 orig-原始数据 offline 离线包
|
|
|
if(UploadSceneSourceType.ORIG.getCode().equalsIgnoreCase(sourceType)){
|
|
|
- this.uploadSceneOirg(num, zipDir + uuid);
|
|
|
+ if(relocation){
|
|
|
+
|
|
|
+ }else{
|
|
|
+ this.uploadSceneOirg(num, zipDir + uuid);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// if(UploadSceneSourceType.OFFLINE.getCode().equalsIgnoreCase(sourceType)){
|
|
|
@@ -144,78 +155,113 @@ public class UploadSceneListener {
|
|
|
User user = userService.getById(userId);
|
|
|
String params = snCode + "#" + fileId + "#" + uniCode;
|
|
|
String encode = Base64.encode(RSAEncrypt.encrypt(RSAEncrypt.loadPublicKeyByStr(RSAEncrypt.loadPublicKeyByFile()), params.getBytes(StandardCharsets.UTF_8)));
|
|
|
- if(camType == 9 || camType == 10 || camType == 11){
|
|
|
+ if(camType == 9 || camType == 10 || camType == 11 || camType == 12){
|
|
|
sceneFileBuildService.turntableUploadSuccess(encode, user, true, false);
|
|
|
}else{
|
|
|
sceneFileBuildService.uploadSuccessBuild(encode, user, true, false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void uploadSceneOffline(String num, String sourcePath) throws Exception {
|
|
|
- ScenePlus scenePlusDb = scenePlusService.getScenePlusByNum(num);
|
|
|
- ScenePlusExt scenePlusExtDb = scenePlusExtService.getScenePlusExtByPlusId(scenePlusDb.getId());
|
|
|
- NameFileFilter fileFilter = new NameFileFilter("scene.json");
|
|
|
- File sceneJsonFile = FileUtil.loopFiles(sourcePath, fileFilter).get(0);
|
|
|
+ private void uploadSceneRelocation(String sourcePath) throws Exception {
|
|
|
+ NameFileFilter fileFilter = new NameFileFilter("data.fdage");
|
|
|
+ File dataFdageFile = FileUtil.loopFiles(sourcePath, fileFilter).stream().filter(v -> !v.getAbsolutePath().contains("/backup/")).findFirst().get();
|
|
|
|
|
|
//去读data.fdage
|
|
|
- if(sceneJsonFile != null && !sceneJsonFile.exists()){
|
|
|
- throw new BusinessException(ErrorCode.FAILURE_CODE_4002.code(), ErrorCode.FAILURE_CODE_4002.formatMessage("scene.json"));
|
|
|
+ if(dataFdageFile != null && !dataFdageFile.exists()){
|
|
|
+ throw new BusinessException(ErrorCode.FAILURE_CODE_4002.code(), ErrorCode.FAILURE_CODE_4002.formatMessage("data.fdage"));
|
|
|
}
|
|
|
+ JSONObject dataFdageObj = JSONObject.parseObject(FileUtil.readUtf8String(dataFdageFile));
|
|
|
+ String snCode = dataFdageObj.getJSONObject("cam").getString("uuid");
|
|
|
+ String uuidTime = dataFdageObj.getString("uuidtime");
|
|
|
+ String uniCode = snCode + "_" + uuidTime;
|
|
|
+ String fileId = sceneFileBuildService.getFileId(snCode, uniCode);
|
|
|
+ String homePath = ConstantFilePath.OSS_PREFIX + snCode + File.separator + fileId + File.separator + uniCode + File.separator;
|
|
|
+ String fileDir = sourcePath + File.separator + uniCode;//本地版压缩包包含了一层unicode目录
|
|
|
+ fYunFileService.uploadFileByCommand(fileDir, homePath);
|
|
|
|
|
|
- SceneJsonBean sceneJsonBean = JSONObject.parseObject(FileUtil.readUtf8String(sceneJsonFile), SceneJsonBean.class);
|
|
|
- String sceneViewDataPath = "/oss/4dkankan/" + String.format(UploadFilePath.VIEW_PATH, num);
|
|
|
- FileUtil.mkdir(sceneViewDataPath);
|
|
|
- String cpCmd = "cp -p -r " + sourcePath + "/env/wwwroot/scene_view_data/" + num +"/* " + sceneViewDataPath;
|
|
|
- CmdUtils.callLineSh(cpCmd);
|
|
|
-
|
|
|
- sceneJsonBean.setUploadType("offline");
|
|
|
- String sceneJsonKey = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "scene.json";
|
|
|
- fYunFileService.uploadFile(JSON.toJSONString(sceneJsonBean).getBytes(StandardCharsets.UTF_8), sceneJsonKey);
|
|
|
-
|
|
|
- String key = String.format(RedisKey.SCENE_JSON, num);
|
|
|
- if(redisUtil.hasKey(key)){
|
|
|
- redisUtil.del(key);
|
|
|
+ //判断是否是圆周率压缩包
|
|
|
+ //判断是否有重定位关系,如果有,推送到激光系统去做初始化处理
|
|
|
+ String sxUuid = dataFdageObj.getString("parentScene");
|
|
|
+ ScenePlus sxScenePlus = scenePlusService.getByFileId(sxUuid);
|
|
|
+ if(sxScenePlus == null){
|
|
|
+ throw new RuntimeException("深巡场景不存在或已删除");
|
|
|
}
|
|
|
|
|
|
- //容量统计
|
|
|
- Long space = commonService.getSpace(num);
|
|
|
-
|
|
|
- String sceneJsonStr = FileUtil.readUtf8String(sceneJsonFile);
|
|
|
- ScenePlus scenePlus = JSON.parseObject(sceneJsonStr, ScenePlus.class);
|
|
|
- scenePlus.setId(scenePlusDb.getId());
|
|
|
- scenePlus.setSceneStatus(SceneStatus.NO_DISPLAY.code());
|
|
|
- scenePlus.setPayStatus(PayStatus.PAY.code());
|
|
|
- scenePlus.setCreateTime(null);
|
|
|
- scenePlus.setUpdateTime(null);
|
|
|
- scenePlusService.updateById(scenePlus);
|
|
|
-
|
|
|
- ScenePlusExt scenePlusExt = JSON.parseObject(sceneJsonStr, ScenePlusExt.class);
|
|
|
- scenePlusExt.setPlusId(scenePlusExtDb.getPlusId());
|
|
|
- scenePlusExt.setId(scenePlusExtDb.getId());
|
|
|
- scenePlusExt.setCreateTime(null);
|
|
|
- scenePlusExt.setWebSite("/" + sceneProNewUrl + scenePlus.getNum());
|
|
|
- scenePlusExt.setAlgorithmTime(new Date());
|
|
|
- scenePlusExt.setSpace(space);
|
|
|
- scenePlusExtService.updateById(scenePlusExt);
|
|
|
-
|
|
|
- SceneEditInfo sceneEditInfo = JSON.parseObject(sceneJsonStr, SceneEditInfo.class);
|
|
|
- sceneEditInfo.setId(null);
|
|
|
- sceneEditInfo.setScenePlusId(scenePlusDb.getId());
|
|
|
- sceneEditInfo.setCreateTime(null);
|
|
|
- sceneEditInfoService.save(sceneEditInfo);
|
|
|
-
|
|
|
- SceneEditInfoExt sceneEditInfoExt = JSON.parseObject(sceneJsonStr, SceneEditInfoExt.class);
|
|
|
- sceneEditInfoExt.setId(null);
|
|
|
- sceneEditInfoExt.setScenePlusId(scenePlusDb.getId());
|
|
|
- sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId());
|
|
|
- sceneEditInfoExt.setCreateTime(null);
|
|
|
- sceneEditInfoExtService.save(sceneEditInfoExt);
|
|
|
-
|
|
|
- SceneEditControls sceneEditControls = JSON.parseObject(sceneJsonStr, SceneEditControls.class);
|
|
|
- sceneEditControls.setId(null);
|
|
|
- sceneEditControls.setEditInfoId(sceneEditInfo.getId());
|
|
|
- sceneEditControls.setCreateTime(null);
|
|
|
- sceneEditControlsService.save(sceneEditControls);
|
|
|
+ JSONArray points = dataFdageObj.getJSONArray("points");
|
|
|
+ List<String> relocationImages = points.stream().map(v -> homePath + "images" + File.separator + ((JSONObject) v).getString("name")).collect(Collectors.toList());
|
|
|
+ RelocationInit relocationInit = new RelocationInit();
|
|
|
+ relocationInit.setUnicode(sxUuid);
|
|
|
+ relocationInit.setNum(sxScenePlus.getNum());
|
|
|
+ relocationInit.setRelocationImages(relocationImages);
|
|
|
+ relocationInit.setImgSource("yzl");
|
|
|
+ relocationInitService.save(relocationInit);
|
|
|
}
|
|
|
|
|
|
+// private void uploadSceneOffline(String num, String sourcePath) throws Exception {
|
|
|
+// ScenePlus scenePlusDb = scenePlusService.getScenePlusByNum(num);
|
|
|
+// ScenePlusExt scenePlusExtDb = scenePlusExtService.getScenePlusExtByPlusId(scenePlusDb.getId());
|
|
|
+// NameFileFilter fileFilter = new NameFileFilter("scene.json");
|
|
|
+// File sceneJsonFile = FileUtil.loopFiles(sourcePath, fileFilter).get(0);
|
|
|
+//
|
|
|
+// //去读data.fdage
|
|
|
+// if(sceneJsonFile != null && !sceneJsonFile.exists()){
|
|
|
+// throw new BusinessException(ErrorCode.FAILURE_CODE_4002.code(), ErrorCode.FAILURE_CODE_4002.formatMessage("scene.json"));
|
|
|
+// }
|
|
|
+//
|
|
|
+// SceneJsonBean sceneJsonBean = JSONObject.parseObject(FileUtil.readUtf8String(sceneJsonFile), SceneJsonBean.class);
|
|
|
+// String sceneViewDataPath = "/oss/4dkankan/" + String.format(UploadFilePath.VIEW_PATH, num);
|
|
|
+// FileUtil.mkdir(sceneViewDataPath);
|
|
|
+// String cpCmd = "cp -p -r " + sourcePath + "/env/wwwroot/scene_view_data/" + num +"/* " + sceneViewDataPath;
|
|
|
+// CmdUtils.callLineSh(cpCmd);
|
|
|
+//
|
|
|
+// sceneJsonBean.setUploadType("offline");
|
|
|
+// String sceneJsonKey = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "scene.json";
|
|
|
+// fYunFileService.uploadFile(JSON.toJSONString(sceneJsonBean).getBytes(StandardCharsets.UTF_8), sceneJsonKey);
|
|
|
+//
|
|
|
+// String key = String.format(RedisKey.SCENE_JSON, num);
|
|
|
+// if(redisUtil.hasKey(key)){
|
|
|
+// redisUtil.del(key);
|
|
|
+// }
|
|
|
+//
|
|
|
+// //容量统计
|
|
|
+// Long space = commonService.getSpace(num);
|
|
|
+//
|
|
|
+// String sceneJsonStr = FileUtil.readUtf8String(sceneJsonFile);
|
|
|
+// ScenePlus scenePlus = JSON.parseObject(sceneJsonStr, ScenePlus.class);
|
|
|
+// scenePlus.setId(scenePlusDb.getId());
|
|
|
+// scenePlus.setSceneStatus(SceneStatus.NO_DISPLAY.code());
|
|
|
+// scenePlus.setPayStatus(PayStatus.PAY.code());
|
|
|
+// scenePlus.setCreateTime(null);
|
|
|
+// scenePlus.setUpdateTime(null);
|
|
|
+// scenePlusService.updateById(scenePlus);
|
|
|
+//
|
|
|
+// ScenePlusExt scenePlusExt = JSON.parseObject(sceneJsonStr, ScenePlusExt.class);
|
|
|
+// scenePlusExt.setPlusId(scenePlusExtDb.getPlusId());
|
|
|
+// scenePlusExt.setId(scenePlusExtDb.getId());
|
|
|
+// scenePlusExt.setCreateTime(null);
|
|
|
+// scenePlusExt.setWebSite("/" + sceneProNewUrl + scenePlus.getNum());
|
|
|
+// scenePlusExt.setAlgorithmTime(new Date());
|
|
|
+// scenePlusExt.setSpace(space);
|
|
|
+// scenePlusExtService.updateById(scenePlusExt);
|
|
|
+//
|
|
|
+// SceneEditInfo sceneEditInfo = JSON.parseObject(sceneJsonStr, SceneEditInfo.class);
|
|
|
+// sceneEditInfo.setId(null);
|
|
|
+// sceneEditInfo.setScenePlusId(scenePlusDb.getId());
|
|
|
+// sceneEditInfo.setCreateTime(null);
|
|
|
+// sceneEditInfoService.save(sceneEditInfo);
|
|
|
+//
|
|
|
+// SceneEditInfoExt sceneEditInfoExt = JSON.parseObject(sceneJsonStr, SceneEditInfoExt.class);
|
|
|
+// sceneEditInfoExt.setId(null);
|
|
|
+// sceneEditInfoExt.setScenePlusId(scenePlusDb.getId());
|
|
|
+// sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId());
|
|
|
+// sceneEditInfoExt.setCreateTime(null);
|
|
|
+// sceneEditInfoExtService.save(sceneEditInfoExt);
|
|
|
+//
|
|
|
+// SceneEditControls sceneEditControls = JSON.parseObject(sceneJsonStr, SceneEditControls.class);
|
|
|
+// sceneEditControls.setId(null);
|
|
|
+// sceneEditControls.setEditInfoId(sceneEditInfo.getId());
|
|
|
+// sceneEditControls.setCreateTime(null);
|
|
|
+// sceneEditControlsService.save(sceneEditControls);
|
|
|
+// }
|
|
|
+
|
|
|
}
|