调通了导入导出的部分功能。
This commit is contained in:
parent
a22b20aab7
commit
efb9d4f055
|
|
@ -32,6 +32,12 @@ public class EdMetaObjectHandler implements MetaObjectHandler {
|
||||||
if (metaObject.hasGetter("createdBy")) {
|
if (metaObject.hasGetter("createdBy")) {
|
||||||
this.setFieldValByName("createdBy", Optional.ofNullable(UserThreadLocal.getUser()).map(UserLoginInfo::getUserId).orElse(""), metaObject);
|
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
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ import java.nio.charset.Charset;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.*;
|
import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.*;
|
||||||
|
|
@ -89,6 +90,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
@Resource
|
@Resource
|
||||||
private FileTagRelationService fileTagRelationService;
|
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> 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) {
|
for (EdFileInfo edFileInfo : userFolders) {
|
||||||
String fileName = edFileInfo.getFileName();
|
String fileName = edFileInfo.getFileName();
|
||||||
String parentId = edFileInfo.getParentId();
|
String parentId = edFileInfo.getParentId();
|
||||||
List<EdFileInfo> folders = queryChildFolders(parentId);
|
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();
|
List<String> folderNames = folders.stream().map(EdFileInfo::getFileName).toList();
|
||||||
if (folderNames.contains(fileName)) { // 有同名文件夹
|
if (folderNames.contains(fileName)) { // 有同名文件夹
|
||||||
// 判断id是否相同
|
// 判断id是否相同
|
||||||
if (foldersMap.get(fileName).getId().equals(edFileInfo.getId())) { // id相同,不做处理
|
if (foldersMap.get(fileName).getId().equals(edFileInfo.getId())) { // id相同,不做处理
|
||||||
log.info("id相同,不做处理");
|
log.info("id相同,不做处理");
|
||||||
} else { // 文件名重复,导入的文件名需要添加“_1”
|
} 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);
|
allObjs.add(edFileInfo);
|
||||||
}
|
}
|
||||||
} else { // 没有同名文件夹
|
} else { // 没有同名文件夹
|
||||||
|
|
@ -527,25 +533,31 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
fileInfoMap.put(edFileInfo.getFileId(), list);
|
fileInfoMap.put(edFileInfo.getFileId(), list);
|
||||||
}
|
}
|
||||||
for (Map.Entry<String, List<EdFileInfo>> entry : fileInfoMap.entrySet()) {
|
for (Map.Entry<String, List<EdFileInfo>> entry : fileInfoMap.entrySet()) {
|
||||||
String k = entry.getKey();
|
String fileId = entry.getKey();
|
||||||
List<EdFileInfo> v = entry.getValue();
|
List<EdFileInfo> importFiles = entry.getValue();
|
||||||
v.sort(Comparator.comparing(EdFileInfo::getCreatedTime));
|
importFiles.sort(Comparator.comparing(EdFileInfo::getCreatedTime));
|
||||||
List<EdFileInfo> dbFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getFileId, k).orderByAsc(EdFileInfo::getFileVersion));
|
List<EdFileInfo> dbFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getFileId, fileId).orderByAsc(EdFileInfo::getFileVersion));
|
||||||
if (CollUtil.isEmpty(dbFileInfos)) { // 在线上没有找到,则该批文件是从线下上传的
|
// 在线上没有找到,则该批文件是从线下上传的
|
||||||
EdFileInfo fileInfo = v.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst().get();
|
if (CollUtil.isEmpty(dbFileInfos)) {
|
||||||
|
EdFileInfo fileInfo = importFiles.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst().get();
|
||||||
|
String previousName = fileInfo.getFileName();
|
||||||
resetFileInfoName(fileInfo);
|
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 {
|
} else {
|
||||||
Map<String, EdFileInfo> dbIdMap = dbFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e));
|
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);
|
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);
|
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()) {
|
if (first.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -568,17 +580,19 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
} else {
|
} else {
|
||||||
effectId = importEffectFile.getUpdatedTime().after(dbEffectFile.getUpdatedTime()) ? importEffectFile.getId() : dbEffectFile.getId();
|
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);
|
Map<String, String> dbVersionRelation = getVersionRelation(deepCopyDb);
|
||||||
|
|
||||||
dbVersionRelation.putAll(importVersionRelation);
|
dbVersionRelation.putAll(importVersionRelation);
|
||||||
//**************************
|
//**************************
|
||||||
int start = FILE_START_VERSION;
|
int start = FILE_START_VERSION;
|
||||||
List<EdFileInfo> saveObjs = new ArrayList<>();
|
List<EdFileInfo> saveObjs = new ArrayList<>();
|
||||||
for (EdFileInfo importFileInfo : v) {
|
for (EdFileInfo importFileInfo : importFiles) {
|
||||||
if (dbIdMap.containsKey(importFileInfo.getId())) { // 该文件在数据库中存在,是从线上导出的。
|
// 该文件在数据库中存在,是从线上导出的。
|
||||||
|
if (dbIdMap.containsKey(importFileInfo.getId())) {
|
||||||
EdFileInfo dbFileInfo = dbIdMap.get(importFileInfo.getId());
|
EdFileInfo dbFileInfo = dbIdMap.get(importFileInfo.getId());
|
||||||
if (dbFileInfo.getUpdatedTime().before(importFileInfo.getUpdatedTime())) { // 线下版本的修改时间比线上的新,用线下的版本
|
// 线下版本的修改时间比线上的新,用线下的版本
|
||||||
|
if (dbFileInfo.getUpdatedTime().before(importFileInfo.getUpdatedTime())) {
|
||||||
importFileInfo.setFileVersion(start);
|
importFileInfo.setFileVersion(start);
|
||||||
saveObjs.add(importFileInfo);
|
saveObjs.add(importFileInfo);
|
||||||
dbIdMap.remove(importFileInfo.getId());
|
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));
|
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();
|
List<EdFileInfo> files = needMove2FileSystemFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FILE.code)).toList();
|
||||||
for (EdFileInfo edFileInfo : files) {
|
for (EdFileInfo edFileInfo : files) {
|
||||||
String filePath = edFileInfo.getFilePath();
|
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)) {
|
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)) {
|
if (fileInfo.getDataType().equals(EleDataTypeEnum.FOLDER.code)) {
|
||||||
sysFilePath.append(fileInfo.getFileName()).append(File.separator);
|
String previousDirName = FILE_DB_ID_NAME.containsKey(id) ?
|
||||||
} else {
|
FILE_DB_ID_NAME.get(id).get(0) : fileInfo.getFileName();
|
||||||
sysFilePath.append(fileInfo.getFileName()).append(".").append(fileInfo.getFileType()).append(".").append(fileInfo.getFileCode());
|
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;
|
String destPath;
|
||||||
if (DataOwnEnum.isUserCode(dataOwnCode)) {
|
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 {
|
} 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);
|
fileSystemService.moveFile(sourcePath, destPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -675,7 +731,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
private List<EdFileInfo> queryChildFolders(String parentId) {
|
private List<EdFileInfo> queryChildFolders(String parentId) {
|
||||||
return this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getParentId, parentId)
|
return this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getParentId, parentId)
|
||||||
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code)
|
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code)
|
||||||
.eq(EdFileInfo::getEffectFlag, false));
|
.eq(EdFileInfo::getEffectFlag, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
@ -97,6 +98,9 @@ public class FileTagRelationServiceImpl extends ServiceImpl<FileTagRelationMappe
|
||||||
List<FileTagInfo> result = new ArrayList<>();
|
List<FileTagInfo> result = new ArrayList<>();
|
||||||
for (FileTagRelation relation : relations) {
|
for (FileTagRelation relation : relations) {
|
||||||
EdTagLibrary tagInfo = edTagLibraryMapper.selectById(relation.getTagId());
|
EdTagLibrary tagInfo = edTagLibraryMapper.selectById(relation.getTagId());
|
||||||
|
if (Objects.isNull(tagInfo)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
FileTagInfo vo = new FileTagInfo();
|
FileTagInfo vo = new FileTagInfo();
|
||||||
BeanUtils.copyProperties(tagInfo, vo);
|
BeanUtils.copyProperties(tagInfo, vo);
|
||||||
result.add(vo);
|
result.add(vo);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue