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 ae8117a..74e50c8 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 @@ -1565,69 +1565,79 @@ public class EdFileInfoServiceImpl extends ServiceImpl 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 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); + String orgName = file.getOriginalFilename(); + tmpZipFile = elePropertyConfig.getEleTmpPath() + File.separator + orgName; + String mainName = FileUtil.mainName(orgName); + FileUtil.del(tmpZipFile); + FileUtil.writeFromStream(file.getInputStream(), tmpZipFile); + 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")); } - filePathMap.put(names.substring(1), edFileInfo); - } - List files = FileUtil.loopFiles(destDir); - String tmpPath = FileUtil.normalize(destDir); - for (File importFile : files) { - Assert.isTrue(EleCommonUtil.isFileNameValid(importFile.getName()), "文件名称不符合规范"); - String parentDir = FileUtil.normalize(importFile.getParent()); - String relativeFilePath = parentDir.replace(tmpPath, ""); - 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); - Assert.notNull(edFileInfo, "导入的工程与定义的层级结构不一致"); - String id = edFileInfo.getId(); - EdFileInfo newEdFileInfo = new EdFileInfo(); - newEdFileInfo.newInit(); - String fileCode = commonService.createFileCode(id, fileType, FILE_START_VERSION, newEdFileInfo.getFileTime()); - newEdFileInfo.setParentId(id) - .setFileCode(fileCode) - .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code) - .setDataOwn(DataOwnEnum.SYS_FILE.code) - .setFileName(FileUtil.mainName(importFile)) - .setFileContent(EleCommonUtil.parse(FileUtil.getInputStream(importFile), fileType)) - .setFileType(fileType) - .setFileVersion(FILE_START_VERSION) - .setFileSize(importFile.length()) - .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())); - UserThreadLocal.setSuccessInfo(newEdFileInfo.getParentId(), newEdFileInfo.getId(), "解析导入的工程文件成功,导入的工程名为 {},文件名为 {}", orgName, importFile.getName()); + File file1 = Objects.requireNonNull(new File(destDir).listFiles())[0]; + FileUtil.rename(file1, mainName, true); + 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 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); + } + + List files = FileUtil.loopFiles(destDir); + String tmpPath = FileUtil.normalize(destDir); + for (File importFile : files) { + Assert.isTrue(EleCommonUtil.isFileNameValid(importFile.getName()), "文件名称不符合规范"); + String parentDir = FileUtil.normalize(importFile.getParent()); + String relativeFilePath = parentDir.replace(tmpPath, ""); + 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); + Assert.notNull(edFileInfo, "导入的工程与定义的层级结构不一致"); + String id = edFileInfo.getId(); + EdFileInfo newEdFileInfo = new EdFileInfo(); + newEdFileInfo.newInit(); + String fileCode = commonService.createFileCode(id, fileType, FILE_START_VERSION, newEdFileInfo.getFileTime()); + newEdFileInfo.setParentId(id) + .setFileCode(fileCode) + .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code) + .setDataOwn(DataOwnEnum.SYS_FILE.code) + .setFileName(FileUtil.mainName(importFile)) + .setFileContent(EleCommonUtil.parse(FileUtil.getInputStream(importFile), fileType)) + .setFileType(fileType) + .setFileVersion(FILE_START_VERSION) + .setFileSize(importFile.length()) + .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())); + UserThreadLocal.setSuccessInfo(newEdFileInfo.getParentId(), newEdFileInfo.getId(), "解析导入的工程文件成功,导入的工程名为 {},文件名为 {}", orgName, importFile.getName()); + } + } catch (Exception e) { + String info = "上传失败,原因 " + e.getMessage(); + throw new BizException(info, e); + } finally { + FileUtil.del(destDir); + FileUtil.del(tmpZipFile); } }