lyhzzz 3 bulan lalu
induk
melakukan
a641567c0a

+ 5 - 0
doc/update-2.2.0.sql

@@ -0,0 +1,5 @@
+ALTER TABLE `fd_fusion`.`t_scene_down_log`
+ADD COLUMN `type` varchar(255) NULL DEFAULT 'scene' AFTER `update_time`;
+
+
+

+ 2 - 4
src/main/java/com/fdkankan/fusion/common/FilePath.java

@@ -17,12 +17,10 @@ public class FilePath {
 
     public final static String FFMPEG_IMG_PATH  = "/mnt/fusion/ffmpeg_imgs";
 
-    public final static String OFFLINE_PACKAGE_PATH = "/mnt/fusion/offline/fusionOffline_";
-    public final static String OFFLINE_PACKAGE_PATH_CASE = "/mnt/fusion/offline/caseOffline_";
+    public final static String OFFLINE_PACKAGE_PATH = "/mnt/fusion/offline/fusion_offline_";
+    public final static String OFFLINE_PACKAGE_PATH_CASE = "/mnt/fusion/offline/case_offline_";
     public final static String OFFLINE_TEMPLATE_PATH_Fusion = "/mnt/fusion/offline/template/fusion";
     public final static String OFFLINE_TEMPLATE_PATH_CASE = "/mnt/fusion/offline/template/case";
-    public final static String OFFLINE_RESOURCE_PACKAGE_PATH = OFFLINE_PACKAGE_PATH + "%s/env/www/package/resource/";
-    public final static String OFFLINE_OSS_PATH = OFFLINE_PACKAGE_PATH + "%s/env/www";
     public final static String OFFLINE_LASER_OSS_PATH =  "/swss/%s/env/www/%s/";
     public final static String LASER_OSS_PATH = "laser-prod/%s/data/%s/webcloud";
     public final static String MESH_SCENE_FLOOR_PNG_PATH = "scene_edit_data/%s/user/";

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

@@ -62,7 +62,7 @@ public enum ResultCode {
     UPLOAD_FILE_NAME_TO_LONG(7017,"文件名超过长度限制"),
     SCENE_DATA_SOURCE_EMPTY(7018,"场景资源文件为空,无法添加"),
     CASE_HAVE_SETTINGS(7019,"案件已有设置,无法新增"),
-    SS_SCENE_DOWN_ERROR(7020,"深时点云场景下载失败"),
+    SS_SCENE_DOWN_ERROR(7020,"场景下载失败"),
     FILE_NOT_EXIST(7021,"文件不存在,或已被刪除"),
     HOST_ICON_LIMIT(7022,"案件图标超过上限"),
     CASE_REMOVE_SCENE(7023,"场景被移除"),
@@ -83,6 +83,7 @@ public enum ResultCode {
     REMOVE_ERROR(60041, "至少保留一个实景三维/多元融合场景"),
 
     SCENE_BUILDING(60042, "场景计算中"),
+    FUSION_DOWN_ERROR(60043, "多元融合下载失败"),
 
     ;
 

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

@@ -121,7 +121,7 @@ public class CaseController extends BaseController{
     @GetMapping("/getInfo")
     public ResultData getInfo(@RequestParam(required = false)Integer caseId){
 
-        return ResultData.ok(caseService.getInfo(caseId));
+        return ResultData.ok(caseService.getInfo(caseId,true));
     }
 
     @PostMapping("/copyCase")
@@ -139,7 +139,7 @@ public class CaseController extends BaseController{
     public ResultData getFusionAndScene(@RequestParam(required = false) Integer caseId,
                                         @RequestParam(required = false) String type){
 
-        return ResultData.ok(caseService.getFusionAndScene(caseId,type));
+        return ResultData.ok(caseService.getFusionAndScene(caseId,type,true));
     }
 
 

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

@@ -65,7 +65,7 @@ public class DownOfflinePackageController {
                 throw new BusinessException(ResultCode.SCENE_BUILDING);
             }
         }
-        fusionDownService.downOffline(param.getFusionId());
+        fusionDownService.asyncDownOffline(param.getFusionId());
         DownVo downVo = new DownVo();
         downVo.setDownloadStatus(1);
         return ResultData.ok(downVo);

+ 66 - 92
src/main/java/com/fdkankan/fusion/down/CaseDownService.java

@@ -6,10 +6,13 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.deepoove.poi.XWPFTemplate;
 import com.fdkankan.fusion.common.FilePath;
+import com.fdkankan.fusion.common.ResultCode;
 import com.fdkankan.fusion.common.ResultData;
+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.entity.*;
+import com.fdkankan.fusion.exception.BusinessException;
 import com.fdkankan.fusion.httpClient.LaserService;
 import com.fdkankan.fusion.httpClient.response.FdkkResponse;
 import com.fdkankan.fusion.request.CaseParam;
@@ -94,6 +97,8 @@ public class CaseDownService {
 
     @Async
     public void downOffline(Integer caseId){
+        String caseOffPath = null;
+        String zipName = null;
         try {
             String redisKey = String.format(downProcessKey, caseId);
             if( redisUtil.hasKey(redisKey)){
@@ -103,33 +108,44 @@ public class CaseDownService {
                     return;
                 }
             }
+            String timeKey = DateUtils.dateStr();
+            caseOffPath =FilePath.OFFLINE_PACKAGE_PATH_CASE+timeKey+caseId ;
 
             setRedisProcess(caseId,0);
             //复制前端资源
-            cpIndexHtml(caseId);
+            cpIndexHtml(caseId,caseOffPath);
             setRedisProcess(caseId,10);
             //创建data.json并下载资源
-            createDataJson(caseId);
+            createDataJson(caseId,caseOffPath+"/env/www");
             setRedisProcess(caseId,50);
             //打包zip
-            String path = "/mnt/fusion/offline";
-            String name = "offline_"+ caseId;
-            String zipName = path+File.separator+name+".zip";
-            ShellUtil.zip(zipName,name);
+            zipName = caseOffPath+".zip";
+            ShellUtil.zip(zipName,caseOffPath);
             setRedisProcess(caseId,70);
             //上传oss
             String ossUrl = zipName.replace("/mnt/", "");
             ShellUtil.yunUpload(zipName,ossUrl);
-            Thread.sleep(2000L);
-            FileUtil.del(zipName);
+
             ossUrl = queryPath + ossUrl;
             setRedisProcess(caseId,100,ossUrl);
         }catch (Exception e){
-            log.info("down-offline-error:{}",caseId,e);
             setRedisProcess(caseId,0,null,1003);
+            log.info("down-offline-error:{}",caseId,e);
+        }finally {
+            delFile(caseOffPath);
+            delFile(zipName);
         }
 
     }
+    private void delFile(String path){
+        if(StringUtils.isNotBlank(path)){
+            try {
+                FileUtil.del(path);
+            }catch (Exception e){
+                log.info("删除文件失败:{}",path);
+            }
+        }
+    }
 
     public void setRedisProcess(Integer caseId,Integer num){
         setRedisProcess(caseId,num,null,1000);
@@ -158,17 +174,16 @@ public class CaseDownService {
         return downVo;
     }
 
-    public void createDataJson(Integer caseId){
+    public void createDataJson(Integer caseId,String casePath){
         log.info("down-offline-createDataJson:{}",caseId);
         JSONObject jsonObject = new JSONObject();
 
         //设置案件信息
-        jsonObject.put(basePath+caseInfoUrl+caseId, ResultData.ok(caseService.getInfo(caseId)));
+        jsonObject.put(basePath+caseInfoUrl+caseId, ResultData.ok(caseService.getInfo(caseId,false)));
         List<CaseFilesTypeTreeVo> byTree = caseFilesTypeService.getByTree(caseId);
         for (CaseFilesTypeTreeVo caseFilesTypeTreeVo : byTree) {
-            downTreeResource(caseId,caseFilesTypeTreeVo);
+            downTreeResource(caseFilesTypeTreeVo,casePath,jsonObject);
         }
-
         jsonObject.put(basePath+caseFilesTypeTreeUrl+caseId, ResultData.ok(byTree));
 
         CaseParam param = new CaseParam();
@@ -176,14 +191,14 @@ public class CaseDownService {
         jsonObject.put(basePath+sceneListUrl+caseId, ResultData.ok(caseService.sceneList(param)));
         jsonObject.put(basePath+caseInquestInfoUrl+caseId, ResultData.ok(caseInquestInfoService.getByCaseId(caseId)));
 
-        List<FusionAndSceneVo> sceneList = caseService.getFusionAndScene(caseId, "scene");
+        List<FusionAndSceneVo> sceneList = caseService.getFusionAndScene(caseId, "scene",false);
         jsonObject.put(basePath+String.format(fusionAndSceneTypeSceneUrl,caseId), ResultData.ok(sceneList));
-        List<FusionAndSceneVo> fusionList = caseService.getFusionAndScene(caseId, "fusion");
+        List<FusionAndSceneVo> fusionList = caseService.getFusionAndScene(caseId, "fusion",false);
         jsonObject.put(basePath+String.format(fusionAndSceneTypeFusionUrl,caseId), ResultData.ok(fusionList));
 
         for (FusionAndSceneVo fusionAndSceneVo : sceneList) {
             //下载场景
-            downSwkk(caseId,fusionAndSceneVo.getNum(),fusionAndSceneVo.getSceneType());
+            downSwkk(casePath,fusionAndSceneVo.getNum(),fusionAndSceneVo.getSceneType());
             if(fusionAndSceneVo.getSceneType() == 2 || fusionAndSceneVo.getSceneType() == 5){
                 FdkkResponse sceneInfo = laserService.getSceneInfo(fusionAndSceneVo.getNum());
                 HashSet<String> dataSetIds = new HashSet<>();
@@ -217,64 +232,47 @@ public class CaseDownService {
             }
         }
         for (FusionAndSceneVo fusionAndSceneVo : fusionList) {
-           downFusion(caseId,fusionAndSceneVo.getFusionId());
+           downFusion(casePath,fusionAndSceneVo.getFusionId());
         }
 
         String jsonString = JSON.toJSONString(jsonObject);
-        FileUtil.writeString(jsonString, FilePath.OFFLINE_PACKAGE_PATH_CASE+caseId+"/env/www/package/"+jsonDataName,"UTF-8");
+        FileUtil.writeString(jsonString, casePath+"/package/"+jsonDataName,"UTF-8");
 
     }
 
-    private void downTreeResource(Integer caseId,CaseFilesTypeTreeVo caseFilesTypeTreeVo) {
+    private void downTreeResource(CaseFilesTypeTreeVo caseFilesTypeTreeVo,String casePath,JSONObject jsonObject) {
         if(caseFilesTypeTreeVo.getCaseFilesList() != null && !caseFilesTypeTreeVo.getCaseFilesList().isEmpty()){
             for (CaseFiles caseFiles : caseFilesTypeTreeVo.getCaseFilesList()) {
-                downResource(caseId,caseFiles.getFilesUrl());
+                downResource(caseFiles.getFilesUrl(),casePath);
             }
             if(caseFilesTypeTreeVo.getChildrenList() != null && !caseFilesTypeTreeVo.getChildrenList().isEmpty()){
                 List<CaseFilesTypeTreeVo> childrenList = caseFilesTypeTreeVo.getChildrenList();
                 for (CaseFilesTypeTreeVo filesTypeTreeVo : childrenList) {
-                    downTreeResource(caseId,filesTypeTreeVo);
+                    downTreeResource(filesTypeTreeVo,casePath,jsonObject);
                 }
             }
         }
     }
 
-    private void downFusion(Integer caseId,Integer fusionId) {
-        String path = FilePath.OFFLINE_PACKAGE_PATH_CASE+caseId + "/env/www/fusionOffline/"+fusionId;
-        String zipPath = path +".zip";
-        try {
-            fusionDownService.downOffline(fusionId);
-            DownloadProcessVo downloadProcessVo = fusionDownService.process(fusionId);
-            while (downloadProcessVo.getStatus() != 1002 ){
-                downloadProcessVo =  fusionDownService.process(fusionId);
-                Thread.sleep(2000L);
-            }
-            ShellUtil.yunDownload(downloadProcessVo.getUrl().replace(queryPath, ""), path);
-            ShellUtil.unZip(zipPath,path);
-            FileUtil.del(zipPath);
-        }catch (Exception e){
 
-        }
-    }
 
 
     //http://127.0.0.1:8080/offline.html?caseId=362&app=1&share=1#/show/summary
 
     static String batName = "start-browser.bat";
     static String batName2 = "信创环境启动(打开后选在终端运行).sh";
-   public void cpIndexHtml(Integer caseId){
+   public void cpIndexHtml(Integer caseId,String casePath){
        log.info("down-offline-cpIndexHtml:{}",caseId);
 
-       String caseOfflinePath = FilePath.OFFLINE_PACKAGE_PATH_CASE+caseId;
-       FileUtil.copyContent(new File(FilePath.OFFLINE_TEMPLATE_PATH_CASE),new File(caseOfflinePath),true);
+       FileUtil.copyContent(new File(FilePath.OFFLINE_TEMPLATE_PATH_CASE),new File(casePath),true);
 
-       String s = FileUtil.readString(caseOfflinePath + File.separator + batName, StandardCharsets.UTF_8);
+       String s = FileUtil.readString(casePath + File.separator + batName, StandardCharsets.UTF_8);
        s = s.replaceAll("@caseId", String.valueOf(caseId));
-       FileUtil.writeString(s, caseOfflinePath + File.separator + batName,"UTF-8");
+       FileUtil.writeString(s, casePath + File.separator + batName,"UTF-8");
 
-       String s1 = FileUtil.readString(caseOfflinePath + File.separator + batName2, StandardCharsets.UTF_8);
+       String s1 = FileUtil.readString(casePath + File.separator + batName2, StandardCharsets.UTF_8);
        s1 = s1.replaceAll("@caseId", String.valueOf(caseId));
-       FileUtil.writeString(s1, caseOfflinePath + File.separator + batName2,"UTF-8");
+       FileUtil.writeString(s1, casePath + File.separator + batName2,"UTF-8");
 
    }
 
@@ -284,11 +282,22 @@ public class CaseDownService {
    @Autowired
     UploadToOssUtil uploadToOssUtil;
 
-   public void downSwkk(Integer caseId,String num,Integer type){
+    private void downFusion(String casePath,Integer fusionId) {
+        String path = casePath +"/fusionOffline/"+fusionId;
+        try {
+            log.info("下载多元融合:{},{}",casePath,fusionId);
+            fusionDownService.downOffline(fusionId,path,null);
+        }catch (Exception e){
+            log.info("下载多元融合失败:{}",fusionId,e);
+            throw new BusinessException(ResultCode.FUSION_DOWN_ERROR);
+        }
+    }
+
+   public void downSwkk(String path,String num,Integer type){
 
-       String swkkPath = FilePath.OFFLINE_PACKAGE_PATH_CASE+caseId + "/env/www/swkk/"+num;
+       String swkkPath = path + "/swkk/"+num;
        String swkkZipPath = swkkPath +".zip";
-       String swssPath = FilePath.OFFLINE_PACKAGE_PATH_CASE+caseId + "/env/www/swss/"+num;
+       String swssPath = path + "/swss/"+num;
        String swssZipPath = swssPath +".zip";
 
        Integer isObj = 0;
@@ -305,15 +314,19 @@ public class CaseDownService {
                DownVo down = downService.down(num, isObj,"offline");
                if(down.getDownloadStatus() == 1){
                    DownloadProcessVo downloadProcessVo = downService.downloadProcess(num, isObj);
-                   while (downloadProcessVo.getStatus() != 1002 ){
+                   while (downloadProcessVo.getStatus() == 1000 || downloadProcessVo.getStatus() == 1001 ){
                        downloadProcessVo =  downService.downloadProcess(num, isObj);
                        Thread.sleep(2000L);
                    }
+                   if(downloadProcessVo.getStatus() == 1003 && StringUtils.isBlank(downVo.getDownloadUrl())){
+                       throw new BusinessException(ResultCode.SS_SCENE_DOWN_ERROR);
+                   }
                    downZip(type,downloadProcessVo.getUrl(),swkkZipPath,swkkPath,swssZipPath,swssPath);
                }
            }
        }catch (Exception e){
            log.info("下载场景离线包失败:{}",num,e);
+           throw new BusinessException(ResultCode.SS_SCENE_DOWN_ERROR);
        }
 
    }
@@ -326,73 +339,34 @@ public class CaseDownService {
                    uri = uri.split("[?]")[0];
                }
                ShellUtil.yunDownload(uri.replace(queryPath, ""), kkzipPath);
-
                ShellUtil.unZip(kkzipPath,kknumPath);
                FileUtil.del(kkzipPath);
+
            }else {
                ShellUtil.yunDownloadSs(uri.replace(queryPath, ""), sszipPath);
                ShellUtil.unZip(sszipPath,ssNumPath);
                FileUtil.del(sszipPath);
+
            }
        }catch (Exception e){
             log.info("下载场景离线包失败:{}",uri,e);
        }
 
    }
-    public void downModel(Integer caseId, String modelGlbUrl) {
-        String path = String.format(FilePath.OFFLINE_OSS_PATH,caseId);
-
-        JSONArray jsonArray = JSONArray.parseArray(modelGlbUrl);
-        for (Object object : jsonArray) {
-            String res = (String) object;
-            log.info("下载模型:{}",res);
-            res = res.replace(queryPath, "");
-            if(res.contains(".json") ){
-                res = new File(res).getParentFile().getPath();
-            }
-            ShellUtil.yunDownload(res, path +queryPath + res);
-        }
-    }
-    public void downResources(Integer caseId,String urls) {
 
-        JSONArray jsonArray = JSONArray.parseArray(urls);
-        for (Object object : jsonArray) {
-            String res = (String) object;
-            downResource(caseId,res);
-        }
-    }
-    public void downResources(Integer caseId,JSONArray urls) {
-        for (Object object : urls) {
-            String res = (String) object;
-            downResource(caseId,res);
-        }
-    }
-
-    public void downResource(Integer caseId,String url) {
+    public void downResource(String url,String path) {
+       log.info("下载文件:{},{}",url,path);
         if(StringUtils.isBlank(url) ){
             return;
         }
         url = url.replace(queryPath, "");
         if( !uploadToOssUtil.existKey(url)){
-            log.info("downResource文件不存在:{},{}",caseId,url);
+            log.info("downResource文件不存在:{},{}",url,path);
             return;
         }
-        String path = String.format(FilePath.OFFLINE_OSS_PATH,caseId);
         ShellUtil.yunDownload(url,path+queryPath+url);
     }
 
-    public void downWordByTemplate(Integer caseId,XWPFTemplate template,String name){
-        // 指定输出文件的路径
-        String outputPath = String.format(FilePath.OFFLINE_RESOURCE_PACKAGE_PATH,caseId) + name;
-        try {
-            FileOutputStream out = new FileOutputStream(outputPath);
-            template.write(out);
-            out.close();
-            log.info("文档已成功写入到: " + outputPath);
-        } catch (Exception e) {
-           log.info("写出文档失败:{},{}",caseId,name,e);
-        }
-    }
 
 
 

+ 61 - 48
src/main/java/com/fdkankan/fusion/down/FusionDownService.java

@@ -114,43 +114,54 @@ public class FusionDownService {
     public static String downProcessKey = "fusion:down:offline:process:fusionId:%s";
 
     @Async
-    public void downOffline(Integer fusionId){
-        String caseOffPath = null;
-        String zipName = null;
-        try {
-            String redisKey = String.format(downProcessKey, fusionId);
-            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;
-                }
+    public void asyncDownOffline(Integer fusionId){
+        String redisKey = String.format(downProcessKey, fusionId);
+        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;
             }
+        }
+        String timeKey = DateUtils.dateStr();
+        String caseOffPath =FilePath.OFFLINE_PACKAGE_PATH+timeKey+fusionId ;
+        String zipName = caseOffPath+".zip";
+        downOffline(fusionId,caseOffPath,zipName);
+    }
 
-            String timeKey = DateUtils.dateStr();
-            caseOffPath =FilePath.OFFLINE_PACKAGE_PATH+timeKey+fusionId ;
-
-            setRedisProcess(fusionId,0);
+    public void downOffline(Integer fusionId,String caseOffPath,String zipName){
+        try {
+            if(StringUtils.isNotBlank(zipName)){
+                setRedisProcess(fusionId,0);
+            }
             //复制前端资源
             cpIndexHtml(fusionId,caseOffPath);
-            setRedisProcess(fusionId,10);
+            if(StringUtils.isNotBlank(zipName)){
+                setRedisProcess(fusionId,10);
+            }
             //创建data.json并下载资源
             createDataJson(fusionId,caseOffPath+"/env/www");
             //打包zip
-            zipName = caseOffPath+".zip";
-            ShellUtil.zip(zipName,caseOffPath);
-            setRedisProcess(fusionId,70);
-            //上传oss
-            String ossUrl = zipName.replace("/mnt/", "");
-            ShellUtil.yunUpload(zipName,ossUrl);
-            ossUrl = queryPath + ossUrl;
-            setRedisProcess(fusionId,100,ossUrl);
+            if(StringUtils.isNotBlank(zipName)){
+                setRedisProcess(fusionId,70);
+            }
+            if(StringUtils.isNotBlank(zipName)){
+               ShellUtil.zip(zipName,caseOffPath);
+               String ossUrl = zipName.replace("/mnt/", "");
+               ShellUtil.yunUpload(zipName,ossUrl);
+               ossUrl = queryPath + ossUrl;
+               setRedisProcess(fusionId,100,ossUrl);
+            }
         }catch (Exception e){
             log.info("down-offline-error:{}",fusionId,e);
-            setRedisProcess(fusionId,0,null,1003);
+            if(StringUtils.isNotBlank(zipName)){
+                setRedisProcess(fusionId,0,null,1003);
+            }
         }finally {
-            delFile(caseOffPath);
-            delFile(zipName);
+            if(StringUtils.isNotBlank(zipName)){
+                delFile(caseOffPath);
+                delFile(zipName);
+            }
         }
 
     }
@@ -197,9 +208,6 @@ public class FusionDownService {
         CaseFusion caseFusion = caseFusionService.getById(fusionId);
         jsonObject.put(basePath+caseFusionInfo+fusionId, ResultData.ok(caseFusion));
 
-        List<FusionNumVo> sceneListVo = caseFusionService.getSceneListVo(fusionId);
-        jsonObject.put(basePath+caseFusionList+fusionId, ResultData.ok(sceneListVo));
-
         List<MapConfig> list = mapConfigService.list();
         jsonObject.put(basePath+mapConfig, ResultData.ok(list));
 
@@ -209,16 +217,16 @@ public class FusionDownService {
             downResource(caseSetting.getBack(),caseOffPath);
             downResource(caseSetting.getCover(),caseOffPath);
         }
-
+        HashMap<String,String> repMap = new HashMap<>();
         jsonObject.put(basePath+fusionMeter+fusionId, ResultData.ok(fusionMeterService.getListByFusionId(fusionId,null)));
 
         List<FusionNumVo> fusionNumVos = caseFusionService.getSceneListVo(fusionId);
         for (FusionNumVo fusionNumVo : fusionNumVos) {
             SceneVo sceneData = fusionNumVo.getSceneData();
             //下载模型
-            sceneData.setCutModelPath(sceneData.getCutModelPath().replace("/oss/","/swkk/"+sceneData.getNum() +"/wwwroot/"));
-            sceneData.setSceneJsonPath(sceneData.getSceneJsonPath().replace("/oss/","/swkk/"+sceneData.getNum() +"/wwwroot/"));
-            sceneData.setSurveillancePath(sceneData.getSurveillancePath().replace("/oss/","/swkk/"+sceneData.getNum() +"/wwwroot/"));
+            repMap.put(sceneData.getCutModelPath(),sceneData.getCutModelPath().replace("/oss/","/swkk/"+sceneData.getNum() +"/wwwroot/"));
+            repMap.put(sceneData.getSceneJsonPath(),sceneData.getSceneJsonPath().replace("/oss/","/swkk/"+sceneData.getNum() +"/wwwroot/"));
+            repMap.put(sceneData.getSurveillancePath(),sceneData.getSurveillancePath().replace("/oss/","/swkk/"+sceneData.getNum() +"/wwwroot/"));
 
             if(StringUtils.isNotBlank(sceneData.getModelGlbUrl())){
                 downModel(sceneData.getModelGlbUrl(),caseOffPath);
@@ -257,7 +265,7 @@ public class FusionDownService {
                 }
             }
         }
-        jsonObject.put(basePath+caseFusionInfo+fusionId, ResultData.ok(fusionNumVos));
+        jsonObject.put(basePath+caseFusionList+fusionId, ResultData.ok(fusionNumVos));
 
         List<HotIcon> hotIconList = hotIconService.getListByFusionId(fusionId);
         for (HotIcon hotIcon : hotIconList) {
@@ -290,8 +298,16 @@ public class FusionDownService {
         }
 
         List<CaseAnimation> listByFusionId = caseAnimationService.getListByFusionId(fusionId);
+        for (CaseAnimation caseAnimation : listByFusionId) {
+            downModelObj(caseAnimation.getUrl(),caseOffPath);
+        }
         jsonObject.put(basePath+caseAnimationUrl+fusionId, ResultData.ok(listByFusionId));
-
+        String jsonString = jsonObject.toJSONString();
+        if(!repMap.isEmpty()){
+            for (String key : repMap.keySet()) {
+                jsonString = jsonString.replace(key,repMap.get(key));
+            }
+        }
 
         FileUtil.writeString(jsonObject.toJSONString(), caseOffPath+"/package/"+jsonDataName,"UTF-8");
 
@@ -392,6 +408,15 @@ public class FusionDownService {
             ShellUtil.yunDownload(res, path +queryPath + res);
         }
     }
+    private void downModelObj(String res, String path) {
+        log.info("下载模型:{}",res);
+        res = res.replace(queryPath, "");
+        if(res.contains(".json") ){
+            res = new File(res).getParentFile().getPath();
+        }
+        ShellUtil.yunDownload(res, path +queryPath + res);
+    }
+
     public void downResources(String urls,String offPath) {
         JSONArray jsonArray = JSONArray.parseArray(urls);
         for (Object object : jsonArray) {
@@ -412,18 +437,6 @@ public class FusionDownService {
         ShellUtil.yunDownload(url,path+queryPath+url);
     }
 
-    public void downWordByTemplate(Integer caseId,XWPFTemplate template,String name){
-        // 指定输出文件的路径
-        String outputPath = String.format(FilePath.OFFLINE_RESOURCE_PACKAGE_PATH,caseId) + name;
-        try {
-            FileOutputStream out = new FileOutputStream(outputPath);
-            template.write(out);
-            out.close();
-            log.info("文档已成功写入到: " + outputPath);
-        } catch (Exception e) {
-           log.info("写出文档失败:{},{}",caseId,name,e);
-        }
-    }
 
 
 

+ 3 - 0
src/main/java/com/fdkankan/fusion/entity/SceneDownLog.java

@@ -112,6 +112,9 @@ public class SceneDownLog implements Serializable {
     @TableField("update_time")
     private Date updateTime;
 
+    @TableField("type")
+    private String type;
+
 
     public String getDeptLevelStr() {
         if(deptLevel != null){

+ 2 - 2
src/main/java/com/fdkankan/fusion/service/ICaseService.java

@@ -40,11 +40,11 @@ public interface ICaseService extends IService<CaseEntity> {
 
     String getDeptId(Integer caseId);
 
-    CaseVo getInfo(Integer caseId);
+    CaseVo getInfo(Integer caseId,Boolean isLogin);
 
     void addFusionIds(CaseParam param);
 
     CaseEntity getKnumber(String kNumber);
 
-    List<FusionAndSceneVo> getFusionAndScene(Integer caseId, String type);
+    List<FusionAndSceneVo> getFusionAndScene(Integer caseId, String type,Boolean isLogin);
 }

+ 11 - 4
src/main/java/com/fdkankan/fusion/service/impl/CaseServiceImpl.java

@@ -203,7 +203,7 @@ public class CaseServiceImpl extends ServiceImpl<ICaseMapper, CaseEntity> implem
     IJyUserService jyUserService;
 
     @Override
-    public CaseVo getInfo(Integer caseId) {
+    public CaseVo getInfo(Integer caseId,Boolean isLogin) {
         CaseEntity caseEntity = this.getById(caseId);
         if(caseEntity == null){
             throw  new BusinessException(ResultCode.CASE_NOT_EXITS);
@@ -218,6 +218,9 @@ public class CaseServiceImpl extends ServiceImpl<ICaseMapper, CaseEntity> implem
             caseVo.setTmProject(tmProject);
             caseVo.setCaseTitle(tmProject.getProjectName());
         }
+        if(!isLogin){
+            return caseVo;
+        }
 
         if(!StpUtil.isLogin()){
             return caseVo;
@@ -291,7 +294,7 @@ public class CaseServiceImpl extends ServiceImpl<ICaseMapper, CaseEntity> implem
     }
 
     @Override
-    public  List<FusionAndSceneVo> getFusionAndScene(Integer caseId, String type) {
+    public  List<FusionAndSceneVo> getFusionAndScene(Integer caseId, String type,Boolean isLogin) {
         if(caseId == null || StringUtils.isBlank(type)){
             throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
         }
@@ -303,7 +306,9 @@ public class CaseServiceImpl extends ServiceImpl<ICaseMapper, CaseEntity> implem
                 vo.setTitle(caseFusion.getFusionTitle());
                 vo.setFusionId(caseFusion.getFusionId());
                 vo.setType("fusion");
-                fdService.getAuth(vo,caseFusion.getFusionId().toString(),vo.getType(),StpUtil.getTokenValue());
+                if(isLogin){
+                    fdService.getAuth(vo,caseFusion.getFusionId().toString(),vo.getType(),StpUtil.getTokenValue());
+                }
                 voList.add(vo);
             }
             return voList;
@@ -327,7 +332,9 @@ public class CaseServiceImpl extends ServiceImpl<ICaseMapper, CaseEntity> implem
                 vo.setNum(scenePlus.getNum());
                 vo.setSceneType(caseNum.getNumType());
                 vo.setType("scene");
-                fdService.getAuth(vo,scenePlus.getNum(),vo.getType(),StpUtil.getTokenValue());
+                if(isLogin){
+                    fdService.getAuth(vo,scenePlus.getNum(),vo.getType(),StpUtil.getTokenValue());
+                }
                 voList.add(vo);
             }
             return voList;

+ 16 - 15
src/main/java/com/fdkankan/fusion/service/impl/DownService.java

@@ -144,25 +144,26 @@ public class DownService implements IDownService {
 
     private void saveLog(ScenePlus scenePlus,Integer sceneVersion,String type){
         //离线包调用,不记录场景下载日志
-        if("offline".equals(type)){
-            return;
-        }
-        String userName =  (String) StpUtil.getExtra("userName");
-        String nickName =  (String) StpUtil.getExtra("nickName");
-        String deptId = tmDepartmentService.getDeptId();
-        TmDepartment tmDepartment = tmDepartmentService.getById(deptId);
-        Camera camera = cameraService.getByCameraId(scenePlus.getCameraId());
         SceneDownLog sceneDownloadLogEntity = new SceneDownLog();
+
+        if(!"offline".equals(type)){
+            String userName =  (String) StpUtil.getExtra("userName");
+            String nickName =  (String) StpUtil.getExtra("nickName");
+            String deptId = tmDepartmentService.getDeptId();
+            TmDepartment tmDepartment = tmDepartmentService.getById(deptId);
+            Camera camera = cameraService.getByCameraId(scenePlus.getCameraId());
+            sceneDownloadLogEntity.setSceneTitle(scenePlus.getTitle());
+            sceneDownloadLogEntity.setUserName(userName);
+            sceneDownloadLogEntity.setNickName(nickName);
+            sceneDownloadLogEntity.setSnCode(camera.getSnCode());
+            sceneDownloadLogEntity.setDeptName(tmDepartment.getName());
+            sceneDownloadLogEntity.setDeptLevel(tmDepartment.getDeptType());
+            sceneDownloadLogEntity.setDeptId(deptId);
+        }
         sceneDownloadLogEntity.setSceneNum(scenePlus.getNum());
-        sceneDownloadLogEntity.setSceneTitle(scenePlus.getTitle());
-        sceneDownloadLogEntity.setUserName(userName);
-        sceneDownloadLogEntity.setNickName(nickName);
-        sceneDownloadLogEntity.setSnCode(camera.getSnCode());
-        sceneDownloadLogEntity.setDeptName(tmDepartment.getName());
-        sceneDownloadLogEntity.setDeptLevel(tmDepartment.getDeptType());
-        sceneDownloadLogEntity.setDeptId(deptId);
         sceneDownloadLogEntity.setStatus(0);
         sceneDownloadLogEntity.setVersion(sceneVersion);
+        sceneDownloadLogEntity.setType(type);
         sceneDownloadLogService.save(sceneDownloadLogEntity);
     }