Переглянути джерело

Merge remote-tracking branch 'origin/master'

dsx 1 рік тому
батько
коміт
c738fd7399

+ 5 - 0
src/main/java/com/fdkankan/download/controller/BatchDownloadController.java

@@ -1,5 +1,7 @@
 package com.fdkankan.download.controller;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.TimeInterval;
 import cn.hutool.system.HostInfo;
 import cn.hutool.system.SystemUtil;
 import cn.hutool.system.oshi.OshiUtil;
@@ -62,7 +64,10 @@ public class BatchDownloadController {
 
     @GetMapping("testlaser")
     public ResultData testlaser(String num) throws Exception {
+        TimeInterval timer = DateUtil.timer();
         laserService.downloadHandler(num);
+        log.info("激光生成时间耗时, num:{}, time:{}", num, timer.intervalSecond());
+
         return ResultData.ok(1);
 //        return ResultData.ok(snService.list());
     }

+ 6 - 1
src/main/java/com/fdkankan/download/service/impl/DownloadServiceImpl.java

@@ -27,6 +27,7 @@ import com.fdkankan.download.entity.ScenePlusExt;
 import com.fdkankan.download.service.IDownloadService;
 import com.fdkankan.download.service.IScenePlusExtService;
 import com.fdkankan.download.service.IScenePlusService;
+import com.fdkankan.download.util.DownloadUtil;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
 import com.google.common.collect.Lists;
@@ -427,7 +428,11 @@ public class DownloadServiceImpl implements IDownloadService {
         if(!file.getParentFile().exists()){
             file.getParentFile().mkdirs();
         }
-        HttpUtil.downloadFile(url, path);
+        try {
+            DownloadUtil.downFile(url,path);
+        } catch (Exception e) {
+            log.info("下载文件报错,url{},path:{}",url, path);
+        }
     }
 
     private void zipLocalFiles(String num, String version) throws Exception{

+ 25 - 16
src/main/java/com/fdkankan/download/service/impl/LaserService.java

@@ -22,6 +22,7 @@ import com.fdkankan.download.httpclient.HttpClient;
 import com.fdkankan.download.service.IDownloadService;
 import com.fdkankan.download.service.ILaserService;
 import com.fdkankan.download.service.IScenePlusService;
+import com.fdkankan.download.util.DownloadUtil;
 import com.fdkankan.download.util.ImgUtil;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import jodd.util.SystemUtil;
@@ -187,11 +188,9 @@ public class LaserService  implements ILaserService {
                     FileWriter fileWriter=new FileWriter(copyPath+"start-browser.bat");
                     fileWriter.write(bat.replaceAll("@sceneCode@",num),false);
                 }
-                String target=num + "_laser.zip";
-                File file=offlineZip(num, path, target);
                 String zipPath = String.format(this.zipLocalFormat, DateExtUtil.format(new Date(), DateExtUtil.dateStyle6),num + "_laser");
-                FileUtil.move(file,new File(zipPath),true);
-                log.info("生成完成");
+                File file=offlineZip(path,zipPath);
+                log.info("生成完成路径{}",file.getAbsoluteFile());
                 return zipPath;
             }
         }catch (Exception e){
@@ -202,25 +201,35 @@ public class LaserService  implements ILaserService {
         }
         return "";
     }
+    public final static String ZIP_PATH = "cd @path && cp -f @bashOffline . && zip -u -r bashOffline.zip start-browser.bat www/ && mv  -f bashOffline.zip @target";
+
     @SneakyThrows
-    public File offlineZip(String sceneCode, String path, String target) {
+    public File offlineZip( String path,String moveZipPath) {
         String bashOfflinePath = laserschool + "bashOffline.zip";
-        File file = new File(path + File.separator + "bashOffline.zip");
-        FileUtil.copy(new File(bashOfflinePath), file, true);
-        ZipParameters zipParameters = new ZipParameters();
-        zipParameters.setOverrideExistingFilesInZip(false);
-        ZipFile zipFile = new ZipFile(file);
-        zipFile.setCharset(Charset.forName("GBK"));
-        zipFile.removeFile("www/offline.html");
-        zipFile.addFolder(new File(path + File.separator + "www"), zipParameters);
-        zipFile.addFile(new File(path + File.separator + "start-browser.bat"));
-        return FileUtil.rename(zipFile.getFile(),target, true);
+        File file = new File(moveZipPath);
+        if(!file.getParentFile().exists()){
+            file.getParentFile().mkdirs();
+        }
+        String zipCmd = ZIP_PATH;
+        zipCmd = zipCmd.replace("@bashOffline", bashOfflinePath);
+        zipCmd = zipCmd.replace("@target", moveZipPath);
+        zipCmd = zipCmd.replace("@path", path);
+        CmdUtils.callLineSh(zipCmd);
+        if(!FileUtil.exist(moveZipPath)){
+            throw new RuntimeException("打包失败");
+        }
+        return FileUtil.file(moveZipPath);
+
     }
     public void downloadFile(String url, String path){
         File file = new File(path);
         if(!file.getParentFile().exists()){
             file.getParentFile().mkdirs();
         }
-        HttpUtil.downloadFile(url,  FileUtil.file(path));
+        try {
+            DownloadUtil.downFile(url,path);
+        } catch (Exception e) {
+            log.info("下载文件报错,url{},path:{}",url, path);
+        }
     }
 }

+ 16 - 0
src/main/java/com/fdkankan/download/util/DownloadUtil.java

@@ -0,0 +1,16 @@
+package com.fdkankan.download.util;
+
+import com.fdkankan.common.util.CmdUtils;
+
+/**
+ * @author Xiewj
+ * @date 2024/1/12
+ */
+public class DownloadUtil {
+    public final static String AXEL_CMD = "axel -o @out -q @url";
+
+    public static void downFile(String url, String path) throws Exception {
+        String cmd = AXEL_CMD.replace("@out",path).replace("@url",url);
+        CmdUtils.callLineSh(cmd);
+    }
+}

+ 1 - 1
src/main/resources/application-test.yml

@@ -89,7 +89,7 @@ zip:
 path:
   v4school: /mnt/scene_download_statics/v4local/
   source-local: /home/backend/downloads/scenes/%s/%s
-  zip-local: /home/backend/downloads/scenes/%s.zip
+  zip-local: /home/backend/downloads/scenes/%s/%s.zip
   zip-root: wwwroot/
   zip-oss: downloads/scenes/%s.zip
   laserschool: /mnt/fdkk_laser/uploadPath/offlineGenerate/