diff --git a/java/src/main/java/com/yfd/platform/modules/experimentalData/service/impl/TsFilesServiceImpl.java b/java/src/main/java/com/yfd/platform/modules/experimentalData/service/impl/TsFilesServiceImpl.java index 4362a2a..86c95bc 100644 --- a/java/src/main/java/com/yfd/platform/modules/experimentalData/service/impl/TsFilesServiceImpl.java +++ b/java/src/main/java/com/yfd/platform/modules/experimentalData/service/impl/TsFilesServiceImpl.java @@ -70,8 +70,6 @@ import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; - -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.Async; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -220,11 +218,6 @@ public class TsFilesServiceImpl extends ServiceImpl impl queryWrapper.eq("parent_id", "00"); } } - -// // 无ID时:childNode=1则查根目录,childNode=0查全表 -// if (childNode != null && childNode.equals("1")) { -// queryWrapper.eq("parent_id", "00"); -// } } // queryWrapper.isNotNull("work_path"); @@ -262,8 +255,7 @@ public class TsFilesServiceImpl extends ServiceImpl impl if (tsFiles.getUpdateTime() == null) { tsFiles.setUpdateTime(tsFiles.getUploadTime()); } -// String ProcessingPath = processingPath(tsFiles.getWorkPath(), nodeId); -// tsFiles.setWorkPath(ProcessingPath); + } @@ -1670,17 +1662,6 @@ public class TsFilesServiceImpl extends ServiceImpl impl } } - /** - * 生成压缩文件路径(去除源文件扩展名) - */ - private Path getCompressedFilePath(Path sourcePath, String extension) { - String fileName = sourcePath.getFileName().toString(); - String baseName = fileName.contains(".") - ? fileName.substring(0, fileName.lastIndexOf('.')) - : fileName; - return sourcePath.resolveSibling(baseName + "." + extension); - } - // ================== TAR格式压缩实现 ================== @@ -4395,13 +4376,6 @@ public class TsFilesServiceImpl extends ServiceImpl impl return path.endsWith("/") ? path : path + "/"; } - /** - * 获取当前用户(封装重复逻辑) - */ - private LoginUser getCurrentUser() { - return (LoginUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - } - /** * 关键安全校验 */ @@ -4439,7 +4413,6 @@ public class TsFilesServiceImpl extends ServiceImpl impl queryWrapper.eq("task_id", taskId); } queryWrapper.isNotNull("work_path").ne("work_path", ""); -// queryWrapper.eq("parent_id", "00"); List allNodes = tsFilesMapper.selectList(queryWrapper); @@ -4620,14 +4593,6 @@ public class TsFilesServiceImpl extends ServiceImpl impl } } // 设置路径字段 -// if (isLocal) { -// String ProcessingPath = processingPath(node.getWorkPath(), node.getNodeId()); -// dto.setPath(ProcessingPath); -// } else { -// String ProcessingPath = processingPath(node.getBackupPath(), node.getNodeId()); -// dto.setPath(ProcessingPath); -// } - // 设置路径字段 if (isLocal) { String ProcessingPath = node.getWorkPath(); dto.setPath(ProcessingPath); @@ -4642,29 +4607,29 @@ public class TsFilesServiceImpl extends ServiceImpl impl return dto; } - public String processingPath(String Path, String nodeId) { - String newWorkPath = ""; - if (Path == null || nodeId == null) { - return newWorkPath; - } - // 获取原始路径和 nodeId - String workPath1 = Path; - // 拼接需要去掉的部分 - String toRemove = File.separator + nodeId; - // 将路径分隔符统一为 "/" - String standardizedWorkPath = workPath1.replace("\\", "/"); - String standardizedToRemove = toRemove.replace("\\", "/"); - // 检查 standardizedWorkPath 是否包含 standardizedToRemove - if (standardizedWorkPath.contains(standardizedToRemove)) { - // 去掉目标部分 - newWorkPath = standardizedWorkPath.replace(standardizedToRemove, ""); - // 确保路径最后保留一个 '/' - if (!newWorkPath.endsWith("/")) { - newWorkPath += "/"; - } - } - return newWorkPath; - } +// public String processingPath(String Path, String nodeId) { +// String newWorkPath = ""; +// if (Path == null || nodeId == null) { +// return newWorkPath; +// } +// // 获取原始路径和 nodeId +// String workPath1 = Path; +// // 拼接需要去掉的部分 +// String toRemove = File.separator + nodeId; +// // 将路径分隔符统一为 "/" +// String standardizedWorkPath = workPath1.replace("\\", "/"); +// String standardizedToRemove = toRemove.replace("\\", "/"); +// // 检查 standardizedWorkPath 是否包含 standardizedToRemove +// if (standardizedWorkPath.contains(standardizedToRemove)) { +// // 去掉目标部分 +// newWorkPath = standardizedWorkPath.replace(standardizedToRemove, ""); +// // 确保路径最后保留一个 '/' +// if (!newWorkPath.endsWith("/")) { +// newWorkPath += "/"; +// } +// } +// return newWorkPath; +// } /*******************************************读取文件内容经纬度**************************************************************/ diff --git a/java/src/main/java/com/yfd/platform/modules/experimentalData/service/impl/TsNodesServiceImpl.java b/java/src/main/java/com/yfd/platform/modules/experimentalData/service/impl/TsNodesServiceImpl.java index b98c560..77acd9e 100644 --- a/java/src/main/java/com/yfd/platform/modules/experimentalData/service/impl/TsNodesServiceImpl.java +++ b/java/src/main/java/com/yfd/platform/modules/experimentalData/service/impl/TsNodesServiceImpl.java @@ -22,9 +22,6 @@ import com.yfd.platform.modules.experimentalData.mapper.TsTaskMapper; import com.yfd.platform.modules.experimentalData.service.ITsFilesService; import com.yfd.platform.modules.experimentalData.service.ITsNodesService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.modules.specialDocument.domain.Files; -import com.yfd.platform.modules.specialDocument.domain.Nodes; -import com.yfd.platform.modules.specialDocument.domain.Project; import com.yfd.platform.modules.storage.context.StorageSourceContext; import com.yfd.platform.modules.storage.mapper.StorageSourceConfigMapper; import com.yfd.platform.modules.storage.model.entity.StorageSourceConfig; @@ -37,7 +34,6 @@ import com.yfd.platform.modules.storage.service.base.AbstractBaseFileService; import com.yfd.platform.system.domain.LoginUser; import com.yfd.platform.utils.StringUtils; import io.netty.channel.ChannelInboundHandlerAdapter; -import lombok.val; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -358,22 +354,6 @@ public class TsNodesServiceImpl extends ServiceImpl impl LOGGER.error("节点新增成功,但是local创建文件失败"); return ResponseResult.error(); } - - -// //判断文件夹是否创建 -// AbstractBaseFileService fileService = storageSourceContext.getByStorageKey("local"); -// boolean flag = fileService.isFolderCreated(File.separator + tsnodes.getNodeId()); -// //如果是false 说明没有创建 那就新建一个文件夹 -// if (!flag) { -// //本地创建文件夹 -// AbstractBaseFileService fileServiceData = storageSourceContext.getByStorageKey("local"); -// boolean flagData = fileServiceData.newFolder(File.separator, tsnodes.getNodeId()); -// if (!flagData) { -// LOGGER.error("创建节点文件夹失败!"); -// return ResponseResult.error("新增节点失败!"); -// } -// } -// return ResponseResult.success(); } else { LOGGER.error("tsnodes表结构增加失败"); return ResponseResult.error(); @@ -476,19 +456,6 @@ public class TsNodesServiceImpl extends ServiceImpl impl tsFilesMapper.delete(deleteWrapper); } -// //查询所有的文件 -// QueryWrapper queryWrapper1 = new QueryWrapper<>(); -// queryWrapper1.in("node_id", nodeIds); -// queryWrapper1.eq("task_id", tsNodes.getTaskId()); -// List tsFiles = tsFilesMapper.selectList(queryWrapper1); -// //获取所有文件的ID集合 -// List dataset = new ArrayList<>(); -// if (tsFiles != null && !tsFiles.isEmpty()) { -// dataset.addAll(tsFiles.stream() -// .map(TsFiles::getId) -// .collect(Collectors.toList())); -// } - //删除当前节点的文件夹 todo 这个地方改动 // 删除 sdlocal 中的文件夹 List deleteItemList = new ArrayList<>(); @@ -702,21 +669,6 @@ public class TsNodesServiceImpl extends ServiceImpl impl jsonObject.putOpt("status", "1"); return ResponseResult.successData(jsonObject); } -// //递归查询所有的子节点 -// List tsNodesList = selectChildrentsNodes(tsNodes.getNodeId(), tsNodes.getTaskId()); -// // 提取所有节点的 ID -// List nodeIds = tsNodesList.stream() -// .map(TsNodes::getNodeId) // 获取每个节点的 ID -// .collect(Collectors.toList()); -// -// -// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); -// queryWrapper.eq(TsFiles::getTaskId, tsNodes.getTaskId()) -// .in(TsFiles::getNodeId, nodeIds) -// .and(wrapper -> wrapper.isNotNull(TsFiles::getBackupPath) -// .or().ne(TsFiles::getBackupPath, "")); - - //SQL通过节点ID 递归查询节点下面的所有子节点 以及files表中 backup_path IS NOT NULL int count = tsFilesService.countFiles(id); //如果大于0不让删 @@ -842,18 +794,6 @@ public class TsNodesServiceImpl extends ServiceImpl impl double fileSizeInKB = bytes / (1024.0); String fileSizeFormatted = String.format("%.2f", fileSizeInKB); // 保留两位小数 tsFiles1.setFileSize(fileSizeFormatted); - - -// if ("null".equals(String.valueOf(subDir.length()))) { -// tsFiles1.setFileSize("0.001"); -// } else { -// //文件大小 -// if ("0.000".equals(String.valueOf(subDir.length()))) { -// tsFiles1.setFileSize("0.001"); -// } else { -// tsFiles1.setFileSize(String.valueOf(subDir.length())); -// } -// } tsFilesToCreate.add(tsFiles1); } LOGGER.info("[构建文件表中的文件夹列表] 耗时 {} ms | 待处理数量: {} 条", @@ -895,16 +835,6 @@ public class TsNodesServiceImpl extends ServiceImpl impl double fileSizeInKB = bytes / (1024.0); String fileSizeFormatted = String.format("%.2f", fileSizeInKB); // 保留两位小数 tsFiles1.setFileSize(fileSizeFormatted); -// if ("null".equals(String.valueOf(file.length()))) { -// tsFiles1.setFileSize("0.001"); -// } else { -// //文件大小 -// if ("0.000".equals(String.valueOf(file.length()))) { -// tsFiles1.setFileSize("0.001"); -// } else { -// tsFiles1.setFileSize(String.valueOf(file.length())); -// } -// } tsFilesToCreate.add(tsFiles1); } LOGGER.info("[构建文件表中的文件列表] 耗时 {} ms | 待处理数量: {} 条", diff --git a/java/src/main/java/com/yfd/platform/modules/specialDocument/controller/FilesController.java b/java/src/main/java/com/yfd/platform/modules/specialDocument/controller/FilesController.java index 4efc8ef..ea8dc40 100644 --- a/java/src/main/java/com/yfd/platform/modules/specialDocument/controller/FilesController.java +++ b/java/src/main/java/com/yfd/platform/modules/specialDocument/controller/FilesController.java @@ -10,6 +10,7 @@ import com.yfd.platform.config.ResponseResult; import com.yfd.platform.modules.experimentalData.domain.TsFiles; import com.yfd.platform.modules.specialDocument.domain.Files; import com.yfd.platform.modules.specialDocument.service.IFilesService; +import com.yfd.platform.modules.storage.model.result.FileItemResult; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -153,5 +154,22 @@ public class FilesController { } + /********************************** + * 用途说明: 获取专项文档文件url + * 参数说明 id 文件ID + * 返回值说明: com.yfd.platform.config.ResponseResult 返回文件信息 + ***********************************/ + @Log(module = "专项文档管理", value = "获取专项文档文件url!") + @PostMapping("/sdLocalUrl") + @ApiOperation("获取专项文档文件url") + public ResponseResult sdLocalUrl(String id) { + if (StrUtil.isBlank(id)) { + return ResponseResult.error("参数为空"); + } + //查询本地树和minio树 + FileItemResult fileItemResult = filesService.sdLocalUrl(id); + return ResponseResult.successData(fileItemResult); + } + } diff --git a/java/src/main/java/com/yfd/platform/modules/specialDocument/service/IFilesService.java b/java/src/main/java/com/yfd/platform/modules/specialDocument/service/IFilesService.java index 2bfec3d..3a3f61a 100644 --- a/java/src/main/java/com/yfd/platform/modules/specialDocument/service/IFilesService.java +++ b/java/src/main/java/com/yfd/platform/modules/specialDocument/service/IFilesService.java @@ -6,6 +6,7 @@ import com.yfd.platform.config.ResponseResult; import com.yfd.platform.modules.experimentalData.domain.TsFiles; import com.yfd.platform.modules.specialDocument.domain.Files; import com.baomidou.mybatisplus.extension.service.IService; +import com.yfd.platform.modules.storage.model.result.FileItemResult; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -62,4 +63,11 @@ public interface IFilesService extends IService { String deleteFilesByIds(List dataset); IPage getCachedFilesPage(String projectId, String nodeId, int currentPage); + + /********************************** + * 用途说明: 获取专项文档文件url + * 参数说明 id 文件ID + * 返回值说明: com.yfd.platform.config.ResponseResult 返回文件信息 + ***********************************/ + FileItemResult sdLocalUrl(String id); } diff --git a/java/src/main/java/com/yfd/platform/modules/specialDocument/service/impl/FilesServiceImpl.java b/java/src/main/java/com/yfd/platform/modules/specialDocument/service/impl/FilesServiceImpl.java index d3c5ba8..3f2db99 100644 --- a/java/src/main/java/com/yfd/platform/modules/specialDocument/service/impl/FilesServiceImpl.java +++ b/java/src/main/java/com/yfd/platform/modules/specialDocument/service/impl/FilesServiceImpl.java @@ -4,12 +4,10 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.fasterxml.jackson.databind.ObjectMapper; import com.yfd.platform.config.ResponseResult; import com.yfd.platform.exception.file.InvalidStorageSourceException; import com.yfd.platform.modules.config.model.request.FileListRequest; @@ -46,7 +44,6 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.fasterxml.jackson.core.type.TypeReference; import javax.annotation.Resource; import java.io.File; @@ -61,7 +58,6 @@ import java.sql.Timestamp; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -120,47 +116,47 @@ public class FilesServiceImpl extends ServiceImpl implements //先查询路径下的所有文件 //首先通过项目ID 和节点ID去查询表 获取一个路径 如果不是空 就调用minio的获取文件列表接口 查询的数据放在集合中 - FileInfoResult fileInfoResult = null; - - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("project_id", projectId); - queryWrapper.eq("node_id", nodeId); - List filess = filesMapper.selectList(queryWrapper); - String filePath = null; - if (filess != null && !filess.isEmpty()) { - for (Files files : filess) { - filePath = files.getFilePath(); - if (filePath != null && !filePath.isEmpty()) { - break; // 如果找到非空的 filePath,终止循环 - } - } - } - if (filePath != null) { - FileListRequest fileListRequest = new FileListRequest(); - fileListRequest.setOrderBy("time"); - fileListRequest.setOrderDirection("desc"); - fileListRequest.setPassword(""); - fileListRequest.setPath(filePath); - fileListRequest.setStorageKey("sdlocal"); - - String storageKey = fileListRequest.getStorageKey(); - Integer storageId = storageSourceService.findIdByKey(storageKey); - if (storageId == null) { - throw new InvalidStorageSourceException("通过存储源 key 未找到存储源, key: " + storageKey); - } - // 处理请求参数默认值 - fileListRequest.handleDefaultValue(); - // 获取文件列表 - AbstractBaseFileService fileService = storageSourceContext.getByStorageId(storageId); - List fileItemList = fileService.fileList(fileListRequest.getPath()); - // 执行责任链 - FileContext fileContext = FileContext.builder() - .storageId(storageId) - .fileListRequest(fileListRequest) - .fileItemList(fileItemList).build(); - fileChain.execute(fileContext); - fileInfoResult = new FileInfoResult(fileContext.getFileItemList(), fileContext.getPasswordPattern()); - } +// FileInfoResult fileInfoResult = null; +// +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.eq("project_id", projectId); +// queryWrapper.eq("node_id", nodeId); +// List filess = filesMapper.selectList(queryWrapper); +// String filePath = null; +// if (filess != null && !filess.isEmpty()) { +// for (Files files : filess) { +// filePath = files.getFilePath(); +// if (filePath != null && !filePath.isEmpty()) { +// break; // 如果找到非空的 filePath,终止循环 +// } +// } +// } +// if (filePath != null) { +// FileListRequest fileListRequest = new FileListRequest(); +// fileListRequest.setOrderBy("time"); +// fileListRequest.setOrderDirection("desc"); +// fileListRequest.setPassword(""); +// fileListRequest.setPath(filePath); +// fileListRequest.setStorageKey("sdlocal"); +// +// String storageKey = fileListRequest.getStorageKey(); +// Integer storageId = storageSourceService.findIdByKey(storageKey); +// if (storageId == null) { +// throw new InvalidStorageSourceException("通过存储源 key 未找到存储源, key: " + storageKey); +// } +// // 处理请求参数默认值 +// fileListRequest.handleDefaultValue(); +// // 获取文件列表 +// AbstractBaseFileService fileService = storageSourceContext.getByStorageId(storageId); +// List fileItemList = fileService.fileList(fileListRequest.getPath()); +// // 执行责任链 +// FileContext fileContext = FileContext.builder() +// .storageId(storageId) +// .fileListRequest(fileListRequest) +// .fileItemList(fileItemList).build(); +// fileChain.execute(fileContext); +// fileInfoResult = new FileInfoResult(fileContext.getFileItemList(), fileContext.getPasswordPattern()); +// } //分页查询专项文档管理-文档内容 LambdaQueryWrapper queryWrapperfiles = new LambdaQueryWrapper<>(); @@ -186,27 +182,27 @@ public class FilesServiceImpl extends ServiceImpl implements //分页查询 Page filesPage = filesMapper.selectPage(page, queryWrapperfiles); //处理文件内容 - List records = filesPage.getRecords(); - for (Files files : records) { - //循环从minio拿出来的数据 然后把url放到files里面 - files.setUrl(""); - files.setType(""); - List filelist = fileInfoResult.getFiles(); - if (filelist != null && !filelist.isEmpty()) { - for (FileItemResult fileItemResult : filelist) { - if (fileItemResult.getUrl() == null || fileItemResult.getUrl().isEmpty()) { - continue; - } - if (files.getFileName().equals(fileItemResult.getName())) { - files.setUrl(fileItemResult.getUrl()); - files.setType(fileItemResult.getType().getValue()); - break; - } - } - - } - } - filesPage.setRecords(records); +// List records = filesPage.getRecords(); +// for (Files files : records) { +// //循环从minio拿出来的数据 然后把url放到files里面 +// files.setUrl(""); +// files.setType(""); +// List filelist = fileInfoResult.getFiles(); +// if (filelist != null && !filelist.isEmpty()) { +// for (FileItemResult fileItemResult : filelist) { +// if (fileItemResult.getUrl() == null || fileItemResult.getUrl().isEmpty()) { +// continue; +// } +// if (files.getFileName().equals(fileItemResult.getName())) { +// files.setUrl(fileItemResult.getUrl()); +// files.setType(fileItemResult.getType().getValue()); +// break; +// } +// } +// +// } +// } +// filesPage.setRecords(records); int currentPage = (int) page.getCurrent(); // 如果是前五页,将结果存入Redis(有效期建议30分钟) if (StrUtil.isBlank(fileName) && StrUtil.isBlank(keywords) && StrUtil.isBlank(startDate) && StrUtil.isBlank(endDate)) { @@ -218,6 +214,22 @@ public class FilesServiceImpl extends ServiceImpl implements return filesPage; } + /********************************** + * 用途说明: 获取专项文档文件url + * 参数说明 id 文件ID + * 返回值说明: com.yfd.platform.config.ResponseResult 返回文件信息 + ***********************************/ + @Override + public FileItemResult sdLocalUrl(String id) { + FileItemResult fileItemResult = new FileItemResult(); + Files files = filesMapper.selectById(id); + String pathAndName = files.getFilePath() + files.getFileName(); + //准备获取文件的信息 + AbstractBaseFileService fileService = storageSourceContext.getByStorageKey("sdlocal"); + fileItemResult = fileService.getFileItem(pathAndName); + return fileItemResult; + } + /** * 缓存中获取节点文件 * @@ -252,6 +264,8 @@ public class FilesServiceImpl extends ServiceImpl implements return null; // 或返回空分页对象 new Page<>(0) } + + private boolean isValidPage(IPage page) { return page.getRecords() != null && !page.getRecords().isEmpty()