Pārlūkot izejas kodu

合并release代码

tianboguang 2 gadi atpakaļ
vecāks
revīzija
13cb899364

+ 2 - 0
src/main/java/com/fdkankan/contro/constant/RedisConstants.java

@@ -4,4 +4,6 @@ public class RedisConstants {
     public static final String FOLDER_FILEID_BUILD = "model-controls:folder:%s";
     public static final String FILEID_FOLDER_BUILD = "model-controls:fileId:%s";
     public static final String FOLDER_LOCK_BUILD = "model-controls:lock:%s";
+    public static final String SCENE_PREPARE_BUILDING = "model-controls:scene:building:prepare:message:";
+    public static final String SCENE_POST_BUILDING = "model-controls:scene:building:post:message:";
 }

+ 21 - 4
src/main/java/com/fdkankan/contro/entity/SceneEditInfoExt.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fdkankan.db.base.BaseEntity;
 import java.util.Date;
 import lombok.Getter;
 import lombok.Setter;
@@ -62,10 +61,10 @@ public class SceneEditInfoExt {
     private String mosaics;
 
     /**
-     * mosaics数据
+     * 水印文件名
      */
-    @TableField("share_logo_img")
-    private String shareLogoImg;
+    @TableField("water_mark")
+    private String waterMark;
 
     /**
      * 是否有场景关联(0-否,1-是)
@@ -74,6 +73,24 @@ public class SceneEditInfoExt {
     private Integer links;
 
     /**
+     * 是否有滤镜(0-否,1-是)
+     */
+    @TableField("filters")
+    private Integer filters;
+
+    /**
+     * 是否有监控摄像头(0-否,1-是)
+     */
+    @TableField("surveillances")
+    private Integer surveillances;
+
+    /**
+     * mosaics数据
+     */
+    @TableField("share_logo_img")
+    private String shareLogoImg;
+
+    /**
      * 创建时间
      */
     @TableField("create_time")

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

@@ -1,12 +1,15 @@
 package com.fdkankan.contro.mq.listener;
 
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.contro.constant.RedisConstants;
 import com.fdkankan.contro.mq.service.IBuildSceneService;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
+import com.fdkankan.redis.util.RedisLockUtil;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.Message;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.ObjectUtils;
 
 import java.io.IOException;
@@ -15,9 +18,24 @@ import java.util.HashMap;
 
 @Slf4j
 public class AbstrackBuildSceneListener implements IBuildSceneListener {
+
+    @Autowired
+    private RedisLockUtil redisLockUtil;
+
     @Override
     public void preHandle(Channel channel, String queueName, Message message, IBuildSceneService buildSceneService) 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;
+            }
+        }
+
         String msg = new String(message.getBody(), StandardCharsets.UTF_8);
         log.info("开始准备场景计算资源,队列名:{},id:{},消息体:{}", queueName, messageId, msg);
         BuildSceneCallMessage buildSceneMessage = JSONObject.parseObject(msg, BuildSceneCallMessage.class);
@@ -34,7 +52,18 @@ public class AbstrackBuildSceneListener implements IBuildSceneListener {
 
     @Override
     public void postHandle(Channel channel, String queueName, Message message, IBuildSceneService buildSceneService) 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;
+            }
+        }
+
         String msg = new String(message.getBody(), StandardCharsets.UTF_8);
         log.info("场景计算完成,开始处理场景计算结果,队列名:{},id:{},消息体:{}", queueName, messageId, msg);
         BuildSceneResultMqMessage buildSceneMessage = JSONObject.parseObject(msg, BuildSceneResultMqMessage.class);

+ 5 - 28
src/main/java/com/fdkankan/contro/mq/service/impl/BuildObjServiceImpl.java

@@ -1,11 +1,11 @@
 package com.fdkankan.contro.mq.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.util.FileUtils;
-import com.fdkankan.contro.bean.SceneJsonBean;
-import com.fdkankan.contro.entity.*;
+import com.fdkankan.contro.entity.ScenePlus;
+import com.fdkankan.contro.entity.ScenePro;
+import com.fdkankan.contro.entity.SceneProEdit;
 import com.fdkankan.contro.mq.service.IBuildSceneService;
 import com.fdkankan.contro.service.*;
 import com.fdkankan.contro.service.impl.FdkkV4Service;
@@ -17,8 +17,6 @@ import com.fdkankan.model.utils.CreateObjUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
-import com.fdkankan.redis.constant.RedisKey;
-import com.fdkankan.redis.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -64,19 +62,11 @@ public class BuildObjServiceImpl implements IBuildSceneService {
     private IBuildSceneDTService buildSceneDTService;
 
     @Autowired
-    private IScenePlusService scenePlusService;
-
-    @Autowired
-    private ISceneEditControlsService sceneEditControlsService;
-
-    @Autowired
-    private ISceneEditInfoService sceneEditInfoService;
-
-    @Autowired
     private ISceneProEditService sceneProEditService;
 
+
     @Autowired
-    private RedisUtil redisUtil;
+    private IScenePlusService scenePlusService;
 
     @Override
     public void buildScenePre(BuildSceneCallMessage message) {
@@ -217,19 +207,6 @@ public class BuildObjServiceImpl implements IBuildSceneService {
             LambdaUpdateWrapper<ScenePlus> plusUpdateWrapper = new LambdaUpdateWrapper<ScenePlus>()
                     .set(ScenePlus::getSceneStatus, -2).eq(ScenePlus::getNum, projectNum);
             scenePlusService.update(plusUpdateWrapper);
-            SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
-            SceneEditControls sceneEditControls = sceneEditControlsService.getBySceneEditId(sceneEditInfo.getId());
-            sceneEditControls.setShowMap(0);
-            sceneEditControlsService.updateById(sceneEditControls);
-
-            // 更新scene.json
-            String dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, projectNum);
-            SceneJsonBean jsonObject =JSONObject.parseObject(fYunFileService.getFileContent(dataViewPath + "scene.json"), SceneJsonBean.class);
-            jsonObject.getControls().setShowMap(0);
-            String jsonString = JSON.toJSONString(jsonObject);
-            fYunFileService.uploadFile(jsonString.getBytes(), dataViewPath + "scene.json");
-            //更新缓存
-            redisUtil.set(String.format(RedisKey.SCENE_JSON, projectNum), jsonString);
         }
 
         // 如果未升级V4,则升级V4

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

@@ -30,6 +30,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.push.config.PushMessageConfig;
 import com.fdkankan.push.utils.PushMsgUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
@@ -126,10 +127,26 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             //下载资源到本地
             this.downLoadSource(message, message.getPath());
 
+            JSONObject fdageJson = JSONObject.parseObject(FileUtils.readFile(message.getPath().concat("/capture/data.fdage")));
+
+            boolean rewrite = false;
+            // 兼容旧的数据,防止OnlyExportMeshObj标志未删除掉
+            if (fdageJson.containsKey("OnlyExportMeshObj")) {
+                log.info("data.fdage 包含 OnlyExportMeshObj,进行去除!");
+                // 写入data.fdage 防止重算
+                fdageJson.remove("OnlyExportMeshObj");
+                String ossPath = getOssPath(message.getPath());
+                fYunFileService.uploadFile(fdageJson.toJSONString().getBytes(), ossPath + "data.fdage");
+                rewrite = true;
+            }
+
             if (!ObjectUtils.isEmpty(modelType)) {
                 // 修改dataFdage文件
-                JSONObject fdageJson = JSONObject.parseObject(FileUtils.readFile(message.getPath().concat("/capture/data.fdage")));
                 fdageJson.put("modelType", modelType);
+                rewrite = true;
+            }
+
+            if (rewrite) {
                 FileUtils.writeFile(message.getPath().concat("/capture/data.fdage"), fdageJson.toJSONString());
             }
 
@@ -159,14 +176,19 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         }
     }
 
-    @Override
-    public void downLoadSource(BuildSceneCallMessage buildSceneMqMessage,String path){
+    private String getOssPath(String path) {
         String ossPath = ConstantFilePath.OSS_PREFIX
                 + path.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
                 .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH, "");
         if (!ossPath.endsWith("/")) {
             ossPath = ossPath.concat("/");
         }
+        return ossPath;
+    }
+
+    @Override
+    public void downLoadSource(BuildSceneCallMessage buildSceneMqMessage,String path){
+        String ossPath = getOssPath(path);
         fYunFileService.downloadFileByCommand(path + File.separator + "capture", ossPath);
     }
 
@@ -241,8 +263,11 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             if (!fYunFileService.getFyunType().equals(FYunTypeEnum.LOCAL.code())) {
                 // dam 文件设置请求头
                 uploadFiles.entrySet().stream().filter(entry -> FileNameUtil.extName(entry.getKey()).equals("dam"))
-                        .filter(entry -> new File(entry.getKey()).exists())
                         .forEach(entry -> {
+                            if (!new File(entry.getKey()).exists()) {
+                                log.error("文件不存在,不予gzip压缩,文件路径:{}", entry.getKey());
+                                return;
+                            }
                             // gzip压缩
                             FileUtil.writeBytes(ZipUtil.gzip(new File(entry.getKey())), entry.getKey() + ".gzip");
                             // 重命名
@@ -254,6 +279,9 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             //拷贝部分文件到编辑目录,用于用户编辑
             this.copyToEditDir(sceneCode);
 
+            //计算完毕后,同步全景图到缓存目录
+            this.cachePanorama(path, sceneCode);
+
             //生成houseTypejson并上传
             uploadFiles.entrySet().stream().filter(entry-> FileNameUtil.getName(entry.getKey()).equals("floorplan_cad.json"))
                     .forEach(entry-> uploadHouseTypeJson(sceneCode,entry.getKey()));
@@ -266,12 +294,6 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             Company company = !ObjectUtils.isEmpty(cameraDetail.getCompanyId()) ? companyService.getById(cameraDetail.getCompanyId()) : null;
 
             if (cameraType == 14) {
-                // 如果是激光场景,上传全景文件到V3路径,激光系统上线后,可不用上传
-                String imagePath = String.format(UploadFilePath.IMG_VIEW_PATH, sceneCode);
-                String V3ImagePath = String.format(ConstantFilePath.IMAGE_PATH_FORMAT, sceneCode);
-                uploadFiles.entrySet().stream().filter(entry -> entry.getValue().contains(imagePath)).forEach(entry -> {
-                    fYunFileService.uploadFile(entry.getKey(), entry.getValue().replace(imagePath, V3ImagePath));
-                });
                 //计算成功  激光转台相机 同步 请求
                 fdkkLaserService.syncBuildResult(scenePlus.getNum(), scenePlusExt.getDataSource(),scenePlus.getCreateTime());
                 sceneEditControlsService.update(new LambdaUpdateWrapper<SceneEditControls>().set(SceneEditControls::getShowMap,0)
@@ -304,6 +326,24 @@ 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 Map<String, String> getUploadFiles(ScenePlus scenePlus,String path,Integer cameraType,JSONObject fdageData) throws Exception {
         if (ObjectUtils.isEmpty(scenePlus)) {
             throw new Exception("未找到场景信息:" + path);
@@ -761,10 +801,13 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         UserIncrement userIncrement = userIncrementService.getByCameraId(cameraId);
         if(!ObjectUtils.isEmpty(userIncrement) && userIncrement.getIsExpired().equals(ExpiredStatus.NOT_EXPIRED.code())){
             IncrementType type = incrementTypeService.getById(userIncrement.getIncrementTypeId());
-            if (ObjectUtils.isEmpty(type) || type.getType().equals("cn")) {
-                return PayStatus.PAY.code();
-            } else if (type.getType().equals("eur")) {
-                totalSpace = type.getCameraCapacity() * 1024 * 1024L;
+            if(type != null){
+                Integer cameraCapacity = type.getCameraCapacity();
+                if(cameraCapacity == -1){           //无限容量权益
+                    return PayStatus.PAY.code();
+                }else {
+                    totalSpace = cameraCapacity *1024 * 1024 * 1024L;     //权益设置容量
+                }
             }
         }
 

+ 29 - 7
src/main/java/com/fdkankan/contro/mq/service/impl/BuildV3SceneServiceImpl.java

@@ -105,11 +105,25 @@ public class BuildV3SceneServiceImpl implements IBuildSceneService {
             //根据相机类型,组装资源路径
             //下载资源到本地
             this.downLoadSource(message, message.getPath());
+            JSONObject fdageJson = JSONObject.parseObject(FileUtils.readFile(message.getPath().concat("/capture/data.fdage")));
+            // 兼容旧的数据,防止OnlyExportMeshObj标志未删除掉
+            boolean rewrite = false;
+            if (fdageJson.containsKey("OnlyExportMeshObj")) {
+                log.info("data.fdage 包含 OnlyExportMeshObj,进行去除!");
+                // 写入data.fdage 防止重算
+                fdageJson.remove("OnlyExportMeshObj");
+                String ossPath = getOssPath(message.getPath());
+                fYunFileService.uploadFile(fdageJson.toJSONString().getBytes(), ossPath + "data.fdage");
+                rewrite = true;
+            }
 
             if (!ObjectUtils.isEmpty(modelSceneKind)) {
                 // 修改dataFdage文件
-                JSONObject fdageJson = JSONObject.parseObject(FileUtils.readFile(message.getPath().concat("/capture/data.fdage")));
                 fdageJson.put("modelType", modelSceneKind);
+                rewrite = true;
+            }
+
+            if (rewrite) {
                 FileUtils.writeFile(message.getPath().concat("/capture/data.fdage"), fdageJson.toJSONString());
             }
 
@@ -135,14 +149,19 @@ public class BuildV3SceneServiceImpl implements IBuildSceneService {
         }
     }
 
-    @Override
-    public void downLoadSource(BuildSceneCallMessage buildSceneMqMessage,String path){
+    private String getOssPath(String path) {
         String ossPath = ConstantFilePath.OSS_PREFIX
                 + path.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
                 .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH, "");
         if (!ossPath.endsWith("/")) {
             ossPath = ossPath.concat("/");
         }
+        return ossPath;
+    }
+
+    @Override
+    public void downLoadSource(BuildSceneCallMessage buildSceneMqMessage,String path){
+        String ossPath = getOssPath(path);
         fYunFileService.downloadFileByCommand(path + File.separator + "capture", ossPath);
     }
 
@@ -571,10 +590,13 @@ public class BuildV3SceneServiceImpl implements IBuildSceneService {
         UserIncrement userIncrement = userIncrementService.getByCameraId(cameraId);
         if(!ObjectUtils.isEmpty(userIncrement) && userIncrement.getIsExpired().equals(ExpiredStatus.NOT_EXPIRED.code())){
             IncrementType type = incrementTypeService.getById(userIncrement.getIncrementTypeId());
-            if (ObjectUtils.isEmpty(type) || type.getType().equals("cn")) {
-                return PayStatus.PAY.code();
-            } else if (type.getType().equals("eur")) {
-                totalSpace = type.getCameraCapacity() * 1024 * 1024L;
+            if(type != null){
+                Integer cameraCapacity = type.getCameraCapacity();
+                if(cameraCapacity == -1){           //无限容量权益
+                    return PayStatus.PAY.code();
+                }else {
+                    totalSpace = cameraCapacity *1024 * 1024 * 1024L;     //权益设置容量
+                }
             }
         }
 

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

@@ -28,6 +28,4 @@ public interface ISceneFileBuildService extends IService<SceneFileBuild> {
     ResultData rebuildScene(String num,Boolean force,Boolean deleteExtras) throws IOException;
 
     ResultData copyDataAndBuild(String sourceBucet,String dataSource,String sceneVer) throws Exception;
-
-    SceneFileBuild findByUnicode(String folderName);
 }

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

@@ -64,7 +64,7 @@ public class FdkkV4Service {
 
         //修改场景状态为升级中
         LambdaUpdateWrapper<ScenePro> wrapper = new LambdaUpdateWrapper<>();
-        wrapper.set(ScenePro::getStatus,0).set(ScenePro::getIsUpgrade,2).eq(ScenePro::getNum,num);
+        wrapper.set(ScenePro::getIsUpgrade,2).eq(ScenePro::getNum,num);
         sceneProService.update(wrapper);
     }
 

+ 3 - 0
src/main/java/com/fdkankan/contro/service/impl/IFdkkLaserServiceImpl.java

@@ -139,6 +139,9 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
         String url = laserHost + String.format(SAVE_SCENE_URL_TEMPLATE, scenePro.getNum());
         Map<String, Object> params = new HashMap<>();
         params.put("childName", cameraEntity.getChildName());
+        if(ObjectUtils.isEmpty(scenePro.getCreateTime())){
+            scenePro.setCreateTime(new Date());
+        }
         params.put("createTime", DateUtil.date2String(scenePro.getCreateTime(), null));
         params.put("phone", phone);
         params.put("sceneCode", scenePro.getNum());

+ 13 - 10
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -385,7 +385,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 mqMessage.setFlexibility(-1);
             }
         }
-
+        mqMessage.getExt().put("deleteExtras", true);
         rabbitMqProducer.sendByWorkQueue(queueModelingPre, mqMessage);
 
         return scenePlusVO;
@@ -869,13 +869,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
 
             SceneEditInfo oldSceneEditInfo = sceneEditInfoService.getByScenePlusId(oldScene.getId());
             SceneEditInfoExt oldSceneEditeIinfoExt = sceneEditInfoExtService.getByEditInfoId(oldSceneEditInfo.getId());
-            if(StrUtil.isNotBlank(sceneKey)) {
-                sceneEditInfo.setScenePassword(sceneKey);
-                sceneEditControls.setShowLock((int) CommonStatus.YES.code());
-            }else{
-                sceneEditInfo.setScenePassword("");
-                sceneEditControls.setShowLock((int)CommonStatus.NO.code());
-            }
             sceneEditInfo.setTitle(scenePlus.getTitle());
             sceneEditInfo.setDescription(scenePlus.getDescription());
             sceneEditInfo.setId(oldSceneEditInfo.getId());
@@ -1282,7 +1275,16 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                     icon = fYunFileConfig.getHost() + imgViewPath + fdageData.getString("icon");
                     log.info("上传icon成功....");
                 }
-                buildScenePost(dataSource,fdageData,"V3",cameraType,sceneNum,detailEntity,0,icon);
+                buildScenePost(dataSource, fdageData, "V3", cameraType, sceneNum, detailEntity, 0, icon);
+                if (cameraType == 14) {
+                    // 通知激光系统
+                    ScenePlus scenePlus = scenePlusService.getScenePlusByNum(sceneNum);
+                    String userName = null;
+                    if (!ObjectUtils.isEmpty(detailEntity.getUserId())) {
+                        userName = userService.getSSOUserByUserId(detailEntity.getUserId()).getUserName();
+                    }
+                    fdkkLaserService.saveScene(scenePlus, fdageData.getString("pwd"), cameraEntity, userName, false);
+                }
                 break;
         }
         Map<String,Object> result = new HashMap<>();
@@ -1328,7 +1330,8 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
 
         // 通知激光场景系统开始构建场景
         if(cameraType == 14){
-            fdkkLaserService.saveScene(scenePro, null, cameraEntity, userName, true);
+            scenePro.setStatus(0);
+            fdkkLaserService.saveScene(scenePro, jsonObject.getString("pwd"), cameraEntity, userName, false);
         }
 
         BuildSceneCallMessage buildSceneMqMessage = this.getBuildSceneMqMessage(

+ 26 - 37
src/main/java/com/fdkankan/contro/service/impl/ScenePlusServiceImpl.java

@@ -1,47 +1,22 @@
 package com.fdkankan.contro.service.impl;
 
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fdkankan.common.constant.CameraConstant;
-import com.fdkankan.common.constant.CommonStatus;
-import com.fdkankan.common.constant.ConstantUrl;
 import com.fdkankan.common.constant.ErrorCode;
-import com.fdkankan.common.constant.SceneStatus;
-import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.common.util.FileUtils;
-import com.fdkankan.contro.entity.Camera;
-import com.fdkankan.contro.entity.CameraDetail;
-import com.fdkankan.contro.entity.SSOUser;
 import com.fdkankan.contro.entity.ScenePlus;
 import com.fdkankan.contro.entity.ScenePlusExt;
-import com.fdkankan.contro.entity.ScenePro;
 import com.fdkankan.contro.mapper.IScenePlusMapper;
 import com.fdkankan.contro.service.ICameraDetailService;
-import com.fdkankan.contro.service.ICameraService;
 import com.fdkankan.contro.service.IScenePlusExtService;
 import com.fdkankan.contro.service.IScenePlusService;
-import com.fdkankan.contro.service.ISceneProService;
-import com.fdkankan.contro.service.IUserService;
-import com.fdkankan.contro.vo.ScenePlusVO;
-import com.fdkankan.fyun.constant.FYunTypeEnum;
-import com.fdkankan.fyun.face.FYunFileServiceInterface;
-import com.fdkankan.model.constants.ConstantFilePath;
-import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.web.response.ResultData;
-import java.io.File;
-import java.util.Date;
 import lombok.extern.slf4j.Slf4j;
-import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
+import java.util.List;
 import java.util.Objects;
-import org.springframework.util.ObjectUtils;
 
 /**
  * <p>
@@ -89,29 +64,43 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
 
     @Override
     public String getDataSourceLikeUnicode(String unicode) {
-
-        ScenePlusExt scenePlusExt = scenePlusExtService.getOne(
+        // 防止plus表删除,ext表未删除
+        List<ScenePlusExt> scenePlusExts = scenePlusExtService.list(
             new LambdaQueryWrapper<ScenePlusExt>().like(ScenePlusExt::getDataSource, unicode)
                     .eq(ScenePlusExt::getRecStatus,"A"));
 
-        if(Objects.isNull(scenePlusExt)){
+        if (ObjectUtils.isEmpty(scenePlusExts)) {
             return null;
         }
 
-        return scenePlusExt.getDataSource();
+        if (scenePlusExts.size() > 1) {
+            for (ScenePlusExt scenePlusExt : scenePlusExts) {
+                ScenePlus plus = getById(scenePlusExt.getPlusId());
+                if (!ObjectUtils.isEmpty(plus) && plus.getRecStatus().equals("A")) {
+                    return scenePlusExt.getDataSource();
+                }
+            }
+        }
+        return scenePlusExts.get(0).getDataSource();
     }
 
     @Override
     public ScenePlus getByFileId(String fileId) {
+        // 防止plus表删除,ext表未删除
+        List<ScenePlusExt> scenePlusExts = scenePlusExtService.list(
+                new LambdaQueryWrapper<ScenePlusExt>().like(ScenePlusExt::getDataSource, fileId)
+                        .eq(ScenePlusExt::getRecStatus, "A"));
 
-        ScenePlusExt scenePlusExt = scenePlusExtService.getOne(
-            new LambdaQueryWrapper<ScenePlusExt>().like(ScenePlusExt::getDataSource, fileId)
-                    .eq(ScenePlusExt::getRecStatus,"A"));
-
-        if(Objects.isNull(scenePlusExt)){
+        if (ObjectUtils.isEmpty(scenePlusExts)) {
             return null;
         }
-        return this.getById(scenePlusExt.getPlusId());
+        for (ScenePlusExt scenePlusExt : scenePlusExts) {
+            ScenePlus plus = getById(scenePlusExt.getPlusId());
+            if (!ObjectUtils.isEmpty(plus) && plus.getRecStatus().equals("A")) {
+                return plus;
+            }
+        }
+        return null;
     }
 
 }

+ 2 - 2
src/main/resources/bootstrap-test.yml

@@ -2,9 +2,9 @@ spring:
   cloud:
     nacos:
       config:
-        server-addr: 172.20.1.63:8848
+        server-addr: 120.24.144.164:8848
         file-extension: yaml
-        namespace: 4dkankan-v4-prod
+        namespace: 4dkankan-v4-test
         extension-configs:
           - data-id: 4dkankan-center-modeling-control.yaml
             group: DEFAULT_GROUP