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 69eb618..d8bb5c7 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 @@ -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 selectAllPrjFolder(String id, List accessibleIds, int dataOwnCode) { + public List selectAllPrjFolder(String id, int dataOwnCode) { LambdaQueryWrapper 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.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.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.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 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); } } 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 93c7310..3485419 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 @@ -190,7 +190,7 @@ public class EdPrjServiceImpl extends ServiceImpl 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 try { // 把source工程的层级结构copy到目标工程 // 查找source的全部目录 - List sourceEdFileInfos = commonService.selectAllPrjFolder(sourceId, null, dataOwnCode); - List targetEdFileInfos = commonService.selectAllPrjFolder(targetId, null, dataOwnCode); + List sourceEdFileInfos = commonService.selectAllPrjFolder(sourceId, dataOwnCode); + List targetEdFileInfos = commonService.selectAllPrjFolder(targetId, 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()); @@ -364,11 +364,14 @@ public class EdPrjServiceImpl extends ServiceImpl } Map idMaps = new HashMap<>(); + idMaps.put(sourceId, targetId); + List sysFilePaths = new ArrayList<>(); 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); + targetEdFileInfos = commonService.selectAllPrjFolder(targetId, dataOwnCode); + EdFileInfo prjFileInfo = targetEdFileInfos.stream().filter(e -> e.getParentId().equals(PRJ_PARENT_ID)).findFirst().get(); 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) { @@ -381,7 +384,7 @@ public class EdPrjServiceImpl extends ServiceImpl .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 .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 edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).in(EdFileInfo::getId, idMaps.values())); + Map 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 .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 sourceEdFileInfos = commonService.selectAllPrjFolder(sourceId, null, dataOwnCode); - List needSavePaths = new ArrayList<>(); - // 确定层级最大为prjFolderMaxLength层,现在逐层来处理。 - for (int i = 1; i <= prjFolderMaxLength; ++i) { - List targetEdFileInfos = commonService.selectAllPrjFolder(targetId, null, dataOwnCode); - // 先查找source第i层下有那些子集 - final int count = i; - // 取source当前层 - List sourceCurrentLayerFiles = sourceEdFileInfos.stream() - .filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count) - .collect(Collectors.toList()); - // 取target父层 - List targetCurrentLayerFiles = targetEdFileInfos.stream() - .filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count - 1) - .collect(Collectors.toList()); - // 获取source名称的map - 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 = 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 } catch (Exception e) { String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 {}", sourceId, targetId, e.getMessage()); log.error(info, e); - throw new BizException(info, e); + throw new BizException(info); } } diff --git a/electrmangnetic/src/main/resources/sqlmapper/RolePermissionMapper.xml b/electrmangnetic/src/main/resources/sqlmapper/RolePermissionMapper.xml index 15ea916..0ad2e58 100644 --- a/electrmangnetic/src/main/resources/sqlmapper/RolePermissionMapper.xml +++ b/electrmangnetic/src/main/resources/sqlmapper/RolePermissionMapper.xml @@ -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}) diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/cons/ElectromagneticConstants.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/cons/ElectromagneticConstants.java index bcbe0f8..1295318 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/cons/ElectromagneticConstants.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/cons/ElectromagneticConstants.java @@ -18,5 +18,5 @@ public interface ElectromagneticConstants { int PRJ_ID_LENGTH = 6; - String DELETE_FLAG = "delete"; + String DELETE_FLAG = "deleted"; }