From ccb61bfa4050e55fedd18ca158cf71fb9d78ba64 Mon Sep 17 00:00:00 2001 From: chenxudong Date: Tue, 7 Jan 2025 10:45:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E9=83=A8=E5=88=86=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/serviceimpl/CommonService.java | 4 -- .../serviceimpl/EdFileInfoServiceImpl.java | 57 ++++++++++++------- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java index be165aa..9471d0c 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java @@ -247,8 +247,6 @@ public class CommonService { })); String jsonStr = JSONUtil.toJsonStr(trees); projectVOS.add(jsonStr); -// ProjectVO projectVO = JSONUtil.toList(jsonStr, ProjectVO.class).get(0); -// projectVOS.add(projectVO); } else { TreeNodeConfig config = new TreeNodeConfig(); config.setIdKey(FileProjectVO.Fields.categoryId); @@ -263,8 +261,6 @@ public class CommonService { })); String jsonStr = JSONUtil.toJsonStr(trees); projectVOS.add(jsonStr); -// FileProjectVO fileProjectVO = JSONUtil.toList(jsonStr, FileProjectVO.class).get(0); -// projectVOS.add(fileProjectVO); } } return projectVOS; 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 30d95e6..dbca71a 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 @@ -52,6 +52,7 @@ import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; +import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; @@ -421,16 +422,21 @@ public class EdFileInfoServiceImpl extends ServiceImpl importAllFiles = JSONUtil.toList(prjDirPath + File.separator + "mysql.info", EdFileInfo.class); - // 首先处理导入的文件夹及其下属文件 - // 找出文件夹 - List importDirs = importAllFiles.stream() - .filter(e -> e.getDataType().equals(EleDataTypeEnum.FOLDER.code)) + String info = FileUtil.readString(prjDirPath + File.separator + "mysql.info", Charset.defaultCharset()); + List importAllFiles = JSONUtil.toList(info, EdFileInfo.class); + // 找出层级文件夹 + List prjFolders = importAllFiles.stream().filter(e -> ObjUtil.equals(e.getPrjDir(), true)) .collect(Collectors.toList()); - List allObjs = new ArrayList<>(); - List prjFolders = importDirs.stream().filter(EdFileInfo::getPrjDir).collect(Collectors.toList()); - allObjs.addAll(prjFolders); - for (EdFileInfo edFileInfo : importDirs) { + // 找出用户创建的文件夹 + List userFolders = importAllFiles.stream().filter(e -> ObjUtil.equals(e.getDataType(), EleDataTypeEnum.FOLDER.code)) + .filter(e -> ObjUtil.notEqual(e.getPrjDir(), false)) + .collect(Collectors.toList()); + // 找出所有文件 + List allFiles = importAllFiles.stream().filter(e -> ObjUtil.equals(e.getDataType(), EleDataTypeEnum.FILE.code)).collect(Collectors.toList()); + + List allObjs = new ArrayList<>(prjFolders); + // 处理用户创建的文件夹 + for (EdFileInfo edFileInfo : userFolders) { String fileName = edFileInfo.getFileName(); String parentId = edFileInfo.getParentId(); List folders = queryChildFolders(parentId); @@ -441,7 +447,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl importFiles = importAllFiles.stream() - .filter(e -> e.getDataType().equals(EleDataTypeEnum.FILE.code)) - .collect(Collectors.toList()); - Map> fileInfoMap = new HashMap<>(); - for (EdFileInfo edFileInfo : importFiles) { + for (EdFileInfo edFileInfo : allFiles) { List list = fileInfoMap.getOrDefault(edFileInfo.getFileId(), new ArrayList<>()); list.add(edFileInfo); fileInfoMap.put(edFileInfo.getFileId(), list); @@ -462,24 +464,32 @@ public class EdFileInfoServiceImpl extends ServiceImpl> entry : fileInfoMap.entrySet()) { String k = entry.getKey(); List v = entry.getValue(); - + v.sort(Comparator.comparing(EdFileInfo::getCreatedTime)); 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); allObjs.addAll(v); + allObjs.add(fileInfo); } else { Map dbIdMap = dbFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); Map importIdMap = v.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); + importIdMap.putAll(dbIdMap); + List deepCopyV = JSONUtil.toList(JSONUtil.toJsonStr(v), EdFileInfo.class); List deepCopyDb = JSONUtil.toList(JSONUtil.toJsonStr(dbFileInfos), EdFileInfo.class); + EdFileInfo importEffectFile = deepCopyV.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst().get(); EdFileInfo dbEffectFile = deepCopyDb.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst().get(); + // 如果导入的时间比数据库的时间新,则将导入的置为effect String effectId = importEffectFile.getUpdatedTime().after(dbEffectFile.getUpdatedTime()) ? importEffectFile.getId() : dbEffectFile.getId(); + Map importVersionRelation = getVersionRelation(deepCopyV); Map dbVersionRelation = getVersionRelation(deepCopyDb); + dbVersionRelation.putAll(importVersionRelation); + //************************** int start = FILE_START_VERSION; List saveObjs = new ArrayList<>(); for (EdFileInfo importFileInfo : v) { @@ -488,16 +498,25 @@ public class EdFileInfoServiceImpl extends ServiceImpl maps = new HashMap<>(); for (String id : ids) { Map edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) - .like(EdFileInfo::getFilePath, MYSQL_FILE_PATH_SPLIT + id + MYSQL_FILE_PATH_SPLIT) - .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)).stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); + .like(EdFileInfo::getFilePath, MYSQL_FILE_PATH_SPLIT + id + MYSQL_FILE_PATH_SPLIT)) + .stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); maps.putAll(edFileInfos); } List resFiles = new ArrayList<>(maps.values());