rain
2024-07-02 82a90f791678dddbc6e1b98ee9e8028b61a38dfe
src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java
@@ -454,171 +454,171 @@
    }
    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)
//        );
//
//        // 筛选出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 updateById(Integer id, MediaFileMarkEntity entity) {
        entity.setIsadd(1);
@@ -633,13 +633,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());
//        }
//    }
}