From 82e4e5f6129be2e691138cd8b8ea3262e64943af Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Thu, 04 Jul 2024 15:54:19 +0800
Subject: [PATCH] 修改播放地址

---
 src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java |  359 +++++++++++++++++++++++++++++++----------------------------
 1 files changed, 186 insertions(+), 173 deletions(-)

diff --git a/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java b/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java
index 27e1e77..7967e94 100644
--- a/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java
+++ b/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java
@@ -344,7 +344,7 @@
         if (file != null) {
             builder.fileName(file.getName())
                     .filePath(file.getPath())
-                    .examine(1)
+                    .examine(0)
                     .fingerprint(file.getFingerprint())
                     .objectKey(file.getObjectKey())
                     .subFileType(file.getSubFileType())
@@ -454,171 +454,184 @@
     }
 
 
-//    public void updateMediaFileNames(String jobId) {
-//        // 查询符合条件的数据
-//        List<MediaFileEntity> mediaFiles = mapper.selectList(new LambdaQueryWrapper<MediaFileEntity>()
-//                        .eq(MediaFileEntity::getJobId, jobId)
-////                .eq(MediaFileMarkEntity::getIsadd, 0)
-//        );
-//
-//        // 筛选出name字段不包含'~'的数据
-//        List<MediaFileEntity> filteredFiles = mediaFiles.stream()
-//                .filter(file -> !file.getFileName().contains("~"))
-//                .toList();
-//        for (MediaFileEntity currentFile : filteredFiles) {
-//            String currentName = currentFile.getFileName();
-//            Map<String, Object> currentMetadata = JSON.parseObject(JSON.toJSONString(currentFile.getMetadata()), Map.class);
-//            Long currentCreatedTime = (Long) currentMetadata.get("createdTime");
-//            // 找到metadata中的createdTime小于当前数据的createdTime且最接近的那条数据
-//            Optional<MediaFileEntity> closestFileOpt = mediaFiles.stream()
-//                    .filter(file -> {
-//                        Map<String, Object> metadata = JSON.parseObject(JSON.toJSONString(file.getMetadata()), Map.class);
-//                        Long createdTime = (Long) metadata.get("createdTime");
-//                        String filename = file.getFileName();
-//                        return createdTime < currentCreatedTime && filename.contains("~");
-//                    })
-//                    .min((file1, file2) -> {
-//                        Map<String, Object> metadata1 = JSON.parseObject(JSON.toJSONString(file1.getMetadata()), Map.class);
-//                        Map<String, Object> metadata2 = JSON.parseObject(JSON.toJSONString(file2.getMetadata()), Map.class);
-//                        Long time1 = (Long) metadata1.get("createdTime");
-//                        Long time2 = (Long) metadata2.get("createdTime");
-//                        return Long.compare(currentCreatedTime - time1, currentCreatedTime - time2);
-//                    });
-//            if (closestFileOpt.isEmpty()) {
-//                // 找不到小于的文件,尝试找大于且最接近的文件
-//                closestFileOpt = mediaFiles.stream()
-//                        .filter(file -> {
-//                            Map<String, Object> metadata = JSON.parseObject(JSON.toJSONString(file.getMetadata()), Map.class);
-//                            Long createdTime = (Long) metadata.get("createdTime");
-//                            String filename = file.getFileName();
-//                            return createdTime > currentCreatedTime && filename.contains("~");
-//                        })
-//                        .min((file1, file2) -> {
-//                            Map<String, Object> metadata1 = JSON.parseObject(JSON.toJSONString(file1.getMetadata()), Map.class);
-//                            Map<String, Object> metadata2 = JSON.parseObject(JSON.toJSONString(file2.getMetadata()), Map.class);
-//                            Long time1 = (Long) metadata1.get("createdTime");
-//                            Long time2 = (Long) metadata2.get("createdTime");
-//                            return Long.compare(time1 - currentCreatedTime, time2 - currentCreatedTime);
-//                        });}
-//            if (closestFileOpt.isEmpty()) {
-//                throw new RuntimeException("当前图片无法绑定图斑");
-//            }
-//            // 提取并替换name字段
-//            closestFileOpt.ifPresent(closestFile -> {
-//                String closestName = closestFile.getFileName();
-//                int startIndex = closestName.indexOf("V");
-//                if (closestName.contains("W")) {
-//                    startIndex = closestName.indexOf("W");
-//                }
-//                if (closestName.contains("Z")) {
-//                    startIndex = closestName.indexOf("Z");
-//                }
-//                int endIndex = closestName.indexOf(".", startIndex);
-//                String replacement = closestName.substring(startIndex, endIndex);
-//                int currentStartIndex = currentName.indexOf("V");
-//                if (currentName.contains("W")) {
-//                    currentStartIndex = closestName.indexOf("W");
-//                }
-//                if (currentName.contains("Z")) {
-//                    currentStartIndex = closestName.indexOf("Z");
-//                }
-//                int currentEndIndex = currentName.indexOf(".", currentStartIndex);
-//                String newName = currentName.substring(0, currentStartIndex)
-//                        + replacement
-//                        + currentName.substring(currentEndIndex);
-//                currentFile.setFileName(newName);
-//                updateMediaById(currentFile.getId(), currentFile);
-//            });
-//        }
-//    }
-//
-//    @Override
-//    public void updateMarkMediaFileNames(String jobId) {
-//        try {
-//
-//
-//            // 查询符合条件的数据
-//            List<MediaFileMarkEntity> mediaFiles = markMapper.selectList(new LambdaQueryWrapper<MediaFileMarkEntity>()
-//                            .eq(MediaFileMarkEntity::getJobId, jobId)
-////                .eq(MediaFileMarkEntity::getIsadd, 0)
-//            );
-//
-//
-//            // 筛选出name字段不包含'~'的数据
-//            List<MediaFileMarkEntity> filteredFiles = mediaFiles.stream()
-//                    .filter(file -> !file.getFileName().contains("~"))
-//                    .toList();
-//
-//            for (MediaFileMarkEntity currentFile : filteredFiles) {
-//                String currentName = currentFile.getFileName();
-//                Map<String, Object> currentMetadata = JSON.parseObject(JSON.toJSONString(currentFile.getMetadata()), Map.class);
-//                Long currentCreatedTime = (Long) currentMetadata.get("createdTime");
-//                // 找到metadata中的createdTime小于当前数据的createdTime且最接近的那条数据
-//                Optional<MediaFileMarkEntity> closestFileOpt = mediaFiles.stream()
-//                        .filter(file -> {
-//                            Map<String, Object> metadata = JSON.parseObject(JSON.toJSONString(file.getMetadata()), Map.class);
-//                            Long createdTime = (Long) metadata.get("createdTime");
-//                            String filename = file.getFileName();
-//                            return createdTime < currentCreatedTime && filename.contains("~");
-//                        })
-//                        .min((file1, file2) -> {
-//                            Map<String, Object> metadata1 = JSON.parseObject(JSON.toJSONString(file1.getMetadata()), Map.class);
-//                            Map<String, Object> metadata2 = JSON.parseObject(JSON.toJSONString(file2.getMetadata()), Map.class);
-//                            Long time1 = (Long) metadata1.get("createdTime");
-//                            Long time2 = (Long) metadata2.get("createdTime");
-//                            return Long.compare(currentCreatedTime - time1, currentCreatedTime - time2);
-//                        });
-//                if (closestFileOpt.isEmpty()) {
-//                    // 找不到小于的文件,尝试找大于且最接近的文件
-//                    closestFileOpt = mediaFiles.stream()
-//                            .filter(file -> {
-//                                Map<String, Object> metadata = JSON.parseObject(JSON.toJSONString(file.getMetadata()), Map.class);
-//                                Long createdTime = (Long) metadata.get("createdTime");
-//                                String filename = file.getFileName();
-//                                return createdTime > currentCreatedTime && filename.contains("~");
-//                            })
-//                            .min((file1, file2) -> {
-//                                Map<String, Object> metadata1 = JSON.parseObject(JSON.toJSONString(file1.getMetadata()), Map.class);
-//                                Map<String, Object> metadata2 = JSON.parseObject(JSON.toJSONString(file2.getMetadata()), Map.class);
-//                                Long time1 = (Long) metadata1.get("createdTime");
-//                                Long time2 = (Long) metadata2.get("createdTime");
-//                                return Long.compare(time1 - currentCreatedTime, time2 - currentCreatedTime);
-//                            });
-//                }
-//                if (closestFileOpt.isEmpty()) {
-//                    throw new RuntimeException("没有符合时间的对象");
-//                }
-//                // 提取并替换name字段
-//                closestFileOpt.ifPresent(closestFile -> {
-//                    String closestName = closestFile.getFileName();
-//                    int startIndex = closestName.indexOf("V");
-//                    if (closestName.contains("W")) {
-//                        startIndex = closestName.indexOf("W");
-//                    }
-//                    if (closestName.contains("Z")) {
-//                        startIndex = closestName.indexOf("Z");
-//                    }
-//                    int endIndex = closestName.indexOf(".", startIndex);
-//                    String replacement = closestName.substring(startIndex, endIndex);
-//                    int currentStartIndex = currentName.indexOf("V");
-//                    if (currentName.contains("W")) {
-//                        currentStartIndex = closestName.indexOf("W");
-//                    }
-//                    if (currentName.contains("Z")) {
-//                        currentStartIndex = closestName.indexOf("Z");
-//                    }
-//                    int currentEndIndex = currentName.indexOf(".", currentStartIndex);
-//                    String newName = currentName.substring(0, currentStartIndex)
-//                            + replacement
-//                            + currentName.substring(currentEndIndex);
-//                    currentFile.setFileName(newName);
-//                    updateById(currentFile.getId(), currentFile);
-//                });
-//            }
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
+    public void updateMediaFileNames(String jobId) {
+        // 查询符合条件的数据
+        List<MediaFileEntity> mediaFiles = mapper.selectList(new LambdaQueryWrapper<MediaFileEntity>()
+                        .eq(MediaFileEntity::getJobId, jobId)
+//                .eq(MediaFileMarkEntity::getIsadd, 0)
+        );
+        boolean allContainTilde = mediaFiles.stream().allMatch(file -> file.getFileName().contains("~"));
+        boolean noneContainTilde = mediaFiles.stream().noneMatch(file -> file.getFileName().contains("~"));
+
+        // 如果所有 fileName 都包含 '~' 或者都不包含 '~',将 is_add 字段改为 1
+        if (allContainTilde || noneContainTilde) {
+            return;
+        }
+
+        // 筛选出name字段不包含'~'的数据
+        List<MediaFileEntity> filteredFiles = mediaFiles.stream()
+                .filter(file -> !file.getFileName().contains("~"))
+                .collect(Collectors.toList());
+        for (MediaFileEntity currentFile : filteredFiles) {
+            String currentName = currentFile.getFileName();
+            Map<String, Object> currentMetadata = JSON.parseObject(JSON.toJSONString(currentFile.getMetadata()), Map.class);
+            Long currentCreatedTime = (Long) currentMetadata.get("createdTime");
+            // 找到metadata中的createdTime小于当前数据的createdTime且最接近的那条数据
+            Optional<MediaFileEntity> closestFileOpt = mediaFiles.stream()
+                    .filter(file -> {
+                        Map<String, Object> metadata = JSON.parseObject(JSON.toJSONString(file.getMetadata()), Map.class);
+                        Long createdTime = (Long) metadata.get("createdTime");
+                        String filename = file.getFileName();
+                        return createdTime < currentCreatedTime && filename.contains("~");
+                    })
+                    .min((file1, file2) -> {
+                        Map<String, Object> metadata1 = JSON.parseObject(JSON.toJSONString(file1.getMetadata()), Map.class);
+                        Map<String, Object> metadata2 = JSON.parseObject(JSON.toJSONString(file2.getMetadata()), Map.class);
+                        Long time1 = (Long) metadata1.get("createdTime");
+                        Long time2 = (Long) metadata2.get("createdTime");
+                        return Long.compare(currentCreatedTime - time1, currentCreatedTime - time2);
+                    });
+            if (closestFileOpt.isEmpty()) {
+                // 找不到小于的文件,尝试找大于且最接近的文件
+                closestFileOpt = mediaFiles.stream()
+                        .filter(file -> {
+                            Map<String, Object> metadata = JSON.parseObject(JSON.toJSONString(file.getMetadata()), Map.class);
+                            Long createdTime = (Long) metadata.get("createdTime");
+                            String filename = file.getFileName();
+                            return createdTime > currentCreatedTime && filename.contains("~");
+                        })
+                        .min((file1, file2) -> {
+                            Map<String, Object> metadata1 = JSON.parseObject(JSON.toJSONString(file1.getMetadata()), Map.class);
+                            Map<String, Object> metadata2 = JSON.parseObject(JSON.toJSONString(file2.getMetadata()), Map.class);
+                            Long time1 = (Long) metadata1.get("createdTime");
+                            Long time2 = (Long) metadata2.get("createdTime");
+                            return Long.compare(time1 - currentCreatedTime, time2 - currentCreatedTime);
+                        });
+            }
+            // 提取并替换name字段
+            closestFileOpt.ifPresent(closestFile -> {
+                String closestName = closestFile.getFileName();
+                int startIndex = closestName.indexOf("V");
+                if (closestName.contains("W")) {
+                    startIndex = closestName.indexOf("W");
+                }
+                if (closestName.contains("Z")) {
+                    startIndex = closestName.indexOf("Z");
+                }
+                int endIndex = closestName.indexOf(".", startIndex);
+                String replacement = closestName.substring(startIndex, endIndex);
+                int currentStartIndex = currentName.indexOf("V");
+                if (currentName.contains("W")) {
+                    currentStartIndex = closestName.indexOf("W");
+                }
+                if (currentName.contains("Z")) {
+                    currentStartIndex = closestName.indexOf("Z");
+                }
+                int currentEndIndex = currentName.indexOf(".", currentStartIndex);
+                String newName = currentName.substring(0, currentStartIndex)
+                        + replacement
+                        + currentName.substring(currentEndIndex);
+                currentFile.setFileName(newName);
+                updateMediaById(currentFile.getId(), currentFile);
+            });
+        }
+    }
+
+    @Override
+    public void updateMarkMediaFileNames(String jobId) {
+        try {
+
+
+            // 查询符合条件的数据
+            List<MediaFileMarkEntity> mediaFiles = markMapper.selectList(new LambdaQueryWrapper<MediaFileMarkEntity>()
+                            .eq(MediaFileMarkEntity::getJobId, jobId)
+//                .eq(MediaFileMarkEntity::getIsadd, 0)
+            );
+            // 判断所有 fileName 是否都包含 '~' 或者都不包含 '~'
+            boolean allContainTilde = mediaFiles.stream().allMatch(file -> file.getFileName().contains("~"));
+            boolean noneContainTilde = mediaFiles.stream().noneMatch(file -> file.getFileName().contains("~"));
+
+            // 如果所有 fileName 都包含 '~' 或者都不包含 '~',将 is_add 字段改为 1
+            if (allContainTilde || noneContainTilde) {
+                mediaFiles.forEach(file -> {
+                    file.setIsadd(1);
+                    updateById(file.getId(), file);
+                });
+                    return;
+
+            }
+            // 筛选出name字段不包含'~'的数据
+            List<MediaFileMarkEntity> filteredFiles = mediaFiles.stream()
+                    .filter(file -> !file.getFileName().contains("~"))
+                    .collect(Collectors.toList());
+
+            for (MediaFileMarkEntity currentFile : filteredFiles) {
+                String currentName = currentFile.getFileName();
+                Map<String, Object> currentMetadata = JSON.parseObject(JSON.toJSONString(currentFile.getMetadata()), Map.class);
+                Long currentCreatedTime = (Long) currentMetadata.get("createdTime");
+                // 找到metadata中的createdTime小于当前数据的createdTime且最接近的那条数据
+                Optional<MediaFileMarkEntity> closestFileOpt = mediaFiles.stream()
+                        .filter(file -> {
+                            Map<String, Object> metadata = JSON.parseObject(JSON.toJSONString(file.getMetadata()), Map.class);
+                            Long createdTime = (Long) metadata.get("createdTime");
+                            String filename = file.getFileName();
+                            return createdTime < currentCreatedTime && filename.contains("~");
+                        })
+                        .min((file1, file2) -> {
+                            Map<String, Object> metadata1 = JSON.parseObject(JSON.toJSONString(file1.getMetadata()), Map.class);
+                            Map<String, Object> metadata2 = JSON.parseObject(JSON.toJSONString(file2.getMetadata()), Map.class);
+                            Long time1 = (Long) metadata1.get("createdTime");
+                            Long time2 = (Long) metadata2.get("createdTime");
+                            return Long.compare(currentCreatedTime - time1, currentCreatedTime - time2);
+                        });
+                if (closestFileOpt.isEmpty()) {
+                    // 找不到小于的文件,尝试找大于且最接近的文件
+                    closestFileOpt = mediaFiles.stream()
+                            .filter(file -> {
+                                Map<String, Object> metadata = JSON.parseObject(JSON.toJSONString(file.getMetadata()), Map.class);
+                                Long createdTime = (Long) metadata.get("createdTime");
+                                String filename = file.getFileName();
+                                return createdTime > currentCreatedTime && filename.contains("~");
+                            })
+                            .min((file1, file2) -> {
+                                Map<String, Object> metadata1 = JSON.parseObject(JSON.toJSONString(file1.getMetadata()), Map.class);
+                                Map<String, Object> metadata2 = JSON.parseObject(JSON.toJSONString(file2.getMetadata()), Map.class);
+                                Long time1 = (Long) metadata1.get("createdTime");
+                                Long time2 = (Long) metadata2.get("createdTime");
+                                return Long.compare(time1 - currentCreatedTime, time2 - currentCreatedTime);
+                            });
+                }
+                // 提取并替换name字段
+                closestFileOpt.ifPresent(closestFile -> {
+                    String closestName = closestFile.getFileName();
+                    int startIndex = closestName.indexOf("V");
+                    if (closestName.contains("W")) {
+                        startIndex = closestName.indexOf("W");
+                    }
+                    if (closestName.contains("Z")) {
+                        startIndex = closestName.indexOf("Z");
+                    }
+                    int endIndex = closestName.indexOf(".", startIndex);
+                    String replacement = closestName.substring(startIndex, endIndex);
+                    int currentStartIndex = currentName.indexOf("V");
+                    if (currentName.contains("W")) {
+                        currentStartIndex = closestName.indexOf("W");
+                    }
+                    if (currentName.contains("Z")) {
+                        currentStartIndex = closestName.indexOf("Z");
+                    }
+                    int currentEndIndex = currentName.indexOf(".", currentStartIndex);
+                    String newName = currentName.substring(0, currentStartIndex)
+                            + replacement
+                            + currentName.substring(currentEndIndex);
+                    currentFile.setFileName(newName);
+                    updateById(currentFile.getId(), currentFile);
+                });
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
     public void updateById(Integer id, MediaFileMarkEntity entity) {
         entity.setIsadd(1);
@@ -633,13 +646,13 @@
         mapper.update(entity, updateWrapper);
     }
 
-//    public void getNoaddFile() {
-//        List<MediaFileMarkEntity> markEntities = markMapper.selectList(new LambdaQueryWrapper<MediaFileMarkEntity>().eq(MediaFileMarkEntity::getIsadd, 0));
-//        for (MediaFileMarkEntity mark : markEntities) {
-//            updateMarkMediaFileNames(mark.getJobId());
-//            updateMediaFileNames(mark.getJobId());
-//        }
-//    }
+    public void getNoaddFile() {
+        List<MediaFileMarkEntity> markEntities = markMapper.selectList(new LambdaQueryWrapper<MediaFileMarkEntity>().eq(MediaFileMarkEntity::getIsadd, 0));
+        for (MediaFileMarkEntity mark : markEntities) {
+            updateMarkMediaFileNames(mark.getJobId());
+            updateMediaFileNames(mark.getJobId());
+        }
+    }
 
 }
 

--
Gitblit v1.9.3