Bläddra i källkod

合并官网v4.12.0

dengsixing 1 år sedan
förälder
incheckning
8508e5bd3e

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

@@ -229,7 +229,7 @@ public class SceneFileController{
     @PostMapping("/noticeBuild")
     public ResultData noticeBuild(SendCallAlgorithmDetail detail) throws Exception {
         if(StrUtil.isNotEmpty(detail.getUuid())){
-
+            throw new RuntimeException("uuid不能为空");
         }
         return sceneFileBuildService.noticeBuild(detail.getUuid());
     }

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

@@ -4,7 +4,9 @@ import cn.hutool.core.thread.ThreadUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.contro.mq.service.IBuildSceneProgressService;
 import com.fdkankan.contro.mq.service.impl.BuildSceneServiceImpl;
+import com.fdkankan.contro.service.ICommonService;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
+import com.google.j2objc.annotations.AutoreleasePool;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.Message;
@@ -15,6 +17,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import java.nio.charset.StandardCharsets;
+import java.util.Map;
 import java.util.concurrent.*;
 
 @Slf4j
@@ -28,6 +31,9 @@ public class BuildSceneProgressListener{
     @Value("${queue.modeling.modeling-progress-notice}")
     private String queueName;
 
+    @Autowired
+    private ICommonService commonService;
+
     /**
      * 场景计算进度监听
      * @param channel
@@ -42,7 +48,17 @@ public class BuildSceneProgressListener{
         String msg = new String(message.getBody(), StandardCharsets.UTF_8);
         log.info("开始推送场景计算进度,队列名:{},id:{},消息体:{}", queueName, messageId, msg);
         BuildSceneCallMessage buildSceneMessage = JSONObject.parseObject(msg, BuildSceneCallMessage.class);
-        buildSceneProgressService.monitorProgress(buildSceneMessage);
+        String num = buildSceneMessage.getSceneNum();
+        try {
+            Map<String, Object> ext = buildSceneMessage.getExt();
+            String uuid = (String)ext.get("uuid");
+            String batchId = (String)ext.get("batchId");
+            commonService.sendSceneStatus(buildSceneMessage.getSceneNum(), uuid, batchId, 3);
+        }catch (Exception e){
+            log.error("开始计算通知失败,num:{}", num, e);
+        }
+
+//        buildSceneProgressService.monitorProgress(buildSceneMessage);
         channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
         log.info("推送场景计算进度完成,队列名:{},id:{},消息体:{}", queueName, messageId, msg);
 

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

@@ -68,8 +68,8 @@ public class BuildIntermitSceneServiceImpl implements IBuildSceneService {
     private IScenePlusService scenePlusService;
     @Autowired
     private IScenePlusExtService scenePlusExtService;
-    @Autowired
-    private IBuildSceneDTService buildSceneDTService;
+//    @Autowired
+//    private IBuildSceneDTService buildSceneDTService;
     @Autowired
     private ICommonService commonService;
     @Autowired
@@ -116,7 +116,7 @@ public class BuildIntermitSceneServiceImpl implements IBuildSceneService {
 
         }catch (Exception e){
             log.error("场景计算前置处理出错,num"+num, e);
-            buildSceneDTService.handBaseFail("场景计算资源准备异常!", message.getPath(), message.getSceneNum(), "计算控制服务器");
+//            buildSceneDTService.handBaseFail("场景计算资源准备异常!", message.getPath(), message.getSceneNum(), "计算控制服务器");
             throw e;
         }
     }
@@ -156,7 +156,7 @@ public class BuildIntermitSceneServiceImpl implements IBuildSceneService {
                         .eq(ScenePlus::getNum, sceneCode));
 
                 // 发送钉钉消息,计算失败
-                buildSceneDTService.handModelFail("计算失败", message.getPath(), sceneCode, message.getHostName());
+//                buildSceneDTService.handModelFail("计算失败", message.getPath(), sceneCode, message.getHostName());
                 return;
             }
             JSONObject fdageData = getFdageData(path + File.separator + "capture" +File.separator+"data.fdage");
@@ -211,7 +211,7 @@ public class BuildIntermitSceneServiceImpl implements IBuildSceneService {
 
         }catch (Exception e){
             log.error("场景计算结果处理出错,num"+sceneCode, e);
-            buildSceneDTService.handBaseFail("场景计算结果处理出错!", message.getPath(), sceneCode, "计算控制服务器");
+//            buildSceneDTService.handBaseFail("场景计算结果处理出错!", message.getPath(), sceneCode, "计算控制服务器");
             throw e;
         }
     }

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

@@ -40,7 +40,6 @@ public class BuildSceneProgressServiceImpl implements IBuildSceneProgressService
 
     @Value("${build.progress.time:300}")
     public Long buildProgressTime;
-    @Value("${build.progress.url}")
     public String buildProgressUrl;
     @Autowired
     private RedisUtil redisUtil;

+ 15 - 23
src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java

@@ -16,6 +16,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.constant.*;
 import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.contro.bean.SceneJsonBean;
 import com.fdkankan.contro.constant.UserEditDataType;
 import com.fdkankan.contro.entity.*;
 import com.fdkankan.contro.mq.service.IBuildSceneService;
@@ -35,6 +36,7 @@ import com.fdkankan.push.utils.PushMsgUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 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 lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
@@ -75,10 +77,6 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
     @Value("${model.type:#{null}}")
     private String modelType;
 
-    @Value("${build.progress.url}")
-    public String buildProgressUrl;
-
-
     @Value("${model.modelKind:3dtiles}")
     private String modelKind;
 
@@ -303,12 +301,23 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             fYunFileService.uploadFile(path + File.separator + "console.log", buildLogPath + "console.log");
             log.info("计算日志上传完成");
 
+            OrigFileUploadBatch condition = new OrigFileUploadBatch();
+            condition.setBatchId(batchId);
+            OrigFileUploadBatch origFileUploadBatch = origFileUploadBatchService.getByCondition(condition);
+
             if (!message.getBuildSuccess()) {
                 log.error("建模失败,修改状态为失败状态");
                 scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
                         .set(ScenePlus::getSceneStatus, SceneStatus.FAILD.code())
                         .eq(ScenePlus::getNum, sceneCode));
                 redisUtil.set(String.format(RedisKey.SCENE_BUILD_FINISH_NUM, sceneCode), "-1");
+
+                try {
+                    commonService.sendSceneStatus(sceneCode, origFileUploadBatch.getUuid(), batchId, 4);
+                }catch (Exception e){
+                    log.info("通知计算失败状态失败, num:{}", sceneCode, e);
+                }
+
                 return;
             }
             JSONObject fdageData = getFdageData(path + File.separator + "capture" +File.separator+"data.fdage");
@@ -432,9 +441,6 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             scenePlusService.updateById(scenePlus);
             scenePlusExtService.updateById(scenePlusExt);
 
-            OrigFileUploadBatch condition = new OrigFileUploadBatch();
-            condition.setBatchId(batchId);
-            OrigFileUploadBatch origFileUploadBatch = origFileUploadBatchService.getByCondition(condition);
             origFileUploadBatch.setStatus(3);
             origFileUploadBatchService.updateById(origFileUploadBatch);
 
@@ -446,18 +452,9 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             redisUtil.set(String.format(RedisKey.SCENE_BUILD_FINISH_NUM, sceneCode), "1");
 
             try {
-                Map<String, Object> ext = message.getExt();
-                Map<String, Object> params = new HashMap<>();
-                params.put("website", scenePlusExt.getWebSite());
-                params.put("title", scenePlus.getTitle());
-                params.put("customUserId", ext.get("customUserId"));
-                params.put("gps", ext.get("gps"));
-//            params.put("totalTime", Integer.valueOf(redisUtil.get(String.format(RedisKey.SCENE_BUILD_EXPECT_TOTAL_TIME_NUM, sceneCode))));
-                params.put("progress", 100);
-                params.put("status", CommonSuccessStatus.SUCCESS.code());
-                HttpUtil.post(buildProgressUrl, JSON.toJSONString(params), 2000);
+                commonService.sendSceneStatus(sceneCode, origFileUploadBatch.getUuid(), batchId, 4);
             }catch (Exception e){
-                log.info("发送计算进度接口请求失败");
+                log.info("通知计算成功状态失败, num:{}", sceneCode, e);
             }
 
             log.info("场景计算结果处理结束,场景码:{}", sceneCode);
@@ -913,11 +910,6 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         return shootCount;
     }
 
-    public static void main(String[] args) {
-        JSONObject dataFdageObj = JSON.parseObject(null);
-        System.out.println(dataFdageObj);
-    }
-
     public boolean uploadHouseTypeJson(String num, String dataSource) {
         String floorPlanCardFilePath = dataSource + File.separator + "results/floorplan_cad.json";
         if (!new File(floorPlanCardFilePath).exists()) {

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

@@ -52,4 +52,6 @@ public interface ICommonService {
     void sendUpdateSceneStatusMqToQueues(Map<String, Object> content);
 
     void removeSceneAsynOperLog(String num);
+
+    void sendSceneStatus(String num, String uuid, String batchId, Integer status);
 }

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

@@ -72,6 +72,10 @@ public class CommonServiceImpl implements ICommonService {
 
     @Value("#{'${camType.laser:}'.split(',')}")
     private List<Integer> laserCamTypeList;
+
+    @Value("${scene.status.url}")
+    private String sceneStatusUrl;
+
     @Autowired
     private ISceneAsynOperLogService sceneAsynOperLogService;
 
@@ -390,7 +394,7 @@ public class CommonServiceImpl implements ICommonService {
             int imgVersion = 0;
             int linkVersion = 0;
             //获取展示页的版本号
-            String sceneJsonStr = fYunFileServiceInterface.getFileContent(String.format(UploadFilePath.DATA_VIEW_PATH, scenePlus.getNum()) + "scene.json");
+            String sceneJsonStr = fYunFileService.getFileContent(String.format(UploadFilePath.DATA_VIEW_PATH, scenePlus.getNum()) + "scene.json");
             if(StrUtil.isNotEmpty(sceneJsonStr)){
                 JSONObject sceneJson = JSON.parseObject(sceneJsonStr);
                 version = sceneJson.getIntValue("version");
@@ -541,4 +545,25 @@ public class CommonServiceImpl implements ICommonService {
             }
         });
     }
+
+    /**
+     * status 1-开始上传 2-通知计算, 3-开始计算 , 4-计算成功, 5-计算失败,
+     * @param num
+     * @param uuid
+     * @param batchId
+     * @param status
+     */
+    @Override
+    public void sendSceneStatus(String num, String uuid, String batchId,Integer status) {
+        Map<String, Object> playload = new HashMap<>();
+        try {
+            playload.put("num", num);
+            playload.put("uuid", uuid);
+            playload.put("status", status);
+            playload.put("batchId", batchId);
+            HttpUtil.post(sceneStatusUrl, playload, 2000);
+        }catch (Exception exception){
+            log.error("推送计算状态失败, content:{}", playload);
+        }
+    }
 }

+ 7 - 9
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -190,9 +190,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
     @Autowired
     private IScenePreService scenePreService;
 
-    @Autowired
-    private ICompanyService companyService;
-
     private RestTemplate restTemplate = new RestTemplate();
 
     @Autowired
@@ -497,6 +494,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
 
         BuildSceneCallMessage mqMessage = getBuildSceneMqMessage(sceneNum, cameraType, algorithm, jsonObject, buildType,
                 scenePlusVO.getDataSource());
+        mqMessage.getExt().put("uuid", unicode);
 
         if (cameraDetail.getCompanyId() != null) {
             Company company = companyService.getById(cameraDetail.getCompanyId());
@@ -1577,7 +1575,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 buildScenePost(dataSource, fdageData, "V3", cameraType, sceneNum, cameraEntity, detailEntity, rebuild, icon, user, customUserId, "zip");
 
                 scenePlus = scenePlusService.getScenePlusByNum(sceneNum);
-                fdkkLaserService.saveScene(scenePlus,fdageData,cameraEntity,user.getUserName(),rebuild == 1 ? true : false);
+                fdkkLaserService.saveScene(scenePlus,fdageData,cameraEntity,user.getUserName(),rebuild == 1 ? true : false, scenePlus.getPayStatus());
 
                 break;
         }
@@ -1664,6 +1662,8 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             mqMessage.getExt().put("noticeTimes", origFileUploadBatch.getNoticeTimes());
             origFileUploadBatchService.updateById(origFileUploadBatch);
             redisUtil.del("single:upload:uuid:" + unicode);
+            //推送通知计算状态
+            commonService.sendSceneStatus(null, unicode, origFileUploadBatch.getBatchId(), 2);
         }
         rabbitMqProducer.sendByWorkQueue(queueModelingPre, mqMessage);
 
@@ -2293,8 +2293,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             throw new BusinessException(ErrorCode.PARAM_REQUIRED.code(), "fileName不能为空");
         }
 
-        //查询是否有等待通知计算的上传批次记录,如果有则加入,没有则新增
-
         boolean lock = redisLockUtil.lock("lock:single:upload:uuid:" + uuid, uuid, 1);
         if(!lock){//如果拿不到锁,证明
             Thread.sleep(2000L);
@@ -2317,6 +2315,8 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                     origFileUploadBatchService.save(origFileUploadBatch);
                 }
             }
+            //推送开始上传状态
+            commonService.sendSceneStatus(null, uuid, batchId, 1);
         }
 
 
@@ -2419,8 +2419,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             sceneNum = scene3dNumService.generateSceneNum(cameraDetail.getType());
         }
 
-        //查询是否有已发送计算的批次,如果有,就不需要在发送了
-
         JSONObject fdageData = JSONObject.parseObject(FileUtils.readFile(sendCallAlgorithmPath.concat(uuid).concat("/data.fdage")));
 //        String imgViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, sceneNum);
 //        if(fdageData.containsKey("icon") && StringUtils.isNotEmpty(fdageData.getString("icon"))){
@@ -2433,7 +2431,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         buildScenePost(dataSource, fdageData, "V3", cameraType, sceneNum, camera, cameraDetail, rebuild, "", user, customUserId, "single");
 
         scenePlus = scenePlusService.getScenePlusByNum(sceneNum);
-        fdkkLaserService.saveScene(scenePlus,fdageData,camera,user.getUserName(),rebuild == 1 ? true : false);
+        fdkkLaserService.saveScene(scenePlus,fdageData,camera,user.getUserName(),rebuild == 1 ? true : false, scenePlus.getPayStatus());
 
         return ResultData.ok();
     }