diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileRelation.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileRelation.java index 82a9a37..499fb85 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileRelation.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileRelation.java @@ -6,9 +6,11 @@ import com.electromagnetic.industry.software.common.enums.EffectFlagEnum; import com.electromagnetic.industry.software.common.util.IdWorker; import com.electromagnetic.industry.software.common.util.UserThreadLocal; import lombok.Data; +import lombok.EqualsAndHashCode; import java.util.Date; +@EqualsAndHashCode(callSuper = true) @Data @TableName("ed_file_relation") public class EdFileRelation extends BaseModel{ 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 0eb3b98..daec140 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; @@ -8,6 +9,7 @@ import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.text.StrFormatter; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -30,12 +32,15 @@ import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import java.io.File; +import java.io.IOException; import java.util.*; import java.util.stream.Collectors; import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.*; +import static com.electromagnetic.industry.software.common.enums.FileRepeatEnum.*; @Component public class CommonService { @@ -136,6 +141,31 @@ public class CommonService { return count == 0; } + public void resetFileInfoName(EdFileInfo fileInfo) { + String fileName = fileInfo.getFileName(); + String parentId = fileInfo.getParentId(); + for (int i = 0; i < 1000; ++i) { + long count = edFileInfoMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getFileName, fileName) + .eq(EdFileInfo::getFileType, fileInfo.getFileType()) + .eq(EdFileInfo::getParentId, parentId) + .eq(EdFileInfo::getDataType, EleDataTypeEnum.FILE.code) + .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)); + if (count > 0) { + fileName = fileName + APPEND_NEW_FILE_NAME; + } else { + fileInfo.setFileName(fileName); + return; + } + } + } + + public boolean isFolder(String id) { + EdFileInfo fileInfo = edFileInfoMapper.selectById(id); + Assert.notNull(fileInfo, StrFormatter.format("文件不存在,ID为{}", id)); + return fileInfo.getDataType().equals(EleDataTypeEnum.FOLDER.code); + } + public String getFileSysPath(String id) { EdFileInfo fileInfo = edFileInfoMapper.selectById(id); int dataOwnCode = fileInfo.getDataOwn(); @@ -567,4 +597,168 @@ public class CommonService { } return res; } + + + public ElectromagneticResult upload(String parentId, MultipartFile file, Integer strategy, int dataOwnCode) { + Assert.isTrue(FileRepeatEnum.contains(strategy), "解决重名文件参数错误"); + String fileName = file.getOriginalFilename(); + String mainName = FileUtil.mainName(fileName); + String suffix = FileUtil.getSuffix(fileName); + Assert.isTrue(StrUtil.isNotEmpty(suffix), "文件类型不能为空"); + String destPath = getDbPathById(parentId); + String strategyStr = FileRepeatEnum.getDesc(strategy); + Assert.isTrue(!file.isEmpty(), StrFormatter.format("文件 {} 为空,文件上传到 {} 失败,同名同后缀的处理方式为 {}", fileName, destPath, strategyStr)); + Assert.isTrue(EleCommonUtil.isFileNameValid(file.getOriginalFilename()), StrFormatter.format("文件 {} {},上传到 {} 失败,同名同后缀的处理方式为 {}", fileName, NAME_VALID_MSG, destPath, strategyStr)); + // 查找下一层,看是否存在顶级定义相关文件,如果存在,则该层属于管理员层级定义的,不允许上传文件 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getParentId, parentId) + .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) + .eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code); + DataOwnEnum obj = DataOwnEnum.getEnumByCode(dataOwnCode); + switch (Objects.requireNonNull(obj)) { + case USER_FILE, USER_PRJ -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code); + case SYS_FILE, SYS_PRJ -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code); + case REPO_PRJ, REPO_FILE -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code); + default -> ElectromagneticResultUtil.fail("-1", "参数错误"); + } + + long dirCount = edFileInfoMapper.selectCount(queryWrapper); + Assert.isTrue(dirCount == 0, "文件 {} 上传到 {} 失败,层级结构不允许上传文件,同名同后缀的处理方式为 {}", fileName, destPath, strategyStr); + EdFileInfo newEdFileInfo = new EdFileInfo(); + newEdFileInfo.newInit(); + EdFileInfo finalEdFileInfo; + // 首先检查是否是同名文件 + try { + Assert.isTrue(EleCommonUtil.isFileNameValid(fileName), NAME_VALID_MSG); + Long count = edFileInfoMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getParentId, parentId) + .eq(EdFileInfo::getFileName, mainName) + .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) + .eq(EdFileInfo::getFileType, suffix)); + if (count > 0) { + finalEdFileInfo = handUploadRepeatFile(parentId, file, strategy, dataOwnCode); + } else { + EdFileInfo parentFolderInfo = edFileInfoMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getId, parentId) + .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)); + + String codePathByDbPath = getCodePathByDbPath(parentFolderInfo.getFilePath()); + String fileCode = createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, newEdFileInfo.getFileTime()); + newEdFileInfo.setParentId(parentId) + .setFileCode(fileCode) + .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code) + .setDataOwn(dataOwnCode) + .setFileName(mainName) + .setFileContent(EleCommonUtil.parse(file.getInputStream(), suffix)) + .setFileType(suffix) + .setFileVersion(FILE_START_VERSION) + .setFileSize(file.getSize()) + .setFilePath(parentFolderInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId()) + .setDataType(EleDataTypeEnum.FILE.code) + .setDataStatus(PublishEnum.PUBLISHED.getCode()) + .setEffectFlag(EffectFlagEnum.EFFECT.code); + edFileInfoMapper.insertOrUpdate(newEdFileInfo); + String fileDestPath = getFileSysPath(newEdFileInfo.getId()); + FileUtil.writeFromStream(file.getInputStream(), fileDestPath); + EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes())); + finalEdFileInfo = newEdFileInfo; + } + } catch (Exception e) { + String info = StrFormatter.format("文件 {} 为上传到 {} 失败,原因 {},同名同后缀的处理方式为 {}", fileName, destPath, e.getMessage(), strategyStr); + newEdFileInfo.setParentId(parentId) + .setFileName(mainName) + .setSaveStatus(EleDataSaveStatusEnum.FAIL.code) + .setFileType(suffix) + .setFileVersion(0) + .setFileCode("") + .setDataOwn(dataOwnCode) + .setFileSize(file.getSize()) + .setDataType(EleDataTypeEnum.FILE.code) + .setDataStatus(PublishEnum.PUBLISHED.getCode()) + .setEffectFlag(EffectFlagEnum.NOT_EFFECTIVE.code); + edFileInfoMapper.insertOrUpdate(newEdFileInfo); + log.error(info, e); + throw new BizException(info); + } + UserThreadLocal.setSuccessInfo(Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getParentId).orElse(""), + Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileId).orElse(""), + "文件 {} 为上传到 {} 成功,同名同后缀的处理方式为 {},存入的文件名为 {}", + fileName, + destPath, + strategyStr, + Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileName).orElse(fileName) + "." + Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileType).orElse(suffix)); + return ElectromagneticResultUtil.success(newEdFileInfo.getId()); + } + + @Transactional(rollbackFor = Exception.class) + public EdFileInfo handUploadRepeatFile(String parentId, MultipartFile file, Integer strategy, int dataOwnCode) throws IOException { + String fileName = file.getOriginalFilename(); + String mainName = FileUtil.mainName(fileName); + String suffix = FileUtil.getSuffix(fileName); + EdFileInfo newEdFileInfo = new EdFileInfo(); + newEdFileInfo.newInit(); + String timeStr = EleCommonUtil.getNowTimeStr(); + newEdFileInfo.setFileName(mainName) + .setFileType(suffix) + .setFileContent(EleCommonUtil.parse(file.getInputStream(), suffix)) + .setFileTime(timeStr) + .setFileSize(file.getSize()) + .setDataType(EleDataTypeEnum.FILE.code) + .setDataStatus(PublishEnum.PUBLISHED.getCode()) + .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code) + .setDataOwn(dataOwnCode) + .setEffectFlag(EffectFlagEnum.EFFECT.code); + if (strategy == REVERSION.code) { + // 版本更新 + // step1:找到同名文件的MySQL对象 + List parentFileInfos = edFileInfoMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getParentId, parentId) + .eq(EdFileInfo::getFileName, mainName) + .eq(EdFileInfo::getFileType, suffix)); + EdFileInfo parentFileInfo = edFileInfoMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getId, parentId) + .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)); + Integer maxFileVersion = Collections.max(parentFileInfos, Comparator.comparing(EdFileInfo::getFileVersion)).getFileVersion(); + // 找到当前展示的版本 + EdFileInfo effectFileInfo = parentFileInfos.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).toList().get(0); + String codePathByDbPath = getCodePathByDbPath(effectFileInfo.getFilePath()); + String fileCode = createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, timeStr); + // 将原有效的版本置为false + edFileInfoMapper.update(new EdFileInfo(), Wrappers.lambdaUpdate(EdFileInfo.class) + .set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code) + .eq(EdFileInfo::getId, effectFileInfo.getId())); + // 新增文件 + newEdFileInfo.setFileId(effectFileInfo.getFileId()) + .setParentId(parentId) + .setFileCode(fileCode) + .setFileVersion(maxFileVersion + 1) + .setPreVersion(maxFileVersion) + .setFilePath(parentFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId()) + .setFileCode(fileCode); + } else if (strategy == NEW.code) { + // 文件名加”_1“,存为新文件 + EdFileInfo parentFileInfo = edFileInfoMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getId, parentId) + .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)); + String codePathByDbPath = getCodePathByDbPath(parentFileInfo.getFilePath()); + String fileCode = createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, newEdFileInfo.getFileTime()); + newEdFileInfo.setParentId(parentId) + .setFileCode(fileCode) + .setFileVersion(FILE_START_VERSION) + .setFileSize(file.getSize()) + .setFilePath(parentFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId()) + .setFileCode(fileCode); + resetFileInfoName(newEdFileInfo); + } else if (strategy == IGNORE.code) { + return null; + } else { + throw new BizException("参数错误"); + } + edFileInfoMapper.insert(newEdFileInfo); + String fileDestPath = getFileSysPath(newEdFileInfo.getId()); + fileSystemService.save(file.getInputStream(), fileDestPath); + EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes())); + return newEdFileInfo; + } + } 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 8409dd5..b71c2a5 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 @@ -829,8 +829,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl e)); maps.putAll(edFileInfos); } - List resFiles = new ArrayList<>(maps.values()); - String prjId = resFiles.get(0).getFilePath().split(MYSQL_FILE_PATH_SPLIT)[0]; + Set resFiles = new HashSet<>(maps.values()); + String prjId = resFiles.stream().findFirst().get().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) @@ -846,10 +846,10 @@ public class EdFileInfoServiceImpl extends ServiceImpl files = resFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FILE.code)).toList(); for (EdFileInfo edFileInfo : files) { String filePath = commonService.getFileSysPath(edFileInfo.getId()); // file - String destPath = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr + File.separator + commonService.getDbPath(edFileInfo.getFilePath()); + String destPath = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr + File.separator + EXPORT_PRJ_NAME + File.separator + edFileInfo.getId(); fileSystemService.copyFile(filePath, destPath); } - String json = JSONUtil.toJsonStr(files); + String json = JSONUtil.toJsonStr(resFiles); 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(); @@ -866,94 +866,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl upload(String parentId, MultipartFile file, Integer strategy, int dataOwnCode) { - Assert.isTrue(FileRepeatEnum.contains(strategy), "解决重名文件参数错误"); - String fileName = file.getOriginalFilename(); - String mainName = FileUtil.mainName(fileName); - String suffix = FileUtil.getSuffix(fileName); - Assert.isTrue(StrUtil.isNotEmpty(suffix), "文件类型不能为空"); - String destPath = commonService.getDbPathById(parentId); - String strategyStr = FileRepeatEnum.getDesc(strategy); - Assert.isTrue(!file.isEmpty(), StrFormatter.format("文件 {} 为空,文件上传到 {} 失败,同名同后缀的处理方式为 {}", fileName, destPath, strategyStr)); - Assert.isTrue(EleCommonUtil.isFileNameValid(file.getOriginalFilename()), StrFormatter.format("文件 {} {},上传到 {} 失败,同名同后缀的处理方式为 {}", fileName, NAME_VALID_MSG, destPath, strategyStr)); - // 查找下一层,看是否存在顶级定义相关文件,如果存在,则该层属于管理员层级定义的,不允许上传文件 - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class) - .eq(EdFileInfo::getParentId, parentId) - .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) - .eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code); - DataOwnEnum obj = DataOwnEnum.getEnumByCode(dataOwnCode); - switch (Objects.requireNonNull(obj)) { - case USER_FILE, USER_PRJ -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code); - case SYS_FILE, SYS_PRJ -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code); - case REPO_PRJ, REPO_FILE -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code); - default -> ElectromagneticResultUtil.fail("-1", "参数错误"); - } - - long dirCount = this.baseMapper.selectCount(queryWrapper); - Assert.isTrue(dirCount == 0, "文件 {} 上传到 {} 失败,层级结构不允许上传文件,同名同后缀的处理方式为 {}", fileName, destPath, strategyStr); - EdFileInfo newEdFileInfo = new EdFileInfo(); - newEdFileInfo.newInit(); - EdFileInfo finalEdFileInfo; - // 首先检查是否是同名文件 - try { - Assert.isTrue(EleCommonUtil.isFileNameValid(fileName), NAME_VALID_MSG); - Long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class) - .eq(EdFileInfo::getParentId, parentId) - .eq(EdFileInfo::getFileName, mainName) - .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) - .eq(EdFileInfo::getFileType, suffix)); - if (count > 0) { - finalEdFileInfo = handUploadRepeatFile(parentId, file, strategy, dataOwnCode); - } else { - EdFileInfo parentFolderInfo = this.baseMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class) - .eq(EdFileInfo::getId, parentId) - .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)); - - String codePathByDbPath = commonService.getCodePathByDbPath(parentFolderInfo.getFilePath()); - String fileCode = commonService.createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, newEdFileInfo.getFileTime()); - newEdFileInfo.setParentId(parentId) - .setFileCode(fileCode) - .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code) - .setDataOwn(dataOwnCode) - .setFileName(mainName) - .setFileContent(EleCommonUtil.parse(file.getInputStream(), suffix)) - .setFileType(suffix) - .setFileVersion(FILE_START_VERSION) - .setFileSize(file.getSize()) - .setFilePath(parentFolderInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId()) - .setDataType(EleDataTypeEnum.FILE.code) - .setDataStatus(PublishEnum.PUBLISHED.getCode()) - .setEffectFlag(EffectFlagEnum.EFFECT.code); - this.saveOrUpdate(newEdFileInfo); - String fileDestPath = commonService.getFileSysPath(newEdFileInfo.getId()); - FileUtil.writeFromStream(file.getInputStream(), fileDestPath); - EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes())); - finalEdFileInfo = newEdFileInfo; - } - } catch (Exception e) { - String info = StrFormatter.format("文件 {} 为上传到 {} 失败,原因 {},同名同后缀的处理方式为 {}", fileName, destPath, e.getMessage(), strategyStr); - newEdFileInfo.setParentId(parentId) - .setFileName(mainName) - .setSaveStatus(EleDataSaveStatusEnum.FAIL.code) - .setFileType(suffix) - .setFileVersion(0) - .setFileCode("") - .setDataOwn(dataOwnCode) - .setFileSize(file.getSize()) - .setDataType(EleDataTypeEnum.FILE.code) - .setDataStatus(PublishEnum.PUBLISHED.getCode()) - .setEffectFlag(EffectFlagEnum.NOT_EFFECTIVE.code); - this.saveOrUpdate(newEdFileInfo); - log.error(info, e); - throw new BizException(info); - } - UserThreadLocal.setSuccessInfo(Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getParentId).orElse(""), - Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileId).orElse(""), - "文件 {} 为上传到 {} 成功,同名同后缀的处理方式为 {},存入的文件名为 {}", - fileName, - destPath, - strategyStr, - Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileName).orElse(fileName) + "." + Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileType).orElse(suffix)); - return ElectromagneticResultUtil.success(newEdFileInfo.getId()); + return commonService.upload(parentId, file, strategy, dataOwnCode); } /** @@ -1247,77 +1160,6 @@ public class EdFileInfoServiceImpl extends ServiceImpl parentFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) - .eq(EdFileInfo::getParentId, parentId) - .eq(EdFileInfo::getFileName, mainName) - .eq(EdFileInfo::getFileType, suffix)); - EdFileInfo parentFileInfo = this.baseMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class) - .eq(EdFileInfo::getId, parentId) - .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)); - Integer maxFileVersion = Collections.max(parentFileInfos, Comparator.comparing(EdFileInfo::getFileVersion)).getFileVersion(); - // 找到当前展示的版本 - EdFileInfo effectFileInfo = parentFileInfos.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).toList().get(0); - String codePathByDbPath = commonService.getCodePathByDbPath(effectFileInfo.getFilePath()); - String fileCode = commonService.createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, timeStr); - // 将原有效的版本置为false - this.baseMapper.update(new EdFileInfo(), Wrappers.lambdaUpdate(EdFileInfo.class) - .set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code) - .eq(EdFileInfo::getId, effectFileInfo.getId())); - // 新增文件 - newEdFileInfo.setFileId(effectFileInfo.getFileId()) - .setParentId(parentId) - .setFileCode(fileCode) - .setFileVersion(maxFileVersion + 1) - .setPreVersion(maxFileVersion) - .setFilePath(parentFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId()) - .setFileCode(fileCode); - } else if (strategy == NEW.code) { - // 文件名加”_1“,存为新文件 - EdFileInfo parentFileInfo = this.baseMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class) - .eq(EdFileInfo::getId, parentId) - .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)); - String codePathByDbPath = commonService.getCodePathByDbPath(parentFileInfo.getFilePath()); - String fileCode = commonService.createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, newEdFileInfo.getFileTime()); - newEdFileInfo.setParentId(parentId) - .setFileCode(fileCode) - .setFileVersion(FILE_START_VERSION) - .setFileSize(file.getSize()) - .setFilePath(parentFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId()) - .setFileCode(fileCode); - resetFileInfoName(newEdFileInfo); - } else if (strategy == IGNORE.code) { - return null; - } else { - throw new BizException("参数错误"); - } - this.baseMapper.insert(newEdFileInfo); - String fileDestPath = commonService.getFileSysPath(newEdFileInfo.getId()); - fileSystemService.save(file.getInputStream(), fileDestPath); - EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes())); - return newEdFileInfo; - } - private String doSysFileMerge(String identifier, String fileName, Integer totalChunks, int dataOwnCode) { String currentUserId = UserThreadLocal.getUserId(); for (int i = 1; i <= totalChunks; i++) { diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java index 74f9d83..b027b6b 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java @@ -1,16 +1,12 @@ package com.electromagnetic.industry.software.manage.service.serviceimpl; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.text.StrFormatter; -import cn.hutool.core.util.StrUtil; -import cn.hutool.crypto.SecureUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.electromagnetic.industry.software.common.enums.*; import com.electromagnetic.industry.software.common.exception.BizException; -import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; import com.electromagnetic.industry.software.common.util.*; import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper; import com.electromagnetic.industry.software.manage.mapper.EdFileRelationMapper; @@ -20,7 +16,6 @@ import com.electromagnetic.industry.software.manage.pojo.models.Edge; import com.electromagnetic.industry.software.manage.pojo.req.CheckNameUniqueRequest; import com.electromagnetic.industry.software.manage.pojo.resp.FileRelationViewVO; import com.electromagnetic.industry.software.manage.pojo.resp.FileSimpleInfoVO; -import com.electromagnetic.industry.software.manage.service.EdFileInfoService; import com.electromagnetic.industry.software.manage.service.EdFileRelationService; import jakarta.annotation.Resource; import org.springframework.beans.BeanUtils;