Parcourir la source

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

# Conflicts:
#	src/main/java/com/fdkankan/contro/entity/ScenePlusExt.java
dengsixing il y a 4 mois
Parent
commit
4ad187f37b

+ 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;
 
 
+
+
 }

+ 4 - 1
src/main/java/com/fdkankan/contro/entity/Company.java

@@ -13,7 +13,7 @@ import java.util.Date;
  * 客户企业logo信息
  * </p>
  *
- * @author 
+ * @author
  * @since 2021-12-24
  */
 @Getter
@@ -107,4 +107,7 @@ public class Company implements Serializable {
     @TableLogic("A")
     private String recStatus;
 
+    @TableField("can_up_website")
+    private Integer canUpWebsite;
+
 }

+ 2 - 5
src/main/java/com/fdkankan/contro/entity/MqSendLog.java

@@ -11,10 +11,10 @@ import lombok.Setter;
 
 /**
  * <p>
- * 
+ *
  * </p>
  *
- * @author 
+ * @author
  * @since 2024-03-27
  */
 @Getter
@@ -42,9 +42,6 @@ public class MqSendLog implements Serializable {
     @TableField("num")
     private String num;
 
-    @TableField("es_name")
-    private String esName;
-
     /**
      * 0未发送,1已发送
      */

+ 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/listener/AbstrackBuildSceneListener.java

@@ -60,7 +60,7 @@ public class AbstrackBuildSceneListener implements IBuildSceneListener {
             sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueName, bizType);
             sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueName, CommonOperStatus.WAITING.code(), null, bizType);
             buildSceneService.buildScenePre(buildSceneMessage);
-            commonService.saveMqSendLog(num, buildSceneMessage);
+            commonService.saveMqSendLog(num, buildSceneMessage, 0);
             sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueName, CommonOperStatus.SUCCESS.code(), null, bizType);
         }catch (Exception e){
             log.error("场景计算前置处理出错,num=" + num, e);

+ 1 - 1
src/main/java/com/fdkankan/contro/mq/listener/BuildE57Listener.java

@@ -79,7 +79,7 @@ public class BuildE57Listener{
             sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, "e57");
             sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, CommonOperStatus.WAITING.code(), null, "e57");
             buildSceneService.buildScenePre(buildSceneMessage);
-            commonService.saveMqSendLog(num, buildSceneMessage);
+            commonService.saveMqSendLog(num, buildSceneMessage, 0);
             sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, CommonOperStatus.SUCCESS.code(), null,"e57");
         }catch (Exception e){
             log.error("e57计算前置处理出错,num=" + num, e);

+ 1 - 1
src/main/java/com/fdkankan/contro/mq/listener/BuildReverseE57Listener.java

@@ -77,7 +77,7 @@ public class BuildReverseE57Listener {
             sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, "reverseE57");
             sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, CommonOperStatus.WAITING.code(), null, "reverseE57");
             buildSceneService.buildScenePre(buildSceneMessage);
-            commonService.saveMqSendLog(num, buildSceneMessage);
+            commonService.saveMqSendLog(num, buildSceneMessage, 0);
             sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, CommonOperStatus.SUCCESS.code(), null, "reverseE57");
         }catch (Exception e){
             log.error("上传e57计算前置处理出错,num=" + num, e);

+ 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

@@ -290,6 +290,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

@@ -327,7 +327,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);

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

@@ -328,7 +328,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];
@@ -348,6 +348,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());
@@ -566,10 +567,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);
@@ -578,7 +579,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());
@@ -606,10 +607,20 @@ 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);
+        Integer shootCount = commonService.getShootCount(scenePlus.getNum());
+        if(Objects.nonNull(shootCount)){
+            scenePlusExt.setShootCount(shootCount);
+        }
+        Integer slamCount = commonService.getSlamCount(scenePlus.getNum());
+        if(Objects.nonNull(slamCount)){
+            scenePlusExt.setSlamCount(slamCount);
+        }
+        int mixture = CommonStatus.NO.code();
+        //如果点位数量和帧数都不为空,就是混合模式
+        if(Objects.nonNull(scenePlusExt.getShootCount()) && scenePlusExt.getShootCount() > 0
+                && Objects.nonNull(scenePlusExt.getSlamCount()) && scenePlusExt.getSlamCount() > 0){
+            mixture = CommonStatus.YES.code();
+        }
         scenePlusExt.setMixture(mixture);
 
         scenePlusExtService.updateById(scenePlusExt);

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

@@ -47,7 +47,7 @@ public interface ICommonService {
     void writeSceneJson(String num, SceneEditInfo sceneEditInfo, SceneEditInfoExt sceneEditInfoExt,
                         SceneEditControls sceneEditControls, ScenePlus scenePlus, ScenePlusExt scenePlusExt, Company company);
 
-    void saveMqSendLog(String num, BuildSceneCallMessage message);
+    void saveMqSendLog(String num, BuildSceneCallMessage message, Integer status);
 
     void sendUpdateSceneStatusMqToQueues(Map<String, Object> content);
 
@@ -61,4 +61,8 @@ public interface ICommonService {
 
     boolean checkIsSpVr(JSONObject dataFdageJson, CameraDetail cameraDetail);
 
+    Integer getShootCount(String num);
+
+    Integer getSlamCount(String num);
+
 }

+ 57 - 3
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) {
@@ -537,11 +540,19 @@ public class CommonServiceImpl implements ICommonService {
     }
 
     @Override
-    public void saveMqSendLog(String num, BuildSceneCallMessage message) {
-        MqSendLog mqSendLog = new MqSendLog();
+    public void saveMqSendLog(String num, BuildSceneCallMessage message, Integer status) {
+        MqSendLog mqSendLog = null;
+        if(status != null || status != -1){//-1代表未进入到计算前置处理器,计算调度器不能进行调度
+            mqSendLog = mqSendLogService.getOne(new LambdaQueryWrapper<MqSendLog>().eq(MqSendLog::getNum, num).eq(MqSendLog::getStatus, -1));
+        }
+        if(mqSendLog == null){
+            mqSendLog = new MqSendLog();
+        }
+
         mqSendLog.setNum(num);
         mqSendLog.setContent(JSON.toJSONString(message));
-        mqSendLogService.save(mqSendLog);
+        mqSendLog.setStatus(status);
+        mqSendLogService.saveOrUpdate(mqSendLog);
     }
 
     @Override
@@ -806,4 +817,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);

+ 25 - 0
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -252,6 +252,25 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             throw new BusinessException(ErrorCode.FAILURE_CODE_5047);
         }
 
+        Camera camera = cameraService.getBySnCode(mac);
+        if(Objects.isNull(camera)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_7010);
+        }
+        CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId());
+        if(Objects.isNull(cameraDetail)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_7010);
+        }
+        Long companyId = cameraDetail.getCompanyId();
+        if(Objects.nonNull(companyId)){
+            Company company = companyService.getById(companyId);
+            if(Objects.nonNull(company)){
+                Integer canUpWebsite = company.getCanUpWebsite();
+                if(Objects.nonNull(canUpWebsite) && canUpWebsite == CommonStatus.NO.code().intValue()){
+                    throw new BusinessException(ErrorCode.FAILURE_CODE_4006);
+                }
+            }
+        }
+
         log.info("mac:{} 准备上传文件,folderName:{}", mac, folderName);
         ResponseSceneFile responseSceneFile = new ResponseSceneFile();
 
@@ -1390,6 +1409,9 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         }
         message.getExt().put("keepTitle", 1);
 
+        //提前发送调度器任务,用于管理后台页面及时刷新出“计算优先级”按钮
+        commonService.saveMqSendLog(num, new BuildSceneCallMessage(), -1);
+
         String ossOrignPath = commonService.getOssOrignPath(path);
         String ossPath = fYunFileService.getFileContent(ossOrignPath + "custom.txt");
         if(StrUtil.isNotEmpty(ossPath) && ossPath.contains("MKT862")){
@@ -1482,6 +1504,9 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 .set(ScenePlus::getSceneStatus, SceneStatus.wait.code())
                 .eq(ScenePlus::getNum, num));
 
+        //提前发送调度器任务,用于管理后台页面及时刷新出“计算优先级”按钮
+        commonService.saveMqSendLog(num, new BuildSceneCallMessage(), -1);
+
         HashMap<String, Object> params = new HashMap<>();
         params.put("num", num);
         params.put("rebuild", 1);