Переглянути джерело

Merge branch 'feature-容量计算方式改造-20230624-dsx' into test

# Conflicts:
#	src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java
dsx 2 роки тому
батько
коміт
6e0155b211

+ 1 - 1
src/main/java/com/fdkankan/contro/controller/TestController.java

@@ -1,6 +1,6 @@
 package com.fdkankan.contro.controller;
 
-import com.fdkankan.contro.mq.service.ICommonService;
+import com.fdkankan.contro.service.ICommonService;
 import com.fdkankan.contro.service.IScene3dNumService;
 import com.fdkankan.web.response.ResultData;
 import org.springframework.beans.factory.annotation.Autowired;

+ 75 - 0
src/main/java/com/fdkankan/contro/entity/ExceedSpaceScene.java

@@ -0,0 +1,75 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+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 java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 超出容量场景码表
+ * </p>
+ *
+ * @author 
+ * @since 2023-06-29
+ */
+@Getter
+@Setter
+@TableName("t_exceed_space_scene")
+public class ExceedSpaceScene implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景码
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * 初次上传用户id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 相机id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    @TableField("file_id")
+    private String fileId;
+
+    @TableField("unicode")
+    private String unicode;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 修改时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * A-有效,I-无效
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A", delval = "I")
+    private String recStatus;
+
+
+}

+ 3 - 0
src/main/java/com/fdkankan/contro/entity/SceneCleanOrig.java

@@ -31,6 +31,9 @@ public class SceneCleanOrig implements Serializable {
     @TableField("num")
     private String num;
 
+    @TableField("type")
+    private Integer type;
+
     /**
      * 0-处理中,1-成功,-1失败
      */

+ 1 - 1
src/main/java/com/fdkankan/contro/generate/AutoGenerate.java

@@ -17,7 +17,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
 
         generate(path,"contro", getTables(new String[]{
-                "t_scene_clean_orig"
+                "t_exceed_space_scene"
         }));
 
 //        generate(path,"goods", getTables(new String[]{

+ 18 - 0
src/main/java/com/fdkankan/contro/mapper/IExceedSpaceSceneMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.fdkankan.contro.entity.ExceedSpaceScene;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 超出容量场景码表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-06-29
+ */
+@Mapper
+public interface IExceedSpaceSceneMapper extends BaseMapper<ExceedSpaceScene> {
+
+}

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

@@ -1,6 +1,5 @@
 package com.fdkankan.contro.mq.service.impl;
 
-import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.StrUtil;
@@ -14,13 +13,12 @@ import com.fdkankan.contro.entity.ScenePlusExt;
 import com.fdkankan.contro.entity.ScenePro;
 import com.fdkankan.contro.entity.SceneProEdit;
 import com.fdkankan.contro.mq.service.IBuildSceneService;
-import com.fdkankan.contro.mq.service.ICommonService;
+import com.fdkankan.contro.service.ICommonService;
 import com.fdkankan.contro.service.*;
 import com.fdkankan.contro.service.impl.FdkkV4Service;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.model.constants.ConstantFileName;
 import com.fdkankan.model.constants.ConstantFilePath;
-import com.fdkankan.model.constants.SceneBuildProcessType;
 import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.model.utils.CreateObjUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;

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

@@ -2,7 +2,6 @@ package com.fdkankan.contro.mq.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.file.FileNameUtil;
 import cn.hutool.core.util.StrUtil;
@@ -21,7 +20,6 @@ import com.fdkankan.contro.bean.SceneJsonBean;
 import com.fdkankan.contro.constant.UserEditDataType;
 import com.fdkankan.contro.entity.*;
 import com.fdkankan.contro.mq.service.IBuildSceneService;
-import com.fdkankan.contro.mq.service.ICommonService;
 import com.fdkankan.contro.service.*;
 import com.fdkankan.contro.vo.SceneEditControlsVO;
 import com.fdkankan.fyun.config.FYunFileConfig;
@@ -29,13 +27,10 @@ import com.fdkankan.fyun.constant.FYunTypeEnum;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.model.constants.ConstantFileName;
 import com.fdkankan.model.constants.ConstantFilePath;
-import com.fdkankan.model.constants.SceneBuildProcessType;
 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.FloorPlanUserUtil;
-import com.fdkankan.model.utils.SceneUtil;
 import com.fdkankan.push.config.PushMessageConfig;
 import com.fdkankan.push.utils.PushMsgUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
@@ -43,11 +38,9 @@ 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 com.sun.org.apache.xpath.internal.operations.Plus;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.bouncycastle.asn1.bc.ObjectStoreData;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.context.config.annotation.RefreshScope;

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

@@ -1,7 +1,5 @@
 package com.fdkankan.contro.mq.service.impl;
 
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.file.FileNameUtil;
 import cn.hutool.core.util.StrUtil;
@@ -9,17 +7,13 @@ import cn.hutool.core.util.ZipUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 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.CommonOperStatus;
-import com.fdkankan.common.constant.ExpiredStatus;
-import com.fdkankan.common.constant.ModelKind;
 import com.fdkankan.common.constant.PayStatus;
 import com.fdkankan.common.constant.SceneStatus;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.contro.entity.*;
 import com.fdkankan.contro.mq.service.IBuildSceneService;
-import com.fdkankan.contro.mq.service.ICommonService;
+import com.fdkankan.contro.service.ICommonService;
 import com.fdkankan.contro.service.*;
 import com.fdkankan.contro.service.impl.FdkkV4Service;
 import com.fdkankan.fyun.config.FYunFileConfig;
@@ -27,7 +21,6 @@ import com.fdkankan.fyun.constant.FYunTypeEnum;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.model.constants.ConstantFileName;
 import com.fdkankan.model.constants.ConstantFilePath;
-import com.fdkankan.model.constants.SceneBuildProcessType;
 import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.model.utils.CreateHouseJsonUtil;
 import com.fdkankan.model.utils.CreateObjUtil;
@@ -45,10 +38,7 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.*;
-import java.util.Map.Entry;
-import java.util.stream.Collectors;
 
 
 /**

+ 8 - 1
src/main/java/com/fdkankan/contro/mq/service/ICommonService.java

@@ -1,4 +1,7 @@
-package com.fdkankan.contro.mq.service;
+package com.fdkankan.contro.service;
+
+import com.fdkankan.contro.entity.CameraDetail;
+import com.fdkankan.contro.vo.ScenePlusVO;
 
 import java.util.Map;
 import java.util.Set;
@@ -30,4 +33,8 @@ public interface ICommonService {
     String getOssOrignPath(String path);
 
     int getPayStatus(Long cameraId, Long space);
+
+    void uploadStatusJson(String num, Integer sceneStatus, String webSite, String thumb, Integer payStatus, String uploadPath);
+
+    Long getSpaceLimit(CameraDetail cameraDetail);
 }

+ 29 - 0
src/main/java/com/fdkankan/contro/service/IExceedSpaceSceneService.java

@@ -0,0 +1,29 @@
+package com.fdkankan.contro.service;
+
+import com.fdkankan.contro.entity.CameraDetail;
+import com.fdkankan.contro.entity.ExceedSpaceScene;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.io.IOException;
+
+/**
+ * <p>
+ * 超出容量场景码表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-06-29
+ */
+public interface IExceedSpaceSceneService extends IService<ExceedSpaceScene> {
+
+    boolean cehckExceedSpace(String num, CameraDetail cameraDetail, String snCode, String fileId, String unicode);
+
+    boolean isExceedSpace(String num, CameraDetail cameraDetail);
+
+    ExceedSpaceScene getByFileIdAndUnicode(long cameraId, String fileId, String unicode);
+
+    void repeal(long cameraId, String fileId, String unicode) throws IOException;
+
+
+
+}

+ 41 - 19
src/main/java/com/fdkankan/contro/mq/service/impl/CommonServiceImpl.java

@@ -1,4 +1,4 @@
-package com.fdkankan.contro.mq.service.impl;
+package com.fdkankan.contro.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.FileUtil;
@@ -7,14 +7,17 @@ import com.fdkankan.common.util.FileUtils;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.PayStatus;
+import com.fdkankan.common.constant.SceneStatus;
 import com.fdkankan.common.constant.SpaceType;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.contro.entity.*;
 import com.fdkankan.contro.factory.UserEditData.UserEditDataHandler;
 import com.fdkankan.contro.factory.UserEditData.UserEditDataHandlerFactory;
-import com.fdkankan.contro.mq.service.ICommonService;
+import com.fdkankan.contro.service.ICommonService;
 import com.fdkankan.contro.service.*;
+import com.fdkankan.contro.vo.ScenePlusVO;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
@@ -255,30 +258,14 @@ public class CommonServiceImpl implements ICommonService {
 
     @Override
     public int getPayStatus(Long cameraId, Long space){
-
         //查询权益统计容量的方式
         String unit = SpaceType.GB.code();
         CameraDetail cameraDetail = cameraDetailService.getByCameraId(cameraId);
         if(StrUtil.isNotEmpty(cameraDetail.getUnit())){
             unit = cameraDetail.getUnit();
         }
-        Long limit = cameraDetail.getTotalSpace();
+        Long limit = this.getSpaceLimit(cameraDetail);
 
-        UserIncrement userIncrement = userIncrementService.getByCameraId(cameraId);
-        if(Objects.nonNull(userIncrement)){
-            IncrementType incrementType = incrementTypeService.getById(userIncrement.getIncrementTypeId());
-            switch (SpaceType.get(unit)){
-                case GB:
-                    limit = incrementType.getCameraCapacity();
-                    if(limit != -1){
-                        limit = limit * 1024 * 1024 * 1024;
-                    }
-                    break;
-                case SP:
-                    limit = incrementType.getCameraSpace();
-                    break;
-            }
-        }
         if(SpaceType.SP.code().equals(unit)){//如果按空间方式统计,则space置为1
             space = 1L;
         }
@@ -294,4 +281,39 @@ public class CommonServiceImpl implements ICommonService {
         }
         return PayStatus.PAY.code();
     }
+
+    @Override
+    public void uploadStatusJson(String num, Integer sceneStatus, String webSite, String thumb, Integer payStatus, String uploadPath) {
+        String localDataPath = String.format(ConstantFilePath.DATABUFFER_FORMAT, num);
+        JSONObject statusJson = new JSONObject();
+        statusJson.put("status", sceneStatus);
+        statusJson.put("webSite", webSite);
+        statusJson.put("sceneNum", num);
+        statusJson.put("thumb", thumb);
+        statusJson.put("payStatus", PayStatus.NOT_PAY.code());
+        statusJson.put("recStatus", 'A');
+        FileUtils.writeFile(localDataPath + "status.json", statusJson.toString());
+        fYunFileServiceInterface.uploadFile(localDataPath + "status.json", uploadPath + "status.json");
+    }
+
+    @Override
+    public Long getSpaceLimit(CameraDetail cameraDetail){
+        Long limit = cameraDetail.getTotalSpace();
+        UserIncrement userIncrement = userIncrementService.getByCameraId(cameraDetail.getCameraId());
+        if(Objects.nonNull(userIncrement) && userIncrement.getIsExpired() == CommonStatus.NO.code().intValue()){
+            IncrementType incrementType = incrementTypeService.getById(userIncrement.getIncrementTypeId());
+            switch (SpaceType.get(cameraDetail.getUnit())){
+                case GB:
+                    limit = incrementType.getCameraCapacity();
+                    if(limit != -1){
+                        limit = limit * 1024 * 1024 * 1024;
+                    }
+                    break;
+                case SP:
+                    limit = incrementType.getCameraSpace();
+                    break;
+            }
+        }
+        return limit;
+    }
 }

+ 132 - 0
src/main/java/com/fdkankan/contro/service/impl/ExceedSpaceSceneServiceImpl.java

@@ -0,0 +1,132 @@
+package com.fdkankan.contro.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.constant.*;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.contro.entity.*;
+import com.fdkankan.contro.mapper.IExceedSpaceSceneMapper;
+import com.fdkankan.contro.service.*;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.model.constants.UploadFilePath;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 超出容量场景码表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-06-29
+ */
+@Service
+public class ExceedSpaceSceneServiceImpl extends ServiceImpl<IExceedSpaceSceneMapper, ExceedSpaceScene> implements IExceedSpaceSceneService {
+
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private ISceneProService sceneProService;
+    @Autowired
+    private IUserIncrementService userIncrementService;
+    @Autowired
+    private IIncrementTypeService incrementTypeService;
+    @Autowired
+    private ICommonService commonService;
+    @Autowired
+    private FYunFileServiceInterface fYunFileService;
+    @Autowired
+    private ISceneCleanOrigService sceneCleanOrigService;
+
+
+    @Override
+    public boolean cehckExceedSpace(String num, CameraDetail cameraDetail, String snCode, String fileId, String unicode) {
+        if(!cameraDetail.getUnit().equals(SpaceType.SP.code())){
+            return false;
+        }
+        boolean exceedSpace = this.isExceedSpace(num, cameraDetail);
+        if(exceedSpace){
+            //写入超出容量场景表
+            ExceedSpaceScene scene = new ExceedSpaceScene();
+            scene.setNum(num);
+            scene.setUserId(cameraDetail.getUserId());
+            scene.setCameraId(cameraDetail.getCameraId());
+            scene.setFileId(fileId);
+            scene.setUnicode(unicode);
+            this.save(scene);
+
+            //删除原始资源
+            if(fileId.length() > 1 && unicode.length() > 1){
+                String homePath = ConstantFilePath.OSS_PREFIX.concat(snCode).concat("/").concat(fileId).concat("/").concat(unicode);
+                fYunFileService.deleteFolder(homePath);
+            }
+
+            //记录删除原始资源记录
+            SceneCleanOrig sceneCleanOrig = new SceneCleanOrig();
+            sceneCleanOrig.setNum(num);
+            sceneCleanOrig.setType(4);
+            sceneCleanOrig.setState(CommonSuccessStatus.SUCCESS.code());
+            sceneCleanOrigService.save(sceneCleanOrig);
+
+            //上传计算失败状态文件
+            //上传app状态文件
+            commonService.uploadStatusJson(num,SceneStatus.EXCEED_SPACE.code(),
+                    null, null, PayStatus.NOT_PAY.code(),
+                    String.format(UploadFilePath.DATA_VIEW_PATH, num));
+        }
+
+        return exceedSpace;
+    }
+
+    @Override
+    public boolean isExceedSpace(String num, CameraDetail cameraDetail) {
+        //查询权益统计容量的方式
+        Long limit = commonService.getSpaceLimit(cameraDetail);
+
+        if(limit == -1){
+            return false;
+        }
+
+        // TODO: 2023/6/30 现阶段只有按个数统计容量的方式再需要做上传拦截,所以这里暂时只做了统计个数统计
+        //统计场景个数
+        long v4Count = scenePlusService.count(
+                new LambdaQueryWrapper<ScenePlus>()
+                        .eq(ScenePlus::getCameraId, cameraDetail.getCameraId())
+                        .in(ScenePlus::getSceneStatus, SceneStatus.wait.code(), SceneStatus.SUCCESS.code(), SceneStatus.NO_DISPLAY.code()));
+        long V3count = sceneProService.count(new LambdaQueryWrapper<ScenePro>()
+                .eq(ScenePro::getCameraId, cameraDetail.getCameraId())
+                .in(ScenePro::getStatus, SceneStatus.wait.code(), SceneStatus.SUCCESS.code(), SceneStatus.NO_DISPLAY.code()));
+
+        if(v4Count + V3count < limit){
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public ExceedSpaceScene getByFileIdAndUnicode(long cameraId, String fileId, String unicode) {
+        return this.getOne(new LambdaQueryWrapper<ExceedSpaceScene>()
+                        .eq(ExceedSpaceScene::getCameraId, cameraId)
+                        .eq(ExceedSpaceScene::getFileId, fileId)
+                        .eq(ExceedSpaceScene::getUnicode, unicode));
+    }
+
+    @Override
+    public void repeal(long cameraId, String fileId, String unicode) throws IOException {
+        ExceedSpaceScene scene = this.getByFileIdAndUnicode(cameraId, fileId, unicode);
+        if(Objects.isNull(scene)){
+            return;
+        }
+        this.removeById(scene);
+
+        //删除status.json
+        String statusJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH, scene.getNum()).concat("status.json");
+        fYunFileService.deleteFile(statusJsonPath);
+    }
+}

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

@@ -25,4 +25,5 @@ public class SceneCleanOrigServiceImpl extends ServiceImpl<ISceneCleanOrigMapper
     public List<SceneCleanOrig> lisByNumAfterLastCall(String num, Date lastCallTime) {
         return this.list(new LambdaQueryWrapper<SceneCleanOrig>().eq(SceneCleanOrig::getNum, num).gt(SceneCleanOrig::getCreateTime, lastCallTime));
     }
+
 }

+ 40 - 34
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -24,6 +24,7 @@ import com.fdkankan.contro.constant.RedisConstants;
 import com.fdkankan.contro.entity.*;
 import com.fdkankan.contro.enums.CameraTypeEnum;
 import com.fdkankan.contro.mapper.ISceneFileBuildMapper;
+import com.fdkankan.contro.service.ICommonService;
 import com.fdkankan.contro.service.*;
 import com.fdkankan.contro.vo.ResponseSceneFile;
 import com.fdkankan.contro.vo.ScenePlusVO;
@@ -173,6 +174,12 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
     @Autowired
     private ISceneCleanOrigService sceneCleanOrigService;
 
+    @Autowired
+    private ICommonService commonService;
+
+    @Autowired
+    private IExceedSpaceSceneService exceedSpaceSceneService;
+
     @Override
     public SceneFileBuild findByFileId(String fileId) {
 
@@ -326,10 +333,16 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
 
         //查看场景中的文件目录是否有改文件id,有则重新计算改场景,无则新建场景
         ScenePlus scenePlus = scenePlusService.getByFileId("/" + fileId + "/");
-        int rebuild = 1;
+        int rebuild = CommonStatus.YES.code();
         if (ObjectUtils.isEmpty(scenePlus)) {
+
+
+            //清除超容量场景记录
+            exceedSpaceSceneService.repeal(camera.getId(), fileId, unicode);
+
             sceneNum = scene3dNumService.generateSceneNum(cameraDetail.getType());
-            rebuild = 0;
+
+            rebuild = CommonStatus.NO.code();
         } else {
             sceneNum = scenePlus.getNum();
             sceneCopyLogService.checkCanBuild(sceneNum);
@@ -342,6 +355,18 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             log.error("大场景序号为空:" + sceneNum);
             throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
         }
+
+        //如果是相机计算容量的模式是场景个数模式,则需要拦截计算
+        if(rebuild == CommonStatus.NO.code()){//新场景需要校验容量是否超出限制
+            boolean exceedSpace = exceedSpaceSceneService.cehckExceedSpace(sceneNum, cameraDetail, cameraName, fileId, unicode);
+            if(exceedSpace){
+                ScenePlusVO scenePlusVO = new ScenePlusVO();
+                scenePlusVO.setNum(sceneNum);
+                scenePlusVO.setSceneStatus(SceneStatus.EXCEED_SPACE.code());
+                return scenePlusVO;
+            }
+        }
+
         String dataSource = cameraName.replace("4DKKPRO_", "").replace("-fdage", "").toLowerCase() + File.separator +
                 fileId + File.separator + unicode;
         if (cameraType == 14) {
@@ -364,9 +389,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
 
     private ScenePlusVO buildScenePost(String dataSource, JSONObject jsonObject, String buildType, long cameraType,
                                        String sceneNum, CameraDetail cameraDetail, int rebuild,String icon) throws Exception {
-        String localDataPath = String.format(ConstantFilePath.DATABUFFER_FORMAT, sceneNum);
         String imgViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, sceneNum);
-        String dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, sceneNum);
 
         String userName = null;
         if (!ObjectUtils.isEmpty(cameraDetail.getUserId())) {
@@ -388,8 +411,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         //重算的场景,先移除该场景对应的容量
         if (rebuild == 1) {
             scenePlusService.resetSpace(sceneNum);
-            //删除oss的houst_floor.json(国际版可能会卡住)
-            fYunFileService.deleteFile(dataViewPath + "houst_floor.json");
         } else {
             //上传log-main.png
             fYunFileService.uploadFile(ConstantFilePath.LOGO_PATH + "logo-main.png", imgViewPath + "logo-main.png");
@@ -404,18 +425,10 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 jsonObject.getInteger("scenetype"), jsonObject.getString("gps"), rebuild,
                 jsonObject.getInteger("resolution"), firmwareVersion.toString(), sceneUrl, buildType, cameraDetail.getCooperationUser());
 
-        if (Objects.nonNull(scenePlusVO)) {
-            JSONObject statusJson = new JSONObject();
-            //临时将-2改成1,app还没完全更新
-            statusJson.put("status", scenePlusVO.getSceneStatus() == -2 ? 1 : scenePlusVO.getSceneStatus());
-            statusJson.put("webSite", scenePlusVO.getWebSite());
-            statusJson.put("sceneNum", scenePlusVO.getNum());
-            statusJson.put("thumb", scenePlusVO.getThumb());
-            statusJson.put("payStatus", 0);
-            statusJson.put("recStatus", 'A');
-            FileUtils.writeFile(localDataPath + "status.json", statusJson.toString());
-            fYunFileService.uploadFile(localDataPath + "status.json", dataViewPath + "status.json");
-        }
+        //上传app状态文件
+        commonService.uploadStatusJson(sceneNum, scenePlusVO.getSceneStatus(),
+                scenePlusVO.getWebSite(),scenePlusVO.getThumb(),PayStatus.NOT_PAY.code(),
+                String.format(UploadFilePath.DATA_VIEW_PATH, sceneNum));
 
         BuildSceneCallMessage mqMessage = getBuildSceneMqMessage(sceneNum, cameraType, algorithm, jsonObject, buildType,
                 scenePlusVO.getDataSource());
@@ -495,19 +508,12 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 jsonObject.getInteger("scenetype"), jsonObject.getString("gps"),
                 jsonObject.getInteger("resolution"), firmwareVersion.toString(), buildType);
 
-        if (Objects.nonNull(scenePlusVO)) {
-            JSONObject statusJson = new JSONObject();
-            //临时将-2改成1,app还没完全更新
-            statusJson.put("status", scenePlusVO.getSceneStatus() == -2 ? 1 : scenePlusVO.getSceneStatus());
-            statusJson.put("webSite", scenePlusVO.getWebSite());
-            statusJson.put("sceneNum", scenePlusVO.getNum());
-            statusJson.put("thumb", scenePlusVO.getThumb());
-            statusJson.put("payStatus", 0);
-            statusJson.put("recStatus", 'A');
-            FileUtils.writeFile(localDataPath + "status.json", statusJson.toString());
-            fYunFileService.uploadFile(localDataPath + "status.json", dataViewPath + "status.json");
-        }
-        BuildSceneCallMessage mqMessage = getBuildSceneMqMessage(sceneNum, cameraType, algorithm, jsonObject, buildType,
+        //上传场景状态文件
+        commonService.uploadStatusJson(sceneNum, scenePlusVO.getSceneStatus(),
+                scenePlusVO.getWebSite(),scenePlusVO.getThumb(),PayStatus.NOT_PAY.code(),
+                String.format(ConstantFilePath.DATA_PATH_FORMAT, sceneNum));
+
+        BuildSceneCallMessage mqMessage = getBuildSceneMqMessage(sceneNum, cameraType, algorithm, jsonObject.getInteger("resolution"), buildType,
                 scenePlusVO.getDataSource());
         if (cameraDetail.getCompanyId() != null) {
             Company company = companyService.getById(cameraDetail.getCompanyId());
@@ -775,7 +781,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         }
 
 
-        if(ObjectUtils.isEmpty(scenePlusVO)){
+        if(ObjectUtils.isEmpty(scenePlusVO) || scenePlusVO.getSceneStatus() == SceneStatus.EXCEED_SPACE.code()){
             return ResultData.ok();
         }
         // 通知激光场景系统开始构建场景
@@ -927,9 +933,9 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         }else {
             ScenePlus oldScene = scenePlusService.getScenePlusByNum(projectNum);
             scenePlus.setId(oldScene.getId());
-            scenePlus.setSceneStatus(0);
+            scenePlus.setSceneStatus(SceneStatus.wait.code());
             scenePlus.setRecStatus(RecStatus.VALID.code());
-            scenePlus.setPayStatus(0);
+            scenePlus.setPayStatus(PayStatus.NOT_PAY.code());
             scenePlus.setCreateTime(Calendar.getInstance().getTime());
 
             ScenePlusExt oldSceneExt = scenePlusExtService.getScenePlusExtByPlusId(oldScene.getId());

+ 4 - 0
src/main/java/com/fdkankan/contro/service/impl/ScenePlusServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.SceneStatus;
 import com.fdkankan.contro.entity.ScenePlus;
 import com.fdkankan.contro.entity.ScenePlusExt;
 import com.fdkankan.contro.mapper.IScenePlusMapper;
@@ -53,6 +54,9 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
             log.info("该场景不属于八目相机无法重置容量,场景码为:" + num);
             return ResultData.error(ErrorCode.FAILURE_CODE_5057);
         }
+        if(scenePlus.getSceneStatus() == SceneStatus.EXCEED_SPACE.code()){//超出容量的场景不需要更新容量
+            return ResultData.ok();
+        }
         if(!ObjectUtils.isEmpty(scenePlusExt) && !ObjectUtils.isEmpty(scenePlusExt.getSpace())){
             cameraDetailService.updateCameraDetailByCameraIdAndSpace(scenePlus.getCameraId(), -scenePlusExt.getSpace());
         }

+ 5 - 0
src/main/resources/mapper/contro/ExceedSpaceSceneMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.contro.mapper.IExceedSpaceSceneMapper">
+
+</mapper>