Quellcode durchsuchen

Merge branch 'hotfix-website-20220811' into project-jp

dengsixing vor 3 Jahren
Ursprung
Commit
d1c3a45473

+ 17 - 0
src/main/java/com/fdkankan/repair/bean/SceneJsonBean.java

@@ -1,7 +1,9 @@
 package com.fdkankan.repair.bean;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
 import java.util.Date;
+import java.util.List;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -88,6 +90,16 @@ public class SceneJsonBean {
      */
     private Integer version;
 
+    /**
+     * 版本
+     */
+    private Integer imgVersion;
+
+    /**
+     * 版本
+     */
+    private Integer linkVersion;
+
 //    /**
 //     * 户型图文件路径集合
 //     */
@@ -170,6 +182,11 @@ public class SceneJsonBean {
      */
     private Float floorPlanCompass;
 
+    /**
+     * 马赛克列表
+     */
+    private List<JSONObject> mosaicList;
+
 
 
 

+ 45 - 46
src/main/java/com/fdkankan/repair/controller/SceneRepairController.java

@@ -6,12 +6,10 @@ import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.constant.ConstantFilePath;
 import com.fdkankan.common.constant.SceneKind;
 import com.fdkankan.common.constant.SceneResolution;
 import com.fdkankan.common.constant.UploadFilePath;
-import com.fdkankan.common.response.Result;
 import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.common.util.MatrixToImageWriterUtil;
@@ -27,7 +25,6 @@ import com.fdkankan.repair.entity.ScenePlus;
 import com.fdkankan.repair.entity.ScenePlusExt;
 import com.fdkankan.repair.entity.ScenePro;
 import com.fdkankan.repair.entity.SceneProExt;
-import com.fdkankan.repair.httpclient.FdkankanMiniClient;
 import com.fdkankan.repair.service.ISceneEditInfoService;
 import com.fdkankan.repair.service.IScenePlusExtService;
 import com.fdkankan.repair.service.IScenePlusService;
@@ -42,7 +39,6 @@ import java.util.Objects;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -83,10 +79,6 @@ public class SceneRepairController {
     private RedisUtil redisUtil;
     @Autowired
     private RabbitMqProducer rabbitMqProducer;
-    @Autowired
-    private FdkankanMiniClient fdkankanMiniClient;
-    @Value("${http.host.4dkankanMini}")
-    private String fkankanMiniHost;
     @Value("${main.url}")
     private String mainUrl;
     @Value("${scene.pro.new.url}")
@@ -267,45 +259,52 @@ public class SceneRepairController {
         }
         for (ScenePlus scenePlus : scenePlusList) {
 
-            //修复数据库
-            ScenePlusExt scenePlusExt = scenePlusExtService.getOne(
-                new LambdaQueryWrapper<ScenePlusExt>()
-                .eq(ScenePlusExt::getPlusId, scenePlus.getId()));
-            if(SceneResolution.TILES.code().equals(scenePlusExt.getSceneResolution())){
-                scenePlusExt.setSceneKind(SceneKind.FACE.code());
-            }else{
-                scenePlusExt.setSceneKind(SceneKind.TILES.code());
-            }
-
-            if(scenePlus.getSceneSource() == 1){
-                scenePlusExt.setSceneResolution("2k");
-            }else if(scenePlus.getSceneSource() == 2){
-                scenePlusExt.setSceneResolution("1k");
-            }else if(scenePlus.getSceneSource() == 3 || scenePlus.getSceneSource() == 4){
-                scenePlusExt.setSceneResolution("4k");
+            try {
+                //修复数据库
+                ScenePlusExt scenePlusExt = scenePlusExtService.getOne(
+                    new LambdaQueryWrapper<ScenePlusExt>()
+                        .eq(ScenePlusExt::getPlusId, scenePlus.getId()));
+                if(StrUtil.isNotEmpty(scenePlusExt.getSceneKind())){
+                    continue;
+                }
+                if(SceneResolution.TILES.code().equals(scenePlusExt.getSceneResolution())){
+                    scenePlusExt.setSceneKind(SceneKind.FACE.code());
+                }else{
+                    scenePlusExt.setSceneKind(SceneKind.TILES.code());
+                }
+
+                if(scenePlus.getSceneSource() == 1){
+                    scenePlusExt.setSceneResolution("2k");
+                }else if(scenePlus.getSceneSource() == 2){
+                    scenePlusExt.setSceneResolution("1k");
+                }else if(scenePlus.getSceneSource() == 3 || scenePlus.getSceneSource() == 4){
+                    scenePlusExt.setSceneResolution("4k");
+                }
+                scenePlusExtService.updateById(scenePlusExt);
+
+                //更新版本号
+                SceneEditInfo sceneEditInfo = sceneEditInfoService.getOne(new LambdaQueryWrapper<SceneEditInfo>().eq(SceneEditInfo::getScenePlusId, scenePlus.getId()));
+                sceneEditInfo.setVersion(sceneEditInfo.getVersion() + 1);
+                sceneEditInfoService.updateById(sceneEditInfo);
+
+                //修复scene.json
+                String sceneJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH, scenePlus.getNum()) + "scene.json";
+                String sceneJsonStr = uploadToOssUtil.getObjectContent(this.bucket, sceneJsonPath);
+                if(StrUtil.isNotEmpty(sceneJsonStr)){
+                    JSONObject sceneJsonObject = JSON.parseObject(sceneJsonStr);
+                    sceneJsonObject.put("sceneResolution", scenePlusExt.getSceneResolution());
+                    sceneJsonObject.put("sceneKind", scenePlusExt.getSceneKind());
+                    sceneJsonObject.put("version", sceneEditInfo.getVersion());
+                    uploadToOssUtil.upload(sceneJsonObject.toJSONString().getBytes(StandardCharsets.UTF_8), sceneJsonPath);
+                }else{
+                    log.error("没有找到scene.json,路径=" + sceneJsonPath);
+                }
+
+                //清除scene.json缓存
+                redisUtil.del(String.format(RedisKey.SCENE_JSON, scenePlus.getNum()));
+            }catch (Exception e){
+                log.error("修复sceneKind字段失败,num=" + scenePlus.getNum(), e);
             }
-            scenePlusExtService.updateById(scenePlusExt);
-
-            //更新版本号
-            SceneEditInfo sceneEditInfo = sceneEditInfoService.getOne(new LambdaQueryWrapper<SceneEditInfo>().eq(SceneEditInfo::getScenePlusId, scenePlus.getId()));
-            sceneEditInfo.setVersion(sceneEditInfo.getVersion() + 1);
-            sceneEditInfoService.updateById(sceneEditInfo);
-
-            //修复scene.json
-            String sceneJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH, scenePlus.getNum()) + "scene.json";
-            String sceneJsonStr = uploadToOssUtil.getObjectContent(this.bucket, sceneJsonPath);
-            if(StrUtil.isNotEmpty(sceneJsonStr)){
-                JSONObject sceneJsonObject = JSON.parseObject(sceneJsonStr);
-                sceneJsonObject.put("sceneResolution", scenePlusExt.getSceneResolution());
-                sceneJsonObject.put("sceneKind", scenePlusExt.getSceneKind());
-                sceneJsonObject.put("version", sceneEditInfo.getVersion());
-                uploadToOssUtil.upload(sceneJsonObject.toJSONString().getBytes(StandardCharsets.UTF_8), sceneJsonPath);
-            }else{
-                log.error("没有找到scene.json,路径=" + sceneJsonPath);
-            }
-
-            //清除scene.json缓存
-            redisUtil.del(String.format(RedisKey.SCENE_JSON, scenePlus.getNum()));
 
         }
 

+ 12 - 0
src/main/java/com/fdkankan/repair/entity/SceneEditInfo.java

@@ -103,6 +103,18 @@ public class SceneEditInfo implements Serializable {
     private Integer version;
 
     /**
+     * 版本
+     */
+    @TableField("img_version")
+    private Integer imgVersion;
+
+    /**
+     * 版本
+     */
+    @TableField("link_version")
+    private Integer linkVersion;
+
+    /**
      * 是否上传模型
      */
     @TableField("is_upload_obj")

+ 67 - 26
src/main/java/com/fdkankan/repair/service/impl/SceneUpgradeToV4Service.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.ConstantFilePath;
 import com.fdkankan.common.constant.UploadFilePath;
+import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.util.FileUtil;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.common.util.MatrixToImageWriterUtil;
@@ -93,6 +94,8 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
     private String fkankanMiniHost;
     @Value("${http.api-v4.upgradeToV4ResultSync}")
     private String URL_UPGRADE_TO_V4_RESULT_SYNC;
+    @Value("${repair.caches-images:yes}")
+    private String copyCachesImages;
 
 
     @Autowired
@@ -263,6 +266,15 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
 
                 sceneEditInfo.setTitle(scenePro.getSceneName());
                 sceneEditInfo.setVersion(sceneEditInfo.getVersion() + 1);
+                if(reUpgrade){
+                }
+
+                if(reUpgrade){
+                    //场景重算再掉的升级时,需要把imgVersion累加
+                    sceneEditInfo.setImgVersion(sceneEditInfo.getImgVersion() + 1);
+                    //如果是重算升级,需要重置平面图标识为否
+                    sceneEditInfo.setFloorPlanUser(CommonStatus.NO.code().intValue());
+                }
                 sceneEditInfoService.updateById(sceneEditInfo);
 
             }
@@ -289,21 +301,27 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
 
 
             //将全景图缓存到缓存目录
-            List<String> imagesList = cn.hutool.core.io.FileUtil.listFileNames(path + "/caches/images");
-            String cachedImagesPath = String.format(ConstantFilePath.SCENE_CACHE_IMAGES, num);
-            //先清除旧的全景图
-            cn.hutool.core.io.FileUtil.del(cachedImagesPath);
-            String visionPath = path + "/results/vision.txt";
-            List<String> panoramaImageList = SceneUtil.getPanoramaImageList(visionPath);
-            imagesList.stream().forEach(fileName -> {
-                if(panoramaImageList.contains(fileName)){
-                    String srcPath = path + "/caches/images/" + fileName;
-                    String targetPath = cachedImagesPath + fileName;
-                    log.info("源文件:{}, 目标文件:{}", srcPath, targetPath);
-                    cn.hutool.core.io.FileUtil.copy(srcPath, targetPath, true);
+            try {
+                List<String> imagesList = cn.hutool.core.io.FileUtil.listFileNames(path + "/caches/images");
+                String cachedImagesPath = String.format(ConstantFilePath.SCENE_CACHE_IMAGES, num);
+                //先清除旧的全景图
+                cn.hutool.core.io.FileUtil.del(cachedImagesPath);
+                String visionPath = path + "/results/vision.txt";
+                List<String> panoramaImageList = SceneUtil.getPanoramaImageList(visionPath);
+                imagesList.stream().forEach(fileName -> {
+                    if(panoramaImageList.contains(fileName)){
+                        String srcPath = path + "/caches/images/" + fileName;
+                        String targetPath = cachedImagesPath + fileName;
+                        log.info("源文件:{}, 目标文件:{}", srcPath, targetPath);
+                        cn.hutool.core.io.FileUtil.copy(srcPath, targetPath, true);
+                    }
+                });
+            }catch (Exception e){
+                log.error("拷贝全景图失败,num="+num, e);
+                if("yes".equals(copyCachesImages)){
+                    throw e;
                 }
-            });
-
+            }
 //            if(CollUtil.isNotEmpty(imagesList)){
 //                imagesList.stream().forEach(str -> {
 //                    String filePath = str.substring(str.lastIndexOf(File.separator) + 1);
@@ -374,13 +392,13 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
                 uploadToOssUtil.copyFiles(imagePath + "logo-main.png", editUsersPath + "loadingLogo-user.png");
                 uploadToOssUtil.copyFiles(imagePath + "logo-main.png", viewUsersPath + "loadingLogo-user.png");
             }
+            String thumbUrl = scenePro.getThumb().replace(imagePath, viewImagesPath);
             ScenePlusExt scenePlusExt = scenePlusExtService.getOne(
                 new LambdaQueryWrapper<ScenePlusExt>()
                     .eq(ScenePlusExt::getPlusId, scenePro.getId()));
             if(StrUtil.isNotEmpty(scenePro.getThumb())
                 && scenePro.getThumb().contains(imagePath)
                 && !reUpgrade){
-                String thumbUrl = null;
                 if(scenePro.getThumb().contains("thumbSmallImg.jpg")){
                     uploadToOssUtil.copyFiles(imagePath + "thumbBigImg.jpg", editUsersPath + "thumb-1k.jpg");
                     uploadToOssUtil.copyFiles(imagePath + "thumbBigImg.jpg", viewUsersPath + "thumb-1k.jpg");
@@ -389,19 +407,18 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
                     uploadToOssUtil.copyFiles(imagePath + "thumbSmallImg.jpg", editUsersPath + "thumb-128.jpg");
                     uploadToOssUtil.copyFiles(imagePath + "thumbSmallImg.jpg", viewUsersPath + "thumb-128.jpg");
                     thumbUrl = this.ossUrlPrefix + String.format(UploadFilePath.USER_VIEW_PATH, num) + "thumb-128.jpg";
-                }else{
-                    thumbUrl = scenePro.getThumb().replace(imagePath, viewImagesPath);
                 }
+            }
 
-                String webSite = sceneUrl + num;
-                scenePro.setThumb(thumbUrl);
-                scenePro.setWebSite(webSite);
-                sceneProService.updateById(scenePro);
+            String webSite = sceneUrl + num;
+            scenePro.setThumb(thumbUrl);
+            scenePro.setWebSite(webSite);
+            sceneProService.updateById(scenePro);
+
+            scenePlusExt.setThumb(thumbUrl);
+            scenePlusExt.setWebSite(webSite);
+            scenePlusExtService.updateById(scenePlusExt);
 
-                scenePlusExt.setThumb(thumbUrl);
-                scenePlusExt.setWebSite(webSite);
-                scenePlusExtService.updateById(scenePlusExt);
-            }
             if(StrUtil.isNotEmpty(sceneEditInfo.getBoxVideos())){
                 JSONArray boxVideoArr = JSON.parseArray(sceneEditInfo.getBoxVideos());
                 for(int i = 0; i < boxVideoArr.size(); i++){
@@ -424,6 +441,16 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
                 });
             }
 
+            //上传vision.txt、vision2.txt
+            String visionTxtPath = scenePlusExt.getDataSource() + "/results/vision.txt";
+            String vision2TxtPath = scenePlusExt.getDataSource() + "/results/vision2.txt";
+            if(cn.hutool.core.io.FileUtil.exist(visionTxtPath)){
+                uploadToOssUtil.upload(visionTxtPath, imageViewPath + "vision.txt");
+            }
+            if(cn.hutool.core.io.FileUtil.exist(vision2TxtPath)){
+                uploadToOssUtil.upload(visionTxtPath, imageViewPath + "vision2.txt");
+            }
+
             //生成scene.json
 //        生成新的scene.json,上传至scene_view_data/<num>/data
             SceneJsonBean sceneJson = new SceneJsonBean();
@@ -440,6 +467,8 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
                 sceneJson.setVideos(JSON.parseObject(scenePro.getVideos()));
             }
             sceneJson.setVersion(sceneEditInfo.getVersion());
+            //发布马赛克列表
+            sceneJson.setMosaicList(this.getMosaicList(num));
             //上传sceneJson文件
             String sceneJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH+"scene.json", num);
             uploadToOssUtil.upload(JSON.toJSONBytes(sceneJson), sceneJsonPath);
@@ -457,7 +486,7 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
             fdkankanMiniClient.upgradeToV4ResultSync(url,
                 RequestSceneProV4.builder()
                     .id(sceneProId)
-                    .webSite(scenePro.getWebSite())
+                    .webSite(scenePlusExt.getWebSite())
                     .thumb(scenePlusExt.getThumb())
                     .build(),
                 new FdkkMiniReqSuccessCallback(), new FdkkMiniReqErrorCallback()
@@ -481,6 +510,18 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
         }
     }
 
+    public List<JSONObject> getMosaicList(String num) throws Exception {
+
+        String key = String.format(RedisKey.SCENE_MOSAIC_DATA, num);
+        Map<String, String> map = redisUtil.hmget(key);
+        if(CollUtil.isEmpty(map)){
+            ResultData.ok(new String[0]);
+        }
+        return map.values().stream()
+            .map(mosaic-> JSON.parseObject(mosaic))
+            .collect(Collectors.toList());
+    }
+
     private void copyFileOss(String num, AtomicInteger completeCnt, AtomicInteger count, List<String> keyList, String sourcePath, String targetPah){
         if(CollUtil.isEmpty(keyList))
             return;