소스 검색

Merge branch 'feature-sg-20230615-dsx' into test

# Conflicts:
#	src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java
#	src/main/java/com/fdkankan/contro/mq/service/impl/BuildV3SceneServiceImpl.java
#	src/main/java/com/fdkankan/contro/service/IFdkkLaserService.java
#	src/main/java/com/fdkankan/contro/service/impl/IFdkkLaserServiceImpl.java
dsx 1 년 전
부모
커밋
5cfac9e040

+ 6 - 0
src/main/java/com/fdkankan/contro/entity/ScenePlusExt.java

@@ -65,6 +65,12 @@ public class ScenePlusExt implements Serializable {
     private Long space;
 
     /**
+     * 原始文件容量
+     */
+    @TableField("orig_space")
+    private Long origSpace;
+
+    /**
      * 云服务器类型
      */
     @TableField("ecs")

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

@@ -31,6 +31,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;
@@ -87,6 +88,12 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
     @Value("#{'${build.scene.post.not-delete-nas-nums:}'.split(',')}")
     private List<String> notDeleteNasNumList;
 
+    @Value("4dkk.laserService.bucket")
+    private String laserBucket;
+
+    @Value("${4dkk.laserService.dir}")
+    private String laserDir;
+
     @Autowired
     private RabbitMqProducer mqProducer;
 
@@ -321,14 +328,19 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
 
             if (cameraType == 14) {
                 //计算成功  激光转台相机 同步 请求
-                fdkkLaserService.syncBuildResult(scenePlus.getNum(), path, scenePlus.getCreateTime(), Calendar.getInstance().getTime());
+                fdkkLaserService.syncBuildResult(scenePlus.getNum(), path, scenePlus.getCreateTime(), Calendar.getInstance().getTime(), scenePlusExt.getShootCount());
                 sceneEditControlsService.update(new LambdaUpdateWrapper<SceneEditControls>().set(SceneEditControls::getShowMap,0)
                         .eq(SceneEditControls::getEditInfoId,sceneEditInfo.getId()));
                 sceneEditControls.setShowMap(0);
+                scenePlusExt.setSpace(scenePlusExt.getSpace() + fYunFileService.getSpace(laserBucket, String.format(laserDir, sceneCode)));
             } else if (new File(path + "/results/laserData/vision_edit.txt").exists()) {
                 fdkkLaserService.cloudPointBuild(sceneCode,path);
             }
 
+            //统计原始资源大小
+            scenePlusExt.setOrigSpace(FileUtil.size(new File(path.concat(File.separator).concat("capture"))));
+
+
             log.info("生成scene.json上传oss并设置缓存,num:{}", sceneCode);
             CameraDetail cameraDetail = cameraDetailService.getByCameraId(scenePlus.getCameraId());
             Company company = !ObjectUtils.isEmpty(cameraDetail.getCompanyId()) ? companyService.getById(cameraDetail.getCompanyId()) : null;
@@ -360,6 +372,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             this.uploadStatusJson(scenePlus, scenePlusExt);
 
             scenePlusService.updateById(scenePlus);
+            scenePlusExtService.updateById(scenePlusExt);
 
             //国际环境需要发邮件通知
             if("eur".equals(env)){
@@ -873,14 +886,51 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         scenePlusExt.setSceneKind(sceneKind);
 //        scenePlusExt.setModelKind(modelKind);
 
-        String dataFdage = FileUtil.readUtf8String(scenePlusExt.getDataSource().concat("/capture/").concat("data.fdage"));
-        JSONObject jsonObject = JSON.parseObject(dataFdage);
-        int points = jsonObject.getJSONArray("points").size();
-        scenePlusExt.setShootCount(points);
+        //统计点位数量
+        scenePlusExt.setShootCount(this.getShootCount(scenePlusExt));
 
         scenePlusExtService.updateById(scenePlusExt);
     }
 
+    private Integer getShootCount(ScenePlusExt scenePlusExt){
+        String homePath = SceneUtil.getHomePath(scenePlusExt.getDataSource());
+        if(scenePlusExt.getLocation() == 5 || scenePlusExt.getLocation() == 6){
+            String slamDataStr = fYunFileService.getFileContent(homePath.concat("slam_data.json"));
+            JSONObject slamDataObj = JSON.parseObject(slamDataStr);
+            JSONArray viewsInfo = slamDataObj.getJSONArray("views_info");
+            if(CollUtil.isEmpty(viewsInfo)){
+                return 0;
+            }
+            return viewsInfo.stream().mapToInt(info -> {
+                return ((JSONArray) info).size();
+            }).sum();
+        }
+
+        JSONObject dataFdageObj = JSON.parseObject(fYunFileService.getFileContent(homePath.concat("data.fdage")));
+        return dataFdageObj.getJSONArray("points").size();
+    }
+
+    private int getPayStatus(Long cameraId, Long space){
+        //更新相机使用用量
+        CameraDetail cameraDetail = cameraDetailService.updateCameraDetailByCameraIdAndSpace(cameraId, space);
+        Long totalSpace = cameraDetail.getTotalSpace();
+
+        UserIncrement userIncrement = userIncrementService.getByCameraId(cameraId);
+        if(!ObjectUtils.isEmpty(userIncrement) && userIncrement.getIsExpired().equals(ExpiredStatus.NOT_EXPIRED.code())){
+            IncrementType type = incrementTypeService.getById(userIncrement.getIncrementTypeId());
+            if(type != null){
+                Integer cameraCapacity = type.getCameraCapacity();
+                if(cameraCapacity == -1){           //无限容量权益
+                    return PayStatus.PAY.code();
+                }else {
+                    totalSpace = cameraCapacity *1024 * 1024 * 1024L;     //权益设置容量
+                }
+            }
+        }
+
+        return totalSpace.compareTo(cameraDetail.getUsedSpace()) == -1 ? PayStatus.NO_CAPACITY.code() : PayStatus.PAY.code();
+    }
+
     private Object[] updateEditInfo(ScenePlus scenePlus){
         SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
         SceneEditControls sceneEditControls = null;

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

@@ -286,7 +286,7 @@ public class BuildV3SceneServiceImpl implements IBuildSceneService {
             sceneProEdit.setFloorPublishVer(ObjectUtils.isEmpty(sceneProEdit.getFloorPublishVer()) ? 0 : sceneProEdit.getFloorPublishVer() + 1);
             if (cameraType == 14) {
                 //计算成功  激光转台相机 同步 请求
-                fdkkLaserService.syncBuildResult(scenePro.getNum(), scenePro.getDataSource(),scenePro.getCreateTime(), Calendar.getInstance().getTime());
+                fdkkLaserService.syncBuildResult(scenePro.getNum(), scenePro.getDataSource(),scenePro.getCreateTime(), Calendar.getInstance().getTime(), null);
                 sceneProEdit.setMapVisi(0);
             }
             sceneProEditService.updateById(sceneProEdit);

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

@@ -17,7 +17,7 @@ import java.util.Date;
  * @since 2022/1/14
  **/
 public interface IFdkkLaserService {
-    void syncBuildResult(String sceneNum, String dataSource, Date createTime, Date algorithmTime);
+    void syncBuildResult(String sceneNum, String dataSource, Date createTime, Date algorithmTime, Integer shootCount);
 
     void pushBuildStatusToLaserSystem(String projectNum, String laserObjFilePath, Integer buildObjStatus);
 

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

@@ -57,7 +57,7 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
     private FYunFileServiceInterface fYunFileService;
 
 
-    public void updateSceneStatus(String sceneCode, int sceneStatus, String path, Date createTime, Date algorithmTime) {
+    public void updateSceneStatus(String sceneCode, int sceneStatus, String path, Date createTime, Date algorithmTime, Integer shootCount) {
         Map<String, Object> params = new HashMap<>();
         params.put("sceneCode", sceneCode);
         params.put("status", sceneStatus);
@@ -67,10 +67,11 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
         if (!ObjectUtils.isEmpty(path)) {
             params.put("path", path);
         }
+        params.put("shootCount", shootCount);
         rabbitMqProducer.sendByWorkQueue(updateScene, params);
     }
 
-    public void syncBuildResult(String sceneNum, String dataSource,Date createTime, Date algorithmTime) {
+    public void syncBuildResult(String sceneNum, String dataSource,Date createTime, Date algorithmTime, Integer shootCount) {
         log.info("激光转台相机构建结果 同步 请求 ");
         try {
             String jgPath = dataSource;
@@ -98,7 +99,7 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
             FileUtils.copyDirectiory(dataSource + "/results/laserData/cover", jgPath + "/extras");
             FileUtils.copyFile(dataSource + "/results/laserData", jgPath, true);
 
-            updateSceneStatus(sceneNum, 2, jgPath + File.separator + "laserData",createTime, algorithmTime);
+            updateSceneStatus(sceneNum, 2, jgPath + File.separator + "laserData",createTime, algorithmTime, shootCount);
         } catch (Exception e) {
             log.error("激光转台相机同步失败", e);
         }