调通了导入导出的部分功能。

This commit is contained in:
chenxudong 2025-04-14 16:29:01 +08:00
parent a22b20aab7
commit efb9d4f055
3 changed files with 93 additions and 27 deletions

View File

@ -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

View File

@ -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<EdFileInfoMapper, EdFileI
@Resource
private FileTagRelationService fileTagRelationService;
private static final Map<String, List<String>> FILE_DB_ID_NAME = new ConcurrentHashMap<>();
/**
* 查询文件列表
*
@ -499,20 +502,23 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
// 找出所有文件
List<EdFileInfo> allFiles = importAllFiles.stream().filter(e -> ObjUtil.equals(e.getDataType(), EleDataTypeEnum.FILE.code)).toList();
List<EdFileInfo> allObjs = new ArrayList<>(prjFolders);
Set<EdFileInfo> allObjs = new HashSet<>(prjFolders);
// 处理用户创建的文件夹
for (EdFileInfo edFileInfo : userFolders) {
String fileName = edFileInfo.getFileName();
String parentId = edFileInfo.getParentId();
List<EdFileInfo> folders = queryChildFolders(parentId);
Map<String, EdFileInfo> foldersMap = folders.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e));
Map<String, EdFileInfo> foldersMap = folders.stream().collect(Collectors.toMap(EdFileInfo::getFileName, e -> e));
List<String> 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<EdFileInfoMapper, EdFileI
fileInfoMap.put(edFileInfo.getFileId(), list);
}
for (Map.Entry<String, List<EdFileInfo>> entry : fileInfoMap.entrySet()) {
String k = entry.getKey();
List<EdFileInfo> v = entry.getValue();
v.sort(Comparator.comparing(EdFileInfo::getCreatedTime));
List<EdFileInfo> 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<EdFileInfo> importFiles = entry.getValue();
importFiles.sort(Comparator.comparing(EdFileInfo::getCreatedTime));
List<EdFileInfo> 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<String, EdFileInfo> dbIdMap = dbFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e));
Map<String, EdFileInfo> importIdMap = v.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e));
Map<String, EdFileInfo> importIdMap = importFiles.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e));
importIdMap.putAll(dbIdMap);
List<EdFileInfo> deepCopyV = JSONUtil.toList(JSONUtil.toJsonStr(v), EdFileInfo.class);
List<EdFileInfo> deepCopyImport = JSONUtil.toList(JSONUtil.toJsonStr(importFiles), EdFileInfo.class);
List<EdFileInfo> deepCopyDb = JSONUtil.toList(JSONUtil.toJsonStr(dbFileInfos), EdFileInfo.class);
// 导入的文件在线下已经被废除了
Optional<EdFileInfo> first = deepCopyV.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst();
Optional<EdFileInfo> 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<EdFileInfoMapper, EdFileI
} else {
effectId = importEffectFile.getUpdatedTime().after(dbEffectFile.getUpdatedTime()) ? importEffectFile.getId() : dbEffectFile.getId();
}
Map<String, String> importVersionRelation = getVersionRelation(deepCopyV);
Map<String, String> importVersionRelation = getVersionRelation(deepCopyImport);
Map<String, String> dbVersionRelation = getVersionRelation(deepCopyDb);
dbVersionRelation.putAll(importVersionRelation);
//**************************
int start = FILE_START_VERSION;
List<EdFileInfo> 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<EdFileInfoMapper, EdFileI
}
}
private void update2FileSystem(List<EdFileInfo> 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<EdFileInfo> needMove2FileSystemFiles, String prjDirPath, int dataOwnCode) {
Map<String, EdFileInfo> maps = needMove2FileSystemFiles.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e));
List<EdFileInfo> 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<EdFileInfoMapper, EdFileI
private List<EdFileInfo> 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));
}
/**

View File

@ -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<FileTagRelationMappe
List<FileTagInfo> 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);