From 7ba8c10d34320620715f678bfda639ddcd17aee8 Mon Sep 17 00:00:00 2001 From: chenxudong Date: Mon, 6 Jan 2025 16:35:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E7=9B=B8=E5=85=B3=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E8=B0=83=E9=80=9A=E7=AE=80=E5=8D=95=E5=9C=BA=E6=99=AF?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/EdFileInfoServiceImpl.java | 45 +++++++------ .../serviceimpl/FileSystemServiceImpl.java | 4 ++ electrmangnetic/src/test/java/Test1.java | 64 +++++++++++++++++-- 3 files changed, 86 insertions(+), 27 deletions(-) diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java index 6d950e8..30eee15 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java @@ -420,53 +420,53 @@ public class EdFileInfoServiceImpl extends ServiceImpl importFileInfos = JSONUtil.toList(prjDirPath + File.separator + "mysql.info", EdFileInfo.class); + List importAllFiles = JSONUtil.toList(prjDirPath + File.separator + "mysql.info", EdFileInfo.class); // 首先处理导入的文件夹及其下属文件 // 找出文件夹 - List needMove2FileSystemFiles = new ArrayList<>(); - List importDirs = importFileInfos.stream() + List importDirs = importAllFiles.stream() .filter(e -> e.getDataType().equals(EleDataTypeEnum.FOLDER.code)) - .filter(e -> !e.getPrjDir()).collect(Collectors.toList()); + .collect(Collectors.toList()); + List allObjs = new ArrayList<>(); + List prjFolders = importDirs.stream().filter(EdFileInfo::getPrjDir).collect(Collectors.toList()); + allObjs.addAll(prjFolders); for (EdFileInfo edFileInfo : importDirs) { String fileName = edFileInfo.getFileName(); String parentId = edFileInfo.getParentId(); List folders = queryChildFolders(parentId); Map foldersMap = folders.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); List folderNames = folders.stream().map(EdFileInfo::getFileName).collect(Collectors.toList()); - String saveSysFilePath; if (folderNames.contains(fileName)) { // 有同名文件夹 // 判断id是否相同 if (foldersMap.get(fileName).getId().equals(edFileInfo.getId())) { // id相同,不做处理 log.info("id相同,不做处理"); } else { // 文件名重复,导入的文件名需要添加“_1” edFileInfo.setFileNote(fileName + "_1"); - this.baseMapper.insert(edFileInfo); + allObjs.add(edFileInfo); } } else { // 没有同名文件夹 - this.saveOrUpdate(edFileInfo); // 如果导出的文件夹在线上已经被作废,这里则直接恢复,需要注意的是,在作废文件时,需要将作废文件移动到回收站 + allObjs.add(edFileInfo); } - needMove2FileSystemFiles.add(edFileInfo); } // 处理文件 - importFileInfos = importFileInfos.stream() + List importFiles = importAllFiles.stream() .filter(e -> e.getDataType().equals(EleDataTypeEnum.FILE.code)) .collect(Collectors.toList()); Map> fileInfoMap = new HashMap<>(); - for (EdFileInfo edFileInfo : importFileInfos) { + for (EdFileInfo edFileInfo : importFiles) { List list = fileInfoMap.getOrDefault(edFileInfo.getFileId(), new ArrayList<>()); list.add(edFileInfo); fileInfoMap.put(edFileInfo.getFileId(), list); } + for (Map.Entry> entry : fileInfoMap.entrySet()) { + String k = entry.getKey(); + List v = entry.getValue(); - fileInfoMap.forEach((k, v) -> { List dbFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getFileId, k).orderByAsc(EdFileInfo::getFileVersion)); if (CollUtil.isEmpty(dbFileInfos)) { // 在线上没有找到,则该批文件是从线下上传的 EdFileInfo fileInfo = v.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst().get(); resetFileInfoName(fileInfo); - this.saveBatch(v); - needMove2FileSystemFiles.addAll(v); + allObjs.addAll(v); } else { Map dbIdMap = dbFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); Map importIdMap = v.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); @@ -494,7 +494,6 @@ public class EdFileInfoServiceImpl extends ServiceImpl needMove2FileSystemFiles, String prjDirPath) { - Map idNameMaps = needMove2FileSystemFiles.stream().collect(Collectors.toMap(EdFileInfo::getId, EdFileInfo::getFileName)); + Map maps = needMove2FileSystemFiles.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); List files = needMove2FileSystemFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FILE.code)).collect(Collectors.toList()); for (EdFileInfo edFileInfo : files) { String filePath = edFileInfo.getFilePath(); StringBuilder sysFilePath = new StringBuilder(); for (String id : filePath.split(MYSQL_FILE_PATH_SPLIT)) { - sysFilePath.append(idNameMaps.get(id)).append(File.separator); + EdFileInfo fileInfo = maps.get(id); + if (fileInfo.getDataType().equals(EleDataTypeEnum.FOLDER.code)) { + sysFilePath.append(fileInfo.getFileName()).append(File.separator); + } else { + sysFilePath.append(fileInfo.getFileName()).append(".").append(fileInfo.getFileType()).append(".").append(fileInfo.getFileCode()); + } } String destPath = commonService.getEleDataPath() + File.separator + sysFilePath; String sourcePath = prjDirPath + File.separator + sysFilePath; diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileSystemServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileSystemServiceImpl.java index 79f943d..8f4f254 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileSystemServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileSystemServiceImpl.java @@ -23,6 +23,10 @@ public class FileSystemServiceImpl implements FileSystemService { @Override public void moveFile(String source, String destination) { + String destParentDir = FileUtil.getParent(destination, 1); + if (!FileUtil.exist(destParentDir)) { + FileUtil.mkdir(destParentDir); + } FileUtil.move(new File(source), new File(destination), true); } diff --git a/electrmangnetic/src/test/java/Test1.java b/electrmangnetic/src/test/java/Test1.java index e5ff10a..e9bf952 100644 --- a/electrmangnetic/src/test/java/Test1.java +++ b/electrmangnetic/src/test/java/Test1.java @@ -1,22 +1,72 @@ +//import cn.hutool.core.io.FileUtil; +//import cn.hutool.core.util.IdUtil; +//import cn.hutool.core.util.ZipUtil; +//import cn.hutool.crypto.SecureUtil; +//import cn.hutool.crypto.symmetric.AES; +//import com.electromagnetic.industry.software.common.exception.BizException; +//import com.electromagnetic.industry.software.common.util.UserThreadLocal; //import com.electromagnetic.industry.software.manage.Application; -//import com.electromagnetic.industry.software.manage.mapper.CategoryMapper; -//import com.electromagnetic.industry.software.manage.pojo.models.Category; +//import com.electromagnetic.industry.software.manage.service.EdFileInfoService; +//import com.electromagnetic.industry.software.manage.service.serviceimpl.EdFileInfoServiceImpl; //import org.junit.jupiter.api.Test; +//import org.springframework.beans.factory.annotation.Value; //import org.springframework.boot.test.context.SpringBootTest; +//import org.springframework.core.env.Environment; // +//import javax.annotation.PostConstruct; //import javax.annotation.Resource; -//import java.util.List; +//import java.io.File; +//import java.io.InputStream; +//import java.io.OutputStream; +//import java.nio.file.Files; +//import java.nio.file.Paths; // //@SpringBootTest(classes = Application.class) //public class Test1 { // // @Resource -// private CategoryMapper categoryMapper; +// private EdFileInfoServiceImpl edFileInfoServiceImpl; +// +// @Value("${file.security.passwd}") +// private String password; +// +// private String downloadDataDir = ""; +// private String uploadDataDir = ""; +// +// @Resource +// private Environment environment; +// +// @PostConstruct +// public void init() { +// String osName = System.getProperty("os.name").toLowerCase(); +// uploadDataDir = osName.startsWith("win") ? environment.getProperty("data.upload.windows.tmp.path") : environment.getProperty("data.upload.linux.tmp.path"); +// downloadDataDir = osName.startsWith("win") ? environment.getProperty("data.download.windows.tmp.path") : environment.getProperty("data.download.linux.tmp.path"); +// } // // @Test -// public void test() { -// List categories = categoryMapper.selectAllCategories(); -// System.out.println("categories = " + categories); +// public void testImport() { +// String currentUserId = UserThreadLocal.getUserId(); +// String destColibPath = "E:/tmp/C92934test.colib"; +// String mainName = FileUtil.mainName(destColibPath); +// String parentDir = FileUtil.getParent(destColibPath, 1); +// String zipDirPath = parentDir + File.separator + mainName + ".zip"; +// AES aes = SecureUtil.aes(password.getBytes()); +// try ( +// InputStream inputStream = Files.newInputStream(Paths.get(destColibPath)); +// OutputStream outputStream = Files.newOutputStream(Paths.get(zipDirPath)); +// ) { +// aes.decrypt(inputStream, outputStream, true); +// } catch (Exception e) { +// e.printStackTrace(); +// String info = "文件上传错误"; +// System.out.println("info = " + info); +// } +// String uuid = IdUtil.fastSimpleUUID(); +// String tmpDir = uploadDataDir + currentUserId + File.separator + uuid + File.separator; +// ZipUtil.unzip(zipDirPath, tmpDir); +// +// edFileInfoServiceImpl.update2Database(tmpDir); +// // } // //}