From c983fda287244d6e2be69fcd1e7bdc8b8b15237a Mon Sep 17 00:00:00 2001 From: chenxudong Date: Wed, 16 Apr 2025 11:26:07 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=87=E4=BB=B6=E7=B3=BB=E7=BB=9F=E5=AE=8C?= =?UTF-8?q?=E5=85=A8=E4=BE=9D=E8=B5=96MySQL=EF=BC=8C=E5=8E=BB=E9=99=A4?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E7=B3=BB=E7=BB=9F=E5=B1=82=E9=9D=A2=E7=9A=84?= =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E3=80=82=202.=E6=95=B4=E7=90=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/pojo/models/EdFileInfo.java | 5 + .../manage/service/FileSystemService.java | 4 - .../service/serviceimpl/CommonService.java | 54 ++--- .../serviceimpl/EdFileInfoServiceImpl.java | 217 +++++------------- .../EdFileRelationServiceImpl.java | 2 +- .../service/serviceimpl/EdPrjServiceImpl.java | 77 ++----- .../serviceimpl/FileRecycleServiceImpl.java | 6 +- .../serviceimpl/FileSystemServiceImpl.java | 10 - .../software/manage/tasks/BackupTask.java | 4 +- .../common/cons/ElectromagneticConstants.java | 2 + 10 files changed, 100 insertions(+), 281 deletions(-) diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileInfo.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileInfo.java index 267572d..3e7d7e3 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileInfo.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileInfo.java @@ -1,5 +1,6 @@ package com.electromagnetic.industry.software.manage.pojo.models; +import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.electromagnetic.industry.software.common.enums.EffectFlagEnum; @@ -124,6 +125,9 @@ public class EdFileInfo extends BaseModel { @TableField(value = "permanent_deleted") private Boolean permanentDeleted; + @TableField(value = "uuid") + private String uuid; + public void newInit() { String userId = UserThreadLocal.getUserId(); String newFileDbId = IdWorker.getSnowFlakeIdString(); @@ -137,5 +141,6 @@ public class EdFileInfo extends BaseModel { this.setCreatedBy(userId); this.setFileId(newFileDbId); this.setEffectFlag(EffectFlagEnum.EFFECT.code); + this.setUuid(IdUtil.fastSimpleUUID()); } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/FileSystemService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/FileSystemService.java index 581e7ad..49ba7fc 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/FileSystemService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/FileSystemService.java @@ -4,8 +4,6 @@ import java.io.InputStream; public interface FileSystemService { - void createDirectory(String path); - void copyFile(String source, String destination); void moveFile(String source, String destination); @@ -16,8 +14,6 @@ public interface FileSystemService { void renameFile(String sourcePath, String sourceName, String newName); - boolean checkFolderExist(String newPath); - boolean writeStringToFile(String filePath, String contents); boolean deleteFile(String... filePaths); 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 2f91d9f..5b32c64 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,7 +1,6 @@ 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; @@ -137,17 +136,21 @@ public class CommonService { return count == 0; } - public String getFileSysPath(String dbPath, int dataOwnCode) { - ArrayList paths = CollUtil.newArrayList(dbPath.split(MYSQL_FILE_PATH_SPLIT)); - String path = getDbPath(paths); - String destPath; - if (DataOwnEnum.isUserCode(dataOwnCode)) { - EdFileInfo prjFileInfo = edFileInfoMapper.selectById(paths.get(0)); - destPath = getPrjRootPath1(dataOwnCode) + prjFileInfo.getCreatedBy() + File.separator + path; - } else { - destPath = getPrjRootPath1(dataOwnCode) + File.separator + path; + public String getFileSysPath(String id) { + EdFileInfo fileInfo = edFileInfoMapper.selectById(id); + String uuid = fileInfo.getUuid(); + String fileType = fileInfo.getFileType(); + int dataOwnCode = fileInfo.getDataOwn(); + DataOwnEnum enumByCode = DataOwnEnum.getEnumByCode(dataOwnCode); + String fileName = id + MYSQL_FILE_PATH_SPLIT + uuid + "." + fileType; + String filePath; + switch (Objects.requireNonNull(enumByCode)) { + case SYS_FILE, SYS_PRJ, REPO_PRJ, REPO_FILE -> filePath = getPrjRootPath1(dataOwnCode) + fileName; + case USER_FILE, USER_PRJ -> + filePath = getPrjRootPath1(dataOwnCode) + fileInfo.getCreatedBy() + File.separator + fileName; + default -> throw new BizException("参数错误"); } - return destPath.replace("//", "/"); + return filePath; } public String getDbPath(String dbPath) { @@ -243,6 +246,7 @@ public class CommonService { try { String path = currentPath + MYSQL_FILE_PATH_SPLIT + folderId; EdFileInfo fileInfo = new EdFileInfo(); + fileInfo.newInit(); String nowTimeStr = EleCommonUtil.getNowTimeStr(); fileInfo.setId(folderId) .setFileId(folderId) @@ -261,14 +265,6 @@ public class CommonService { .setDataOwn(dataOwnCode) .setEffectFlag(EffectFlagEnum.EFFECT.code); edFileInfoMapper.insert(fileInfo); - // 保存到文件系统 - String targetFilePath; - if (DataOwnEnum.isUserCode(dataOwnCode)) { - targetFilePath = getPrjRootPath1(dataOwnCode) + File.separator + UserThreadLocal.getUserId() + File.separator + getDbPath(paths) + File.separator + folderName; - } else { - targetFilePath = getPrjRootPath1(dataOwnCode) + File.separator + getDbPath(paths) + File.separator + folderName; - } - fileSystemService.createDirectory(targetFilePath); return ElectromagneticResultUtil.success(folderId); } catch (Exception e) { String info = StrFormatter.format("{} 添加失败,原因 {}", folderName, e.getMessage()); @@ -440,7 +436,7 @@ public class CommonService { // 如果文件夹下存在文件(包括文件夹和已经逻辑删除的文件),则不允许删除。后面管理员选择会有物理删除文件夹和文件的功能,此时MySQL和文件系统则会进行物理删除该文件。 EdFileInfo srcFileInfo = edFileInfoMapper.selectById(id); Assert.isTrue(srcFileInfo.getDataType().equals(EleDataTypeEnum.FOLDER.code), "禁止删除目录"); - String srcFilePath = getFileSysPath(srcFileInfo.getFilePath(), dataOwnCode); + String srcFilePath = getFileSysPath(srcFileInfo.getId()); String uuid = IdUtil.fastSimpleUUID(); try { // 这里要分两种情况,1是删除层级目录,2是删除用户创建的文件夹 @@ -514,12 +510,6 @@ public class CommonService { return null; } - public String getPrjNameByDbPath(String dbPath) { - List paths = StrUtil.split(dbPath, MYSQL_FILE_PATH_SPLIT); - String prjId = paths.get(0); - return edFileInfoMapper.selectById(prjId).getFileName(); - } - public Set selectPrjLeafs(int dataOwnCode, List accessibleIds) { Set res = new HashSet<>(); @@ -545,18 +535,6 @@ public class CommonService { return res; } - public void deletePrjSysDir(Map map) { - - for (Map.Entry entry : map.entrySet()) { - String srcPath = entry.getKey(); - String newName = entry.getValue(); - if (!FileUtil.exist(srcPath)) { - continue; - } - fileSystemService.renameFile(srcPath, newName); - } - } - public String getLastPrjLeafId(String path) { String[] split = path.split(MYSQL_FILE_PATH_SPLIT); for (int i = split.length - 1; i >= 0; i--) { diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java index b70e9a4..11480c0 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java @@ -86,6 +86,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl download(String id, HttpServletResponse response, int dataOwnCode) { String fileName = ""; EdFileInfo fileInfo = this.baseMapper.selectById(id); - String fileSysPath = commonService.getFileSysPath(fileInfo.getFilePath(), dataOwnCode); + String fileSysPath = commonService.getFileSysPath(id); String dbPath = commonService.getDbPath(fileInfo.getFilePath()); try { Assert.isTrue(FileUtil.exist(fileSysPath), "下载文件不存在,路径为 {}", dbPath); @@ -344,7 +346,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl needMove2FileSystemFiles, String prjDirPath, int dataOwnCode) { - Map maps = needMove2FileSystemFiles.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); List files = needMove2FileSystemFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FILE.code)).toList(); for (EdFileInfo edFileInfo : files) { String filePath = edFileInfo.getFilePath(); @@ -706,7 +707,6 @@ public class EdFileInfoServiceImpl extends ServiceImpl {}, dest path is --->{}", sourcePath, destPath); - fileSystemService.moveFile(sourcePath, destPath); } } @@ -772,22 +771,22 @@ public class EdFileInfoServiceImpl extends ServiceImpl exportInfoMap = new HashMap<>(); - // 导出工程目录信息 - exportPrjInfo(exportInfoMap, dataOwnCode, dataIdArr, userDownloadDataDir); - // 导出文件收藏相关信息 - exportCollectionInfo(exportInfoMap); - // 导出文件关系 - exportFileRelationInfo(exportInfoMap); - // 导出标签相关信息 - exportFileTagInfo(exportInfoMap); - String mysqlInfo = JSONUtil.toJsonStr(exportInfoMap); - String mysqlFilePath = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + File.separator + "mysql.json"; - String prjDirPath = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME; - String exportZipFile = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + ".zip"; - String exportColibFile = userDownloadDataDir + File.separator + File.separator + EXPORT_PRJ_NAME + EXPORT_FILE_SUFFIX; + String nowTimeStr = EleCommonUtil.getNowTimeStr(); - fileSystemService.writeStringToFile(mysqlFilePath, mysqlInfo); + // 导出工程目录信息 + List exportFileIds = exportPrjInfo(nowTimeStr, dataOwnCode, dataIdArr, userDownloadDataDir); + // 导出文件收藏相关信息 + exportCollectionInfo(nowTimeStr, exportFileIds, userDownloadDataDir); + // 导出文件关系 + exportFileRelationInfo(nowTimeStr, exportFileIds, userDownloadDataDir); + // 导出标签相关信息 + exportFileTagInfo(nowTimeStr, exportFileIds, userDownloadDataDir); + // 导出操作记录相关 + exportLogInfo(nowTimeStr, exportFileIds, userDownloadDataDir); + + String prjDirPath = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr; + String exportZipFile = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr + ".zip"; + String exportColibFile = userDownloadDataDir + File.separator + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr + EXPORT_FILE_SUFFIX; FileUtil.del(exportColibFile); ZipUtil.zip(prjDirPath, exportZipFile); AES aes = SecureUtil.aes(FILE_SEC_PASSWD.getBytes()); @@ -807,7 +806,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl exportInfoMap) { - List fileInfos = (List) exportInfoMap.getOrDefault(PRJ_INFO, new ArrayList<>()); - List accessibleFileIds = fileInfos.stream().map(EdFileInfo::getId).toList(); - List edFileRelations = edFileRelationMapper.selectList(Wrappers.lambdaQuery(EdFileRelation.class).in(EdFileRelation::getId1, accessibleFileIds) + private void exportFileTagInfo(String nowTimeStr, List exportFileIds, String userDownloadDataDir) { + List fileTagRelations = fileTagRelationMapper.selectList(Wrappers.lambdaQuery(FileTagRelation.class).in(FileTagRelation::getFileId, exportFileIds)); + String path = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr + File.separator + ED_TAG_RELATIONS + ".json"; + String json = JSONUtil.toJsonStr(fileTagRelations); + fileSystemService.writeStringToFile(path, json); + } + + private void exportFileRelationInfo(String nowTimeStr, List exportFileIds, String userDownloadDataDir) { + List edFileRelations = edFileRelationMapper.selectList(Wrappers.lambdaQuery(EdFileRelation.class).in(EdFileRelation::getId1, exportFileIds) .or() - .in(EdFileRelation::getId2, accessibleFileIds)); - exportInfoMap.put(ED_FILE_RELATION, edFileRelations); + .in(EdFileRelation::getId2, exportFileIds)); + String json = JSONUtil.toJsonStr(edFileRelations); + String path = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr + File.separator + ED_FILE_RELATION + ".json"; + fileSystemService.writeStringToFile(path, json); } - private void exportCollectionInfo(Map exportInfoMap) { - List fileInfos = (List) exportInfoMap.getOrDefault(PRJ_INFO, new ArrayList<>()); - List accessibleFileIds = fileInfos.stream().map(EdFileInfo::getId).toList(); - List edFileFavorites = edFileFavoriteMapper.selectList(Wrappers.lambdaQuery(EdFileFavorite.class).in(EdFileFavorite::getFileId, accessibleFileIds)); - exportInfoMap.put(ED_FILE_FAVORITE, edFileFavorites); + private void exportCollectionInfo(String nowTimeStr, List exportFileIds, String userDownloadDataDir) { + List edFileFavorites = edFileFavoriteMapper.selectList(Wrappers.lambdaQuery(EdFileFavorite.class).in(EdFileFavorite::getFileId, exportFileIds)); + String json = JSONUtil.toJsonStr(edFileFavorites); + String path = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr + File.separator + ED_FILE_FAVORITE + ".json"; + fileSystemService.writeStringToFile(path, json); } - private void exportPrjInfo(Map exportInfoMap, int dataOwnCode, String dataIdArr, String userDownloadDataDir) throws IOException { + private List exportPrjInfo(String nowTimeStr, int dataOwnCode, String dataIdArr, String userDownloadDataDir) { String[] ids = dataIdArr.split(","); if (DataOwnEnum.isSysCode(dataOwnCode) || DataOwnEnum.isRepoCode(dataOwnCode)) { Map map = permissionService.filterExportIds(ids); @@ -871,107 +877,18 @@ public class EdFileInfoServiceImpl extends ServiceImpl folders = resFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FOLDER.code)).toList(); List files = resFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FILE.code)).toList(); - for (EdFileInfo edFileInfo : folders) { - String destFolderPath = userDownloadDataDir + File.separator + prjName + File.separator + commonService.getDbPath(edFileInfo.getFilePath()); // file - fileSystemService.createDirectory(destFolderPath); - } for (EdFileInfo edFileInfo : files) { - String filePath = commonService.getFileSysPath(edFileInfo.getFilePath(), dataOwnCode); // file - String destPath = userDownloadDataDir + File.separator + prjName + File.separator + commonService.getDbPath(edFileInfo.getFilePath()); + String filePath = commonService.getFileSysPath(edFileInfo.getId()); // file + String destPath = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr + File.separator + commonService.getDbPath(edFileInfo.getFilePath()); fileSystemService.copyFile(filePath, destPath); } - exportInfoMap.put(PRJ_INFO, resFiles); + String json = JSONUtil.toJsonStr(files); + String mysqlFilePath = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr + File.separator + PRJ_INFO + ".json"; + fileSystemService.writeStringToFile(mysqlFilePath, json); + return files.stream().map(EdFileInfo::getId).toList(); } - -// @Override -// public ResponseEntity batchExport1(String dataIdArr, HttpServletResponse response, int dataOwnCode) throws IOException { -// String userDownloadDataDir = elePropertyConfig.getDownloadDataDir(dataOwnCode) + File.separator + UserThreadLocal.getUserId(); -// String[] ids = dataIdArr.split(","); -// if (DataOwnEnum.isSysCode(dataOwnCode) || DataOwnEnum.isRepoCode(dataOwnCode)) { -// Map map = permissionService.filterExportIds(ids); -// Assert.isTrue(!map.containsValue(Boolean.FALSE), "有未授权的层级目录,禁止导出"); -// } -// Map maps = new HashMap<>(); -// for (String id : ids) { -// Map edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) -// .like(EdFileInfo::getFilePath, MYSQL_FILE_PATH_SPLIT + id + MYSQL_FILE_PATH_SPLIT)) -// .stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); -// maps.putAll(edFileInfos); -// } -// List resFiles = new ArrayList<>(maps.values()); -// String prjId = resFiles.get(0).getFilePath().split(MYSQL_FILE_PATH_SPLIT)[0]; -// List prjFolders = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) -// .likeRight(EdFileInfo::getFilePath, prjId + MYSQL_FILE_PATH_SPLIT) -// .eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code) -// .eq(EdFileInfo::getDataOwn, DataOwnEnum.getPrjCodeByFileCode(dataOwnCode)) -// .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)); -// EdFileInfo prjFileInfo = this.baseMapper.selectById(prjId); -// Map prjFoldersMap = prjFolders.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); -// Map tmps = resFiles.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); -// tmps.putAll(prjFoldersMap); -// resFiles.clear(); -// resFiles.addAll(tmps.values()); -// resFiles.add(prjFileInfo); -// String prjName = commonService.getPrjNameByDbPath(resFiles.get(0).getFilePath()); -// List folders = resFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FOLDER.code)).toList(); -// List files = resFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FILE.code)).toList(); -// for (EdFileInfo edFileInfo : folders) { -// String destFolderPath = userDownloadDataDir + File.separator + prjName + File.separator + commonService.getDbPath(edFileInfo.getFilePath()); // file -// fileSystemService.createDirectory(destFolderPath); -// } -// for (EdFileInfo edFileInfo : files) { -// String filePath = commonService.getFileSysPath(edFileInfo.getFilePath(), dataOwnCode); // file -// String destPath = userDownloadDataDir + File.separator + prjName + File.separator + commonService.getDbPath(edFileInfo.getFilePath()); -// fileSystemService.copyFile(filePath, destPath); -// } -// String mysqlInfo = JSONUtil.toJsonStr(resFiles); -// -// String mysqlFilePath = userDownloadDataDir + File.separator + prjName + File.separator + "mysql.json"; -// String prjDirPath = userDownloadDataDir + File.separator + prjName; -// String exportZipFile = userDownloadDataDir + File.separator + prjName + ".zip"; -// String exportColibFile = userDownloadDataDir + File.separator + File.separator + prjName + EXPORT_FILE_SUFFIX; -// -// fileSystemService.writeStringToFile(mysqlFilePath, mysqlInfo); -// if (FileUtil.exist(exportColibFile)) { -// FileUtil.del(exportColibFile); -// } -// -// ZipUtil.zip(prjDirPath, exportZipFile); -// AES aes = SecureUtil.aes(FILE_SEC_PASSWD.getBytes()); -// try ( -// InputStream inputStream = Files.newInputStream(Paths.get(exportZipFile)); -// OutputStream outputStream = Files.newOutputStream(Paths.get(exportColibFile)); -// ) { -// aes.encrypt(inputStream, outputStream, true); -// } catch (Exception e) { -// String info = "导出失败。"; -// log.error(info, e); -// throw new BizException(info); -// } finally { -// fileSystemService.deleteFile(exportZipFile, prjDirPath); -// } -// File file = FileUtil.newFile(exportColibFile); -// FileSystemResource fileSystemResource = new FileSystemResource(file); -// HttpHeaders headers = new HttpHeaders(); -// headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); -// String fileName = Base64.encode(EleCommonUtil.getNowTimeStr() + "_" + fileSystemResource.getFilename()); -// headers.add("Pragma", "no-cache"); -// headers.add("Expires", "0"); -// response.setHeader("content-disposition", "attachment;filename=" + fileName); -// UserThreadLocal.setSuccessInfo("", "", "导出数据库成功"); -// // 构建响应实体(可以返回 // 保存信息到MySQL String maxPrjId = this.baseMapper.maxPrjId(); int prjCount; - if (DataOwnEnum.isUserCode(dataOwnCode)) { - prjCount = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getParentId, PRJ_PARENT_ID) + DataOwnEnum enumByCode = DataOwnEnum.getEnumByCode(dataOwnCode); + switch (Objects.requireNonNull(enumByCode)) { + case USER_PRJ, USER_FILE -> prjCount = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getParentId, PRJ_PARENT_ID) .eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code).eq(EdFileInfo::getCreatedBy, UserThreadLocal.getUserId())) .intValue(); - } else if (DataOwnEnum.isSysCode(dataOwnCode)) { - prjCount = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getParentId, PRJ_PARENT_ID) + case SYS_PRJ, SYS_FILE -> prjCount = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getParentId, PRJ_PARENT_ID) .eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code)) .intValue(); - } else { - prjCount = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getParentId, PRJ_PARENT_ID) + case REPO_PRJ, REPO_FILE -> prjCount = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getParentId, PRJ_PARENT_ID) .eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code)) .intValue(); + default -> throw new BizException("参数错误"); } int id = Integer.parseInt(StrUtil.isEmpty(maxPrjId) ? "100000" : maxPrjId); String newPrjId = String.valueOf(id + 1); EdFileInfo fileInfo = new EdFileInfo(); + fileInfo.newInit(); String nowTimeStr = EleCommonUtil.getNowTimeStr(); fileInfo.setId(newPrjId) .setFileType("文件夹") @@ -120,14 +120,6 @@ public class EdPrjServiceImpl extends ServiceImpl .setDataOwn(dataOwnCode) .setEffectFlag(EffectFlagEnum.EFFECT.code); this.save(fileInfo); - // 保存到文件系统 - String prjPath; - if (DataOwnEnum.isUserCode(dataOwnCode)) { - prjPath = commonService.getPrjRootPath1(dataOwnCode) + File.separator + UserThreadLocal.getUserId() + File.separator + prjName; - } else { - prjPath = commonService.getPrjRootPath1(dataOwnCode) + File.separator + prjName; - } - fileSystemService.createDirectory(prjPath); UserThreadLocal.setSuccessInfo("", newPrjId, "创建 {} 项目成功。", prjName); } catch (Exception e) { String info = StrFormatter.format("工程 {} 创建失败,具体为--->{}", prjName, e.getMessage()); @@ -164,27 +156,17 @@ public class EdPrjServiceImpl extends ServiceImpl return ElectromagneticResultUtil.fail("-1", info); } - String newPath; - if (DataOwnEnum.isUserCode(dataOwnCode)) { - newPath = commonService.getPrjRootPath1(dataOwnCode) + File.separator + UserThreadLocal.getUserId() + File.separator + newPrjName; - } else { - newPath = commonService.getPrjRootPath1(dataOwnCode) + File.separator + newPrjName; - } - if (fileSystemService.checkFolderExist(newPath)) { - String tmpPath = newPrjName + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG; - fileSystemService.renameFile(newPath, tmpPath); - } this.baseMapper.update(new EdFileInfo(), Wrappers.lambdaUpdate(EdFileInfo.class) .eq(EdFileInfo::getId, prjId) .set(EdFileInfo::getFileName, newPrjName)); String prjPath; - if (DataOwnEnum.isUserCode(dataOwnCode)) { - prjPath = commonService.getPrjRootPath1(dataOwnCode) + File.separator + UserThreadLocal.getUserId() + File.separator; - } else { - prjPath = commonService.getPrjRootPath1(dataOwnCode) + File.separator; + DataOwnEnum enumByCode = DataOwnEnum.getEnumByCode(dataOwnCode); + switch (Objects.requireNonNull(enumByCode)) { + case USER_PRJ, USER_FILE -> prjPath = commonService.getPrjRootPath1(dataOwnCode) + File.separator + UserThreadLocal.getUserId() + File.separator; + case REPO_PRJ, REPO_FILE, SYS_PRJ, SYS_FILE -> prjPath = commonService.getPrjRootPath1(dataOwnCode) + File.separator; + default -> throw new BizException("参数错误"); } - fileSystemService.renameFile(prjPath, oldPrjName, newPrjName); UserThreadLocal.setSuccessInfo("", prjId, "修改工层名 {} 为 {} 成功。", oldPrjName, newPrjName); } catch (Exception e) { @@ -226,7 +208,6 @@ 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.getFileName() + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG); UserThreadLocal.setSuccessInfo("", prjId, "废除 {} 项目成功。", prjFile.getFileName()); return ElectromagneticResultUtil.success(true); } catch (Exception e) { @@ -346,22 +327,11 @@ public class EdPrjServiceImpl extends ServiceImpl .eq(EdFileInfo::getDataStatus, EleDataStatusEnum.WAIT_DELETED.code) .likeRight(EdFileInfo::getFilePath, prjId); List edFileInfos = this.baseMapper.selectList(queryWrapper); - Map map = new HashMap<>(); - Map idNameMap = new HashMap<>(); - for (EdFileInfo edFileInfo : edFileInfos) { - String fileSysPath = commonService.getFileSysPath(edFileInfo.getFilePath(), dataOwnCode); - String uuid = IdUtil.fastSimpleUUID(); - String newName = edFileInfo.getFileName() + MYSQL_FILE_PATH_SPLIT + uuid + DELETE_FLAG; - map.put(fileSysPath, newName); - idNameMap.put(edFileInfo.getId(), newName); - } - for (Map.Entry entry : idNameMap.entrySet()) { - String id = entry.getKey(); - String newName = entry.getValue(); this.update(new EdFileInfo(), Wrappers.lambdaUpdate(EdFileInfo.class) - .eq(EdFileInfo::getId, id) - .set(EdFileInfo::getFileName, newName) + .eq(EdFileInfo::getId, edFileInfo.getId()) + .set(EdFileInfo::getAllDeleted, true) + .set(EdFileInfo::getPermanentDeleted, true) .set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)); } // 其余置为发布状态 @@ -370,7 +340,6 @@ public class EdPrjServiceImpl extends ServiceImpl .eq(EdFileInfo::getDataStatus, EleDataStatusEnum.NOT_PUBLISHED.code) .likeRight(EdFileInfo::getFilePath, prjId); this.update(new EdFileInfo(), updateWrapper); - commonService.deletePrjSysDir(map); UserThreadLocal.setSuccessInfo("", prjId, "项目 {} 发布成功", fileInfo.getFileName()); return ElectromagneticResultUtil.success(true); } catch (Exception e) { @@ -408,7 +377,6 @@ public class EdPrjServiceImpl extends ServiceImpl // 查找source的全部目录 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()); @@ -421,7 +389,6 @@ public class EdPrjServiceImpl extends ServiceImpl Map idMaps = new HashMap<>(); idMaps.put(sourceId, targetId); - List sysFilePaths = new ArrayList<>(); for (int i = 1; i <= elePropertyConfig.getPrjFolderMaxLength(); ++i) { int layerIndex = i; List currentSourceLayerDirs = sourceEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == layerIndex).toList(); @@ -436,6 +403,7 @@ public class EdPrjServiceImpl extends ServiceImpl String nowTimeStr = EleCommonUtil.getNowTimeStr(); String fileCode = commonService.createFileCode(targetId, EleDataTypeEnum.FOLDER.desc, FILE_START_VERSION, nowTimeStr); EdFileInfo targetFile = new EdFileInfo(); + targetFile.newInit(); targetFile.setId(newFolderId) .setFileId(newFolderId) .setFileName(edFileInfo.getFileName()) @@ -454,8 +422,6 @@ public class EdPrjServiceImpl extends ServiceImpl this.save(targetFile); targetEdFileInfos.add(targetFile); idMaps.put(edFileInfo.getFileId(), newFolderId); - String targetSysFilePath = commonService.getFileSysPath(targetFile.getFilePath(), dataOwnCode); - sysFilePaths.add(targetSysFilePath); } } else { List edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) @@ -472,6 +438,7 @@ public class EdPrjServiceImpl extends ServiceImpl String fileCode = commonService.createFileCode(targetId, EleDataTypeEnum.FOLDER.desc, FILE_START_VERSION, nowTimeStr); EdFileInfo targetFile = new EdFileInfo(); + targetFile.newInit(); targetFile.setId(newFolderId) .setFileId(newFolderId) .setFileName(edFileInfo.getFileName()) @@ -490,14 +457,9 @@ public class EdPrjServiceImpl extends ServiceImpl this.save(targetFile); targetEdFileInfos.add(targetFile); idMaps.put(edFileInfo.getFileId(), newFolderId); - String targetSysFilePath = commonService.getFileSysPath(targetFile.getFilePath(), dataOwnCode); - sysFilePaths.add(targetSysFilePath); } } } - for (String path : sysFilePaths) { - fileSystemService.createDirectory(path); - } UserThreadLocal.setSuccessInfo("", targetId, "层级沿用成功"); return ElectromagneticResultUtil.success(true); } catch (Exception e) { @@ -523,14 +485,9 @@ public class EdPrjServiceImpl extends ServiceImpl String parentId = this.baseMapper.selectById(id).getParentId(); // 首先检查同层是否有同名目录 Assert.isTrue(commonService.notExistSameFolder(parentId, newFolderName, dataOwnCode), StrFormatter.format("{} 子集名已经存在", newFolderName)); - EdFileInfo fileInfo = this.baseMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class) - .select(EdFileInfo.class, file -> !StrUtil.equals(file.getColumn(), "file_content")) - .eq(EdFileInfo::getId, id)); - String sysFilePath = commonService.getFileSysPath(fileInfo.getFilePath(), dataOwnCode); this.baseMapper.update(new EdFileInfo(), Wrappers.lambdaUpdate(EdFileInfo.class) .eq(EdFileInfo::getId, id) .set(EdFileInfo::getFileName, newFolderName)); - fileSystemService.renameFile(sysFilePath, newFolderName); UserThreadLocal.setSuccessInfo(parentId, id, "子集名称 {} 修改成功", newFolderName); return ElectromagneticResultUtil.success(true); } catch (Exception e) { diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileRecycleServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileRecycleServiceImpl.java index 57e1e87..5d75584 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileRecycleServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileRecycleServiceImpl.java @@ -135,7 +135,7 @@ public class FileRecycleServiceImpl implements FileRecycleService { .select(EdFileInfo.class, file -> !StrUtil.equals(file.getColumn(), "file_content")) .eq(EdFileInfo::getFileId, fileId)); for (EdFileInfo edFileInfo : edFileInfos) { - String fileSysPath = commonService.getFileSysPath(edFileInfo.getFilePath(), edFileInfo.getDataOwn()); + String fileSysPath = commonService.getFileSysPath(edFileInfo.getId()); backupHandler.backupFiles(fileSysPath, edFileInfo.getParentId()); String fileDbPath = commonService.getDbPath(edFileInfo.getFilePath()); // 移动到tmp目录,七天后删除 @@ -147,10 +147,6 @@ public class FileRecycleServiceImpl implements FileRecycleService { .set(EdFileInfo::getPermanentDeleted, true) .set(EdFileInfo::getAllDeleted, true)); UserThreadLocal.setSuccessInfo(edFileInfo.getParentId(), edFileInfo.getId(), "删除文件 {} 成功,文件id {},文件路径 {}", edFileInfos.get(0).getFileName() + "." + edFileInfos.get(0).getFileType(), edFileInfo.getId(), fileDbPath); -// BackupFileResLog resLog = backupHandler.deleteFile(edFileInfo.getId()); -// if (!Optional.ofNullable(resLog).map(BackupFileResLog::getBackupSuccess).orElse(false)) { -// log.warn("删除备份文件异常"); -// } return ElectromagneticResultUtil.success("删除文件成功"); } return ElectromagneticResultUtil.success("删除文件成功"); diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileSystemServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileSystemServiceImpl.java index 66856cf..8428742 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileSystemServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileSystemServiceImpl.java @@ -11,11 +11,6 @@ import java.nio.charset.Charset; @Service public class FileSystemServiceImpl implements FileSystemService { - @Override - public void createDirectory(String path) { - FileUtil.mkdir(path); - } - @Override public void copyFile(String source, String destination) { FileUtil.copy(source, destination, true); @@ -51,11 +46,6 @@ public class FileSystemServiceImpl implements FileSystemService { FileUtil.rename(sourceFile, newName, true); } - @Override - public boolean checkFolderExist(String newPath) { - return FileUtil.exist(newPath); - } - @Override public boolean writeStringToFile(String filePath, String contents) { FileUtil.writeString(contents, filePath, Charset.defaultCharset()); diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/tasks/BackupTask.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/tasks/BackupTask.java index 11115c2..361f865 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/tasks/BackupTask.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/tasks/BackupTask.java @@ -66,7 +66,7 @@ public class BackupTask { EdFileInfo fileInfo = this.edFileInfoMapper.selectOne(Wrappers.lambdaQuery() .select(EdFileInfo.class, file -> !StrUtil.equals(file.getColumn(), "file_content")) .eq(EdFileInfo::getId, id)); - String sysFilePath = commonService.getFileSysPath(fileInfo.getFilePath(), fileInfo.getDataOwn()); + String sysFilePath = commonService.getFileSysPath(fileInfo.getId()); long startTime = System.currentTimeMillis(); BackupFileResLog resLog = backupHandler.backupFiles(sysFilePath, id); long endTime = System.currentTimeMillis(); @@ -97,7 +97,7 @@ public class BackupTask { UserLoginInfo userLoginInfo = new UserLoginInfo(); userLoginInfo.setUserId(edFileInfo.getCreatedBy()); UserThreadLocal.set(userLoginInfo); - String fileSysPath = commonService.getFileSysPath(edFileInfo.getFilePath(), edFileInfo.getDataOwn()); + String fileSysPath = commonService.getFileSysPath(edFileInfo.getId()); UserThreadLocal.remove(); long startTime = System.currentTimeMillis(); BackupFileResLog resLog = backupHandler.backupFiles(fileSysPath, edFileInfo.getId()); 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 6d8bff6..801e3f3 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 @@ -27,4 +27,6 @@ public interface ElectromagneticConstants { String PRJ_INFO = "prj_info"; String EXPORT_PRJ_NAME = "electromagnetic_export"; + + String USER_ACCESS_LOG = "user_access_log"; }