|
@@ -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;
|