From 8f61c95cfed870023a14eaecac78eff47338d09f Mon Sep 17 00:00:00 2001 From: chenxudong Date: Fri, 9 May 2025 17:03:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=AE=E5=89=8D=E8=BF=98=20=E5=89=A9?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=9A=84=E5=AF=BC=E5=85=A5=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E8=B0=83=E9=80=9A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SysEdFileInfoController.java | 13 +++ .../controller/UserEdFileInfoController.java | 13 --- .../service/serviceimpl/CommonService.java | 3 +- .../serviceimpl/EdFileInfoServiceImpl.java | 110 ++++++++++++++++-- 4 files changed, 114 insertions(+), 25 deletions(-) diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/SysEdFileInfoController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/SysEdFileInfoController.java index 21d3316..151e0c4 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/SysEdFileInfoController.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/SysEdFileInfoController.java @@ -201,4 +201,17 @@ public class SysEdFileInfoController { String userId = UserThreadLocal.getUserId(); return ElectromagneticResultUtil.success(edFileInfoService.findFavorite(userId, fileInfoQueryDTO)); } + + /** + * 从收藏夹移除 + * + * @param + * @return + */ + @GetMapping("/importPrj") + @UserOperation(value = "导入工程", modelName = UserOperationModuleEnum.USER_PRJ) + public ElectromagneticResult importPrj(@RequestParam("file") MultipartFile file) { + return edFileInfoService.importPrj(file); + } + } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserEdFileInfoController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserEdFileInfoController.java index 959d681..dc10e78 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserEdFileInfoController.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserEdFileInfoController.java @@ -176,17 +176,4 @@ public class UserEdFileInfoController { return ElectromagneticResultUtil.success(edFileInfoService.removeFavorite(userId, id)); } - - /** - * 从收藏夹移除 - * - * @param - * @return - */ - @GetMapping("/importPrj") - @UserOperation(value = "导入工程", modelName = UserOperationModuleEnum.USER_PRJ) - public ElectromagneticResult importPrj(@RequestParam("file") MultipartFile file) { - return ElectromagneticResultUtil.success(edFileInfoService.importPrj(file)); - } - } 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 e20ae7e..90498d8 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 @@ -237,7 +237,8 @@ public class CommonService { case REPO_PRJ, REPO_FILE -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code); default -> throw new BizException("参数错误"); } - return edFileInfoMapper.selectList(queryWrapper); + List edFileInfos = edFileInfoMapper.selectList(queryWrapper); + return edFileInfos; } @Transactional(rollbackFor = Exception.class) 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 6b25c8c..d598ea8 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 @@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.electromagnetic.industry.software.common.enums.*; +import com.electromagnetic.industry.software.common.enums.FilePermission; import com.electromagnetic.industry.software.common.exception.BizException; import com.electromagnetic.industry.software.common.exception.PermissionDeniedException; import com.electromagnetic.industry.software.common.pojo.RespPageVO; @@ -28,6 +29,8 @@ import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; import com.electromagnetic.industry.software.common.util.*; import com.electromagnetic.industry.software.manage.config.ElePropertyConfig; import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper; +import com.electromagnetic.industry.software.manage.mapper.RoleMapper; +import com.electromagnetic.industry.software.manage.mapper.RolePermissionMapper; import com.electromagnetic.industry.software.manage.mapper.UserMapper; import com.electromagnetic.industry.software.manage.pojo.models.*; import com.electromagnetic.industry.software.manage.pojo.other.FileInfoVO; @@ -52,6 +55,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; @@ -85,6 +89,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code) + .likeRight(EdFileInfo::getFilePath, prjId + MYSQL_FILE_PATH_SPLIT)); + Set ids = edFileInfos.stream().map(e -> e.getId()).collect(Collectors.toSet()); + ids.add(prjId); + for (String id : ids) { + for (FilePermission permission : FilePermission.values()) { + RolePermission rolePermission = new RolePermission(); + rolePermission.newInit(); + rolePermission.setRoleId(role.getId()); + rolePermission.setFileId(id); + rolePermission.setPermissionCode(permission.getCode()); + rolePermissionService.save(rolePermission); + } + } } private void updateImportPrj2FileSystem(MultipartFile file, String prjId) throws IOException { - String tmpFile = elePropertyConfig.getEleTmpPath() + File.separator + file.getOriginalFilename(); - String mainName = FileUtil.mainName(tmpFile); - FileUtil.del(tmpFile); - FileUtil.writeFromStream(file.getInputStream(), tmpFile); - ZipUtil.unzip(tmpFile); - List files = FileUtil.loopFiles(elePropertyConfig.getEleTmpPath() + File.separator + mainName); + String orgName = file.getOriginalFilename(); + String tmpZipFile = elePropertyConfig.getEleTmpPath() + File.separator + orgName; + String mainName = FileUtil.mainName(orgName); + String suffix = FileUtil.getSuffix(orgName); + FileUtil.del(tmpZipFile); + FileUtil.writeFromStream(file.getInputStream(), tmpZipFile); + String destDir = elePropertyConfig.getEleTmpPath() + File.separator + IdUtil.fastSimpleUUID(); + try { + ZipUtil.unzip(tmpZipFile, destDir, StandardCharsets.UTF_8); + } catch (Exception e) { + ZipUtil.unzip(tmpZipFile, destDir, Charset.forName("GBK")); + } + List files = FileUtil.loopFiles(destDir); List edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) .likeRight(EdFileInfo::getFilePath, prjId + MYSQL_FILE_PATH_SPLIT) .eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code)); - Map fileIdMap = edFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); - + Map idNameMap = edFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, EdFileInfo::getFileName)); + idNameMap.put(prjId, mainName); + Map filePathMap = new HashMap<>(); + for (EdFileInfo edFileInfo : edFileInfos) { + StringBuilder names = new StringBuilder(); + for (String id : edFileInfo.getFilePath().split(MYSQL_FILE_PATH_SPLIT)) { + String name = idNameMap.get(id); + names.append(MYSQL_FILE_PATH_SPLIT).append(name); + } + filePathMap.put(names.substring(1), edFileInfo); + } + String tmpPath = FileUtil.normalize(destDir); + for (File importFile : files) { + String parentDir = FileUtil.normalize(importFile.getParent()); + String relativeFilePath = parentDir.replace(tmpPath, ""); + while (relativeFilePath.startsWith(File.separator)) { + relativeFilePath = relativeFilePath.substring(1); + } + String fileType = FileUtil.getSuffix(importFile.getName()); + relativeFilePath = relativeFilePath.startsWith("/") ? relativeFilePath.substring(1) : relativeFilePath; + relativeFilePath = relativeFilePath.replace("/", MYSQL_FILE_PATH_SPLIT); + EdFileInfo edFileInfo = filePathMap.get(relativeFilePath); + String id = edFileInfo.getId(); + EdFileInfo newEdFileInfo = new EdFileInfo(); + newEdFileInfo.newInit(); + String fileCode = commonService.createFileCode(edFileInfo.getFilePath(), fileType, FILE_START_VERSION, newEdFileInfo.getFileTime()); + newEdFileInfo.setParentId(id) + .setFileCode(fileCode) + .setSaveStatus(EleDataSaveStatusEnum.UPLOADING.code) + .setDataOwn(DataOwnEnum.SYS_FILE.code) + .setFileName(mainName) + .setFileContent(EleCommonUtil.parse(file.getInputStream(), suffix)) + .setFileType(suffix) + .setFileVersion(FILE_START_VERSION) + .setFileSize(file.getSize()) + .setFilePath(edFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId()) + .setDataType(EleDataTypeEnum.FILE.code) + .setDataStatus(PublishEnum.PUBLISHED.getCode()) + .setEffectFlag(EffectFlagEnum.EFFECT.code); + this.baseMapper.insert(newEdFileInfo); + String destPath = commonService.getPrjRootPath1(DataOwnEnum.SYS_FILE.code) + File.separator + newEdFileInfo.getId(); + FileUtil.move(importFile, new File(destPath), false); + EleCommonUtil.encryptFile(destPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes())); + } } private String updateImportPrj2Db(MultipartFile file) { String originalFilename = file.getOriginalFilename(); String suffix = FileUtil.getSuffix(originalFilename); - String mainName = FileUtil.getName(originalFilename); + String mainName = FileUtil.mainName(originalFilename); Assert.isTrue(StrUtil.equals(suffix, "zip"), "不支持 {} 格式的工程文件", suffix); // 检查工程是否存在 List edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getFileName, mainName) @@ -1597,7 +1685,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl