lyhzzz 2 months ago
parent
commit
6f2c95916d

+ 2 - 1
src/main/java/com/fdkankan/fusion/common/ResultCode.java

@@ -87,7 +87,8 @@ public enum ResultCode {
     UNZIP_ERROR(8034, "解压失败"),
 
     SPACE_ERROR(8035, "获取磁盘空间失败"),
-    USE_SPACE_ERROR(8036, "磁盘空间不足");
+    USE_SPACE_ERROR(8036, "磁盘空间不足"),
+    SCENE_DOWN_ERROR(8037, "场景下载失败");
 
 
 

+ 57 - 40
src/main/java/com/fdkankan/fusion/down/CaseDownService.java

@@ -1,6 +1,7 @@
 package com.fdkankan.fusion.down;
 
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IORuntimeException;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -26,6 +27,7 @@ import com.fdkankan.redis.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.FactoryBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
@@ -165,11 +167,15 @@ public class CaseDownService {
             setRedisProcess(caseId,100,caseOffPath);
             caseService.updateOfflineStatus(caseId,2,caseOffPath);
         }catch (IOException e){
-            log.info("down-offline-error:{}",caseId,e);
+            log.info("down-offline-IOException:{}",caseId,e);
+            setRedisProcess(caseId,0,null,1004);
+            caseService.updateOfflineStatus(caseId,1004,caseOffPath);
+        }catch (IORuntimeException e){
+            log.info("down-offline-IORuntimeException:{}",caseId,e);
             setRedisProcess(caseId,0,null,1004);
             caseService.updateOfflineStatus(caseId,1004,caseOffPath);
         }catch (Exception e){
-            log.info("down-offline-error:{}",caseId,e);
+            log.info("down-offline-Exception:{}",caseId,e);
             setRedisProcess(caseId,0,null,1003);
             caseService.updateOfflineStatus(caseId,1003,caseOffPath);
         }
@@ -263,7 +269,7 @@ public class CaseDownService {
             }
             if(sceneData.getType() != 3){
                 //下载场景离线包
-                downSwkk(caseId,sceneData.getNum(),sceneData.getType(),caseOffPath);
+               downSwkk(caseId,sceneData.getNum(),sceneData.getType(),caseOffPath);
             }
             if(sceneData.getType() == 2 || sceneData.getType() == 5){
                 FdkkResponse sceneInfo = laserService.getSceneInfo(sceneData.getNum());
@@ -415,49 +421,57 @@ public class CaseDownService {
 
        String swkkPath = offPath+ "/www/swkk";
        String swssPath = offPath + "/www/swss";
+       String numPath = swkkPath;
 
        Boolean isLaser = false;
        if(type == 2 || type == 5){
            isLaser = true;
+           numPath = swssPath;
        }
-           Boolean wita = true;
-           Long startTime = new Date().getTime();
-           Long outTime = new Date().getTime();
-           Long wiatTime = 10000L;
-
-           while (wita){
-               Long nowTime = new Date().getTime();
-               if(nowTime - startTime < wiatTime){
-                   continue;
-               }
-               if(nowTime - outTime > 1000 * 60 * 60 * 2){ //下载单个场景超时时间
-                   throw new BusinessException(ResultCode.SYSTEM_ERROR);
-               }
-               startTime = nowTime;
-               FdkkResponse fdkkResponse = laserService.sceneLocInfo(num);
-               if(fdkkResponse.getCode() != 200){
-                   throw new BusinessException(ResultCode.SYSTEM_ERROR);
-               }
-               JSONObject jsonObject = (JSONObject) fdkkResponse.getData();
-               Integer sceneId = jsonObject.getInteger("id");
-               Boolean meshStatus = jsonObject.getBoolean("meshRebuildOffline");
-               Boolean laserStatus = jsonObject.getBoolean("rebuildOffline");
-               String meshOfflineFolder = jsonObject.getString("meshOfflineFolder");
-               String laserOfflineFolder = jsonObject.getString("offlineFolder");
-               //1 生成成功 ,0:正在生成 1,初次生成  2,下载失败
-               Integer laserOffStatus = jsonObject.getInteger("buildOfflineStatus");
-               //1 生成成功,0:正在生成 1,初次生成  2,下载失败
-               Integer meshBuildOfflineStatus = jsonObject.getInteger("meshBuildOfflineStatus");
-
-               wita = downSceneOffline(num,sceneId, isLaser,
-                       isLaser ? swssPath : swkkPath,
-                       isLaser ? laserStatus : meshStatus,
-                       isLaser ? laserOfflineFolder : meshOfflineFolder,
-                       isLaser ? laserOffStatus : meshBuildOfflineStatus
-               );
 
+
+       Boolean wita = true;
+       Long startTime = new Date().getTime();
+       Long outTime = new Date().getTime();
+       Long wiatTime = 10000L;
+
+       while (wita){
+           Long nowTime = new Date().getTime();
+           if(nowTime - startTime < wiatTime){
+               continue;
+           }
+           if(nowTime - outTime > 1000 * 60 * 60 * 2){ //下载单个场景超时时间
+               throw new BusinessException(ResultCode.SYSTEM_ERROR);
+           }
+           startTime = nowTime;
+           FdkkResponse fdkkResponse = laserService.sceneLocInfo(num);
+           if(fdkkResponse.getCode() != 200){
+               throw new BusinessException(ResultCode.SYSTEM_ERROR);
            }
+           JSONObject jsonObject = (JSONObject) fdkkResponse.getData();
+           Integer sceneId = jsonObject.getInteger("id");
+           Boolean meshStatus = jsonObject.getBoolean("meshRebuildOffline");
+           Boolean laserStatus = jsonObject.getBoolean("rebuildOffline");
+           String meshOfflineFolder = jsonObject.getString("meshOfflineFolder");
+           String laserOfflineFolder = jsonObject.getString("offlineFolder");
+           //1 生成成功 ,0:正在生成 1,初次生成  2,下载失败
+           Integer laserOffStatus = jsonObject.getInteger("buildOfflineStatus");
+           //1 生成成功,0:正在生成 1,初次生成  2,下载失败
+           Integer meshBuildOfflineStatus = jsonObject.getInteger("meshBuildOfflineStatus");
+
+           wita = downSceneOffline(num,sceneId, isLaser,
+                   isLaser ? swssPath : swkkPath,
+                   isLaser ? laserStatus : meshStatus,
+                   isLaser ? laserOfflineFolder : meshOfflineFolder,
+                   isLaser ? laserOffStatus : meshBuildOfflineStatus
+           );
 
+       }
+       File file = new File(numPath + File.separator + num);
+       if(!file.exists()){
+           log.info("场景下载失败-num:{}",num);
+           throw new BusinessException(ResultCode.SCENE_DOWN_ERROR);
+       }
 
    }
 
@@ -466,8 +480,9 @@ public class CaseDownService {
      */
     private Boolean downSceneOffline(String num,Integer sceneId, Boolean isLaser, String offPath, Boolean rebuildOffline, String offlineFolder, Integer buildOfflineStatus) {
         String redisKey = buildSceneKey + num;
-        if(redisUtil.hasKey(redisKey) && Integer.parseInt(redisUtil.get(redisKey))>=2 ){
+        if(redisUtil.hasKey(redisKey) && Integer.parseInt(redisUtil.get(redisKey))>=3 ){
             log.info("场景查询状态不对,跳出循环:{},{}",num,isLaser);
+            redisUtil.del(redisKey);
             return false;
         }
         if(rebuildOffline && buildOfflineStatus !=0){
@@ -486,6 +501,7 @@ public class CaseDownService {
             return true;
         }
         if(buildOfflineStatus == 2){
+            redisUtil.del(redisKey);
             return false;
         }
         if(!rebuildOffline && buildOfflineStatus == 1){
@@ -504,9 +520,10 @@ public class CaseDownService {
                 try {
                     FileUtil.copyContent(file,file1,true);
                 }catch (Exception e){
-
+                    return false;
                 }
             }
+            redisUtil.del(redisKey);
             return false;
         }
         return true;