重写了工程层级沿用,待测试。
This commit is contained in:
parent
b840c659a0
commit
56b5838177
|
|
@ -501,9 +501,9 @@ public class CommonService {
|
||||||
Set<String> res = new HashSet<>();
|
Set<String> res = new HashSet<>();
|
||||||
|
|
||||||
List<String> prjInfo;
|
List<String> prjInfo;
|
||||||
if (dataOwnCode == DataOwnEnum.SYS_FILE.code) {
|
if (DataOwnEnum.isSysCode(dataOwnCode)) {
|
||||||
prjInfo = querySysPrjTree(PrjQuerySource.SYS_DB.value, null, new FileProjectVO()).getOrDefault(PrjQuerySource.SYS_DB.value, new ArrayList<>());
|
prjInfo = querySysPrjTree(PrjQuerySource.SYS_DB.value, null, new FileProjectVO()).getOrDefault(PrjQuerySource.SYS_DB.value, new ArrayList<>());
|
||||||
} else if (dataOwnCode == DataOwnEnum.USER_FILE.code) {
|
} else if (DataOwnEnum.isUserCode(dataOwnCode)) {
|
||||||
prjInfo = queryUserPrjTree(PrjQuerySource.USER_DB.value, new FileProjectVO()).getOrDefault(PrjQuerySource.USER_DB.value, new ArrayList<>());
|
prjInfo = queryUserPrjTree(PrjQuerySource.USER_DB.value, new FileProjectVO()).getOrDefault(PrjQuerySource.USER_DB.value, new ArrayList<>());
|
||||||
} else {
|
} else {
|
||||||
prjInfo = queryRepoPrjTree(PrjQuerySource.REPO_DB.value, new FileProjectVO()).getOrDefault(PrjQuerySource.REPO_DB.value, new ArrayList<>());
|
prjInfo = queryRepoPrjTree(PrjQuerySource.REPO_DB.value, new FileProjectVO()).getOrDefault(PrjQuerySource.REPO_DB.value, new ArrayList<>());
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package com.electromagnetic.industry.software.manage.service.serviceimpl;
|
package com.electromagnetic.industry.software.manage.service.serviceimpl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import cn.hutool.core.text.StrFormatter;
|
import cn.hutool.core.text.StrFormatter;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
|
@ -345,6 +347,108 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public ElectromagneticResult<?> follow(String sourceId, String targetId, int dataOwnCode) {
|
public ElectromagneticResult<?> follow(String sourceId, String targetId, int dataOwnCode) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 把source工程的层级结构copy到目标工程
|
||||||
|
// 查找source的全部目录
|
||||||
|
List<EdFileInfo> sourceEdFileInfos = commonService.selectAllPrjFolder(sourceId, null, dataOwnCode);
|
||||||
|
List<EdFileInfo> targetEdFileInfos = commonService.selectAllPrjFolder(targetId, null, 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());
|
||||||
|
|
||||||
|
Collection<String> intersection = CollectionUtil.intersection(sourceNames, targetNames);
|
||||||
|
if (CollUtil.isNotEmpty(intersection)) {
|
||||||
|
String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 存在相同子集", sourceId, targetId);
|
||||||
|
log.error(info);
|
||||||
|
return ElectromagneticResultUtil.fail("-1", info);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, String> idMaps = new HashMap<>();
|
||||||
|
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);
|
||||||
|
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) {
|
||||||
|
int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId());
|
||||||
|
String newFolderId = String.valueOf(maxFolderId + 1);
|
||||||
|
String nowTimeStr = EleCommonUtil.getNowTimeStr();
|
||||||
|
String fileCode = commonService.createFileCode(targetId, EleDataTypeEnum.FOLDER.desc, FILE_START_VERSION, nowTimeStr);
|
||||||
|
EdFileInfo targetFile = new EdFileInfo().setId(newFolderId)
|
||||||
|
.setFileId(newFolderId)
|
||||||
|
.setFileName(edFileInfo.getFileName())
|
||||||
|
.setFileVersion(FILE_START_VERSION)
|
||||||
|
.setDataOwn(dataOwnCode)
|
||||||
|
.setParentId(edFileInfo.getId())
|
||||||
|
.setFileTime(nowTimeStr)
|
||||||
|
.setDataType(EleDataTypeEnum.FOLDER.code)
|
||||||
|
.setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
|
||||||
|
.setEffectFlag(EffectFlagEnum.EFFECT.code)
|
||||||
|
.setFileCode(fileCode)
|
||||||
|
.setFileType("文件夹")
|
||||||
|
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
|
||||||
|
.setFilePath(edFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
|
||||||
|
.setSort(++size);
|
||||||
|
this.save(targetFile);
|
||||||
|
targetEdFileInfos.add(targetFile);
|
||||||
|
idMaps.put(edFileInfo.getFileId(), newFolderId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (EdFileInfo edFileInfo : currentSourceLayerDirs) {
|
||||||
|
String targetDirParentId = idMaps.get(edFileInfo.getParentId());
|
||||||
|
|
||||||
|
int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId());
|
||||||
|
String newFolderId = String.valueOf(maxFolderId + 1);
|
||||||
|
String nowTimeStr = EleCommonUtil.getNowTimeStr();
|
||||||
|
|
||||||
|
String fileCode = commonService.createFileCode(targetId, EleDataTypeEnum.FOLDER.desc, FILE_START_VERSION, nowTimeStr);
|
||||||
|
EdFileInfo targetFile = new EdFileInfo().setId(newFolderId)
|
||||||
|
.setFileId(newFolderId)
|
||||||
|
.setFileName(edFileInfo.getFileName())
|
||||||
|
.setFileVersion(FILE_START_VERSION)
|
||||||
|
.setDataOwn(dataOwnCode)
|
||||||
|
.setParentId(targetDirParentId)
|
||||||
|
.setFileTime(nowTimeStr)
|
||||||
|
.setDataType(EleDataTypeEnum.FOLDER.code)
|
||||||
|
.setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
|
||||||
|
.setEffectFlag(EffectFlagEnum.EFFECT.code)
|
||||||
|
.setFileCode(fileCode)
|
||||||
|
.setFileType("文件夹")
|
||||||
|
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
|
||||||
|
.setFilePath(edFileInfo.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 {
|
try {
|
||||||
// 把source工程的层级结构copy到目标工程
|
// 把source工程的层级结构copy到目标工程
|
||||||
// 查找source的全部目录
|
// 查找source的全部目录
|
||||||
|
|
@ -356,30 +460,32 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
||||||
// 先查找source第i层下有那些子集
|
// 先查找source第i层下有那些子集
|
||||||
final int count = i;
|
final int count = i;
|
||||||
// 取source当前层
|
// 取source当前层
|
||||||
List<EdFileInfo> sourceTmpEdFiles = sourceEdFileInfos.stream()
|
List<EdFileInfo> sourceCurrentLayerFiles = sourceEdFileInfos.stream()
|
||||||
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
|
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
// 取target父层
|
// 取target父层
|
||||||
List<EdFileInfo> targetTmpEdFiles = targetEdFileInfos.stream()
|
List<EdFileInfo> targetCurrentLayerFiles = targetEdFileInfos.stream()
|
||||||
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count - 1)
|
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count - 1)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
// 获取source名称的map
|
// 获取source名称的map
|
||||||
Map<String, EdFileInfo> sourceFileNameMap = sourceTmpEdFiles.stream()
|
Map<String, EdFileInfo> sourceFileNameMap = sourceCurrentLayerFiles.stream()
|
||||||
.collect(Collectors.toMap(EdFileInfo::getFileName, e -> e));
|
.collect(Collectors.toMap(EdFileInfo::getId, e -> e));
|
||||||
// 获取target当前层级的子集名称
|
// 获取target当前层级的子集名称
|
||||||
List<String> targetFileNames = targetEdFileInfos.stream()
|
List<String> targetFileNames = targetEdFileInfos.stream()
|
||||||
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
|
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
|
||||||
.map(EdFileInfo::getFileName)
|
.map(EdFileInfo::getFileName)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
int sort = targetTmpEdFiles.size();
|
int sort = targetCurrentLayerFiles.size();
|
||||||
for (EdFileInfo edFileInfo : sourceTmpEdFiles) {
|
for (EdFileInfo edFileInfo : sourceCurrentLayerFiles) {
|
||||||
String sourceFileName = edFileInfo.getFileName();
|
String sourceFileName = edFileInfo.getFileName();
|
||||||
|
|
||||||
String sourceFileParentName = sourceEdFileInfos.stream().filter(e -> e.getId().equals(edFileInfo.getParentId())).findFirst().get().getFileName();
|
String sourceFileParentName = sourceEdFileInfos.stream().filter(e -> e.getId().equals(edFileInfo.getParentId())).findFirst().get().getFileName();
|
||||||
EdFileInfo targetParentFile = i == 1 ? targetTmpEdFiles.stream().filter(e -> e.getId().equals(targetId)).findFirst().get() : targetTmpEdFiles.stream().filter(e -> e.getFileName().equals(sourceFileParentName)).findFirst().get();
|
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)) {
|
if (!targetFileNames.contains(sourceFileName)) {
|
||||||
EdFileInfo sourceFile = sourceFileNameMap.get(sourceFileName);
|
EdFileInfo sourceFile = sourceFileNameMap.get(edFileInfo.getId());
|
||||||
EdFileInfo targetFile = new EdFileInfo();
|
EdFileInfo targetFile = new EdFileInfo();
|
||||||
int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId());
|
int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId());
|
||||||
|
|
||||||
|
|
@ -408,7 +514,7 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
||||||
} else {
|
} else {
|
||||||
String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 存在相同子集", sourceId, targetId);
|
String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 存在相同子集", sourceId, targetId);
|
||||||
log.error(info);
|
log.error(info);
|
||||||
throw new BizException(info);
|
return ElectromagneticResultUtil.fail("-1", info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue