Bläddra i källkod

保存漫游可行数据接口

dengsixing 3 år sedan
förälder
incheckning
c8d7a28e08

+ 1 - 1
4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/SceneEditController.java

@@ -349,7 +349,7 @@ public class SceneEditController extends BaseController {
      * @return com.fdkankan.common.response.ResultData
      **/
     @PostMapping(value = "/saveLinkPano")
-    public ResultData saveLinkPano(@RequestBody SceneEditParamVO param) throws Exception {
+    public ResultData saveLinkPano(@RequestBody @Validated SaveRoamParamVO param) throws Exception {
         return sceneProService.saveLinkPano(param);
     }
 

+ 2 - 1
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/ISceneProService.java

@@ -6,6 +6,7 @@ import com.fdkankan.common.response.ResultData;
 import com.fdkankan.scene.entity.ScenePro;
 import com.fdkankan.scene.entity.SceneProPO;
 import com.fdkankan.scene.vo.SaveHotParamVO;
+import com.fdkankan.scene.vo.SaveRoamParamVO;
 import com.fdkankan.scene.vo.SceneEditParamVO;
 import com.fdkankan.scene.vo.SceneParamVO;
 import com.fdkankan.scene.vo.SceneVO;
@@ -92,7 +93,7 @@ public interface ISceneProService extends IService<ScenePro> {
 
     ResultData saveScreencapData(SceneEditParamVO base) throws Exception;
 
-    ResultData saveLinkPano(SceneEditParamVO base) throws Exception;
+    ResultData saveLinkPano(SaveRoamParamVO param) throws Exception;
 
     ResultData saveHotVisible(SceneEditParamVO base) throws Exception;
 

+ 6 - 3
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -152,9 +152,12 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         String publicUserPath = String.format(UploadFilePath.USER_VIEW_PATH, sceneNum);
         uploadToOssUtil.deleteFile(publicUserPath);
 
-        //复制编辑数据到发布目录
-        String editUserPath = String.format(UploadFilePath.USER_EDIT_PATH, sceneNum);
-        uploadToOssUtil.copyFiles(editUserPath,publicUserPath);
+//        String editUserPath = String.format(UploadFilePath.USER_EDIT_PATH, sceneNum);
+        //复制编辑目录到发布目录
+        String editPath = String.format(UploadFilePath.EDIT_PATH, param.getNum());
+        String viewPath = String.format(UploadFilePath.VIEW_PATH, param.getNum());
+        uploadToOssUtil.copyFiles(editPath,viewPath);
+
 
         return ResultData.ok();
     }

+ 81 - 94
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java

@@ -13,6 +13,7 @@ import com.aliyun.oss.model.ListObjectsRequest;
 import com.aliyun.oss.model.OSSObjectSummary;
 import com.aliyun.oss.model.ObjectListing;
 import com.aliyun.oss.model.ObjectMetadata;
+import com.amazonaws.services.storagegateway.model.StorageGatewayError;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -2225,20 +2226,21 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             break;
         }
 
-        LambdaUpdateWrapper<SceneEditInfo> updateWrapper =
-            new LambdaUpdateWrapper<SceneEditInfo>()
-                .setSql("version=version+" + 1)
-                .eq(SceneEditInfo::getSceneProId, sceneProId);
-
-        //如果有热点数据,更新数据库tags标识为1,否则为0
-        if(hashTags){
-            updateWrapper.set(SceneEditInfo::getTags, CommonStatus.YES.code());
+        SceneEditInfo sceneEditInfo = sceneEditInfoService.getBySceneProId(sceneProId);
+        if(Objects.isNull(sceneEditInfo)){
+            sceneEditInfo = new SceneEditInfo();
+            sceneEditInfo.setSceneProId(sceneProId);
+            sceneEditInfo.setTags(hashTags ? CommonStatus.YES.code() : CommonStatus.NO.code());
+            sceneEditInfoService.save(sceneEditInfo);
         }else{
-            updateWrapper.set(SceneEditInfo::getTags, CommonStatus.NO.code());
+            //更改场景编辑版本
+            sceneEditInfoService.update(
+                new LambdaUpdateWrapper<SceneEditInfo>()
+                .setSql("version=version+" + 1)
+                .set(SceneEditInfo::getTags, hashTags ? CommonStatus.YES.code() : CommonStatus.NO.code())
+                .eq(SceneEditInfo::getId, sceneEditInfo.getId()));
         }
 
-        //更改场景编辑版本
-        sceneEditInfoService.update(updateWrapper);
     }
 
     private void addOrUpdateHotData(String num, Map<String, String> addOrUpdateMap){
@@ -2635,8 +2637,8 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     }
 
     @Override
-//    @SystemServiceLog(description = "漫游可行")
-    public ResultData saveLinkPano(SceneEditParamVO base) throws Exception {
+//    @SystemServiceLog(description = "保存热点可见性的数据")
+    public ResultData saveHotVisible(SceneEditParamVO base) throws Exception {
         if(StrUtil.isEmpty(base.getData()) || StrUtil.isEmpty(base.getNum())){
             throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
         }
@@ -2646,7 +2648,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             return ResultData.error(ErrorCode.FAILURE_CODE_5005);
         }
 
-        JSONArray inputData = JSONObject.parseArray(base.getData());
+        JSONArray visiblePanos = JSONArray.parseArray(base.getData());
 
         StringBuffer dataBuf = new StringBuffer()
                 .append("data").append(File.separator)
@@ -2657,48 +2659,24 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
                 .append("images").append(scenePro.getNum())
                 .append(File.separator);
 
+        StringBuffer imagesBuffer = new StringBuffer(ConstantFilePath.SCENE_PATH).append(imagesBuf.toString());
         StringBuffer dataBuffer = new StringBuffer(ConstantFilePath.SCENE_PATH).append(dataBuf.toString());
 
-        File directory = new File(dataBuffer.toString());
-        if (!directory.exists()) {
-            directory.mkdirs();
-        }
-
-        JSONArray inputdata =  JSONArray.parseArray(base.getData());
-
-        String modeldataUrl = prefixAli + imagesBuf.toString() + "vision.modeldata?t=" + System.currentTimeMillis();
-        if("aws".equals(type)){
-            modeldataUrl = ConstantUrl.PREFIX_AWS + imagesBuf.toString() + "vision.modeldata?t=" + System.currentTimeMillis();
-        }
-        FileUtils.downLoadFromUrl(modeldataUrl, "vision.modeldata", dataBuffer.toString());
-        File file = new File(dataBuffer.toString() + "vision.modeldata");
-        if(!file.exists()) {
-            return ResultData.error(ErrorCode.FAILURE_CODE_5012);
+        File file = new File(dataBuffer.toString() + "hot.json");
+        if (!file.exists()) {
+            throw new BusinessException(ErrorCode.FAILURE_CODE_3018);
         }
-        ConvertUtils.convertVisionModelDataToTxt(dataBuffer.toString() + "vision.modeldata", dataBuffer.toString() + "vision.json");
 
-        String str = FileUtils.readFile(dataBuffer.toString() + "vision.json");
-        JSONObject json = JSONObject.parseObject(str);
-        JSONArray panos = json.getJSONArray("sweepLocations");
-        for (int i = 0; i < panos.size(); ++i) {
-            JSONObject pano = panos.getJSONObject(i);
-            for (int j = 0; j < inputData.size(); ++j) {
-                JSONObject jo = inputData.getJSONObject(j);
-                String currentPanoId = jo.getString("panoID");
-                JSONArray visibles = jo.getJSONArray("visibles");
-                JSONArray visibles3 = jo.getJSONArray("visibles3");
-                if (pano.getString("uuid").equals(currentPanoId)) {
-                    pano.put("visibles", visibles);
-                    pano.put("visibles3", visibles3);
+        String str = FileUtils.readFile(dataBuffer.toString() + "hot.json");
+        JSONArray hots = JSONArray.parseArray(str);
+        for (int i = 0; i < hots.size(); ++i) {
+            JSONObject hot = hots.getJSONObject(i);
+            for (int j = 0; j < visiblePanos.size(); ++j) {
+                if (hot.getString("sid").equals(((JSONObject) visiblePanos.get(j)).getString("sid"))) {
+                    hot.put("visiblePanos", ((JSONObject) visiblePanos.get(j)).getJSONArray("value"));
                 }
             }
         }
-        FileUtils.deleteFile(dataBuffer.toString() + "vision.json");
-        FileUtils.deleteFile(dataBuffer.toString() + "vision.modeldata");
-        FileUtils.writeFile(dataBuffer.toString() + "vision.json", json.toString());
-        ConvertUtils.convertTxtToVisionModelData(dataBuffer.toString() + "vision.json", dataBuffer.toString() + "vision.modeldata");
-        uploadToOssUtil.upload(dataBuffer.toString() + "vision.modeldata", imagesBuf.toString() + "vision.modeldata");
-
         String strsceneInfos = FileUtils.readFile(dataBuffer.toString() + "scene.json");
         JSONObject scenejson = new JSONObject();
         if(strsceneInfos!=null){
@@ -2709,73 +2687,82 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         FileUtils.writeFile(dataBuffer.toString() + "scene.json", scenejson.toString());
 
         SceneProEdit sceneProEdit = sceneProEditService.findByProId(scenePro.getId());
-        if (sceneProEdit == null ) {
-            return ResultData.error(ErrorCode.FAILURE_CODE_5005);
-        }
-
-        sceneProEdit.setVersion(scenejson.getIntValue("version") + 1);
+        sceneProEdit.setVersion(sceneProEdit.getVersion() + 1);
         sceneProEdit.setUpdateTime(Calendar.getInstance().getTime());
         sceneProEditService.updateById(sceneProEdit);
+
+        FileUtils.deleteFile(dataBuffer.toString() + "hot.json");
+        FileUtils.writeFile(dataBuffer.toString() + "hot.json", hots.toString());
         return ResultData.ok();
     }
 
     @Override
-//    @SystemServiceLog(description = "保存热点可见性的数据")
-    public ResultData saveHotVisible(SceneEditParamVO base) throws Exception {
-        if(StrUtil.isEmpty(base.getData()) || StrUtil.isEmpty(base.getNum())){
-            throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
-        }
+//    @SystemServiceLog(description = "漫游可行")
+    public ResultData saveLinkPano(SaveRoamParamVO param) throws Exception {
 
-        ScenePro scenePro = findBySceneNum(base.getNum());
+        ScenePro scenePro = this.findBySceneNum(param.getNum());
         if (scenePro == null ) {
             return ResultData.error(ErrorCode.FAILURE_CODE_5005);
         }
 
-        JSONArray visiblePanos = JSONArray.parseArray(base.getData());
+        JSONArray inputData = JSONObject.parseArray(param.getData());
 
-        StringBuffer dataBuf = new StringBuffer()
-                .append("data").append(File.separator)
-                .append("data").append(scenePro.getNum())
-                .append(File.separator);
-        StringBuffer imagesBuf = new StringBuffer()
-                .append("images").append(File.separator)
-                .append("images").append(scenePro.getNum())
-                .append(File.separator);
+        String localDataPath = String.format(ConstantFilePath.DATABUFFER_FORMAT, param.getNum());
+        File directory = new File(localDataPath);
+        if (!directory.exists()) {
+            directory.mkdirs();
+        }
+        String editImagesPath = String.format(UploadFilePath.IMG_EDIT_PATH, param.getNum());
+        String modeldataUrl = prefixAli + editImagesPath + "vision.modeldata?t=" + System.currentTimeMillis();
 
-        StringBuffer imagesBuffer = new StringBuffer(ConstantFilePath.SCENE_PATH).append(imagesBuf.toString());
-        StringBuffer dataBuffer = new StringBuffer(ConstantFilePath.SCENE_PATH).append(dataBuf.toString());
+        //如果是云存储,将vision.modeldata下载到本地,如果是本地存储,场景计算完就已经将这个文件拷贝到编辑目录了存在这个文件了,不需要再下载
+        if(!StorageType.LOCAL.code().equals(this.type)){
+            FileUtils.downLoadFromUrl(modeldataUrl, "vision.modeldata", localDataPath);
+        }
 
-        File file = new File(dataBuffer.toString() + "hot.json");
-        if (!file.exists()) {
-            throw new BusinessException(ErrorCode.FAILURE_CODE_3018);
+        //检查vision.modeldata本地是否存在,不存在抛出异常
+        File file = new File(localDataPath + "vision.modeldata");
+        if(!file.exists()) {
+            return ResultData.error(ErrorCode.FAILURE_CODE_5012);
         }
+        //将vision.modeldata解压缩至vision.json
+        ConvertUtils.convertVisionModelDataToTxt(localDataPath + "vision.modeldata", localDataPath + "vision.json");
 
-        String str = FileUtils.readFile(dataBuffer.toString() + "hot.json");
-        JSONArray hots = JSONArray.parseArray(str);
-        for (int i = 0; i < hots.size(); ++i) {
-            JSONObject hot = hots.getJSONObject(i);
-            for (int j = 0; j < visiblePanos.size(); ++j) {
-                if (hot.getString("sid").equals(((JSONObject) visiblePanos.get(j)).getString("sid"))) {
-                    hot.put("visiblePanos", ((JSONObject) visiblePanos.get(j)).getJSONArray("value"));
+        String str = FileUtils.readFile(localDataPath + "vision.json");
+        JSONObject json = JSONObject.parseObject(str);
+        JSONArray panos = json.getJSONArray("sweepLocations");
+        for (int i = 0; i < panos.size(); ++i) {
+            JSONObject pano = panos.getJSONObject(i);
+            for (int j = 0; j < inputData.size(); ++j) {
+                JSONObject jo = inputData.getJSONObject(j);
+                String currentPanoId = jo.getString("panoID");
+                JSONArray visibles = jo.getJSONArray("visibles");
+                JSONArray visibles3 = jo.getJSONArray("visibles3");
+                if (pano.getString("uuid").equals(currentPanoId)) {
+                    pano.put("visibles", visibles);
+                    pano.put("visibles3", visibles3);
                 }
             }
         }
-        String strsceneInfos = FileUtils.readFile(dataBuffer.toString() + "scene.json");
-        JSONObject scenejson = new JSONObject();
-        if(strsceneInfos!=null){
-            scenejson = JSONObject.parseObject(strsceneInfos);
-        }
+        FileUtils.deleteFile(localDataPath + "vision.json");
+        FileUtils.deleteFile(localDataPath + "vision.modeldata");
+        FileUtils.writeFile(localDataPath + "vision.json", json.toString());
+        ConvertUtils.convertTxtToVisionModelData(localDataPath + "vision.json", localDataPath + "vision.modeldata");
+        uploadToOssUtil.upload(localDataPath + "vision.modeldata", editImagesPath + "vision.modeldata");
 
-        scenejson.put("version", scenejson.getIntValue("version") + 1);
-        FileUtils.writeFile(dataBuffer.toString() + "scene.json", scenejson.toString());
+        //更新版本号
+        SceneEditInfo editInfo = sceneEditInfoService.getBySceneProId(scenePro.getId());
+        if(Objects.isNull(editInfo)){
+            editInfo = new SceneEditInfo();
+            editInfo.setSceneProId(scenePro.getId());
+            sceneEditInfoService.save(editInfo);
+        }else{
+            sceneEditInfoService.update(new LambdaUpdateWrapper<SceneEditInfo>()
+                        .setSql("version=version+" + 1)
+                        .eq(SceneEditInfo::getId, editInfo.getId()));
+        }
 
-        SceneProEdit sceneProEdit = sceneProEditService.findByProId(scenePro.getId());
-        sceneProEdit.setVersion(sceneProEdit.getVersion() + 1);
-        sceneProEdit.setUpdateTime(Calendar.getInstance().getTime());
-        sceneProEditService.updateById(sceneProEdit);
 
-        FileUtils.deleteFile(dataBuffer.toString() + "hot.json");
-        FileUtils.writeFile(dataBuffer.toString() + "hot.json", hots.toString());
         return ResultData.ok();
     }
 

+ 24 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/vo/SaveRoamParamVO.java

@@ -0,0 +1,24 @@
+package com.fdkankan.scene.vo;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * <p>
+ * 保存漫游可行入参
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/10
+ **/
+@Data
+public class SaveRoamParamVO {
+
+    @NotBlank(message = "场景码不能为空")
+    private String num;
+
+    @NotBlank(message = "漫游可行数据不能为空")
+    private String data;
+
+}