From 56b5838177b198310449897aac598a0b0adee20a Mon Sep 17 00:00:00 2001 From: chenxudong Date: Mon, 17 Mar 2025 18:01:09 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=86=99=E4=BA=86=E5=B7=A5=E7=A8=8B?= =?UTF-8?q?=E5=B1=82=E7=BA=A7=E6=B2=BF=E7=94=A8=EF=BC=8C=E5=BE=85=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/serviceimpl/CommonService.java | 4 +- .../service/serviceimpl/EdPrjServiceImpl.java | 124 ++++++++++++++++-- 2 files changed, 117 insertions(+), 11 deletions(-) diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java index 9b5aca5..69eb618 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java @@ -501,9 +501,9 @@ public class CommonService { Set res = new HashSet<>(); List 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<>()); - } 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<>()); } else { prjInfo = queryRepoPrjTree(PrjQuerySource.REPO_DB.value, new FileProjectVO()).getOrDefault(PrjQuerySource.REPO_DB.value, new ArrayList<>()); diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdPrjServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdPrjServiceImpl.java index dca03a4..93c7310 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdPrjServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdPrjServiceImpl.java @@ -1,5 +1,7 @@ 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.text.StrFormatter; import cn.hutool.core.util.IdUtil; @@ -345,6 +347,108 @@ public class EdPrjServiceImpl extends ServiceImpl @Transactional(rollbackFor = Exception.class) public ElectromagneticResult follow(String sourceId, String targetId, int dataOwnCode) { + try { + // 把source工程的层级结构copy到目标工程 + // 查找source的全部目录 + List sourceEdFileInfos = commonService.selectAllPrjFolder(sourceId, null, dataOwnCode); + List targetEdFileInfos = commonService.selectAllPrjFolder(targetId, null, dataOwnCode); + // + Set sourceNames = sourceEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == 1).map(EdFileInfo::getFileName).collect(Collectors.toSet()); + Set targetNames = targetEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == 1).map(EdFileInfo::getFileName).collect(Collectors.toSet()); + + Collection intersection = CollectionUtil.intersection(sourceNames, targetNames); + if (CollUtil.isNotEmpty(intersection)) { + String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 存在相同子集", sourceId, targetId); + log.error(info); + return ElectromagneticResultUtil.fail("-1", info); + } + + Map idMaps = new HashMap<>(); + for (int i = 1; i <= prjFolderMaxLength; ++i) { + int layerIndex = i; + List 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 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 { // 把source工程的层级结构copy到目标工程 // 查找source的全部目录 @@ -356,30 +460,32 @@ public class EdPrjServiceImpl extends ServiceImpl // 先查找source第i层下有那些子集 final int count = i; // 取source当前层 - List sourceTmpEdFiles = sourceEdFileInfos.stream() + List sourceCurrentLayerFiles = sourceEdFileInfos.stream() .filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count) .collect(Collectors.toList()); // 取target父层 - List targetTmpEdFiles = targetEdFileInfos.stream() + List targetCurrentLayerFiles = targetEdFileInfos.stream() .filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count - 1) .collect(Collectors.toList()); // 获取source名称的map - Map sourceFileNameMap = sourceTmpEdFiles.stream() - .collect(Collectors.toMap(EdFileInfo::getFileName, e -> e)); + Map sourceFileNameMap = sourceCurrentLayerFiles.stream() + .collect(Collectors.toMap(EdFileInfo::getId, e -> e)); // 获取target当前层级的子集名称 List targetFileNames = targetEdFileInfos.stream() .filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count) .map(EdFileInfo::getFileName) .collect(Collectors.toList()); - int sort = targetTmpEdFiles.size(); - for (EdFileInfo edFileInfo : sourceTmpEdFiles) { + 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 ? 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)) { - EdFileInfo sourceFile = sourceFileNameMap.get(sourceFileName); + EdFileInfo sourceFile = sourceFileNameMap.get(edFileInfo.getId()); EdFileInfo targetFile = new EdFileInfo(); int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId()); @@ -408,7 +514,7 @@ public class EdPrjServiceImpl extends ServiceImpl } else { String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 存在相同子集", sourceId, targetId); log.error(info); - throw new BizException(info); + return ElectromagneticResultUtil.fail("-1", info); } } }