소스 검색

Merge branch 'release' into project-jp-上传e57

# Conflicts:
#	src/main/java/com/fdkankan/contro/entity/ScenePlus.java
#	src/main/java/com/fdkankan/contro/mq/listener/BuildReverseE57Listener.java
#	src/main/java/com/fdkankan/contro/mq/service/impl/BuildReverseE57SceneServiceImpl.java
#	src/main/java/com/fdkankan/contro/service/IFdkkLaserService.java
#	src/main/java/com/fdkankan/contro/service/impl/IFdkkLaserServiceImpl.java
#	src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java
dengsixing 5 달 전
부모
커밋
56795b6f36

+ 12 - 5
src/main/java/com/fdkankan/contro/controller/SceneFileController.java

@@ -4,9 +4,12 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.SceneSource;
 import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.contro.entity.ScenePlus;
 import com.fdkankan.contro.service.IAppCameraFailLogService;
 import com.fdkankan.contro.service.ISceneFileBuildService;
+import com.fdkankan.contro.service.IScenePlusService;
 import com.fdkankan.contro.service.ISceneUploadCountService;
 import com.fdkankan.contro.vo.ReportFailLogVO;
 import com.fdkankan.contro.vo.ResponseSceneFile;
@@ -18,12 +21,10 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 场景文件上传模块
@@ -36,7 +37,7 @@ public class SceneFileController{
     @Autowired
     private ISceneFileBuildService sceneFileBuildService;
 
-    @Autowired
+    @Resource
     private FYunFileServiceInterface fYunFileService;
 
     @Autowired
@@ -44,6 +45,8 @@ public class SceneFileController{
 
     @Autowired
     private IAppCameraFailLogService appCameraFailLogService;
+    @Autowired
+    private IScenePlusService scenePlusService;
 
 
     /**
@@ -95,6 +98,10 @@ public class SceneFileController{
                                    @RequestParam(value = "force",defaultValue = "false") Boolean force ,
                                    @RequestParam(value = "deleteExtras",defaultValue = "true") Boolean deleteExtras,
                                    @RequestParam(value = "from", defaultValue = "api") String from) throws IOException {
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        if(Objects.nonNull(scenePlus) && scenePlus.getSceneSource() == SceneSource.E57.code()){
+            return sceneFileBuildService.rebuildSceneE57(num,force,deleteExtras, from);
+        }
         return sceneFileBuildService.rebuildScene(num,force,deleteExtras, from);
     }
 

+ 8 - 0
src/main/java/com/fdkankan/contro/entity/SceneEditControls.java

@@ -137,5 +137,13 @@ public class SceneEditControls implements Serializable {
     @TableLogic("A")
     private String recStatus;
 
+    /**
+     * 是否显示cad底图
+     */
+    @TableField("show_texture")
+    private Integer showTexture;
+
+
+
 
 }

+ 7 - 0
src/main/java/com/fdkankan/contro/entity/ScenePlus.java

@@ -56,6 +56,12 @@ public class ScenePlus implements Serializable {
     private String title;
 
     /**
+     * 场景名称
+     */
+    @TableField("laser_title")
+    private String laserTitle;
+
+    /**
      * 场景描述
      */
     @TableField("description")
@@ -123,4 +129,5 @@ public class ScenePlus implements Serializable {
     private Long sourceId;
 
 
+
 }

+ 18 - 18
src/main/java/com/fdkankan/contro/mq/listener/AbstrackBuildSceneListener.java

@@ -35,15 +35,15 @@ public class AbstrackBuildSceneListener implements IBuildSceneListener {
     public void preHandle(Channel channel, String queueName, Message message, IBuildSceneService buildSceneService, String bizType) throws IOException {
         // 添加消息幂等处理
         String messageId = message.getMessageProperties().getMessageId();
-        if(!ObjectUtils.isEmpty(messageId)){
-            // 设置消息id幂等性,防止消息重复消费
-            boolean lock = redisLockUtil.lock(RedisConstants.SCENE_PREPARE_BUILDING + messageId, 24 * 3600);
-            if (!lock) {
-                log.error("服务:{},消息重复消费:{}", "常驻服务", messageId);
-                channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-                return;
-            }
-        }
+//        if(!ObjectUtils.isEmpty(messageId)){
+//            // 设置消息id幂等性,防止消息重复消费
+//            boolean lock = redisLockUtil.lock(RedisConstants.SCENE_PREPARE_BUILDING + messageId, 24 * 3600);
+//            if (!lock) {
+//                log.error("服务:{},消息重复消费:{}", "常驻服务", messageId);
+//                channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+//                return;
+//            }
+//        }
 
         String msg = new String(message.getBody(), StandardCharsets.UTF_8);
         log.info("开始准备场景计算资源,队列名:{},id:{},消息体:{}", queueName, messageId, msg);
@@ -74,15 +74,15 @@ public class AbstrackBuildSceneListener implements IBuildSceneListener {
     public void postHandle(Channel channel, String queueName, Message message, IBuildSceneService buildSceneService, String bizType) throws Exception {
         // 添加消息幂等处理
         String messageId = message.getMessageProperties().getMessageId();
-        if(!ObjectUtils.isEmpty(messageId)){
-            // 设置消息id幂等性,防止消息重复消费
-            boolean lock = redisLockUtil.lock(RedisConstants.SCENE_POST_BUILDING + messageId, 24 * 3600);
-            if (!lock) {
-                log.error("服务:{},消息重复消费:{}", "常驻服务", messageId);
-                channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-                return;
-            }
-        }
+//        if(!ObjectUtils.isEmpty(messageId)){
+//            // 设置消息id幂等性,防止消息重复消费
+//            boolean lock = redisLockUtil.lock(RedisConstants.SCENE_POST_BUILDING + messageId, 24 * 3600);
+//            if (!lock) {
+//                log.error("服务:{},消息重复消费:{}", "常驻服务", messageId);
+//                channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+//                return;
+//            }
+//        }
 
         String msg = new String(message.getBody(), StandardCharsets.UTF_8);
         log.info("场景计算完成,开始处理场景计算结果,队列名:{},id:{},消息体:{}", queueName, messageId, msg);

+ 10 - 0
src/main/java/com/fdkankan/contro/mq/listener/BuildReverseE57Listener.java

@@ -22,6 +22,7 @@ import org.springframework.util.ObjectUtils;
 
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
+import java.util.Map;
 
 @Slf4j
 @Component
@@ -57,6 +58,9 @@ public class BuildReverseE57Listener {
         HashMap<String, Object> map = JSON.parseObject(msg, HashMap.class);
         String num = (String) map.get("num");
         map.put("bizType", "reverseE57");
+        Integer rebuild = (Integer) map.get("rebuild");
+        map.put("bizType", "reverseE57");
+        map.put("rebuild", rebuild);
 
         log.info("开始准备上传e57计算资源,队列名:{},id:{},消息体:{}", queueModelingPre, messageId, msg);
         BuildSceneCallMessage buildSceneMessage = new BuildSceneCallMessage();
@@ -84,6 +88,12 @@ public class BuildReverseE57Listener {
         channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
     }
 
+    public static void main(String[] args) {
+        Map<String, Object> map = new HashMap<>();
+        Boolean a = (Boolean) map.get("a");
+        System.out.println(a);
+    }
+
     /**
      * 场景计算后置结果处理
      * @param channel

+ 1 - 1
src/main/java/com/fdkankan/contro/mq/service/impl/BuildIntermitSceneServiceImpl.java

@@ -245,7 +245,7 @@ public class BuildIntermitSceneServiceImpl implements IBuildSceneService {
                 throw new Exception(filePath + "文件不存在");
             }
 
-            if(fileJson.getIntValue("clazz") == 1 || fileJson.getIntValue("clazz") == 22){
+            if(fileJson.getIntValue("clazz") == 1 || fileJson.getIntValue("clazz") == 22 || fileJson.getIntValue("clazz") == 3 || fileJson.getIntValue("clazz") == 5){
                 map.put(filePath, imagesPath + fileName);
             }
         }

+ 29 - 6
src/main/java/com/fdkankan/contro/mq/service/impl/BuildReverseE57SceneServiceImpl.java

@@ -28,6 +28,7 @@ import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.model.enums.ModelTypeEnums;
 import com.fdkankan.model.utils.CreateHouseJsonUtil;
 import com.fdkankan.model.utils.CreateObjUtil;
+import com.fdkankan.model.utils.SceneUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
@@ -91,17 +92,37 @@ public class BuildReverseE57SceneServiceImpl implements IBuildSceneService {
     @Override
     public void buildScenePre(BuildSceneCallMessage message) throws Exception{
         String num = message.getSceneNum();
+        Integer rebuild = (Integer)message.getExt().get("rebuild");
+        Boolean deleteExtras = (Boolean)message.getExt().get("deleteExtras");
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
         ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
         try {
             String dataSource = scenePlusExt.getDataSource();
+            String homePath = SceneUtil.getHomePath(dataSource);
             message.setPath(dataSource);
+            String homeKey = homePath + "input.e57";
+            String key = null;
+            if(Objects.isNull(rebuild) || rebuild == CommonStatus.NO.code().intValue()){
+                String path = (String)message.getExt().get("path");
+                //复制原始资源到home目录
+                fYunFileService.copyFileInBucket(path, homeKey);
+                key = homeKey;
+            }else{
+                key = homeKey;
+            }
 
-            String key = (String)message.getExt().get("path");
+            //删除点位校准数据
+            if (message.getExt().containsKey("deleteExtras")
+                    && (Boolean) message.getExt().get("deleteExtras")) {
+                String extras = String.format(UploadFilePath.scene_result_data_path, num).concat("extras");
+                if(CollUtil.isNotEmpty(fYunFileService.listRemoteFiles(extras))){
+                    fYunFileService.deleteFolder(extras);
+                }
+            }
 
             //下载资源到本地
             String destPath = dataSource + "/capture/";
-            fYunFileService.downloadFileByCommand(destPath, key);
+            fYunFileService.downloadFileByCommand(destPath, homeKey);
             List<File> files = FileUtil.loopFiles(dataSource + "/capture/");
             files.stream().forEach(file->{
                 if(file.getAbsolutePath().endsWith(".e57")){
@@ -167,8 +188,11 @@ public class BuildReverseE57SceneServiceImpl implements IBuildSceneService {
                 return;
             }
 
+            Integer isObj = scenePlusExt.getIsObj();
             JSONObject fdageData = new JSONObject();
-            fdageData.put("exportMeshObj", 1);
+            if(isObj == CommonStatus.YES.code().intValue()){
+                fdageData.put("exportMeshObj", 1);
+            }
             Map<String, String> uploadFiles = commonService.getUploadFiles(scenePlus,path,14,fdageData);
 
             String rebuild = message.getRebuild();
@@ -184,7 +208,6 @@ public class BuildReverseE57SceneServiceImpl implements IBuildSceneService {
 //            //读取计算结果文件生成videosJson
 //            JSONObject videosJson = null;
 
-            boolean isObj = fdageData.containsKey("exportMeshObj") && fdageData.getIntValue("exportMeshObj") == 1;
 
             //上传全景图俯视图
             this.uploadFloorCad(path, sceneCode, uploadFiles);
@@ -299,13 +322,13 @@ public class BuildReverseE57SceneServiceImpl implements IBuildSceneService {
         return true;
     }
 
-    private void updateDbPlus(int sceneSource,Long space,String videosJson, Long computeTime,boolean isObj,ScenePlusExt scenePlusExt){
+    private void updateDbPlus(int sceneSource,Long space,String videosJson, Long computeTime,Integer isObj,ScenePlusExt scenePlusExt){
 
         scenePlusExt.setSpace(space);
         scenePlusExt.setComputeTime(computeTime.toString());
         scenePlusExt.setAlgorithmTime(new Date());
         scenePlusExt.setVideos(videosJson);
-        scenePlusExt.setIsObj(isObj ? 1 : 0);
+        scenePlusExt.setIsObj(isObj);
 
         if(ModelTypeEnums.TILE_CODE.equals(modelType)){
             scenePlusExt.setSceneScheme(3);

+ 17 - 17
src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java

@@ -396,8 +396,12 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
                 commonService.sendEmail(sceneCode, "standar");
             }
 
+            //发送到文保系统
             wbService.sendMq(sceneCode, CommonSuccessStatus.SUCCESS.code());
 
+            //四川日报打包消费
+            this.sendMqToPackScene4Scrb(sceneCode);
+
             log.info("场景计算结果处理结束,场景码:{}", sceneCode);
 
         }catch (Exception e){
@@ -407,23 +411,19 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         }
     }
 
-//    private void cachePanorama(String dataSource, String num){
-//        String cachedImagesPath = String.format(ConstantFilePath.SCENE_CACHE_IMAGES, num);
-//        //将全景图缓存到缓存目录
-//        List<String> imagesList = FileUtil.listFileNames(dataSource + "/caches/images");
-//        //先清除旧的全景图
-//        cn.hutool.core.io.FileUtil.del(cachedImagesPath);
-//        String visionPath = dataSource + "/results/vision.txt";
-//        List<String> panoramaImageList = SceneUtil.getPanoramaImageList(visionPath);
-//        imagesList.stream().forEach(fileName -> {
-//            if (panoramaImageList.contains(fileName)) {
-//                String srcPath = dataSource + "/caches/images/" + fileName;
-//                String targetPath = cachedImagesPath + fileName;
-//                log.info("源文件:{}, 目标文件:{}", srcPath, targetPath);
-//                cn.hutool.core.io.FileUtil.copy(srcPath, targetPath, true);
-//            }
-//        });
-//    }
+    private void sendMqToPackScene4Scrb(String num){
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        if(Objects.isNull(scenePlus.getCameraId())){
+            return;
+        }
+        CameraDetail cameraDetail = cameraDetailService.getByCameraId(scenePlus.getCameraId());
+        if(Objects.isNull(cameraDetail) || Objects.isNull(cameraDetail.getCompanyId()) || cameraDetail.getCompanyId() != 30){
+            return;
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("num", num);
+        mqProducer.sendByWorkQueue("scrb-package-scene", jsonObject);
+    }
 
 
 

+ 2 - 0
src/main/java/com/fdkankan/contro/service/IFdkkLaserService.java

@@ -31,4 +31,6 @@ public interface IFdkkLaserService {
     void cloudPointBuild(String sceneCode, String visionEditFilePath);
 
     void sendE57ToLaser(ScenePlus scenePlus, ScenePlusExt scenePlusExt, String path);
+
+    void sendRebuildE57ToLaser(ScenePlus scenePlus);
 }

+ 2 - 0
src/main/java/com/fdkankan/contro/service/ISceneFileBuildService.java

@@ -28,6 +28,8 @@ public interface ISceneFileBuildService extends IService<SceneFileBuild> {
 
     ResultData rebuildScene(String num,Boolean force,Boolean deleteExtras, String from) throws IOException;
 
+    ResultData rebuildSceneE57(String num,Boolean force,Boolean deleteExtras, String from) throws IOException;
+
     ResultData copyDataAndBuild(String sourceBucet,String dataSource,String sceneVer) throws Exception;
 
     ResultData uploadLiguang(String num, String snCode, String ossPath) throws Exception;

+ 16 - 1
src/main/java/com/fdkankan/contro/service/impl/IFdkkLaserServiceImpl.java

@@ -57,6 +57,8 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
 
     @Value("${4dkk.laserService.cloud-point-fyun-path}")
     private String cloudPointFyunPath;
+    @Autowired
+    private IUserService userService;
 
     @Resource
     private FYunFileServiceInterface fYunFileService;
@@ -149,7 +151,7 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
             params.put("status", 4);
         }
         params.put("version",getSceneVersion(scenePlus.getNum()));
-        params.put("title", scenePlus.getTitle());
+        params.put("title", scenePlus.getLaserTitle());
         params.put("userId", scenePlus.getUserId());
         params.put("sceneSource", scenePlus.getSceneSource());
         if(Objects.nonNull(fdageJson)){
@@ -232,6 +234,11 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
         params.put("payStatus", scenePlus.getPayStatus());
         params.put("shootCount", scenePlusExt.getShootCount());
         params.put("path", path);
+        Date algorithmTime = new Date();
+        if(Objects.nonNull(scenePlusExt.getAlgorithmTime())){
+            algorithmTime = scenePlusExt.getAlgorithmTime();
+        }
+        params.put("algorithmTime", DateUtil.date2String(algorithmTime, null));
         if(scenePlus.getSceneStatus() == SceneStatus.wait.code()){
             rabbitMqProducer.sendByWorkQueue("laser-e57-init-scene", params);
         }
@@ -240,6 +247,14 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
         }
     }
 
+    public void sendRebuildE57ToLaser(ScenePlus scenePlus) {
+        User user = userService.getById(scenePlus.getUserId());
+        Map<String, Object> params = new HashMap<>();
+        params.put("sceneCode", scenePlus.getNum());
+        params.put("status", SceneStatus.wait.code());
+        rabbitMqProducer.sendByWorkQueue("laser-e57-update-scene", params);
+    }
+
     public String syncBuildResult4E57(String dataSource) {
         log.info("激光转台相机构建结果 同步 请求 ");
         try {

+ 78 - 18
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -371,10 +371,10 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         } else {
             sceneNum = scenePlus.getNum();
             sceneCopyLogService.checkCanBuild(sceneNum);
-            if (scenePlus.getSceneStatus().equals(SceneStatus.wait.code())) {
-                log.info(scenePlus.getNum() + ":场景处于计算中,不能再计算");
-                return null;
-            }
+//            if (scenePlus.getSceneStatus().equals(SceneStatus.wait.code())) {
+//                log.info(scenePlus.getNum() + ":场景处于计算中,不能再计算");
+//                return null;
+//            }
         }
         if (sceneNum == null) {
             log.error("大场景序号为空:" + sceneNum);
@@ -465,6 +465,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             }
         }
         mqMessage.getExt().put("deleteExtras", true);
+        mqMessage.getExt().put("keepTitle", 0);
         mqMessage.setRebuild(String.valueOf(rebuild));
         if(jsonObject.getIntValue("location") == 7){
             //发送到全景看看进行初始化
@@ -914,6 +915,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         scenePlusExt.setPlusId(scenePlus.getId());
         scenePlusExt.setDataSource(prefixBuffer.toString());
         scenePlusExt.setIsObj(isObj);
+        scenePlusExt.setThumb(ConstantUrl.DEFAULT_SCENE_PIC);
         scenePlusExtService.save(scenePlusExt);
 
 
@@ -956,6 +958,10 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         scenePlus.setSceneSource(SceneSource.BM.code());
         scenePlusExt.setDataSource(dataSource);
         scenePlusExt.setLocation(location);
+        if (sceneName != null) {
+            scenePlus.setTitle(sceneName);
+            scenePlus.setLaserTitle(sceneName);
+        }
 
         if(resolution == null || resolution.intValue() == 0){
             scenePlusExt.setSceneScheme(cameraType.intValue());
@@ -1003,9 +1009,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         } else {
             scenePlusExt.setShootCount(sceneShootCount);
         }
-        if (sceneName != null) {
-            scenePlus.setTitle(sceneName);
-        }
         if (sceneDec != null) {
             scenePlus.setDescription("<p>" + new String(sceneDec.getBytes("UTF-8")) + "</p>");
         }
@@ -1081,9 +1084,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             scenePlusExt.setSpace(oldSceneExt.getSpace());
             scenePlusExt.setEcs(oldSceneExt.getEcs());
             scenePlusExt.setViewCount(oldSceneExt.getViewCount());
-            if(sceneName!=null) {
-                scenePlus.setTitle(sceneName);
-            }
             if(sceneType!=null) {
                 scenePlus.setSceneType(sceneType);
             }
@@ -1291,7 +1291,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         }
 
         //已删除原始资源的场景不支持重算
-        Long cameraId = null;
         Date laseCallTime = null;
         ScenePlusExt scenePlusExt = null;
         if(Objects.nonNull(scenePlus)){
@@ -1313,7 +1312,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             throw new BusinessException(ErrorCode.FAILURE_CODE_5072);
         }
 
-
         //激光场景校验是否能够计算
         this.checkJgCanBuild(scenePro);
 
@@ -1329,9 +1327,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             throw new BusinessException(ErrorCode.FAILURE_CODE_5033);
         }
         String path = scenePlusExt.getDataSource();
-        Integer sceneSource = scenePlus.getSceneSource();
         String buildType = scenePlusExt.getBuildType();
-        Integer sceneScheme = scenePlusExt.getSceneScheme();
 
         String dataFdageOssPath = ConstantFilePath.OSS_PREFIX+ path.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
                 .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH, "") + "/data.fdage";
@@ -1353,12 +1349,12 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         statusJson.put("status", SceneStatus.wait.code());
         fYunFileService.uploadFile(statusJson.toJSONString().getBytes(StandardCharsets.UTF_8),statusJsonOssPath);
 
-        Long cameraType = (long)sceneScheme == 3 ? 12 : (long)sceneScheme;
-        //判断是否转台相机
-        if(sceneSource == 3){
+        CameraDetail cameraDetail = cameraDetailService.getByCameraId(scenePlus.getCameraId());
+        Long cameraType = 10L;//默认看看
+        if(cameraDetail.getType() == 9){//看见
             cameraType = 13L;
         }
-        if(sceneSource == 4 || sceneSource == 5){
+        if(cameraDetail.getType() == 10 || cameraDetail.getType() == 11){//深时、深光
             cameraType = 14L;
         }
         BuildSceneCallMessage message = null;
@@ -1387,6 +1383,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         if (force) {
             message.setRebuild("1");
         }
+        message.getExt().put("keepTitle", 1);
 
         String ossOrignPath = commonService.getOssOrignPath(path);
         String ossPath = fYunFileService.getFileContent(ossOrignPath + "custom.txt");
@@ -1433,6 +1430,69 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         return ResultData.ok();
     }
 
+    @Override
+    public ResultData rebuildSceneE57(String num,Boolean force,Boolean deleteExtras, String from) throws IOException {
+
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+        if (scenePlus.getSceneStatus() == 0 && (ObjectUtils.isEmpty(force) || !force)) {
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5033);
+        }
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+
+        //复制出来的场景不支持重算
+        List<SceneCopyLog> sceneCopyLogs = sceneCopyLogService. listByNewNum(num);
+        if(CollUtil.isNotEmpty(sceneCopyLogs)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5071);
+        }
+
+        //查询场景是否处于冻结状态,如果已冻结,不允许重算
+        SceneColdStorage sceneColdStorage = sceneColdStorageService.getOne(new LambdaQueryWrapper<SceneColdStorage>().eq(SceneColdStorage::getNum, num).eq(SceneColdStorage::getState, 1));
+        if(Objects.nonNull(sceneColdStorage)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5074);
+        }
+
+        String path = scenePlusExt.getDataSource();
+        String buildType = scenePlusExt.getBuildType();
+
+        String e57FileKey = SceneUtil.getHomePath(path) + "input.e57";
+        if(!fYunFileService.fileExist(e57FileKey)){
+            return ResultData.error(ErrorCode.FAILURE_CODE_5074);
+        }
+
+        //重算的场景,先移除该场景对应的容量
+        String statusJsonOssPath = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "status.json";
+        JSONObject statusJson = JSONObject.parseObject(fYunFileService.getFileContent(String.format(UploadFilePath.DATA_VIEW_PATH, num) + "status.json"));
+        if(ObjectUtils.isEmpty(statusJson)){
+            statusJson = new JSONObject();
+        }
+        //临时将-2改成1,app还没完全更新
+        statusJson.put("status", SceneStatus.wait.code());
+        fYunFileService.uploadFile(statusJson.toJSONString().getBytes(StandardCharsets.UTF_8),statusJsonOssPath);
+
+        scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
+                .set(ScenePlus::getSceneStatus, SceneStatus.wait.code())
+                .eq(ScenePlus::getNum, num));
+
+        HashMap<String, Object> params = new HashMap<>();
+        params.put("num", num);
+        params.put("rebuild", 1);
+        params.put("deleteExtras", deleteExtras);
+        fdkkLaserService.sendRebuildE57ToLaser(scenePlus);
+        rabbitMqProducer.sendByWorkQueue("reverseE57-modeling-pre", params);
+
+        //记录日志表
+        SceneRebuildLog rebuildLog = new SceneRebuildLog();
+        rebuildLog.setNum(num);
+        rebuildLog.setSource(from);
+        sceneRebuildLogService.save(rebuildLog);
+
+        return ResultData.ok();
+    }
+
     /**
      * 由于算法不支持2022年三月份前的激光场景计算,这里需要校验是否是能计算,不能就退出重算
      * @return

+ 5 - 0
src/main/java/com/fdkankan/contro/vo/SceneEditControlsVO.java

@@ -78,5 +78,10 @@ public class SceneEditControlsVO implements Serializable {
 
     private Integer showTagshare;
 
+    /**
+     * 是否显示cad底图
+     */
+    private Integer showTexture;
+
 
 }