diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/EdMetaObjectHandler.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/EdMetaObjectHandler.java index 0de4be0..160c304 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/EdMetaObjectHandler.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/EdMetaObjectHandler.java @@ -32,6 +32,12 @@ public class EdMetaObjectHandler implements MetaObjectHandler { if (metaObject.hasGetter("createdBy")) { this.setFieldValByName("createdBy", Optional.ofNullable(UserThreadLocal.getUser()).map(UserLoginInfo::getUserId).orElse(""), metaObject); } + if (metaObject.hasGetter("updatedTime")) { + this.setFieldValByName("updatedTime", new Date(), metaObject); + } + if (metaObject.hasGetter("updatedBy")) { + this.setFieldValByName("updatedBy", Optional.ofNullable(UserThreadLocal.getUser()).map(UserLoginInfo::getUserId).orElse(""), metaObject); + } } @Override 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 c8a8a2c..aafba17 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 @@ -57,6 +57,7 @@ import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.*; @@ -89,6 +90,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl> FILE_DB_ID_NAME = new ConcurrentHashMap<>(); + /** * 查询文件列表 * @@ -499,20 +502,23 @@ public class EdFileInfoServiceImpl extends ServiceImpl allFiles = importAllFiles.stream().filter(e -> ObjUtil.equals(e.getDataType(), EleDataTypeEnum.FILE.code)).toList(); - List allObjs = new ArrayList<>(prjFolders); + Set allObjs = new HashSet<>(prjFolders); // 处理用户创建的文件夹 for (EdFileInfo edFileInfo : userFolders) { String fileName = edFileInfo.getFileName(); String parentId = edFileInfo.getParentId(); List folders = queryChildFolders(parentId); - Map foldersMap = folders.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); + Map foldersMap = folders.stream().collect(Collectors.toMap(EdFileInfo::getFileName, e -> e)); List folderNames = folders.stream().map(EdFileInfo::getFileName).toList(); if (folderNames.contains(fileName)) { // 有同名文件夹 // 判断id是否相同 if (foldersMap.get(fileName).getId().equals(edFileInfo.getId())) { // id相同,不做处理 log.info("id相同,不做处理"); } else { // 文件名重复,导入的文件名需要添加“_1” - resetFileInfoName(edFileInfo); + String previousName = edFileInfo.getFileName(); + resetFolderInfo(edFileInfo); + String afterName = edFileInfo.getFileName(); + FILE_DB_ID_NAME.put(edFileInfo.getId(), List.of(previousName, afterName)); allObjs.add(edFileInfo); } } else { // 没有同名文件夹 @@ -527,25 +533,31 @@ 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(); + String fileId = entry.getKey(); + List importFiles = entry.getValue(); + importFiles.sort(Comparator.comparing(EdFileInfo::getCreatedTime)); + List dbFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getFileId, fileId).orderByAsc(EdFileInfo::getFileVersion)); + // 在线上没有找到,则该批文件是从线下上传的 + if (CollUtil.isEmpty(dbFileInfos)) { + EdFileInfo fileInfo = importFiles.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst().get(); + String previousName = fileInfo.getFileName(); resetFileInfoName(fileInfo); - allObjs.addAll(v); + String afterName = fileInfo.getFileName(); + FILE_DB_ID_NAME.put(fileInfo.getId(), List.of(previousName, afterName)); + allObjs.addAll(importFiles); + 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)); + Map importIdMap = importFiles.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); importIdMap.putAll(dbIdMap); - List deepCopyV = JSONUtil.toList(JSONUtil.toJsonStr(v), EdFileInfo.class); + List deepCopyImport = JSONUtil.toList(JSONUtil.toJsonStr(importFiles), EdFileInfo.class); List deepCopyDb = JSONUtil.toList(JSONUtil.toJsonStr(dbFileInfos), EdFileInfo.class); // 导入的文件在线下已经被废除了 - Optional first = deepCopyV.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst(); + Optional first = deepCopyImport.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst(); if (first.isEmpty()) { continue; } @@ -568,17 +580,19 @@ public class EdFileInfoServiceImpl extends ServiceImpl importVersionRelation = getVersionRelation(deepCopyV); + Map importVersionRelation = getVersionRelation(deepCopyImport); Map dbVersionRelation = getVersionRelation(deepCopyDb); dbVersionRelation.putAll(importVersionRelation); //************************** int start = FILE_START_VERSION; List saveObjs = new ArrayList<>(); - for (EdFileInfo importFileInfo : v) { - if (dbIdMap.containsKey(importFileInfo.getId())) { // 该文件在数据库中存在,是从线上导出的。 + for (EdFileInfo importFileInfo : importFiles) { + // 该文件在数据库中存在,是从线上导出的。 + if (dbIdMap.containsKey(importFileInfo.getId())) { EdFileInfo dbFileInfo = dbIdMap.get(importFileInfo.getId()); - if (dbFileInfo.getUpdatedTime().before(importFileInfo.getUpdatedTime())) { // 线下版本的修改时间比线上的新,用线下的版本 + // 线下版本的修改时间比线上的新,用线下的版本 + if (dbFileInfo.getUpdatedTime().before(importFileInfo.getUpdatedTime())) { importFileInfo.setFileVersion(start); saveObjs.add(importFileInfo); dbIdMap.remove(importFileInfo.getId()); @@ -635,27 +649,69 @@ public class EdFileInfoServiceImpl extends ServiceImpl needMove2FileSystemFiles, String prjDirPath, int dataOwnCode) { + public void resetFolderInfo(EdFileInfo fileInfo) { + String fileName = fileInfo.getFileName(); + String parentId = fileInfo.getParentId(); + for (int i = 0; i < 1000; ++i) { + long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getFileName, fileName) + .eq(EdFileInfo::getParentId, parentId) + .eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code) + .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)); + if (count > 0) { + fileName = fileName + "_1"; + } else { + fileInfo.setFileName(fileName); + return; + } + } + } + + + private void update2FileSystem(Set needMove2FileSystemFiles, String prjDirPath, int dataOwnCode) { Map maps = needMove2FileSystemFiles.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); List files = needMove2FileSystemFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FILE.code)).toList(); for (EdFileInfo edFileInfo : files) { String filePath = edFileInfo.getFilePath(); - StringBuilder sysFilePath = new StringBuilder(); + String previousFileName = FILE_DB_ID_NAME.containsKey(edFileInfo.getId()) ? + FILE_DB_ID_NAME.get(edFileInfo.getId()).get(0) : + edFileInfo.getFileName(); + String afterFileName = FILE_DB_ID_NAME.containsKey(edFileInfo.getId()) ? + FILE_DB_ID_NAME.get(edFileInfo.getId()).get(1) : + edFileInfo.getFileName(); + + StringBuilder sysFileDirPath = new StringBuilder(); + StringBuilder destDirPath = new StringBuilder(); + for (String id : filePath.split(MYSQL_FILE_PATH_SPLIT)) { - EdFileInfo fileInfo = maps.get(id); +// EdFileInfo fileInfo = maps.get(id); + EdFileInfo fileInfo = this.baseMapper.selectById(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 previousDirName = FILE_DB_ID_NAME.containsKey(id) ? + FILE_DB_ID_NAME.get(id).get(0) : fileInfo.getFileName(); + sysFileDirPath.append(previousDirName).append(File.separator); + String afterDirName = FILE_DB_ID_NAME.containsKey(id) ? + FILE_DB_ID_NAME.get(id).get(1) : fileInfo.getFileName(); + destDirPath.append(afterDirName).append(File.separator); } } + String sourcePath = prjDirPath + File.separator + sysFileDirPath + previousFileName + "." + edFileInfo.getFileType() + "." + edFileInfo.getFileCode(); String destPath; if (DataOwnEnum.isUserCode(dataOwnCode)) { - destPath = commonService.getPrjRootPath1(dataOwnCode) + UserThreadLocal.getUserId() + File.separator + sysFilePath; + destPath = commonService.getPrjRootPath1(dataOwnCode) + + UserThreadLocal.getUserId() + File.separator + + destDirPath + File.separator + sysFileDirPath + + afterFileName + + "." + edFileInfo.getFileType() + + "." + edFileInfo.getFileCode(); } else { - destPath = commonService.getPrjRootPath1(dataOwnCode) + File.separator + sysFilePath; + destPath = commonService.getPrjRootPath1(dataOwnCode) + File.separator + + destDirPath + File.separator + + afterFileName + + "." + edFileInfo.getFileType() + + "." + edFileInfo.getFileCode(); } - String sourcePath = prjDirPath + File.separator + sysFilePath; + log.info("source path is ----> {}, dest path is --->{}", sourcePath, destPath); fileSystemService.moveFile(sourcePath, destPath); } } @@ -675,7 +731,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl queryChildFolders(String parentId) { return this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getParentId, parentId) .eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code) - .eq(EdFileInfo::getEffectFlag, false)); + .eq(EdFileInfo::getEffectFlag, true)); } /** diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileTagRelationServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileTagRelationServiceImpl.java index 7ca1e0e..e6bf5e9 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileTagRelationServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileTagRelationServiceImpl.java @@ -22,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @@ -97,6 +98,9 @@ public class FileTagRelationServiceImpl extends ServiceImpl result = new ArrayList<>(); for (FileTagRelation relation : relations) { EdTagLibrary tagInfo = edTagLibraryMapper.selectById(relation.getTagId()); + if (Objects.isNull(tagInfo)) { + continue; + } FileTagInfo vo = new FileTagInfo(); BeanUtils.copyProperties(tagInfo, vo); result.add(vo);