dengsixing 1 tháng trước cách đây
mục cha
commit
4f7d6f4505

+ 2 - 0
src/main/java/com/fdkankan/contro/dto/UploadSceneDTO.java

@@ -32,6 +32,8 @@ public class UploadSceneDTO {
 
     private String ryName;
 
+    private Integer shootCount;
+
     public String getkNo() {
         return kNo;
     }

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

@@ -93,7 +93,10 @@ public class SceneOrigBd implements Serializable {
     private String taskNo;
 
     @TableField("expected_time")
-    private Date expectedTime;
+    private Integer expectedTime;
+
+    @TableField("shoot_count")
+    private Integer shootCount;
 
 
 

+ 9 - 27
src/main/java/com/fdkankan/contro/mq/listener/BuildSceneProcessLogListener.java

@@ -5,13 +5,8 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.constant.CommonOperStatus;
 import com.fdkankan.common.constant.ModelingBuildStatus;
-import com.fdkankan.contro.entity.JyUser;
 import com.fdkankan.contro.entity.OrigFileUploadBatch;
-import com.fdkankan.contro.entity.ScenePlus;
-import com.fdkankan.contro.service.IJmgaService;
-import com.fdkankan.contro.service.IOrigFileUploadBatchService;
-import com.fdkankan.contro.service.ISceneBuildProcessLogService;
-import com.fdkankan.contro.service.IScenePlusService;
+import com.fdkankan.contro.service.*;
 import com.fdkankan.model.constants.SceneBuildProcessType;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
@@ -23,10 +18,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import java.nio.charset.StandardCharsets;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
 
 @Slf4j
 @Component
@@ -45,6 +36,8 @@ public class BuildSceneProcessLogListener{
     private IJmgaService jmgaService;
     @Autowired
     private IOrigFileUploadBatchService origFileUploadBatchService;
+    @Autowired
+    private IHaixinService haixinService;
 
     /**
      * 场景计算状态日志记录
@@ -72,23 +65,12 @@ public class BuildSceneProcessLogListener{
                     origFileUploadBatchService.update(new LambdaUpdateWrapper<OrigFileUploadBatch>().set(OrigFileUploadBatch::getStatus, 2).in(OrigFileUploadBatch::getBatchId, batchIds.split(",")));
                 }
                 status = CommonOperStatus.WAITING.code();
-                Map<String, Object> param = new HashMap<>();
-                try {
-                    JyUser jyUser = scenePlusService.getJyUserByNum(num);
-                    ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
-                    param.put("event_type", "scene");
-                    param.put("event_content", "计算中");
-                    param.put("scene_num", num);
-                    param.put("event_time", new Date());
-                    if(Objects.nonNull(scenePlus)){
-                        param.put("scene_title", scenePlus.getTitle());
-                    }
-                    param.put("ryid", jyUser.getRyId());
-                    param.put("ryno", jyUser.getRyNo());
-                    param.put("nick_name", jyUser.getRyNickName());
-                    jmgaService.sendStatus(param);
-                }catch (Exception e){
-                    log.info("推送事件失败,param:{}", param);
+
+                jmgaService.sendStatus(num, "计算中");
+
+                Long sceneOrigBdId = buildSceneMessage.getLong("sceneOrigBdId");
+                if(sceneOrigBdId != null){
+                    haixinService.syncRenderStatus(sceneOrigBdId, 2, null, null);
                 }
             }else{
                 if(buildStatus != ModelingBuildStatus.SUCCESS.code()){

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

@@ -144,24 +144,7 @@ public class BuildObjServiceImpl implements IBuildSceneService {
             message.setPath(laserObjFilePath);
             message.setResultReceiverMqName(queueObjModelingPost);
 
-            Map<String, Object> param = new HashMap<>();
-            try {
-                JyUser jyUser = scenePlusService.getJyUserByNum(num);
-                ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
-                param.put("event_type", "scene");
-                param.put("event_content", "排队中");
-                param.put("scene_num", num);
-                param.put("event_time", new Date());
-                if(Objects.nonNull(scenePlus)){
-                    param.put("scene_title", scenePlus.getTitle());
-                }
-                param.put("ryid", jyUser.getRyId());
-                param.put("ryno", jyUser.getRyNo());
-                param.put("nick_name", jyUser.getRyNickName());
-                jmgaService.sendStatus(param);
-            }catch (Exception ex){
-                log.info("推送事件失败,param:{}", param);
-            }
+            jmgaService.sendStatus(num, "排队中");
 
             //发送mq,就进行计算
             mqProducer.sendByWorkQueue(queueModelingCall, message);
@@ -173,24 +156,7 @@ public class BuildObjServiceImpl implements IBuildSceneService {
         }catch (Exception e){
             log.error("生成OBJ场景资源准备异常,num=" + num, e);
 
-            Map<String, Object> param = new HashMap<>();
-            try {
-                JyUser jyUser = scenePlusService.getJyUserByNum(num);
-                ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
-                param.put("event_type", "scene");
-                param.put("event_content", "计算失败");
-                param.put("scene_num", num);
-                param.put("event_time", new Date());
-                if(Objects.nonNull(scenePlus)){
-                    param.put("scene_title", scenePlus.getTitle());
-                }
-                param.put("ryid", jyUser.getRyId());
-                param.put("ryno", jyUser.getRyNo());
-                param.put("nick_name", jyUser.getRyNickName());
-                jmgaService.sendStatus(param);
-            }catch (Exception ex){
-                log.info("推送事件失败,param:{}", param);
-            }
+            jmgaService.sendStatus(num, "计算失败");
 
 //            buildSceneDTService.handBaseFail("生成OBJ场景资源准备异常", message.getPath(), message.getSceneNum(), "计算控制服务器");
             throw e;
@@ -230,24 +196,7 @@ public class BuildObjServiceImpl implements IBuildSceneService {
             if (!message.getBuildSuccess()) {
                 log.error("生成OBJ场景计算失败!");
 
-                Map<String, Object> param = new HashMap<>();
-                try {
-                    ScenePlus scenePlus = scenePlusService.getScenePlusByNum(projectNum);
-                    JyUser jyUser = scenePlusService.getJyUserByNum(projectNum);
-                    param.put("event_type", "scene");
-                    param.put("event_content", "计算失败");
-                    param.put("scene_num", projectNum);
-                    param.put("event_time", new Date());
-                    if(Objects.nonNull(scenePlus)){
-                        param.put("scene_title", scenePlus.getTitle());
-                    }
-                    param.put("ryid", jyUser.getRyId());
-                    param.put("ryno", jyUser.getRyNo());
-                    param.put("nick_name", jyUser.getRyNickName());
-                    jmgaService.sendStatus(param);
-                }catch (Exception ex){
-                    log.info("推送事件失败,param:{}", param);
-                }
+                jmgaService.sendStatus(projectNum, "计算失败");
 
                 // 发送钉钉消息,计算失败
 //                buildSceneDTService.handModelFail("生成OBJ场景计算失败!", message.getPath(), message.getBuildContext().get("sceneNum").toString(), message.getHostName());
@@ -368,23 +317,7 @@ public class BuildObjServiceImpl implements IBuildSceneService {
             //重置异步操作记录
             commonService.removeSceneAsynOperLog(projectNum);
 
-            Map<String, Object> param = new HashMap<>();
-            try {
-                JyUser jyUser = scenePlusService.getJyUserByNum(projectNum);
-                param.put("event_type", "scene");
-                param.put("event_content", "计算成功");
-                param.put("scene_num", projectNum);
-                param.put("event_time", new Date());
-                if(Objects.nonNull(scenePlus)){
-                    param.put("scene_title", scenePlus.getTitle());
-                }
-                param.put("ryid", jyUser.getRyId());
-                param.put("ryno", jyUser.getRyNo());
-                param.put("nick_name", jyUser.getRyNickName());
-                jmgaService.sendStatus(param);
-            }catch (Exception ex){
-                log.info("推送事件失败,param:{}", param);
-            }
+            jmgaService.sendStatus(projectNum, "计算成功");
 
             // 如果未升级V4,则升级V4
             if("v3".equals(version)){
@@ -402,24 +335,7 @@ public class BuildObjServiceImpl implements IBuildSceneService {
             log.error("生成OBJ场景计算结果处理异常,num=" + projectNum, e);
 //            buildSceneDTService.handBaseFail("生成OBJ场景计算结果处理异常", message.getPath(), projectNum, "计算控制服务器");
 
-            Map<String, Object> param = new HashMap<>();
-            try {
-                ScenePlus scenePlus = scenePlusService.getScenePlusByNum(projectNum);
-                JyUser jyUser = scenePlusService.getJyUserByNum(projectNum);
-                param.put("event_type", "scene");
-                param.put("event_content", "计算失败");
-                param.put("scene_num", projectNum);
-                param.put("event_time", new Date());
-                if(Objects.nonNull(scenePlus)){
-                    param.put("scene_title", scenePlus.getTitle());
-                }
-                param.put("ryid", jyUser.getRyId());
-                param.put("ryno", jyUser.getRyNo());
-                param.put("nick_name", jyUser.getRyNickName());
-                jmgaService.sendStatus(param);
-            }catch (Exception ex){
-                log.info("推送事件失败,param:{}", param);
-            }
+            jmgaService.sendStatus(projectNum, "计算失败");
 
             throw e;
         }finally {

+ 29 - 86
src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java

@@ -159,6 +159,8 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
     private RabbitTemplate rabbitTemplate;
     @Autowired
     private IAiService aiService;
+    @Autowired
+    private IHaixinService haixinService;
 
 
     @Override
@@ -243,24 +245,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
                 ext.put("128G", 1);
             }
 
-            Map<String, Object> param = new HashMap<>();
-            try {
-                ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
-                JyUser jyUser = scenePlusService.getJyUserByNum(num);
-                param.put("event_type", "scene");
-                param.put("event_content", "排队中");
-                param.put("scene_num", num);
-                param.put("event_time", new Date());
-                if(Objects.nonNull(scenePlus)){
-                    param.put("scene_title", scenePlus.getTitle());
-                }
-                param.put("ryid", jyUser.getRyId());
-                param.put("ryno", jyUser.getRyNo());
-                param.put("nick_name", jyUser.getRyNickName());
-                jmgaService.sendStatus(param);
-            }catch (Exception e){
-                log.info("推送事件失败,param:{}", param);
-            }
+            jmgaService.sendStatus(num, "排队中");
 
             boolean elastic = false;
             if(CollUtil.isNotEmpty(elasticUserIds)){
@@ -312,29 +297,22 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
                 }
             }
 
+            //修改场景状态为失败,并打包日志
             jmgaService.updateSceneFailAndZipLog(num, reason);
 
-            this.sendFailToLaser(num);
-
-            Map<String, Object> param = new HashMap<>();
-            try {
-                ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
-                JyUser jyUser = scenePlusService.getJyUserByNum(num);
-                param.put("event_type", "scene");
-                param.put("event_content", "计算失败");
-                param.put("scene_num", num);
-                param.put("event_time", new Date());
-                if(Objects.nonNull(scenePlus)){
-                    param.put("scene_title", scenePlus.getTitle());
+            //推送海鑫场景状态和进度
+            Map<String, Object> ext = message.getExt();
+            if(CollUtil.isNotEmpty(ext)){
+                Long sceneOrigBdId = (Long) ext.get("sceneOrigBdId");
+                if(sceneOrigBdId != null){
+                    haixinService.syncRenderStatus(sceneOrigBdId, 4, null, "场景计算前置处理出错");
                 }
-                param.put("ryid", jyUser.getRyId());
-                param.put("ryno", jyUser.getRyNo());
-                param.put("nick_name", jyUser.getRyNickName());
-                jmgaService.sendStatus(param);
-            }catch (Exception ex){
-                log.info("推送事件失败,param:{}", param);
             }
 
+            this.sendFailToLaser(num);
+
+            jmgaService.sendStatus(num, "计算失败");
+
             throw e;
         }
     }
@@ -361,6 +339,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         String path = message.getPath();
         boolean status = false;
         String batchIds = (String) message.getExt().get("batchId");
+        Long sceneOrigBdId = (Long)message.getExt().get("sceneOrigBdId");
         Long count = redisUtil.decr("modeling-count:" + sceneCode, 1);
         log.info("场景:{},剩余计算次数:{}", sceneCode, count);
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(sceneCode);
@@ -387,6 +366,10 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
                 if(count < 1){
                     jmgaService.updateSceneFailAndZipLog(sceneCode, "算法报错");
 
+                    if(sceneOrigBdId != null){
+                        haixinService.syncRenderStatus(sceneOrigBdId, 4, null, "算法失败");
+                    }
+
                     this.sendFailToLaser(sceneCode);
 
                     String statusJsonKey = String.format(UploadFilePath.DATA_VIEW_PATH, sceneCode) + "status.json";
@@ -395,23 +378,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
                     statusJson.put("status", -1);
                     fYunFileService.uploadFile(statusJson.toJSONString().getBytes(StandardCharsets.UTF_8), statusJsonKey);
 
-                    Map<String, Object> param = new HashMap<>();
-                    try {
-                        JyUser jyUser = scenePlusService.getJyUserByNum(sceneCode);
-                        param.put("event_type", "scene");
-                        param.put("event_content", "计算失败");
-                        param.put("scene_num", sceneCode);
-                        param.put("event_time", new Date());
-                        if(Objects.nonNull(scenePlus)){
-                            param.put("scene_title", scenePlus.getTitle());
-                        }
-                        param.put("ryid", jyUser.getRyId());
-                        param.put("ryno", jyUser.getRyNo());
-                        param.put("nick_name", jyUser.getRyNickName());
-                        jmgaService.sendStatus(param);
-                    }catch (Exception e){
-                        log.info("推送事件失败,param:{}", param);
-                    }
+                    jmgaService.sendStatus(sceneCode, "计算失败");
                 }
 //                redisUtil.set(String.format(RedisKey.SCENE_BUILD_FINISH_NUM, sceneCode), "-1");
                 return;
@@ -590,48 +557,24 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
 
             log.info("场景计算结果处理结束,场景码:{}", sceneCode);
 
-            Map<String, Object> param = new HashMap<>();
-            try {
-                JyUser jyUser = scenePlusService.getJyUserByNum(sceneCode);
-                param.put("event_type", "scene");
-                param.put("event_content", "计算成功");
-                param.put("scene_num", sceneCode);
-                param.put("event_time", new Date());
-                if(Objects.nonNull(scenePlus)){
-                    param.put("scene_title", scenePlus.getTitle());
-                }
-                param.put("ryid", jyUser.getRyId());
-                param.put("ryno", jyUser.getRyNo());
-                param.put("nick_name", jyUser.getRyNickName());
-                jmgaService.sendStatus(param);
-            }catch (Exception e){
-                log.info("推送事件失败,param:{}", param);
+            if(sceneOrigBdId != null){
+                haixinService.syncRenderStatus(sceneOrigBdId, 4, null, "算法失败");
             }
 
+            jmgaService.sendStatus(sceneCode, "计算成功");
+
         }catch (Exception e){
             log.error("场景计算结果处理出错,num"+sceneCode, e);
 
             jmgaService.updateSceneFailAndZipLog(sceneCode, "后置处理异常");
 
+            if(sceneOrigBdId != null){
+                haixinService.syncRenderStatus(sceneOrigBdId, 4, null, "算法失败");
+            }
+
             this.sendFailToLaser(sceneCode);
 
-            Map<String, Object> param = new HashMap<>();
-            try {
-                JyUser jyUser = scenePlusService.getJyUserByNum(sceneCode);
-                param.put("event_type", "scene");
-                param.put("event_content", "计算失败");
-                param.put("scene_num", sceneCode);
-                if(Objects.nonNull(scenePlus)){
-                    param.put("scene_title", scenePlus.getTitle());
-                }
-                param.put("event_time", new Date());
-                param.put("ryid", jyUser.getRyId());
-                param.put("ryno", jyUser.getRyNo());
-                param.put("nick_name", jyUser.getRyNickName());
-                jmgaService.sendStatus(param);
-            }catch (Exception ex){
-                log.info("推送事件失败,param:{}", param);
-            }
+            jmgaService.sendStatus(sceneCode, "计算失败");
 
             throw e;
         } finally {

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

@@ -9,4 +9,5 @@ public interface IHaixinService {
 
     void noticHaixin(String num, boolean buildSuccess) throws Exception;
     void sendResult(String taskId, String packetPath);
+    void syncRenderStatus(Long sceneOirgBdId, Integer status, Integer expectedTime, String failReason);
 }

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

@@ -3,13 +3,11 @@ package com.fdkankan.contro.service;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.contro.vo.UploadSceneOrigParamVo;
 
-import java.util.Map;
-
 public interface IJmgaService {
 
     void checkFileWhole(String uuid, String dataSource, JSONObject fdageData);
 
-    void sendStatus(Map<String, Object> param);
+    void sendStatus(String num, String eventContent);
 
     void checkLackFile(String dataSource);
 

+ 75 - 0
src/main/java/com/fdkankan/contro/service/impl/HaixinServiceImpl.java

@@ -2,6 +2,7 @@ package com.fdkankan.contro.service.impl;
 
 import cn.hutool.core.io.FileUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.util.CmdUtils;
 import com.fdkankan.contro.dto.UploadSceneDTO;
 import com.fdkankan.contro.entity.SceneOrigBd;
@@ -33,9 +34,14 @@ public class HaixinServiceImpl implements IHaixinService {
 
     private static final String  API_FDFS_UPLOAD = "/fdfs/api/file/upload";
     private static final String  API_SUBMIT_RENDER_RESULT = "/ecs/api/panoramicImageService/submitRenderResult";
+    private static final String  API_SYNC_RENDER_STATUS = "/ecs/api/panoramicImageService/syncRenderStatus";
+    private static final int WAIT_TIME  = 10 * 60;//推送等待时间
+    private static final int PER_SHOOT_TIME  = 5 * 60;//推送等待时间
 
     @Value("${haixin.host:#{null}}")
     private String haixinHost;
+    @Value("${haixin.syncRenderStatus:false}")
+    private boolean haixinSyncRenderStatus;
 
     @Autowired
     private ISceneOrigBdService sceneOrigBdService;
@@ -47,6 +53,8 @@ public class HaixinServiceImpl implements IHaixinService {
     private IScenePlusService scenePlusService;
     @Resource
     private HaixinClient haixinClient;
+    @Autowired
+    private IHaixinService haixinService;
 
     @Override
     public ResultData uploadScene(UploadSceneDTO dto) {
@@ -60,10 +68,39 @@ public class HaixinServiceImpl implements IHaixinService {
         sceneOrigBd.setRyPhone(dto.getRyPhone());
         sceneOrigBd.setRyCid(dto.getRyCid());
         sceneOrigBd.setRyName(dto.getRyName());
+        sceneOrigBd.setShootCount(dto.getShootCount());
+        sceneOrigBd.setExpectedTime(this.getExpectedTime(dto.getShootCount()));
         sceneOrigBdService.save(sceneOrigBd);
+
+        //推送进度
+        haixinService.syncRenderStatus(sceneOrigBd.getId(), 0, this.getExpectedTime(sceneOrigBd), null);
+
         return ResultData.ok();
     }
 
+    private Integer getExpectedTime(Integer shootCount){
+        if(shootCount == null){
+            return null;
+        }
+        Integer waitTime = 10 * 60;//等待推送时间
+        Integer callTime = shootCount * PER_SHOOT_TIME;//算法预估耗时
+        Integer preTime = (callTime/10) * 60;//前置处理耗时,约是算法时间的10%
+        Integer postTime = (callTime/10) * 2 *  60;//后置处理耗时,约是算法时间的20%
+        return waitTime + callTime + preTime + postTime;
+    }
+
+    private Integer getExpectedTime(SceneOrigBd sceneOrigBd){
+        if(sceneOrigBd.getExpectedTime() == null){
+            return null;
+        }
+        List<SceneOrigBd> list = sceneOrigBdService.list(
+                new LambdaQueryWrapper<SceneOrigBd>()
+                        .in(SceneOrigBd::getStatus, 0, 1, 2)
+                        .ne(SceneOrigBd::getId, sceneOrigBd.getId()).isNotNull(SceneOrigBd::getExpectedTime));
+        int sum = list.stream().mapToInt(v -> v.getExpectedTime()).sum() + sceneOrigBd.getExpectedTime();
+        return sum;
+    }
+
     @Override
     public void noticHaixin(String num, boolean buildSuccess) throws Exception {
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
@@ -127,4 +164,42 @@ public class HaixinServiceImpl implements IHaixinService {
         params.put("packetPath", packetPath);
         haixinClient.postJson(url, params);
     }
+
+    @Override
+    public void syncRenderStatus(Long sceneOirgBdId, Integer status, Integer expectedTime, String failReason) {
+        SceneOrigBd sceneOrigBd = sceneOrigBdService.getById(sceneOirgBdId);
+        sceneOrigBd.setStatus(status);
+        sceneOrigBd.setReason(failReason);
+        sceneOrigBdService.updateById(sceneOrigBd);
+        if(!haixinSyncRenderStatus){
+            return;
+        }
+
+        String num = null;
+        ScenePlus scenePlus = scenePlusService.getByTaskId(sceneOrigBd.getTaskId());
+        if(scenePlus != null){
+            num = scenePlus.getNum();
+        }
+        if(expectedTime == null && sceneOrigBd.getExpectedTime() != null){//如果指定预测时间是空,证明开始进入计算前置流程,可以计算预测时间
+            if(status == 1){
+                expectedTime = sceneOrigBd.getExpectedTime() - WAIT_TIME;
+            }
+            if(status == 2){
+                expectedTime = sceneOrigBd.getExpectedTime() - WAIT_TIME - (sceneOrigBd.getShootCount() * PER_SHOOT_TIME);
+            }
+            if(status == -1 || status == 3 || status == 4){
+                expectedTime = 0;
+            }
+        }
+
+        String url = haixinHost.concat(API_SYNC_RENDER_STATUS);
+        Map<String, Object> params = new HashMap<>();
+        params.put("taskNo",sceneOrigBd.getTaskNo());
+        params.put("projectId", sceneOrigBd.getTaskId());
+        params.put("kNo", sceneOrigBd.getKNo());
+        params.put("num", num);
+        params.put("status", status);
+        params.put("expectedTime", expectedTime);
+        haixinClient.postJson(url, params);
+    }
 }

+ 28 - 2
src/main/java/com/fdkankan/contro/service/impl/JmgaServiceImpl.java

@@ -31,6 +31,7 @@ import com.fdkankan.web.util.RSAEncrypt;
 import lombok.extern.slf4j.Slf4j;
 import net.lingala.zip4j.core.ZipFile;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -44,6 +45,8 @@ import java.util.stream.Collectors;
 public class JmgaServiceImpl implements IJmgaService {
 
     public static final String ipv4Pattern = "\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b";
+    @Value("${jmga.eventNotice:false}")
+    private boolean eventNotice;
 
     @Autowired
     private IOrigFileUploadBatchService origFileUploadBatchService;
@@ -68,6 +71,8 @@ public class JmgaServiceImpl implements IJmgaService {
     private ISceneBuildProcessLogService sceneBuildProcessLogService;
     @Autowired
     private IBuildLogService buildLogService;
+    @Autowired
+    private IJyUserService jyUserService;
 
     @Override
     public void checkFileWhole(String uuid, String dataSource, JSONObject fdageData) {
@@ -118,8 +123,29 @@ public class JmgaServiceImpl implements IJmgaService {
     }
 
     @Override
-    public void sendStatus(Map<String, Object> param) {
-        mqProducer.sendByWorkQueue("jmga-event-notice", param);
+    public void sendStatus(String num, String eventContent) {
+        if(!eventNotice){
+            return;
+        }
+        Map<String, Object> param = new HashMap<>();
+        try {
+            ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+            JyUser jyUser = new JyUser();
+            param.put("event_type", "scene");
+            param.put("event_content", eventContent);
+            param.put("scene_num", num);
+            param.put("event_time", new Date());
+            if(Objects.nonNull(scenePlus)){
+                param.put("scene_title", scenePlus.getTitle());
+                jyUser = jyUserService.getByUserId(scenePlus.getUserId());
+            }
+            param.put("ryid", jyUser.getRyId());
+            param.put("ryno", jyUser.getRyNo());
+            param.put("nick_name", jyUser.getRyNickName());
+            mqProducer.sendByWorkQueue("jmga-event-notice", param);
+        }catch (Exception e){
+            log.info("推送事件失败,param:{}", param);
+        }
     }
 
     @Override

+ 5 - 3
src/main/java/com/fdkankan/contro/service/impl/MjServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fdkankan.contro.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ZipUtil;
 import com.alibaba.fastjson.JSON;
@@ -47,6 +48,8 @@ public class MjServiceImpl implements MjService {
     private ISceneFilenameService sceneFilenameService;
     @Resource
     private CustomHttpClient httpClient;
+    @Autowired
+    private IHaixinService haixinService;
 
 
     @Override
@@ -117,11 +120,10 @@ public class MjServiceImpl implements MjService {
                 });
 
                 sceneFileBuildService.noticeBuild(unicode, v.getId(), realDataSource, "zip");
-                v.setStatus(CommonSuccessStatus.SUCCESS.code());
+                haixinService.syncRenderStatus(v.getId(), 1, 0, null);
             } catch (Exception e) {
-                v.setStatus(CommonSuccessStatus.FAIL.code());
+                haixinService.syncRenderStatus(v.getId(), -1, 0, ExceptionUtil.stacktraceToString(e, 5000));
             }
-            sceneOrigBdService.updateById(v);
         }
     }
 

+ 41 - 59
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -1746,6 +1746,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         mqMessage.getExt().put("customUserId", customUserId);
         mqMessage.getExt().put("gps", jsonObject.getString("gps"));
         mqMessage.getExt().put("threeCamType", scenePlusVO.getThreeCamType());
+        mqMessage.getExt().put("sceneOrigBdId", jsonObject.getInteger("sceneOrigBdId"));
 
         if(uploadType.equals("single")){//场景上传模式(single-细小文件上传, zip-压缩包上传)
             OrigFileUploadBatch condition = new OrigFileUploadBatch();
@@ -1760,23 +1761,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             rabbitMqProducer.sendByWorkQueue(queueModelingPre, mqMessage);
         }
 
-        Map<String, Object> param = new HashMap<>();
-        try {
-            JyUser jyUser = scenePlusService.getJyUserByNum(sceneNum);
-            param.put("event_type", "scene");
-            param.put("event_content", "上传完毕");
-            param.put("scene_num", sceneNum);
-            param.put("event_time", new Date());
-            if(Objects.nonNull(scenePlus)){
-                param.put("scene_title", scenePlus.getTitle());
-            }
-            param.put("ryid", jyUser.getRyId());
-            param.put("ryno", jyUser.getRyNo());
-            param.put("nick_name", jyUser.getRyNickName());
-            jmgaService.sendStatus(param);
-        }catch (Exception e){
-            log.info("推送事件失败,param:{}", param);
-        }
+        jmgaService.sendStatus(sceneNum, "上传完毕");
 
         return scenePlusVO;
     }
@@ -2378,17 +2363,43 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
     }
 
     public static void main(String[] args) throws Exception {
-//        final String s = AesUtil.encryptCBC("Aa123456", "0000000856753656", "pwel781esd6wglxm", AesUtil.ALMODE_CBC_NOPADDING);
-//        System.out.println(s);
-//        System.out.println(UUID.fastUUID());
-
-//        String test = "bpvt00017#1396877795149217792#";
-//        String[] split = test.split("#");
-//        System.out.println(split);
-        String password = MD5.create().digestHex("Aa123456");
-        System.out.println(password);
-         password = MD5.create().digestHex16("Aa123456");
-        System.out.println(password);
+////        final String s = AesUtil.encryptCBC("Aa123456", "0000000856753656", "pwel781esd6wglxm", AesUtil.ALMODE_CBC_NOPADDING);
+////        System.out.println(s);
+////        System.out.println(UUID.fastUUID());
+//
+////        String test = "bpvt00017#1396877795149217792#";
+////        String[] split = test.split("#");
+////        System.out.println(split);
+//        String password = MD5.create().digestHex("Aa123456");
+//        System.out.println(password);
+//         password = MD5.create().digestHex16("Aa123456");
+//        System.out.println(password);
+
+//        String cmd = "java -jar D:\\4dkankan_code\\project-hyb\\target\\hyb.jar --spring.profiles.active=local";
+////        Process exec = Runtime.getRuntime().exec(cmd);
+////        System.out.println(exec);
+//        CmdUtils.callLine(cmd);
+        try {
+            String javaHome = System.getProperty("java.home");
+            String javaBin = javaHome + "/bin/java"; // 获取Java可执行文件路径
+            List<String> command = new ArrayList<>();
+            command.add(javaBin);
+            command.add("-jar");
+            command.add("D:\\4dkankan_code\\project-hyb\\target\\hyb.jar"); // 添加JAR文件路径
+            command.add("--spring.profiles.active=local");
+
+            ProcessBuilder builder = new ProcessBuilder(command);
+            builder.redirectErrorStream(true); // 将错误输出和标准输出合并
+            Process p = builder.start();
+
+//            BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
+//            String line;
+//            while ((line = r.readLine()) != null) {
+//                System.out.println(line); // 打印输出结果
+//            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
 
     }
 
@@ -2491,6 +2502,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 sceneOrigBd = sceneOrigBdService.getById(bdId);
                 fdageData.put("taskId", sceneOrigBd.getTaskId());
                 fdageData.put("kNo", sceneOrigBd.getKNo());
+                fdageData.put("sceneOrigBdId", bdId);
             }
 
             //相机入库
@@ -2590,20 +2602,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             if(cameraType == 14){
                 fdkkLaserService.saveScene(scenePlus,fdageData,camera,user.getUserName(),rebuild == 1 ? true : false, scenePlus.getPayStatus());
             }
-            if(sceneOrigBd != null){
-                sceneOrigBd.setStatus(CommonSuccessStatus.SUCCESS.code());
-                sceneOrigBd.setUpdateTime(null);
-                sceneOrigBdService.updateById(sceneOrigBd);
-            }
-
         }catch (Exception e){
-            if(sceneOrigBd != null){
-                sceneOrigBd.setStatus(CommonSuccessStatus.FAIL.code());
-                sceneOrigBd.setReason(ExceptionUtil.stacktraceToString(e,5000));
-                sceneOrigBd.setUpdateTime(null);
-                sceneOrigBdService.updateById(sceneOrigBd);
-            }
-
             log.error("通知计算报错,uuid:{}", uuid, e);
             if(StrUtil.isNotEmpty(sceneNum)){
 
@@ -2613,24 +2612,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 String preLogPath = buildLogPath + "noticeBuild-error-" + DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN) + ".log";
                 fYunFileService.uploadFile(ExceptionUtil.stacktraceToString(e).getBytes(StandardCharsets.UTF_8), preLogPath);
 
-                Map<String, Object> param = new HashMap<>();
-                try {
-                    JyUser jyUser = scenePlusService.getJyUserByNum(sceneNum);
-                    ScenePlus scenePlus = scenePlusService.getScenePlusByNum(sceneNum);
-                    param.put("event_type", "scene");
-                    param.put("event_content", "通知计算失败");
-                    param.put("scene_num", sceneNum);
-                    param.put("event_time", new Date());
-                    if(Objects.nonNull(scenePlus)){
-                        param.put("scene_title", scenePlus.getTitle());
-                    }
-                    param.put("ryid", jyUser.getRyId());
-                    param.put("ryno", jyUser.getRyNo());
-                    param.put("nick_name", jyUser.getRyNickName());
-                    jmgaService.sendStatus(param);
-                }catch (Exception ex){
-                    log.info("推送事件失败,param:{}", param);
-                }
+                jmgaService.sendStatus(sceneNum, "通知计算失败");
             }
 
             throw e;