dengsixing vor 7 Monaten
Ursprung
Commit
b24ecf1e2b

+ 22 - 0
src/main/java/com/fdkankan/scene/listener/RabbitMqListener.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.scene.entity.DownloadTourVideo;
 import com.fdkankan.scene.service.IDownloadTourVideoService;
+import com.fdkankan.scene.service.IRemovePortraitService;
 import com.fdkankan.scene.service.ISceneService;
 import com.rabbitmq.client.Channel;
 import java.nio.charset.StandardCharsets;
@@ -39,6 +40,8 @@ public class RabbitMqListener {
     private IDownloadTourVideoService downloadTourVideoService;
     @Autowired
     private ISceneService sceneService;
+    @Autowired
+    private IRemovePortraitService removePortraitService;
 
     /**
      * 开启了手动确认模式,如果没有手动确认,消费者不会重试,当服务重启时会再次消费,因为rabbitmq认为你还没有处理完你的业务
@@ -101,5 +104,24 @@ public class RabbitMqListener {
         log.info("结束消费消息,id:{}", messageId);
     }
 
+    @RabbitListener(
+            queuesToDeclare = @Queue("${queue.scene.remove-portrait:remove-portrait}")
+    )
+    public void removePortrait(Channel channel, Message message) throws Exception {
+        String messageId = message.getMessageProperties().getMessageId();
+        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+        JSONObject jsonObject = JSON.parseObject(msg);
+        String num = jsonObject.getString("num");
+        log.info("去除人像开始,id:{},queue:{},content:{}", messageId, "remove-portrait", msg);
+        try {
+            removePortraitService.removePortrait(jsonObject);
+        }catch (Exception e){
+            log.error("去除人像报错, num:{}", num, e);
+        }finally {
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+        }
+        log.info("去除人像结束,id:{},queue:{},content:{}", messageId, "remove-portrait", msg);
+    }
+
 
 }

+ 9 - 0
src/main/java/com/fdkankan/scene/service/IRemovePortraitService.java

@@ -0,0 +1,9 @@
+package com.fdkankan.scene.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+public interface IRemovePortraitService {
+
+    void removePortrait(JSONObject param) throws Exception;
+
+}

+ 2 - 0
src/main/java/com/fdkankan/scene/service/ISceneEditInfoService.java

@@ -114,4 +114,6 @@ public interface ISceneEditInfoService extends IService<SceneEditInfo> {
 
     ResultData listFilter(BaseSceneParamVO param) throws Exception;
 
+    void uploadPanoramaHandler(String num, String bucket, String target, String imgViewPath, List<String> uploadFileList, String targetImagesPath) throws Exception;
+
 }

+ 119 - 0
src/main/java/com/fdkankan/scene/service/impl/RemovePortraitServiceImpl.java

@@ -0,0 +1,119 @@
+package com.fdkankan.scene.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.CharsetUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.util.ZipUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.*;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.model.constants.UploadFilePath;
+import com.fdkankan.model.utils.CreateObjUtil;
+import com.fdkankan.model.utils.SceneUtil;
+import com.fdkankan.scene.entity.SceneAsynOperLog;
+import com.fdkankan.scene.entity.ScenePlus;
+import com.fdkankan.scene.entity.ScenePlusExt;
+import com.fdkankan.scene.service.IRemovePortraitService;
+import com.fdkankan.scene.service.ISceneEditInfoService;
+import com.fdkankan.scene.service.IScenePlusExtService;
+import com.fdkankan.scene.service.IScenePlusService;
+import com.fdkankan.scene.vo.UploadPanoramaVO;
+import com.fdkankan.web.response.ResultData;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
+
+@Service
+public class RemovePortraitServiceImpl implements IRemovePortraitService {
+
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Resource
+    private FYunFileServiceInterface fileServiceInterface;
+    @Autowired
+    private ISceneEditInfoService sceneEditInfoService;
+
+    @Override
+    public void removePortrait(JSONObject param) throws Exception {
+        String num = param.getString("num");
+
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+        String bucket = scenePlusExt.getYunFileBucket();
+
+        //原始计算根目录
+        String uuid = UUID.randomUUID().toString();
+        //全景图计算根目录
+        String target = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num) + uuid;
+        //解压缩文件存放目录
+        String targetImagesPath = target + "/extras/images/";
+        //下载文件
+        String cacheImagesPath = String.format(UploadFilePath.scene_result_data_path, num) + "caches/images/";
+        List<String> imagesList = fileServiceInterface.listRemoteFiles(cacheImagesPath);
+        if(CollUtil.isNotEmpty(imagesList)){
+            return;
+        }
+
+        imagesList.stream().forEach(key->{
+            if(key.endsWith(".jpg")){
+                fileServiceInterface.downloadFile(key, targetImagesPath + FileUtil.getName(key));
+            }
+        });
+
+
+        String imgViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, num);
+//        fYunFileService.downloadFile(bucket, imgViewPath + "vision.modeldata", target + File.separator + "extras" + File.separator + "vision.modeldata");
+//        CreateObjUtil.convertVisionmodeldataToTxt(target + File.separator + "extras" + File.separator + "vision.modeldata",
+//                target + File.separator + "extras" + File.separator + "vision.txt");
+//
+//        String ossResultPath = String.format(UploadFilePath.scene_result_data_path, num);
+//        fYunFileService.downloadFile(bucket, ossResultPath + "data.json", target + File.separator+"data.json");
+//        fYunFileService.downloadFile(bucket, ossResultPath + "project.json", target + File.separator+"project.json");
+
+        //data.json增加extras为执行重建算法
+        JSONObject floorplanJson = new JSONObject();
+        floorplanJson.put("has_source_images", true);
+        floorplanJson.put("has_vision_txt", true);
+
+        JSONObject dataJson = new JSONObject();
+        dataJson.put("extras", floorplanJson);
+        dataJson.put("split_type", "SPLIT_V28");
+        //V5表示不需要生成high,low文件
+        String skyboxType = "SKYBOX_V6";
+        if(scenePlusExt.getSceneScheme() == 11){
+            skyboxType = "SKYBOX_V7";
+        }
+        //sceneScheme为3切成瓦片图
+        if(scenePlusExt.getSceneScheme() == 3){
+            if("4k".equals(scenePlusExt.getSceneResolution())){
+                skyboxType = "SKYBOX_V14";
+            }else{
+                skyboxType = "SKYBOX_V13";
+            }
+        }
+        dataJson.put("skybox_type", skyboxType);
+        FileUtil.writeUtf8String(dataJson.toJSONString(), target + File.separator+"data.json");
+
+        if(new File(target + File.separator + "capture").exists()){
+            new File(target + File.separator + "capture").delete();
+        }
+        if(new File(target + File.separator + "results").exists()){
+            FileUtils.delAllFile(target + File.separator + "results");
+        }
+
+        sceneEditInfoService.uploadPanoramaHandler(num,bucket,target,imgViewPath,new ArrayList<>(),targetImagesPath);
+
+    }
+}

+ 1 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -1275,6 +1275,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         return ResultData.ok(uploadPanoramaVO);
     }
 
+    @Override
     public void uploadPanoramaHandler(String num, String bucket, String target, String imgViewPath, List<String> uploadFileList, String targetImagesPath) throws Exception {
         CreateObjUtil.build3dModel(target , "1");