lyhzzz 1 ano atrás
pai
commit
6130d2c837

+ 3 - 0
src/main/java/com/fdkankan/ucenter/common/constants/ResultCode.java

@@ -23,4 +23,7 @@ public class ResultCode {
 
     public static final int FAILURE_CODE_400009  = 400009 ;
     public static final String FAILURE_MSG_400009  = "计算中场景无法带看" ;
+
+    public static final int FAILURE_CODE_400010  = 400010 ;
+    public static final String FAILURE_MSG_400010  = "场景用户为空" ;
 }

+ 4 - 2
src/main/java/com/fdkankan/ucenter/controller/fire/FdUserSceneController.java

@@ -1,10 +1,12 @@
 package com.fdkankan.ucenter.controller.fire;
 
+import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.ucenter.common.BaseController;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.common.ResultData;
+import com.fdkankan.ucenter.common.constants.ResultCode;
 import com.fdkankan.ucenter.constant.LoginConstant;
 import com.fdkankan.ucenter.entity.ScenePlus;
 import com.fdkankan.ucenter.entity.ScenePro;
@@ -62,7 +64,7 @@ public class FdUserSceneController extends BaseController {
     @GetMapping("/getTokenByNum")
     public ResultData getTokenByNum(@RequestParam(required = false) String num ){
         if(StringUtils.isEmpty(num)){
-            throw new BusinessException(-1,"参数为空");
+            throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
         }
         Long userId = null;
         ScenePlus scenePlus = scenePlusService.getByNum(num);
@@ -75,7 +77,7 @@ public class FdUserSceneController extends BaseController {
             }
         }
         if(userId == null){
-            throw new BusinessException(-1,"场景为空");
+            throw new BusinessException(ResultCode.FAILURE_CODE_400010,ResultCode.FAILURE_MSG_400010);
         }
         User user = userService.getById(userId);
         if(user == null){

+ 3 - 0
src/main/java/com/fdkankan/ucenter/entity/SceneEditControls.java

@@ -147,4 +147,7 @@ public class SceneEditControls implements Serializable {
 
     @TableField("show_draw_title")
     private Integer showDrawTitle;
+
+    @TableField("show_all_model")
+    private Integer showAllModel;
 }

+ 6 - 0
src/main/java/com/fdkankan/ucenter/entity/SceneEditInfoExt.java

@@ -119,6 +119,12 @@ public class SceneEditInfoExt implements Serializable {
     @TableField("sns_info")
     private String snsInfo;
 
+    @TableField("cut_model")
+    private Integer cutModel;
+
+    @TableField("started")
+    private String started;
+
     @TableField("scene_draw")
     private Integer sceneDraw;
 }

+ 4 - 7
src/main/java/com/fdkankan/ucenter/mq/consumer/LaserSceneStatusConsumer.java

@@ -5,6 +5,7 @@ import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.ucenter.common.RedisKeyUtil;
 import com.fdkankan.ucenter.mq.vo.ScenePayStatusVo;
 import com.fdkankan.ucenter.service.ISceneProService;
+import com.fdkankan.ucenter.service.impl.SceneCommonService;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.Message;
@@ -24,8 +25,7 @@ public class LaserSceneStatusConsumer {
 
 
     @Autowired
-    RedisUtil redisUtil;
-
+    SceneCommonService sceneCommonService;
     @RabbitListener(
             queuesToDeclare = @Queue("${queue.scene.laser.status:update-scene-status-ucent}")
             ,concurrency = "1"
@@ -41,15 +41,12 @@ public class LaserSceneStatusConsumer {
             JSONObject jsonObject = JSONObject.parseObject(msg);
             String num = jsonObject.getString("num");
             Integer status = jsonObject.getInteger("status");
-            String redisKey = RedisKeyUtil.laserCopyLock + num;
-            if(redisUtil.hasKey(redisKey)){
-                redisUtil.del(redisKey);
+            if(status == 1){
+                sceneCommonService.copyResult(num);
             }
 
         }catch (Exception e){
             log.info("update-scene-status-ucent----消费失败",e);
-        }finally {
-
         }
 
     }

+ 58 - 0
src/main/java/com/fdkankan/ucenter/mq/consumer/SceneCopyResultConsumer.java

@@ -0,0 +1,58 @@
+package com.fdkankan.ucenter.mq.consumer;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.ucenter.common.RedisKeyUtil;
+import com.fdkankan.ucenter.entity.*;
+import com.fdkankan.ucenter.mq.vo.ScenePayStatusVo;
+import com.fdkankan.ucenter.service.*;
+import com.fdkankan.ucenter.service.impl.SceneCommonService;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 场景封存解封 mq
+ */
+@Slf4j
+@Component
+public class SceneCopyResultConsumer {
+
+
+
+    @Autowired
+    SceneCommonService sceneCommonService;
+
+    @RabbitListener(
+            queuesToDeclare = @Queue("${queue.scene.copy.result:ucenter-copy-scene-result}")
+            ,concurrency = "1"
+    )
+    public void consumerQueue(Channel channel, Message message)  {
+        try {
+            String messageId = message.getMessageProperties().getMessageId();
+            String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+            log.info("copy-scene-result--messageId:{},msg:{}",messageId,msg);
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+
+            JSONObject jsonObject = JSONObject.parseObject(msg);
+            String oldNum = jsonObject.getString("oldNum");
+            String newNum = jsonObject.getString("newNum");
+
+            sceneCommonService.copyResult(newNum);
+
+        }catch (Exception e){
+            log.info("copy-scene-result----消费失败",e);
+        }
+
+    }
+
+}

+ 1 - 0
src/main/java/com/fdkankan/ucenter/service/ICameraDetailService.java

@@ -61,6 +61,7 @@ public interface ICameraDetailService extends IService<CameraDetail> {
     Boolean checkSpace(Long cameraId, Long space);
 
     Boolean checkSpace(Long cameraId,CameraType cameraType);
+    Boolean checkSpace(CameraDetail cameraId,CameraType cameraType);
 
     void initSpace(CameraDetail cameraDetail);
     void initSpace(Long cameraId);

+ 5 - 0
src/main/java/com/fdkankan/ucenter/service/impl/CameraDetailServiceImpl.java

@@ -306,6 +306,11 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
         if(detailEntity == null){
             return false;
         }
+        return checkSpace(detailEntity,cameraType);
+    }
+
+    @Override
+    public Boolean checkSpace(CameraDetail detailEntity, CameraType cameraType) {
         if (!"aws".equals(NacosProperty.uploadType) && cameraType.getIsLaser() == 1) {
             return true;
         }

+ 78 - 2
src/main/java/com/fdkankan/ucenter/service/impl/SceneCommonService.java

@@ -4,14 +4,16 @@ import cn.hutool.core.io.FileUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
 import cn.hutool.extra.qrcode.QrConfig;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.constant.SceneVersionType;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.common.util.SnowflakeIdGenerator;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.ucenter.common.RedisKeyUtil;
 import com.fdkankan.ucenter.common.constants.ResultCode;
-import com.fdkankan.ucenter.entity.SceneResource;
-import com.fdkankan.ucenter.service.IScene3dNumService;
+import com.fdkankan.ucenter.entity.*;
+import com.fdkankan.ucenter.service.*;
 import com.fdkankan.ucenter.util.SceneResourcePath;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
@@ -20,6 +22,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.function.ObjDoubleConsumer;
@@ -152,6 +156,7 @@ public class SceneCommonService {
                 if("v4".equals(sceneVersion)){
                     JSONObject jsonObject = JSONObject.parseObject(newJson);
                     jsonObject.put("title",newSceneName);
+                    jsonObject.put("dynamicPanel",0);
                     FileUtils.writeFile(localPath, jsonObject.toJSONString());
 
                     String sceneJsonPath = String.format(SceneResourcePath.DATA_VIEW_PATH+"/" + fileName, newNum);
@@ -168,6 +173,15 @@ public class SceneCommonService {
                             fYunFileServiceInterface.deleteFile(oldName);
                         }
                     }
+                    String dynamicViewPath = String.format(SceneResourcePath.DYNAMIC_VIEW_PATH, newNum);
+                    String dynamicEditPath = String.format(SceneResourcePath.DYNAMIC_EDIT_PATH, newNum);
+                    if(fYunFileServiceInterface.fileExist(dynamicViewPath)){
+                        fYunFileServiceInterface.deleteFile(dynamicViewPath);
+                    }
+                    if(fYunFileServiceInterface.fileExist(dynamicEditPath)){
+                        fYunFileServiceInterface.deleteFile(dynamicEditPath);
+                    }
+
                 }
             }catch (Exception e){
                 log.error("writeFile-error:{}",e);
@@ -235,4 +249,66 @@ public class SceneCommonService {
             }
         }
     }
+
+    @Autowired
+    ISceneProService sceneProService;
+    @Autowired
+    ICameraDetailService cameraDetailService;
+    @Autowired
+    ICameraTypeService cameraTypeService;
+    @Autowired
+    IScenePlusService scenePlusService;
+    @Autowired
+    IScenePlusExtService scenePlusExtService;
+
+    public void copyResult(String newNum) {
+        ScenePro scenePro = sceneProService.getByNum(newNum);
+        ScenePlus scenePlus = scenePlusService.getByNum(newNum);
+        if(scenePro == null && scenePlus == null){
+            log.info("复制失败:{}",newNum);
+            return;
+        }
+        Long cameraId = scenePro == null ? scenePlus.getCameraId() : scenePro.getCameraId();
+        Integer location = null;
+        Long space = 0L;
+        if(scenePlus != null){
+            ScenePlusExt plusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
+            if(plusExt == null){
+                return;
+            }
+            location = plusExt.getLocation();
+            space = plusExt.getSpace();
+
+        }
+        if(scenePro != null){
+            space = scenePro.getSpace();
+        }
+        CameraDetail cameraDetail = cameraDetailService.getByCameraId(cameraId);
+        CameraType cameraType = cameraTypeService.getByCameraType(cameraDetail.getType());
+
+        Boolean checkSpace = cameraDetailService.checkSpace(cameraDetail,cameraType);
+        if(!checkSpace){
+            List<String> panoNumList = new ArrayList<>();
+            if(location != null && location == 7){
+                panoNumList.add(scenePlus.getNum());
+            }
+            sceneProService.lockOrUnLockScenes(new ArrayList<>(), Arrays.asList(newNum),-2,cameraType.getIsLaser(),panoNumList);
+        }
+        cameraDetailService.addUsedSpace(cameraDetail,space);
+
+
+        if(cameraType.getIsLaser() == 1 && scenePlus != null){
+            LambdaUpdateWrapper<ScenePlus> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(ScenePlus::getId,scenePlus.getId());
+            wrapper.set(ScenePlus::getSceneStatus,-2);
+            scenePlusService.update(wrapper);
+        }
+        if(cameraType.getIsLaser() == 1 && scenePro != null){
+            LambdaUpdateWrapper<ScenePro> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(ScenePro::getId,scenePro.getId());
+            wrapper.set(ScenePro::getStatus,-2);
+            sceneProService.update(wrapper);
+        }
+
+    }
 }

+ 14 - 28
src/main/java/com/fdkankan/ucenter/service/impl/SceneProServiceImpl.java

@@ -701,7 +701,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         if(!canSpace){
             throw new BusinessException(CameraConstant.FAILURE_CODE_6008, CameraConstant.FAILURE_MSG_6008);
         }
-        copyScene(detailEntity,scenePro,scenePlus,cameraType);
+        copyScene(sceneNum,detailEntity,scenePro,scenePlus,cameraType);
 
     }
 
@@ -735,37 +735,23 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             throw new BusinessException(CameraConstant.FAILURE_CODE_6008, CameraConstant.FAILURE_MSG_6008);
         }
 
-        copyScene(detailEntity,scenePro,scenePlus,cameraType);
+        copyScene(sceneNum,detailEntity,scenePro,scenePlus,cameraType);
     }
 
-    private  void copyScene(CameraDetail detailEntity,ScenePro scenePro,ScenePlus scenePlus,CameraType cameraType) throws Exception {
-        String newNum = scene3dNumService.generateSceneNum(detailEntity.getType());
-
-        Long sceneId = scenePro == null ? scenePlus.getId() :scenePro.getId();
-        Long newSceneId = null;
-        FolderScene folderScene = folderSceneService.getByType(sceneId, null);
-        if(cameraType.getIsLaser() == 1){
-            String redisKey = RedisKeyUtil.laserCopyLock + newNum;
-            redisUtil.set(redisKey,"1",60*60);
-        }
-
-        if(scenePro !=null){        //v3场景复制
-            log.info("场景复制--V3--OldNum:{},oldTitle:{},newNum:{},", scenePro.getNum(),scenePro.getSceneName(),newNum);
-
-            newSceneId = this.copyV3Scene(scenePro, newNum, detailEntity,cameraType);
-        }
-        if(scenePlus != null){      //v4场景复制
-            log.info("场景复制--V4--OldNum:{},oldTitle:{},newNum:{}", scenePlus.getNum(),scenePlus.getTitle(),newNum);
+    @Autowired
+    RabbitMqProducer rabbitMqProducer;
 
-            newSceneId =  scenePlusService.copyV4Scene(scenePlus,newNum,detailEntity,cameraType);
-        }
-        log.info("场景复制--完成--sceneId:{}",newSceneId);
+    @Value("${queue.scene.copy:ucenter-copy-scene}")
+    private String copySceneQueue;
 
-        if(newSceneId != null && folderScene!= null){
-            folderScene.setId(null);
-            folderScene.setSceneId(newSceneId);
-            folderSceneService.save(folderScene);
-        }
+    private void copyScene(String oldNum,CameraDetail detailEntity,ScenePro scenePro,ScenePlus scenePlus,CameraType cameraType) throws Exception {
+        String newNum = scene3dNumService.generateSceneNum(detailEntity.getType());
+        Long userId = scenePro == null ? scenePlus.getUserId() :scenePro.getUserId();
+        sceneCopyLogService.saveByNum(oldNum,newNum,userId);
+        HashMap<String,String > map = new HashMap<>();
+        map.put("oldNum",oldNum);
+        map.put("newNum",newNum);
+        rabbitMqProducer.sendByWorkQueue(copySceneQueue,map);
     }
 
     @Override

+ 2 - 0
src/main/java/com/fdkankan/ucenter/util/SceneResourcePath.java

@@ -25,6 +25,8 @@ public class SceneResourcePath {
     public static final String DATA_EDIT_PATH =  "scene_edit_data/%s/data";
     public static final String DATA_VIEW_PATH =  "scene_view_data/%s/data";
     public static final String USER_VIEW_PATH =  "scene_view_data/%s/user";
+    public static final String DYNAMIC_VIEW_PATH =  "scene_view_data/%s/user/dynamicPanel.json";
+    public static final String DYNAMIC_EDIT_PATH =  "scene_edit_data/%s/user/dynamicPanel.json";
 
     public static final String DOWNLOADS_QRCODE = "downloads/scene/%s/QRcode/";