重写了follow处理,修改发现的已知问题。
This commit is contained in:
parent
56b5838177
commit
06844c7557
|
|
@ -1,6 +1,7 @@
|
|||
package com.electromagnetic.industry.software.manage.service.serviceimpl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
import cn.hutool.core.lang.tree.TreeNodeConfig;
|
||||
|
|
@ -185,16 +186,15 @@ public class CommonService {
|
|||
return parentId + fileFormat.getSuffixNo() + version + timeStr;
|
||||
}
|
||||
|
||||
public List<EdFileInfo> selectAllPrjFolder(String id, List<String> accessibleIds, int dataOwnCode) {
|
||||
public List<EdFileInfo> selectAllPrjFolder(String id, int dataOwnCode) {
|
||||
|
||||
LambdaQueryWrapper<EdFileInfo> queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code)
|
||||
.likeRight(EdFileInfo::getFilePath, id);
|
||||
if (dataOwnCode == DataOwnEnum.SYS_FILE.code || dataOwnCode == DataOwnEnum.SYS_PRJ.code) {
|
||||
if (DataOwnEnum.isSysCode(dataOwnCode)) {
|
||||
queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code);
|
||||
queryWrapper.in(EdFileInfo::getId, accessibleIds);
|
||||
} else if (dataOwnCode == DataOwnEnum.USER_FILE.code || dataOwnCode == DataOwnEnum.USER_PRJ.code) {
|
||||
} else if (DataOwnEnum.isUserCode(dataOwnCode)) {
|
||||
queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code);
|
||||
} else {
|
||||
queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code);
|
||||
|
|
@ -416,19 +416,17 @@ public class CommonService {
|
|||
public ElectromagneticResult<?> deleteFolder(String id, int dataOwnCode) {
|
||||
// 如果文件夹下存在文件(包括文件夹和已经逻辑删除的文件),则不允许删除。后面管理员选择会有物理删除文件夹和文件的功能,此时MySQL和文件系统则会进行物理删除该文件。
|
||||
EdFileInfo srcFileInfo = edFileInfoMapper.selectById(id);
|
||||
String srcPrjName = srcFileInfo.getFileName();
|
||||
String srcFilePath = getFileSysPath(srcFileInfo.getFilePath(), dataOwnCode);
|
||||
EdFileInfo fileInfo = edFileInfoMapper.selectOne(Wrappers.<EdFileInfo>lambdaQuery().eq(EdFileInfo::getId, id));
|
||||
try {
|
||||
// 这里要分两种情况,1是删除层级目录,2是删除用户创建的文件夹
|
||||
String parentId = fileInfo.getParentId();
|
||||
if (fileInfo.getDataOwn().equals(DataOwnEnum.SYS_PRJ.code)) { // 删除的是层级目录
|
||||
String parentId = srcFileInfo.getParentId();
|
||||
if (DataOwnEnum.isPrjCode(srcFileInfo.getDataOwn())) { // 删除的是层级目录
|
||||
long count = edFileInfoMapper.selectCount(Wrappers.<EdFileInfo>lambdaQuery()
|
||||
.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_FILE.code)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||
.like(EdFileInfo::getFilePath, MYSQL_FILE_PATH_SPLIT + id + MYSQL_FILE_PATH_SPLIT));
|
||||
if (count > 0) {
|
||||
String info = StrFormatter.format("删除层级 {} 失败,目录非空。", fileInfo.getFileName());
|
||||
String info = StrFormatter.format("删除层级 {} 失败,目录非空。", srcFileInfo.getFileName());
|
||||
log.info(info);
|
||||
return ElectromagneticResultUtil.fail("-1", info);
|
||||
} else {
|
||||
|
|
@ -458,7 +456,7 @@ public class CommonService {
|
|||
.eq(EdFileInfo::getParentId, id)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
|
||||
if (count > 0) {
|
||||
String info = StrFormatter.format("删除文件夹 {} 失败,目录非空。", fileInfo.getFileName());
|
||||
String info = StrFormatter.format("删除文件夹 {} 失败,目录非空。", srcFileInfo.getFileName());
|
||||
log.info(info);
|
||||
return ElectromagneticResultUtil.fail("-1", info);
|
||||
} else {
|
||||
|
|
@ -466,14 +464,13 @@ public class CommonService {
|
|||
edFileInfoMapper.update(new EdFileInfo(), Wrappers.<EdFileInfo>lambdaUpdate()
|
||||
.eq(EdFileInfo::getId, id)
|
||||
.set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code));
|
||||
fileSystemService.renameFile(srcFilePath, srcPrjName + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG);
|
||||
fileSystemService.renameFile(srcFilePath, srcFileInfo.getFileName() + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG);
|
||||
}
|
||||
}
|
||||
// fileSystemService.renameFile(srcFilePath, srcPrjName + "." + IdUtil.fastSimpleUUID() + DELETE_FLAG);
|
||||
UserThreadLocal.setSuccessInfo(srcFileInfo.getParentId(), id, "删除目录 {} 成功", fileInfo.getFileName());
|
||||
UserThreadLocal.setSuccessInfo(srcFileInfo.getParentId(), id, "删除目录 {} 成功", srcFileInfo.getFileName());
|
||||
return ElectromagneticResultUtil.success(true);
|
||||
} catch (Exception e) {
|
||||
String info = StrFormatter.format("删除 {} 失败,原因 {}", fileInfo.getFileName(), e.getMessage());
|
||||
String info = StrFormatter.format("删除 {} 失败,原因 {}", srcFileInfo.getFileName(), e.getMessage());
|
||||
log.error(info, e);
|
||||
throw new BizException(info);
|
||||
}
|
||||
|
|
@ -519,8 +516,11 @@ public class CommonService {
|
|||
|
||||
public void deletePrjSysDir(List<String> paths) {
|
||||
for (String path : paths) {
|
||||
String preDirName = new File(path).getParentFile().getName();
|
||||
fileSystemService.renameFile(path, preDirName + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG);
|
||||
if (!FileUtil.exist(path)) {
|
||||
continue;
|
||||
}
|
||||
String fileName = new File(path).getName();
|
||||
fileSystemService.renameFile(path, fileName + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
|||
this.baseMapper.update(new EdFileInfo(), Wrappers.lambdaUpdate(EdFileInfo.class).set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code).in(EdFileInfo::getId, ids));
|
||||
// 对原文件进行处理
|
||||
EdFileInfo prjFile = this.getById(prjId);
|
||||
fileSystemService.renameFile(commonService.getFileSysPath(prjId, dataOwnCode), prjFile + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG);
|
||||
fileSystemService.renameFile(commonService.getFileSysPath(prjId, dataOwnCode), prjFile.getFileName() + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG);
|
||||
UserThreadLocal.setSuccessInfo("", prjId, "废除 {} 项目成功。", prjFile.getFileName());
|
||||
return ElectromagneticResultUtil.success(true);
|
||||
} catch (Exception e) {
|
||||
|
|
@ -350,8 +350,8 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
|||
try {
|
||||
// 把source工程的层级结构copy到目标工程
|
||||
// 查找source的全部目录
|
||||
List<EdFileInfo> sourceEdFileInfos = commonService.selectAllPrjFolder(sourceId, null, dataOwnCode);
|
||||
List<EdFileInfo> targetEdFileInfos = commonService.selectAllPrjFolder(targetId, null, dataOwnCode);
|
||||
List<EdFileInfo> sourceEdFileInfos = commonService.selectAllPrjFolder(sourceId, dataOwnCode);
|
||||
List<EdFileInfo> targetEdFileInfos = commonService.selectAllPrjFolder(targetId, dataOwnCode);
|
||||
//
|
||||
Set<String> sourceNames = sourceEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == 1).map(EdFileInfo::getFileName).collect(Collectors.toSet());
|
||||
Set<String> targetNames = targetEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == 1).map(EdFileInfo::getFileName).collect(Collectors.toSet());
|
||||
|
|
@ -364,11 +364,14 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
|||
}
|
||||
|
||||
Map<String, String> idMaps = new HashMap<>();
|
||||
idMaps.put(sourceId, targetId);
|
||||
List<String> sysFilePaths = new ArrayList<>();
|
||||
for (int i = 1; i <= prjFolderMaxLength; ++i) {
|
||||
int layerIndex = i;
|
||||
List<EdFileInfo> currentSourceLayerDirs = sourceEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == layerIndex).collect(Collectors.toList());
|
||||
if (layerIndex == 1) {
|
||||
targetEdFileInfos = commonService.selectAllPrjFolder(targetId, null, dataOwnCode);
|
||||
targetEdFileInfos = commonService.selectAllPrjFolder(targetId, dataOwnCode);
|
||||
EdFileInfo prjFileInfo = targetEdFileInfos.stream().filter(e -> e.getParentId().equals(PRJ_PARENT_ID)).findFirst().get();
|
||||
List<EdFileInfo> targetChildLayerDirs = targetEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == 1).collect(Collectors.toList());
|
||||
int size = targetChildLayerDirs.size();
|
||||
for (EdFileInfo edFileInfo : currentSourceLayerDirs) {
|
||||
|
|
@ -381,7 +384,7 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
|||
.setFileName(edFileInfo.getFileName())
|
||||
.setFileVersion(FILE_START_VERSION)
|
||||
.setDataOwn(dataOwnCode)
|
||||
.setParentId(edFileInfo.getId())
|
||||
.setParentId(idMaps.get(edFileInfo.getParentId()))
|
||||
.setFileTime(nowTimeStr)
|
||||
.setDataType(EleDataTypeEnum.FOLDER.code)
|
||||
.setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
|
||||
|
|
@ -389,16 +392,20 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
|||
.setFileCode(fileCode)
|
||||
.setFileType("文件夹")
|
||||
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
|
||||
.setFilePath(edFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
|
||||
.setFilePath(prjFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
|
||||
.setSort(++size);
|
||||
this.save(targetFile);
|
||||
targetEdFileInfos.add(targetFile);
|
||||
idMaps.put(edFileInfo.getFileId(), newFolderId);
|
||||
String targetSysFilePath = commonService.getFileSysPath(targetFile.getFilePath(), dataOwnCode);
|
||||
sysFilePaths.add(targetSysFilePath);
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
List<EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).in(EdFileInfo::getId, idMaps.values()));
|
||||
Map<String, EdFileInfo> map = edFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e));
|
||||
for (EdFileInfo edFileInfo : currentSourceLayerDirs) {
|
||||
String targetDirParentId = idMaps.get(edFileInfo.getParentId());
|
||||
EdFileInfo parentFileInfo = map.get(targetDirParentId);
|
||||
|
||||
int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId());
|
||||
String newFolderId = String.valueOf(maxFolderId + 1);
|
||||
|
|
@ -418,107 +425,17 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
|||
.setFileCode(fileCode)
|
||||
.setFileType("文件夹")
|
||||
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
|
||||
.setFilePath(edFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
|
||||
.setFilePath(parentFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
|
||||
.setSort(edFileInfo.getSort());
|
||||
this.save(targetFile);
|
||||
targetEdFileInfos.add(targetFile);
|
||||
idMaps.put(edFileInfo.getFileId(), newFolderId);
|
||||
}
|
||||
}
|
||||
}
|
||||
UserThreadLocal.setSuccessInfo("", targetId, "层级沿用成功");
|
||||
return ElectromagneticResultUtil.success(true);
|
||||
} catch (Exception e) {
|
||||
String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 存在相同子集", sourceId, targetId);
|
||||
log.error(info);
|
||||
throw new BizException(info);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 层级沿用
|
||||
*
|
||||
* @param sourceId
|
||||
* @param targetId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ElectromagneticResult<?> follow1(String sourceId, String targetId, int dataOwnCode) {
|
||||
|
||||
try {
|
||||
// 把source工程的层级结构copy到目标工程
|
||||
// 查找source的全部目录
|
||||
List<EdFileInfo> sourceEdFileInfos = commonService.selectAllPrjFolder(sourceId, null, dataOwnCode);
|
||||
List<String> needSavePaths = new ArrayList<>();
|
||||
// 确定层级最大为prjFolderMaxLength层,现在逐层来处理。
|
||||
for (int i = 1; i <= prjFolderMaxLength; ++i) {
|
||||
List<EdFileInfo> targetEdFileInfos = commonService.selectAllPrjFolder(targetId, null, dataOwnCode);
|
||||
// 先查找source第i层下有那些子集
|
||||
final int count = i;
|
||||
// 取source当前层
|
||||
List<EdFileInfo> sourceCurrentLayerFiles = sourceEdFileInfos.stream()
|
||||
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
|
||||
.collect(Collectors.toList());
|
||||
// 取target父层
|
||||
List<EdFileInfo> targetCurrentLayerFiles = targetEdFileInfos.stream()
|
||||
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count - 1)
|
||||
.collect(Collectors.toList());
|
||||
// 获取source名称的map
|
||||
Map<String, EdFileInfo> sourceFileNameMap = sourceCurrentLayerFiles.stream()
|
||||
.collect(Collectors.toMap(EdFileInfo::getId, e -> e));
|
||||
// 获取target当前层级的子集名称
|
||||
List<String> targetFileNames = targetEdFileInfos.stream()
|
||||
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
|
||||
.map(EdFileInfo::getFileName)
|
||||
.collect(Collectors.toList());
|
||||
int sort = targetCurrentLayerFiles.size();
|
||||
for (EdFileInfo edFileInfo : sourceCurrentLayerFiles) {
|
||||
String sourceFileName = edFileInfo.getFileName();
|
||||
|
||||
String sourceFileParentName = sourceEdFileInfos.stream().filter(e -> e.getId().equals(edFileInfo.getParentId())).findFirst().get().getFileName();
|
||||
EdFileInfo targetParentFile = i == 1 ?
|
||||
targetCurrentLayerFiles.stream().filter(e -> e.getId().equals(targetId)).findFirst().get() :
|
||||
targetCurrentLayerFiles.stream().filter(e -> e.getFileName().equals(sourceFileParentName)).findFirst().get(); // TODO BUGS
|
||||
|
||||
if (!targetFileNames.contains(sourceFileName)) {
|
||||
EdFileInfo sourceFile = sourceFileNameMap.get(edFileInfo.getId());
|
||||
EdFileInfo targetFile = new EdFileInfo();
|
||||
int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId());
|
||||
|
||||
String newFolderId = String.valueOf(maxFolderId + 1);
|
||||
String nowTimeStr = EleCommonUtil.getNowTimeStr();
|
||||
String fileCode = commonService.createFileCode(targetParentFile.getId(), EleDataTypeEnum.FOLDER.desc, FILE_START_VERSION, nowTimeStr);
|
||||
targetFile.setId(newFolderId)
|
||||
.setFileId(newFolderId)
|
||||
.setFileName(sourceFile.getFileName())
|
||||
.setFileVersion(FILE_START_VERSION)
|
||||
.setDataOwn(dataOwnCode)
|
||||
.setParentId(targetParentFile.getId())
|
||||
.setFileTime(nowTimeStr)
|
||||
.setDataType(EleDataTypeEnum.FOLDER.code)
|
||||
.setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
|
||||
.setEffectFlag(EffectFlagEnum.EFFECT.code)
|
||||
.setFileCode(fileCode)
|
||||
.setFileType("文件夹")
|
||||
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
|
||||
.setFilePath(targetParentFile.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
|
||||
.setSort(++sort);
|
||||
this.save(targetFile);
|
||||
targetEdFileInfos.add(targetFile);
|
||||
String targetSysFilePath = commonService.getFileSysPath(targetFile.getFilePath(), dataOwnCode);
|
||||
needSavePaths.add(targetSysFilePath);
|
||||
} else {
|
||||
String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 存在相同子集", sourceId, targetId);
|
||||
log.error(info);
|
||||
return ElectromagneticResultUtil.fail("-1", info);
|
||||
sysFilePaths.add(targetSysFilePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (String path : needSavePaths) {
|
||||
for (String path : sysFilePaths) {
|
||||
fileSystemService.createDirectory(path);
|
||||
}
|
||||
UserThreadLocal.setSuccessInfo("", targetId, "层级沿用成功");
|
||||
|
|
@ -526,7 +443,7 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
|||
} catch (Exception e) {
|
||||
String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 {}", sourceId, targetId, e.getMessage());
|
||||
log.error(info, e);
|
||||
throw new BizException(info, e);
|
||||
throw new BizException(info);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,14 +16,14 @@
|
|||
FROM ed_role_permission rp
|
||||
JOIN ed_file_info f ON rp.file_id = f.id
|
||||
WHERE f.parent_id = #{fileId}
|
||||
AND f.prj_dir = #{prjDir}
|
||||
AND f.data_own = #{prjDir}
|
||||
AND f.data_status = #{dataStatus}
|
||||
AND f.effect_flag = #{effectFlag}
|
||||
GROUP BY rp.role_id, rp.permission_code
|
||||
HAVING COUNT(f.id) = (SELECT COUNT(f2.id)
|
||||
FROM ed_file_info f2
|
||||
WHERE f2.parent_id = #{fileId}
|
||||
AND f2.prj_dir = #{prjDir}
|
||||
AND f2.data_own = #{prjDir}
|
||||
AND f2.data_status = #{dataStatus}
|
||||
AND f2.effect_flag = #{effectFlag})
|
||||
</select>
|
||||
|
|
|
|||
|
|
@ -18,5 +18,5 @@ public interface ElectromagneticConstants {
|
|||
|
||||
int PRJ_ID_LENGTH = 6;
|
||||
|
||||
String DELETE_FLAG = "delete";
|
||||
String DELETE_FLAG = "deleted";
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue