Browse Source

目标物文件下载

root 2 năm trước cách đây
mục cha
commit
1b6517aede

+ 29 - 0
api-common/src/main/java/api/common/util/FileUtil.java

@@ -17,6 +17,35 @@ import java.util.*;
 
 public class FileUtil {
 
+    /**
+     * 获取所有同一类型的文件列表。
+     *
+     * @param rootPath 文件 File 路径。
+     * @param suffix   文件后缀类型。
+     */
+    @SneakyThrows
+    public static List<String> listAbsolutePathByFiletype(String rootPath, String suffix) {
+        List<String> result = new LinkedList<>();
+        File rootFile = new File(rootPath);
+        //1 判断文件是否存在
+        if (!rootFile.exists()) {
+            throw new RuntimeException("FileUtil--listAbsolutePathByFiletype 文件 " + rootPath + " 不存在!");
+        }
+        //2 判断是否是文件
+        if (rootFile.isFile() && rootFile.getName().equals(suffix)) {
+            return new ArrayList<>(Collections.singletonList(rootPath));
+        }
+        //3 判断是否是目录
+        if (rootFile.isDirectory()) {
+            File[] children = rootFile.listFiles();
+            if (children != null) {
+                for (File child : children) {
+                    result.addAll(listAbsolutePathByFiletype(child.getAbsolutePath(), suffix));
+                }
+            }
+        }
+        return result;
+    }
 
 
     /**

+ 7 - 3
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/manager/TaskManager.java

@@ -131,9 +131,14 @@ public class TaskManager {
                     taskMapper.updateSuccessStateWithStopTime(taskId, state, TimeUtil.getNowForMysql());
                     // 创建视频和生成
                     //1 获取两个 csv 的目录,和 xodr 和 osgb 三个路径
-
+                    String csvDirectory = linuxTempPath + "video/" + projectId + "/" + taskId + "/";
+                    String xodrPath = FileUtil.listAbsolutePathByFiletype(csvDirectory, ".xodr").get(0);
+                    String osgbPath = FileUtil.listAbsolutePathByFiletype(csvDirectory, ".osgb").get(0);
+                    String xoscPath = "";
+//                    generateService.generateXosc;
+                    //2 根据获得的 xoscPath 调用 linux 命令生成视频
+                    String cmd = LinuxUtil.execute("cmd");
                     // 根据 task 对应的场景的 xodr 文件
-                    String projectRunningKey = redisPrefix.getProjectRunningKey();
                     //2 输入到工具类中获取到图片
                     //3 将图片生成视频
                     //3 将视频上传到 minio
@@ -166,7 +171,6 @@ public class TaskManager {
     }
 
 
-
     public void prepareScore(String projectRunningKey) {
         stringRedisTemplate.delete(projectRunningKey);
     }

+ 4 - 3
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/service/ProjectService.java

@@ -222,17 +222,18 @@ public class ProjectService {
                 String scenarioOdr = scenePO.getScenarioOdr();
                 String scenarioOsgb = scenePO.getScenarioOsgb();
                 String[] splitXodr = scenarioOdr.split("/");
+                String xodrName = splitXodr[splitXodr.length - 1];
                 String[] splitOsgb = scenarioOsgb.split("/");
+                String osgbName = splitOsgb[splitOsgb.length - 1];
                 try {
-                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOdr,linuxTempPath +scenarioOdr);
-                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOsgb,linuxTempPath +scenarioOsgb);
+                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOdr, linuxTempPath + "video/" + projectId + "/" + taskId + "/" + xodrName);
+                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOdr, linuxTempPath + "video/" + projectId + "/" + taskId + "/" + osgbName);
                 } catch (IOException | ServerException | InsufficientDataException | ErrorResponseException |
                          NoSuchAlgorithmException | InvalidKeyException | InvalidResponseException |
                          XmlParserException | InternalException e) {
                     throw new RuntimeException(e);
                 }
 
-
                 // 组装 task 消息
                 TaskTO taskTO = TaskTO.builder()
                         .info(InfoTO.builder()