Browse Source

Merge branch 'project-jmga' into project-jm-haixin

# Conflicts:
#	src/main/java/com/fdkankan/contro/controller/SceneFileController.java
#	src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java
#	src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java
dengsixing 2 tháng trước cách đây
mục cha
commit
30198d4ff6

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

@@ -1,6 +1,7 @@
 package com.fdkankan.contro.controller;
 
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -150,8 +151,8 @@ public class SceneFileController{
      */
     @PostMapping("upload")
     public ResultData upload(@RequestParam(value = "file",required = false) MultipartFile file,
-                         String params) throws Exception {
-        return sceneFileBuildService.uploadFile(file, params);
+                         String params, String dir) throws Exception {
+        return sceneFileBuildService.uploadFile(file, params,dir);
     }
 
     /**

+ 33 - 3
src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java

@@ -234,6 +234,11 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
 
         }catch (Exception e){
             log.error("场景计算前置处理出错,num"+num, e);
+
+            scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
+                    .set(ScenePlus::getSceneStatus, SceneStatus.FAILD.code())
+                    .eq(ScenePlus::getNum, num));
+
             this.sendFailToLaser(num);
             haixinService.noticHaixin(num, false);
             throw e;
@@ -339,6 +344,14 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         String path = message.getPath();
         boolean status = false;
         try {
+
+            //如果场景被删除,就无需往下运行了
+            ScenePlus scenePlusByNum = scenePlusService.getScenePlusByNum(sceneCode);
+            if(Objects.isNull(scenePlusByNum)){
+                log.info("场景已被删除,场景码:{}", sceneCode);
+                return;
+            }
+
             // 上传计算日志
             //如果是重复计算,没有走到计算逻辑,不需要上传日志文件
             log.info("开始上传计算日志");
@@ -357,6 +370,19 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
 
                 this.sendFailToLaser(sceneCode);
                 redisUtil.set(String.format(RedisKey.SCENE_BUILD_FINISH_NUM, sceneCode), "-1");
+
+                Map<String, Object> param = new HashMap<>();
+                try {
+                    param.put("event_type", "计算失败");
+                    param.put("event_content", "算法报错");
+                    param.put("scene_num", sceneCode);
+                    param.put("event_time", new Date());
+                    param.put("ryid", scenePlusService.getRyIdByNum(sceneCode));
+                    jmgaService.sendStatus(param);
+                }catch (Exception e){
+                    log.info("推送事件失败,param:{}", param);
+                }
+
                 return;
             }
 
@@ -402,8 +428,8 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
 //            this.cachePanorama(path, sceneCode);
 
             //生成houseTypejson并上传
-            boolean existHouseType = this.uploadHouseTypeJson(sceneCode, path);
-            scenePlus.setHouseType(existHouseType ? CommonStatus.YES.code().intValue() : CommonStatus.NO.code().intValue());
+//            boolean existHouseType = this.uploadHouseTypeJson(sceneCode, path);
+//            scenePlus.setHouseType(existHouseType ? CommonStatus.YES.code().intValue() : CommonStatus.NO.code().intValue());
 
             //生成场景关联数据
             Integer links = linkPanService.genLinkPanPost(sceneCode);
@@ -531,7 +557,11 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
 
         }catch (Exception e){
             log.error("场景计算结果处理出错,num"+sceneCode, e);
-//            buildSceneDTService.handBaseFail("场景计算结果处理出错!", message.getPath(), sceneCode, "计算控制服务器");
+
+            scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
+                    .set(ScenePlus::getSceneStatus, SceneStatus.FAILD.code())
+                    .eq(ScenePlus::getNum, sceneCode));
+
             this.sendFailToLaser(sceneCode);
             throw e;
         }finally {

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

@@ -29,7 +29,7 @@ public interface ISceneFileBuildService extends IService<SceneFileBuild> {
 
     ResultData rebuildScene(String num,Boolean force,Boolean deleteExtras, String from) throws IOException;
 
-    ResultData uploadFile(MultipartFile file, String params) throws Exception;
+    ResultData uploadFile(MultipartFile file, String params, String dir) throws Exception;
 
     ResultData sendCallAlgorithm(SendCallAlgorithmParam param) throws Exception;
 

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

@@ -2,6 +2,7 @@ package com.fdkankan.contro.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.io.FileUtil;
@@ -390,9 +391,42 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         //调用createScene方法生成scene数据和加入算法队列
         String sceneNum = "";
 
+
         String cameraName = jsonObject.getJSONObject("cam").getString("uuid");
         String unicode = jsonObject.getString("creator") + "_" + jsonObject.getString("uuidtime");
 
+        int camType = jsonObject.getJSONObject("cam").getIntValue("type");
+        String cameraInStoreUrl = fdServiceUrl + "/service/manage/inner/cameraInStore";
+        Map<String, Object> cameraInStoreParams = new HashMap<>();
+        cameraInStoreParams.put("cameraType", camType);
+        cameraInStoreParams.put("snCode", jsonObject.getString("creator"));
+        ResultData post = myClient.post(cameraInStoreUrl, cameraInStoreParams);
+        log.info("---------cameraInStore result:{}-----------", post);
+
+        JSONObject configJson = JSONObject.parseObject(fYunFileService.getFileContent(ConstantFilePath.OSS_PREFIX + prefix + "config.fdage"));
+        String folderName = configJson.getString("id");
+        String customUserId = configJson.getString("customUserId");
+        String customUserName = configJson.getString("customUserName");
+        String customUserPwd = configJson.getString("customUserPwd");
+        if(StrUtil.isBlank(folderName) || StrUtil.isBlank(jsonObject.getString("creator"))){
+            throw new RuntimeException("config.json 文件有误!");
+        }
+
+        //调注册用户接口
+        Map<String, Object> params = new HashMap<>();
+        params.put("ryId", customUserId);
+        params.put("ryNo", customUserName);
+//        params.put("nickName", customUserName);//去掉昵称,又燕海的接口进行判断
+        params.put("password", AesUtil.encryptCBC(customUserPwd, userPasswordKey, userPasswordIv, AesUtil.ALMODE_CBC_NOPADDING));
+        String url = fdServiceUrl.concat(URL_ADD_UCENTER_USER);
+        myClient.post(url, params);
+        JyUser jyUser = jyUserService.getByRyId(customUserId);
+        User user = userService.getById(jyUser.getUserId());
+        if(Objects.isNull(jyUser)){
+            throw new RuntimeException("注册用户失败");
+        }
+
+
         Camera camera = cameraService.getByChildName(cameraName);
 
         if (camera == null) {
@@ -498,6 +532,12 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 jsonObject.getInteger("scenetype"), jsonObject.getString("gps"), rebuild,
                 jsonObject.getInteger("resolution"), firmwareVersion.toString(), sceneUrl, buildType, cameraDetail.getCooperationUser());
 
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(sceneNum);
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+        boolean isObj = jsonObject.containsKey("exportMeshObj") && jsonObject.getIntValue("exportMeshObj") == 1;
+        scenePlusExt.setIsObj(isObj ? CommonStatus.YES.code() : CommonStatus.NO.code());
+        scenePlusExtService.updateById(scenePlusExt);
+
         //上传app状态文件
         commonService.uploadStatusJson(sceneNum, scenePlusVO.getSceneStatus(),
                 scenePlusVO.getWebSite(),scenePlusVO.getThumb(),PayStatus.NOT_PAY.code(),
@@ -716,8 +756,8 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         ScenePro scenePro = sceneProService.getOne(
             new LambdaQueryWrapper<ScenePro>().like(ScenePro::getDataSource, "/".concat(fileId).concat("/")));
 
-        boolean callV3 = callV3(scenePro, preParams, fdageJson, "api/scene/file/uploadSuccessBuild");
-        if(callV3) return ResultData.ok();
+//        boolean callV3 = callV3(scenePro, preParams, fdageJson, "api/scene/file/uploadSuccessBuild");
+//        if(callV3) return ResultData.ok();
 
 
         if (ObjectUtils.isEmpty(scenePro) || (!ObjectUtils.isEmpty(scenePro.getIsUpgrade()) && scenePro.getIsUpgrade() == 1)) {
@@ -1651,6 +1691,10 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         scenePlus.setTaskId(jsonObject.getString("taskId"));
         scenePlus.setKNo(jsonObject.getString("kNo"));
         scenePlusService.updateById(scenePlus);
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+        boolean isObj = jsonObject.containsKey("exportMeshObj") && jsonObject.getIntValue("exportMeshObj") == 1;
+        scenePlusExt.setIsObj(isObj ? CommonStatus.YES.code() : CommonStatus.NO.code());
+        scenePlusExtService.updateById(scenePlusExt);
 
         ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
         boolean isObj = jsonObject.containsKey("exportMeshObj") && jsonObject.getIntValue("exportMeshObj") == 1;
@@ -1958,7 +2002,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
     }
 
     @Override
-    public ResultData uploadFile(MultipartFile file, String params) throws Exception {
+    public ResultData uploadFile(MultipartFile file, String params, String dir) throws Exception {
 
         log.info("upload-params: "+params);
         if (StringUtils.isEmpty(params)){
@@ -2028,7 +2072,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         String filePath = mac.concat(File.separator).concat(fileId).concat(File.separator).concat(folderName);
 
         String yunFilePath = LocalConstants.BASE_PATH.concat(fYunFileConfig.getBucket()).concat(File.separator).concat(ConstantFilePath.OSS_PREFIX)
-        .concat(filePath).concat(File.separator).concat(fileName);
+                .concat(filePath).concat(File.separator).concat(dir).concat(fileName);
         log.info("yunFilePath:{}", yunFilePath);
 
         boolean needUpload = false;
@@ -2075,7 +2119,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         // 5. 如果相等,更新数据记录。如果不相等,返回上传失败结果。
         try {
         if (needUpload){
-        fYunFileService.uploadFile(file.getInputStream(),ConstantFilePath.OSS_PREFIX.concat(filePath).concat(File.separator).concat(fileName));
+            fYunFileService.uploadFile(file.getInputStream(),ConstantFilePath.OSS_PREFIX.concat(filePath).concat(File.separator).concat(dir).concat(fileName));
         File uploadFile = new File(yunFilePath);
         String fileMD5 = FileMd5Util.getFileMD5(uploadFile);
 
@@ -2353,6 +2397,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
 
         SceneOrigBd sceneOrigBd = sceneOrigBdService.getById(bdId);
 
+        String sceneNum = null;
         try {
             String[] uuidArr = uuid.split("_");
 
@@ -2414,8 +2459,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 throw new RuntimeException("注册用户失败");
             }
 
-            String sceneNum = null;
-
             int rebuild = 0;
             ScenePlus scenePlus = scenePlusService.getByFileId(dataSource);
             if (!ObjectUtils.isEmpty(scenePlus)) {
@@ -2440,6 +2483,36 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         }
         sceneOrigBd.setUpdateTime(null);
         sceneOrigBdService.updateById(sceneOrigBd);
+            scenePlus = scenePlusService.getScenePlusByNum(sceneNum);
+            if(cameraType == 14){
+                fdkkLaserService.saveScene(scenePlus,fdageData,camera,user.getUserName(),rebuild == 1 ? true : false, scenePlus.getPayStatus());
+            }
+
+        }catch (Exception e){
+            log.error("通知计算报错,uuid:{}", uuid, e);
+            if(StrUtil.isNotEmpty(sceneNum)){
+                scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
+                        .set(ScenePlus::getSceneStatus, SceneStatus.FAILD.code())
+                        .eq(ScenePlus::getNum, sceneNum));
+                String buildLogPath = String.format(UploadFilePath.BUILD_LOG_PATH, sceneNum);
+                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 {
+                    param.put("event_type", "通知计算失败");
+                    param.put("event_content", "通知计算失败");
+                    param.put("scene_num", sceneNum);
+                    param.put("event_time", new Date());
+                    param.put("ryid", scenePlusService.getRyIdByNum(sceneNum));
+                    jmgaService.sendStatus(param);
+                }catch (Exception ex){
+                    log.info("推送事件失败,param:{}", param);
+                }
+            }
+
+            throw e;
+        }
 
         return ResultData.ok();
     }

+ 11 - 60
src/main/resources/logback-spring.xml

@@ -50,7 +50,7 @@
 				<maxFileSize>100MB</maxFileSize>
 			</timeBasedFileNamingAndTriggeringPolicy>
 			<!--日志文件保留天数 -->
-			<maxHistory>15</maxHistory>
+			<maxHistory>180</maxHistory>
 		</rollingPolicy>
 		<!-- 此日志文件只记录debug级别的 -->
 		<filter class="ch.qos.logback.classic.filter.LevelFilter">
@@ -78,7 +78,7 @@
 				<maxFileSize>100MB</maxFileSize>
 			</timeBasedFileNamingAndTriggeringPolicy>
 			<!--日志文件保留天数 -->
-			<maxHistory>15</maxHistory>
+			<maxHistory>180</maxHistory>
 		</rollingPolicy>
 		<!-- 此日志文件只记录info级别的 -->
 		<filter class="ch.qos.logback.classic.filter.LevelFilter">
@@ -105,7 +105,7 @@
 				<maxFileSize>100MB</maxFileSize>
 			</timeBasedFileNamingAndTriggeringPolicy>
 			<!--日志文件保留天数 -->
-			<maxHistory>15</maxHistory>
+			<maxHistory>180</maxHistory>
 		</rollingPolicy>
 		<!-- 此日志文件只记录warn级别的 -->
 		<filter class="ch.qos.logback.classic.filter.LevelFilter">
@@ -133,7 +133,7 @@
 				<maxFileSize>100MB</maxFileSize>
 			</timeBasedFileNamingAndTriggeringPolicy>
 			<!--日志文件保留天数 -->
-			<maxHistory>15</maxHistory>
+			<maxHistory>180</maxHistory>
 		</rollingPolicy>
 		<!-- 此日志文件只记录ERROR级别的 -->
 		<filter class="ch.qos.logback.classic.filter.LevelFilter">
@@ -149,62 +149,13 @@
 	<!-- 使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作: 第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息 第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别: -->
 	<!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 不能设置为INHERITED或者同义词NULL。默认是DEBUG 可以包含零个或多个元素,标识这个appender将会添加到这个logger。 -->
 
-			<root level="info">
-				<appender-ref ref="CONSOLE" />
-				<appender-ref ref="DEBUG_FILE" />
-				<appender-ref ref="INFO_FILE" />
-				<appender-ref ref="WARN_FILE" />
-				<appender-ref ref="ERROR_FILE" />
-			</root>
-
-<!--	<springProfile name="dev">-->
-<!--		<root level="info">-->
-<!--			<appender-ref ref="CONSOLE" />-->
-<!--			<appender-ref ref="DEBUG_FILE" />-->
-<!--			<appender-ref ref="INFO_FILE" />-->
-<!--			<appender-ref ref="WARN_FILE" />-->
-<!--			<appender-ref ref="ERROR_FILE" />-->
-<!--			<appender-ref ref="ALL_FILE" />-->
-<!--		</root>-->
-<!--		&lt;!&ndash; <logger name="com.xusanduo.demo" level="debug"/>开发环境, 指定某包日志为debug级 &ndash;&gt;-->
-<!--	</springProfile>-->
-
-<!--	<springProfile name="test">-->
-<!--		<root level="info">-->
-<!--			<appender-ref ref="CONSOLE" />-->
-<!--			<appender-ref ref="DEBUG_FILE" />-->
-<!--			<appender-ref ref="INFO_FILE" />-->
-<!--			<appender-ref ref="WARN_FILE" />-->
-<!--			<appender-ref ref="ERROR_FILE" />-->
-<!--			<appender-ref ref="ALL_FILE" />-->
-<!--		</root>-->
-<!--		&lt;!&ndash; <logger name="com.xusanduo.demo" level="info"/> 测试环境, 指定某包日志为info级 &ndash;&gt;-->
-<!--	</springProfile>-->
-
-<!--	<springProfile name="pro">-->
-<!--		<root level="error">-->
-<!--			&lt;!&ndash; 生产环境最好不配置console写文件 &ndash;&gt;-->
-<!--			<appender-ref ref="CONSOLE" />-->
-<!--			<appender-ref ref="DEBUG_FILE" />-->
-<!--			<appender-ref ref="INFO_FILE" />-->
-<!--			<appender-ref ref="WARN_FILE" />-->
-<!--			<appender-ref ref="ERROR_FILE" />-->
-<!--			<appender-ref ref="ALL_FILE" />-->
-<!--		</root>-->
-<!--		&lt;!&ndash; <logger name="com.xusanduo.demo" level="warn"/> 生产环境, 指定某包日志为warn级 &ndash;&gt;-->
-<!--		&lt;!&ndash; <logger name="com.xusanduo.demo.MyApplication" level="info"/> 特定某个类打印info日志, 比如application启动成功后的提示语 &ndash;&gt;-->
-<!--	</springProfile>-->
-
-	<!--生产环境:输出到文件 -->
-	<!--<springProfile name="pro"> -->
-	<!--<root level="info"> -->
-	<!--<appender-ref ref="CONSOLE" /> -->
-	<!--<appender-ref ref="DEBUG_FILE" /> -->
-	<!--<appender-ref ref="INFO_FILE" /> -->
-	<!--<appender-ref ref="ERROR_FILE" /> -->
-	<!--<appender-ref ref="WARN_FILE" /> -->
-	<!--</root> -->
-	<!--</springProfile> -->
+	<root level="info">
+		<appender-ref ref="CONSOLE" />
+		<appender-ref ref="DEBUG_FILE" />
+		<appender-ref ref="INFO_FILE" />
+		<appender-ref ref="WARN_FILE" />
+		<appender-ref ref="ERROR_FILE" />
+	</root>
 
 </configuration>