lyhzzz 1 месяц назад
Родитель
Сommit
b4382cbd9a

+ 2 - 2
src/main/java/com/fdkankan/fusion/controller/DownOfflinePackageController.java

@@ -49,7 +49,7 @@ public class DownOfflinePackageController {
         if(caseId == null ){
             throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
         }
-        caseDownService.downOffline(caseId,fromRoute);
+        caseDownService.asynDownOffline(caseId,fromRoute);
         DownVo downVo = new DownVo();
         downVo.setDownloadStatus(1);
         return ResultData.ok(downVo);
@@ -71,7 +71,7 @@ public class DownOfflinePackageController {
         List<FusionNumVo> fusionNumVos = caseFusionService.getSceneListVo(param.getFusionId());
         for (FusionNumVo fusionNumVo : fusionNumVos) {
             SceneVo sceneData = fusionNumVo.getSceneData();
-            if(sceneData.getType() !=3 && sceneData.getStatus() !=2){
+            if(sceneData != null && sceneData.getType() !=null && sceneData.getType() !=3 && sceneData.getStatus() !=2){
                 throw new BusinessException(ResultCode.SCENE_BUILDING);
             }
         }

+ 21 - 2
src/main/java/com/fdkankan/fusion/down/CaseDownService.java

@@ -12,6 +12,7 @@ import com.fdkankan.fusion.common.util.DateUtils;
 import com.fdkankan.fusion.common.util.ShellUtil;
 import com.fdkankan.fusion.common.util.UploadToOssUtil;
 import com.fdkankan.fusion.config.CacheUtil;
+import com.fdkankan.fusion.config.ThreadPoolConfig;
 import com.fdkankan.fusion.entity.*;
 import com.fdkankan.fusion.exception.BusinessException;
 import com.fdkankan.fusion.httpClient.LaserService;
@@ -24,6 +25,7 @@ import com.fdkankan.redis.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
@@ -36,6 +38,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.concurrent.Executor;
 
 @Service
 @Slf4j
@@ -85,7 +88,9 @@ public class CaseDownService {
     @Value("${spring.profiles.active}")
     private String environment;
     public static String downProcessKey = "fusion:down:offline:process:caseId:%s";
-
+    @Autowired
+    @Qualifier("taskExecutor")
+    private Executor taskExecutor;
     public DownVo checkDown(Integer caseId) {
         DownVo downVo = new DownVo();
 //        CaseOffline byCaseId = caseOfflineService.getByCaseId(caseId);
@@ -95,7 +100,21 @@ public class CaseDownService {
 //        }
         return downVo;
     }
-    @Async
+    public void asynDownOffline(Integer caseId,String fromRoute){
+        String redisKey = String.format(downProcessKey, caseId);
+        if( redisUtil.hasKey(redisKey)){
+            String res = redisUtil.get(redisKey);
+            DownloadProcessVo downloadProcessVo = JSONObject.parseObject(res, DownloadProcessVo.class);
+            if(downloadProcessVo.getStatus() != 1003 && (downloadProcessVo.getPercent()== null || downloadProcessVo.getPercent() != 100)){
+                return;
+            }
+            redisUtil.del(redisKey);
+        }
+        taskExecutor.execute(() ->{
+            downOffline(caseId,fromRoute);
+        });
+    }
+
     public void downOffline(Integer caseId,String fromRoute){
         String caseOffPath = null;
         String zipName = null;

+ 12 - 5
src/main/java/com/fdkankan/fusion/down/FusionDownService.java

@@ -10,6 +10,7 @@ import com.fdkankan.fusion.common.ResultCode;
 import com.fdkankan.fusion.common.ResultData;
 import com.fdkankan.fusion.common.util.*;
 import com.fdkankan.fusion.config.CacheUtil;
+import com.fdkankan.fusion.config.ThreadPoolConfig;
 import com.fdkankan.fusion.entity.*;
 import com.fdkankan.fusion.exception.BusinessException;
 import com.fdkankan.fusion.httpClient.LaserService;
@@ -25,6 +26,7 @@ import com.fdkankan.redis.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
@@ -35,6 +37,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.concurrent.Executor;
 
 @Service
 @Slf4j
@@ -107,11 +110,13 @@ public class FusionDownService {
     ICaseAnimationService caseAnimationService;
     @Autowired
     IMapConfigService mapConfigService;
+    @Autowired
+    @Qualifier("taskExecutor")
+    private Executor taskExecutor;
 
     @Autowired
     RedisUtil redisUtil;
     public static String downProcessKey = "fusion:down:offline:process:fusionId:%s";
-    @Async
     public void asyncDownOffline(Integer fusionId){
         String redisKey = String.format(downProcessKey, fusionId);
         if(redisUtil.hasKey(redisKey)){
@@ -120,11 +125,15 @@ public class FusionDownService {
             if(downloadProcessVo.getStatus() != 1003 && (downloadProcessVo.getPercent()== null || downloadProcessVo.getPercent() != 100)){
                 return;
             }
+            redisUtil.del(redisKey);
         }
         String timeKey = DateUtils.dateStr();
         String caseOffPath =FilePath.OFFLINE_PACKAGE_PATH+timeKey+fusionId ;
         String zipName = caseOffPath+".zip";
-        downOffline(fusionId,caseOffPath,zipName);
+        taskExecutor.execute(() ->{
+            downOffline(fusionId,caseOffPath,zipName);
+        });
+
     }
     public void downOffline(Integer fusionId,String caseOffPath,String zipName){
         try {
@@ -205,8 +214,6 @@ public class FusionDownService {
         CaseFusion caseFusion = caseFusionService.getById(fusionId);
         jsonObject.put(basePath+caseFusionInfo+fusionId, ResultData.ok(caseFusion));
 
-        List<FusionNumVo> sceneListVo = caseFusionService.getSceneListVo(fusionId);
-
         List<MapConfig> list = mapConfigService.list();
         jsonObject.put(basePath+mapConfig, ResultData.ok(list));
 
@@ -264,7 +271,7 @@ public class FusionDownService {
                 }
             }
         }
-        jsonObject.put(basePath+caseFusionList+fusionId, ResultData.ok(sceneListVo));
+        jsonObject.put(basePath+caseFusionList+fusionId, ResultData.ok(fusionNumVos));
 
         List<HotIcon> hotIconList = hotIconService.getListByFusionId(fusionId);
         for (HotIcon hotIcon : hotIconList) {

+ 5 - 2
src/main/java/com/fdkankan/fusion/mq/consumer/OsgbToB3dmConsumer.java

@@ -14,6 +14,7 @@ import com.fdkankan.fusion.service.ICommonUploadService;
 import com.fdkankan.redis.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
@@ -21,6 +22,7 @@ import org.springframework.stereotype.Component;
 import java.io.File;
 import java.util.HashMap;
 import java.util.UUID;
+import java.util.concurrent.Executor;
 
 /**
  * 场景封存解封 mq
@@ -36,11 +38,12 @@ public class OsgbToB3dmConsumer {
     @Autowired
     UploadToOssUtil uploadToOssUtil;
     @Autowired
-    ThreadPoolConfig threadPoolConfig;
+    @Qualifier("taskExecutor")
+    private Executor taskExecutor;
 
 
     public void consumerQueue(Integer uploadId)  {
-        threadPoolConfig.taskExecutor().execute(() ->{
+        taskExecutor.execute(() ->{
             String sourcePath = null;
             String localPath = null;
             try {

+ 2 - 0
src/main/java/com/fdkankan/fusion/service/impl/CaseFusionServiceImpl.java

@@ -125,6 +125,8 @@ public class CaseFusionServiceImpl extends ServiceImpl<ICaseFusionMapper, CaseFu
                             sceneVo.setRtkLocation(scenePlusExt.getRtkLocation());
                             sceneVo.setOrientation(scenePlusExt.getOrientation());
                         }
+                    }else {
+                        continue;
                     }
                 }else {
                     sceneVo.setStatus(2);