Selaa lähdekoodia

Merge branch 'release-mg-v2.9.0' into test

# Conflicts:
#	src/main/java/com/fdkankan/contro/entity/ScenePlusExt.java
dengsixing 5 kuukautta sitten
vanhempi
commit
159b87708c

+ 3 - 0
src/main/java/com/fdkankan/contro/bean/SyncLaserResultBean.java

@@ -18,9 +18,12 @@ public class SyncLaserResultBean {
     private Integer sceneStatus;
     private Date createTime;
     private Integer shootCount;
+    private Integer slamCount;
     private Integer payStatus;
     private Integer mixture;
     private String version;
 
 
+
+
 }

+ 13 - 1
src/main/java/com/fdkankan/contro/entity/ScenePlusExt.java

@@ -140,7 +140,13 @@ public class ScenePlusExt implements Serializable {
      * 计算耗时
      */
     @TableField("compute_time")
-    private String computeTime;
+    private Long computeTime;
+
+    /**
+     * 计算耗时
+     */
+    @TableField("mesh_compute_time")
+    private Long meshComputeTime;
 
     /**
      * 点位视频
@@ -192,4 +198,10 @@ public class ScenePlusExt implements Serializable {
     private Integer hasRecognition;
 
 
+
+    /**
+     * 帧数
+     */
+    @TableField("slam_count")
+    private int slamCount;
 }

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

@@ -285,7 +285,7 @@ public class BuildIntermitSceneServiceImpl implements IBuildSceneService {
     private void updateDbPlus(int sceneSource,Long space,String videosJson, Long computeTime,boolean isObj,ScenePlusExt scenePlusExt){
 
         scenePlusExt.setSpace(space);
-        scenePlusExt.setComputeTime(computeTime.toString());
+        scenePlusExt.setComputeTime(computeTime);
         scenePlusExt.setAlgorithmTime(new Date());
         scenePlusExt.setVideos(videosJson);
         scenePlusExt.setIsObj(isObj ? 1 : 0);

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

@@ -481,7 +481,7 @@ public class BuildLiguangServiceImpl implements IBuildSceneService {
     private void updateDbPlus(int sceneSource,Long space,String videosJson, Long computeTime,boolean isObj,ScenePlusExt scenePlusExt){
 
         scenePlusExt.setSpace(space);
-        scenePlusExt.setComputeTime(computeTime.toString());
+        scenePlusExt.setComputeTime(computeTime);
         scenePlusExt.setAlgorithmTime(new Date());
         scenePlusExt.setVideos(videosJson);
         scenePlusExt.setIsObj(isObj ? 1 : 0);

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

@@ -296,6 +296,7 @@ public class BuildObjServiceImpl implements IBuildSceneService {
                 //计算容量
                 Long space = commonService.getSpace(projectNum);
                 scenePlusExt.setSpace(space);
+                scenePlusExt.setMeshComputeTime(message.getComputeTime());
 
                 Object[] editInfoArr = commonService.updateEditInfo(scenePlus);
                 SceneEditInfo sceneEditInfo = (SceneEditInfo)editInfoArr[0];

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

@@ -329,7 +329,7 @@ public class BuildReverseE57SceneServiceImpl implements IBuildSceneService {
     private void updateDbPlus(int sceneSource,Long space,String videosJson, Long computeTime,Integer isObj,ScenePlusExt scenePlusExt){
 
         scenePlusExt.setSpace(space);
-        scenePlusExt.setComputeTime(computeTime.toString());
+        scenePlusExt.setComputeTime(computeTime);
         scenePlusExt.setAlgorithmTime(new Date());
         scenePlusExt.setVideos(videosJson);
         scenePlusExt.setIsObj(isObj);

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

@@ -353,7 +353,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             aiService.detectScenePano(scenePlus, scenePlusExt, path);
 
             //写入数据库
-            this.updateDbPlus(scenePlus.getSceneSource(), space, videosJson.toJSONString(), message.getComputeTime(),isObj,scenePlusExt);
+            this.updateDbPlus(scenePlus, scenePlusExt, space, videosJson.toJSONString(), message.getComputeTime(),isObj);
 
             Object[] editInfoArr = commonService.updateEditInfo(scenePlus);
             SceneEditInfo sceneEditInfo = (SceneEditInfo)editInfoArr[0];
@@ -375,6 +375,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
                         .sceneStatus(2)
                         .createTime(scenePlus.getCreateTime())
                         .shootCount(scenePlusExt.getShootCount())
+                        .slamCount(scenePlusExt.getSlamCount())
                         .payStatus(scenePlus.getPayStatus())
                         .mixture(scenePlusExt.getMixture())
                         .version(SceneVersionType.V4.code()).build());
@@ -616,10 +617,10 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         }
     }
 
-    private void updateDbPlus(int sceneSource,Long space,String videosJson, Long computeTime,boolean isObj,ScenePlusExt scenePlusExt){
+    private void updateDbPlus(ScenePlus scenePlus,ScenePlusExt scenePlusExt, Long space,String videosJson, Long computeTime,boolean isObj){
 
         scenePlusExt.setSpace(space);
-        scenePlusExt.setComputeTime(computeTime.toString());
+        scenePlusExt.setComputeTime(computeTime);
         scenePlusExt.setAlgorithmTime(new Date());
         scenePlusExt.setVideos(videosJson);
         scenePlusExt.setIsObj(isObj ? 1 : 0);
@@ -628,7 +629,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             scenePlusExt.setSceneScheme(3);
         }
 
-        switch (SceneSource.get(sceneSource)){
+        switch (SceneSource.get(scenePlus.getSceneSource())){
             case BM:
                 scenePlusExt.setSceneResolution(SceneResolution.two_K.code());
                 scenePlusExt.setSceneFrom(SceneFrom.PRO.code());
@@ -656,10 +657,13 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
 //        scenePlusExt.setModelKind(modelKind);
 
         //统计点位数量
-        Map<String, Integer> result = this.getShootCount(scenePlusExt);
-        Integer shootCount = result.get("shootCount");
-        Integer mixture = result.get("mixture");
-        scenePlusExt.setShootCount(shootCount);
+        scenePlusExt.setShootCount(commonService.getShootCount(scenePlus.getNum()));
+        scenePlusExt.setSlamCount(commonService.getSlamCount(scenePlus.getNum()));
+        int mixture = CommonStatus.NO.code();
+        //如果点位数量和帧数都不为空,就是混合模式
+        if(Objects.nonNull(scenePlusExt.getShootCount()) && Objects.nonNull(scenePlusExt.getSlamCount())){
+            mixture = CommonStatus.YES.code();
+        }
         scenePlusExt.setMixture(mixture);
 
         scenePlusExtService.updateById(scenePlusExt);

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

@@ -61,4 +61,8 @@ public interface ICommonService {
 
     boolean checkIsSpVr(JSONObject dataFdageJson, CameraDetail cameraDetail);
 
+    Integer getShootCount(String num);
+
+    Integer getSlamCount(String num);
+
 }

+ 46 - 0
src/main/java/com/fdkankan/contro/service/impl/CommonServiceImpl.java

@@ -29,6 +29,7 @@ import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.model.utils.CreateObjUtil;
 import com.fdkankan.model.utils.FloorPlanUserUtil;
+import com.fdkankan.model.utils.SceneUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import com.fdkankan.redis.constant.RedisKey;
@@ -119,6 +120,8 @@ public class CommonServiceImpl implements ICommonService {
     private RabbitMqProducer rabbitMqProducer;
     @Autowired
     private ISceneInfoSyncMqConfigService sceneInfoSyncMqConfigService;
+    @Resource
+    private FYunFileServiceInterface fYunFileService;
 
     @Override
     public void uploadBuildResultData(String num, String dataSource, String version) {
@@ -819,4 +822,47 @@ public class CommonServiceImpl implements ICommonService {
         }
         return false;
     }
+
+    @Override
+    public Integer getShootCount(String num) {
+
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+
+        Integer shootCount = null;
+        String homePath = SceneUtil.getHomePath(scenePlusExt.getDataSource());
+        JSONObject dataFdageObj = JSON.parseObject(fYunFileService.getFileContent(homePath.concat("data.fdage")));
+        if(Objects.nonNull(dataFdageObj)){
+            JSONArray points = dataFdageObj.getJSONArray("points");
+            if(CollUtil.isNotEmpty(points)){
+                shootCount = points.size();
+            }
+        }
+
+        return shootCount;
+    }
+
+    @Override
+    public Integer getSlamCount(String num) {
+
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+
+        Integer slamCount = null;
+        String homePath = SceneUtil.getHomePath(scenePlusExt.getDataSource());
+        if(Objects.nonNull(scenePlusExt.getLocation()) && scenePlusExt.getLocation() == 6){
+            String slamDataStr = fYunFileService.getFileContent(homePath.concat("slam_data.json"));
+            JSONObject slamDataObj = JSON.parseObject(slamDataStr);
+            if(Objects.nonNull(slamDataObj)){
+                JSONArray viewsInfo = slamDataObj.getJSONArray("views_info");
+                if(CollUtil.isNotEmpty(viewsInfo)){
+                    slamCount = viewsInfo.stream().mapToInt(info -> {
+                        return  ((JSONObject) info).getJSONArray("list_pose").size();
+                    }).sum();
+                }
+            }
+        }
+
+        return slamCount;
+    }
 }

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

@@ -72,10 +72,12 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
             Integer sceneStatus = laserResultBean.getSceneStatus();
             Date createTime = laserResultBean.getCreateTime();
             Integer shootCount = laserResultBean.getShootCount();
+            Integer slamCount = laserResultBean.getSlamCount();
             Integer payStatus = laserResultBean.getPayStatus();
             Boolean mixture = laserResultBean.getMixture() == CommonStatus.NO.code().intValue() ? false : true;
             String version = SceneVersionType.V4.code();
 
+
             String jgPath = dataSource;
             //创建目录
             if (dataSource.lastIndexOf("/") != -1) {
@@ -115,6 +117,7 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
             params.put("algorithmTime", DateUtil.date2String(Calendar.getInstance().getTime(), null));
             params.put("path", jgPath + File.separator + "laserData");
             params.put("shootCount", shootCount);
+            params.put("slamCount", slamCount);
             params.put("payStatus", payStatus);
             params.put("mixture", mixture);
             rabbitMqProducer.sendByWorkQueue(updateScene, params);

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

@@ -253,7 +253,7 @@ public class InnerServiceImpl implements IInnerService {
     private void updateDbPlus(int sceneSource,Long space,String videosJson, Long computeTime,boolean isObj,ScenePlusExt scenePlusExt){
 
         scenePlusExt.setSpace(space);
-        scenePlusExt.setComputeTime(computeTime.toString());
+        scenePlusExt.setComputeTime(computeTime);
         scenePlusExt.setAlgorithmTime(new Date());
         scenePlusExt.setVideos(videosJson);
         scenePlusExt.setIsObj(isObj ? 1 : 0);

+ 5 - 4
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -371,10 +371,11 @@ 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;
-//            }
+            //看看相机固件有bug,会重复发两次计算请求,所以这里判断,如果是看看场景,需要判断场景是否在计算中,如果是,直接返回成功
+            if (cameraType == 11L && scenePlus.getSceneStatus().equals(SceneStatus.wait.code())) {
+                log.info(scenePlus.getNum() + ":场景处于计算中,不能再计算");
+                return null;
+            }
         }
         if (sceneNum == null) {
             log.error("大场景序号为空:" + sceneNum);