diff --git a/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/controller/FileController.java b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/controller/FileController.java index 783e034..525e7c0 100644 --- a/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/controller/FileController.java +++ b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/controller/FileController.java @@ -31,10 +31,10 @@ public class FileController { private BackupPro backupPro; @RequestMapping("/upload") - public ElectromagneticResult upload(@RequestParam("file") MultipartFile file, @RequestParam("id") String id) { + public ElectromagneticResult upload(@RequestParam("file") MultipartFile file) { BackupFileResLog backupFileResLog = BackupFileResLog.builder().backupStartTime(new Date()).fileName(file.getOriginalFilename()).backupSuccess(true).build(); try { - fileService.upload(file, id); + fileService.upload(file); } catch (Exception e) { String details = ExceptionUtil.stacktraceToString(e); backupFileResLog.setBackupSuccess(false); @@ -53,16 +53,16 @@ public class FileController { return ElectromagneticResultUtil.success(JSONUtil.toJsonStr(backupFileResLog, jsonConfig)); } - @RequestMapping("/remove") - public ElectromagneticResult remove(@RequestParam("id") String id) { - try { - fileService.remove(id); - } catch (Exception e) { - log.error("删除文件失败, id-->{},原因-->{}", id, e.getMessage(), e); - ElectromagneticResultUtil.fail("-1", e.getMessage()); - } - return ElectromagneticResultUtil.success(true); - } +// @RequestMapping("/remove") +// public ElectromagneticResult remove(@RequestParam("id") String id) { +// try { +// fileService.remove(id); +// } catch (Exception e) { +// log.error("删除文件失败, id-->{},原因-->{}", id, e.getMessage(), e); +// ElectromagneticResultUtil.fail("-1", e.getMessage()); +// } +// return ElectromagneticResultUtil.success(true); +// } @RequestMapping("/download") public ResponseEntity download(@RequestParam("id") String id) throws Exception { diff --git a/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/service/FileService.java b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/service/FileService.java index a1df2dc..21f924c 100644 --- a/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/service/FileService.java +++ b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/service/FileService.java @@ -8,9 +8,9 @@ import java.io.IOException; public interface FileService { - void upload(MultipartFile file, String id) throws IOException; + void upload(MultipartFile file) throws IOException; - void remove(String id); +// void remove(String id); ResponseEntity download(String id) throws Exception; diff --git a/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/serviceimp/FileServiceImpl.java b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/serviceimp/FileServiceImpl.java index e09963c..296fcff 100644 --- a/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/serviceimp/FileServiceImpl.java +++ b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/serviceimp/FileServiceImpl.java @@ -26,18 +26,19 @@ public class FileServiceImpl implements FileService { private BackupPro backupPro; @Override - public void upload(MultipartFile file, String id) throws IOException { - String destPath = getFileSysPathById(id); + public void upload(MultipartFile file) throws IOException { + String name = FileUtil.mainName(file.getOriginalFilename()); + String destPath = getFileSysPathById(name); if (!FileUtil.exist(destPath)) { FileUtil.writeFromStream(file.getInputStream(), destPath); } } - @Override - public void remove(String id) { - String destPath = getFileSysPathById(id); - FileUtil.del(destPath); - } +// @Override +// public void remove(String id) { +// String destPath = getFileSysPathById(id); +// FileUtil.del(destPath); +// } @Override public ResponseEntity download(String id) throws Exception { @@ -63,9 +64,9 @@ public class FileServiceImpl implements FileService { FileUtil.del(destPath); } - private String getFileSysPathById(String id) { + private String getFileSysPathById(String fileName) { String saveFolder = backupPro.getSaveFolder(); - return saveFolder + File.separator + "prj_files" + File.separator + id; + return saveFolder + File.separator + "prj_files" + File.separator + fileName; } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EdFileInfoMapper.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EdFileInfoMapper.java index 014bd64..15bf363 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EdFileInfoMapper.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EdFileInfoMapper.java @@ -24,6 +24,11 @@ public interface EdFileInfoMapper extends BaseMapper { .eq(EdFileInfo::getId, id)); } + default EdFileInfo selectById1(String id) { + return this.selectOne(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getId, id)); + } + @Select("select max(id) from ed_file_info where length(id) = 6") String maxPrjId(); diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileRelationService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileRelationService.java index d1e4594..4c1c6bd 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileRelationService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileRelationService.java @@ -1,12 +1,13 @@ package com.electromagnetic.industry.software.manage.service; +import com.baomidou.mybatisplus.extension.service.IService; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; import com.electromagnetic.industry.software.manage.pojo.models.EdFileRelation; import com.electromagnetic.industry.software.manage.pojo.req.CheckNameUniqueRequest; import com.electromagnetic.industry.software.manage.pojo.resp.FileRelationViewVO; import org.springframework.web.multipart.MultipartFile; -public interface EdFileRelationService { +public interface EdFileRelationService extends IService { /** * 创建文件关系 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/UserAccessLogService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserAccessLogService.java index 71f12d8..26977a6 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserAccessLogService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserAccessLogService.java @@ -1,9 +1,11 @@ package com.electromagnetic.industry.software.manage.service; +import com.baomidou.mybatisplus.extension.service.IService; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +import com.electromagnetic.industry.software.manage.pojo.models.UserAccessLog; import com.electromagnetic.industry.software.manage.pojo.req.AccessLogQueryDTO; -public interface UserAccessLogService { +public interface UserAccessLogService extends IService { /** * 分页查询操作记录(审计) diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/ChatService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/ChatService.java index 2b389b8..7ada349 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/ChatService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/ChatService.java @@ -174,6 +174,7 @@ public class ChatService { aiQuestionRecordMapper.insert(record); UserThreadLocal.remove(); return ChatClient.builder(model) + .defaultSystem("必须用中文回答") .defaultAdvisors(messageChatMemoryAdvisor, questionAnswerAdvisor) .defaultOptions(OllamaOptions .builder() @@ -193,6 +194,7 @@ public class ChatService { UserThreadLocal.remove(); aiQuestionRecordMapper.insert(record); return ChatClient.builder(model) + .defaultSystem("必须用中文回答") .defaultAdvisors(messageChatMemoryAdvisor, questionAnswerAdvisor) .defaultOptions(OllamaOptions .builder() 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..0eb3b98 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,18 @@ 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); + int dataOwnCode = fileInfo.getDataOwn(); + DataOwnEnum enumByCode = DataOwnEnum.getEnumByCode(dataOwnCode); + String filePath; + switch (Objects.requireNonNull(enumByCode)) { + case SYS_FILE, SYS_PRJ, REPO_PRJ, REPO_FILE -> filePath = getPrjRootPath1(dataOwnCode) + id; + case USER_FILE, USER_PRJ -> + filePath = getPrjRootPath1(dataOwnCode) + fileInfo.getCreatedBy() + File.separator + id; + default -> throw new BizException("参数错误"); } - return destPath.replace("//", "/"); + return filePath; } public String getDbPath(String dbPath) { @@ -243,6 +243,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 +262,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()); @@ -436,11 +429,11 @@ public class CommonService { return map; } - public ElectromagneticResult deleteFolder(String id, int dataOwnCode) { + public ElectromagneticResult deleteFolder(String id) { // 如果文件夹下存在文件(包括文件夹和已经逻辑删除的文件),则不允许删除。后面管理员选择会有物理删除文件夹和文件的功能,此时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是删除用户创建的文件夹 @@ -486,12 +479,9 @@ public class CommonService { return ElectromagneticResultUtil.fail("-1", info); } else { // 逻辑删除文件夹 - String newFileName = srcFileInfo.getFileName() + MYSQL_FILE_PATH_SPLIT + uuid + DELETE_FLAG; edFileInfoMapper.update(new EdFileInfo(), Wrappers.lambdaUpdate() .eq(EdFileInfo::getId, id) - .set(EdFileInfo::getFileName, newFileName) .set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)); - fileSystemService.renameFile(srcFilePath, newFileName); } } UserThreadLocal.setSuccessInfo(srcFileInfo.getParentId(), id, "删除目录 {} 成功", srcFileInfo.getFileName()); @@ -514,12 +504,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 +529,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 9c50acd..c403b08 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 @@ -54,17 +54,15 @@ import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.*; import static com.electromagnetic.industry.software.common.enums.DataOwnEnum.USER_FILE; -import static com.electromagnetic.industry.software.common.enums.FileRepeatEnum.IGNORE; +import static com.electromagnetic.industry.software.common.enums.FileRepeatEnum.*; @Service public class EdFileInfoServiceImpl extends ServiceImpl implements EdFileInfoService { - private static final Map> FILE_DB_ID_NAME = new ConcurrentHashMap<>(); private final EleLog log = new EleLog(EdFileInfoServiceImpl.class); @Resource private CommonService commonService; @@ -81,11 +79,9 @@ public class EdFileInfoServiceImpl extends ServiceImpl queryEdFileInfo(FileInfoQueryDTO pars, int dataOwnCode) { - if (DataOwnEnum.isSysCode(dataOwnCode)) { String parentId = pars.getParentId(); List accessibleTree = permissionService.getAccessibleTree(); @@ -252,7 +247,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl res = commonService.deleteFolder(id, dataOwnCode); + ElectromagneticResult res = commonService.deleteFolder(id); UserThreadLocal.setSuccessInfo(fileInfo.getParentId(), id, "作废目录 {} 成功,路径为 {}", fileInfo.getFileName(), dbPath); return res; } @@ -274,7 +269,7 @@ 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); @@ -284,7 +279,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl importInfoMap = JSONUtil.toBean(info, Map.class); - updatePrjInfo(importInfoMap, prjDirPath, dataOwnCode); - updateCollectionInfo(importInfoMap); - updateFileTageInfo(importInfoMap); - updateFileRelationInfo(importInfoMap); + updatePrjInfo(prjDirPath, dataOwnCode); + updateCollectionInfo(prjDirPath); + updateFileTageInfo(prjDirPath); + updateFileRelationInfo(prjDirPath); + updateUserAccessLog(prjDirPath); } - private void updateFileRelationInfo(Map importInfoMap) { - + private void updateUserAccessLog(String prjDirPath) { + String path = prjDirPath + File.separator + USER_ACCESS_LOG + ".json"; + List userAccessLogs = JSONUtil.toList(FileUtil.readString(path, Charset.defaultCharset()), UserAccessLog.class); + userAccessLogService.saveOrUpdateBatch(userAccessLogs); } - private void updateFileTageInfo(Map importInfoMap) { - + private void updateFileRelationInfo(String prjDirPath) { + String path = prjDirPath + File.separator + ED_TAG_RELATIONS + ".json"; + List relations = JSONUtil.toList(FileUtil.readString(path, Charset.defaultCharset()), EdFileRelation.class); + edFileRelationService.saveOrUpdateBatch(relations); } - private void updateCollectionInfo(Map importInfoMap) { - List edFileFavorites = (List) importInfoMap.getOrDefault(ED_FILE_FAVORITE, new ArrayList<>()); - edFileFavoriteMapper.insertOrUpdate(edFileFavorites); + private void updateFileTageInfo(String prjDirPath) { + String path = prjDirPath + File.separator + USER_ACCESS_LOG + ".json"; + List relations = JSONUtil.toList(FileUtil.readString(path, Charset.defaultCharset()), FileTagRelation.class); + fileTagRelationService.saveOrUpdateBatch(relations); } - private void updatePrjInfo(Map importInfoMap, String prjDirPath, Integer dataOwnCode) { - List importAllFiles = (List) importInfoMap.getOrDefault(PRJ_INFO, new ArrayList<>()); + private void updateCollectionInfo(String prjDirPath) { + String path = prjDirPath + File.separator + ED_FILE_FAVORITE + ".json"; + List edFileFavorites = JSONUtil.toList(FileUtil.readString(path, Charset.defaultCharset()), EdFileFavorite.class); + fileFavoriteService.saveOrUpdateBatch(edFileFavorites); + } + + private void updatePrjInfo(String prjDirPath, Integer dataOwnCode) { + String path = prjDirPath + File.separator + PRJ_INFO + ".json"; + List importAllFiles = JSONUtil.toList(FileUtil.readString(path, Charset.defaultCharset()), EdFileInfo.class); // 找出层级文件夹 List prjFolders = importAllFiles.stream().filter(e -> DataOwnEnum.isPrjCode(e.getDataOwn())) .toList(); @@ -531,10 +537,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst().get(); - String previousName = fileInfo.getFileName(); resetFileInfoName(fileInfo); - String afterName = fileInfo.getFileName(); - FILE_DB_ID_NAME.put(fileInfo.getId(), List.of(previousName, afterName)); allObjs.addAll(importFiles); allObjs.add(fileInfo); // 线下和线上都存在 @@ -664,7 +664,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl 0) { - fileName = fileName + "_1"; + fileName = fileName + APPEND_NEW_FILE_NAME; } else { fileInfo.setFileName(fileName); return; @@ -682,7 +682,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl 0) { - fileName = fileName + "_1"; + fileName = fileName + APPEND_NEW_FILE_NAME; } else { fileInfo.setFileName(fileName); return; @@ -691,50 +691,15 @@ 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(); + List files1 = FileUtil.loopFiles(new File(prjDirPath), file -> file.isDirectory() && file.getName().startsWith(EXPORT_PRJ_NAME)); + String prjFilePath = files1.get(0).getAbsolutePath(); for (EdFileInfo edFileInfo : files) { - String filePath = edFileInfo.getFilePath(); - String previousFileName = FILE_DB_ID_NAME.containsKey(edFileInfo.getId()) ? - FILE_DB_ID_NAME.get(edFileInfo.getId()).get(0) : - edFileInfo.getFileName(); - String afterFileName = FILE_DB_ID_NAME.containsKey(edFileInfo.getId()) ? - FILE_DB_ID_NAME.get(edFileInfo.getId()).get(1) : - edFileInfo.getFileName(); - - StringBuilder sysFileDirPath = new StringBuilder(); - StringBuilder destDirPath = new StringBuilder(); - - for (String id : filePath.split(MYSQL_FILE_PATH_SPLIT)) { -// EdFileInfo fileInfo = maps.get(id); - EdFileInfo fileInfo = this.baseMapper.selectById(id); - if (fileInfo.getDataType().equals(EleDataTypeEnum.FOLDER.code)) { - String previousDirName = FILE_DB_ID_NAME.containsKey(id) ? - FILE_DB_ID_NAME.get(id).get(0) : fileInfo.getFileName(); - sysFileDirPath.append(previousDirName).append(File.separator); - String afterDirName = FILE_DB_ID_NAME.containsKey(id) ? - FILE_DB_ID_NAME.get(id).get(1) : fileInfo.getFileName(); - destDirPath.append(afterDirName).append(File.separator); - } - } - String sourcePath = prjDirPath + File.separator + sysFileDirPath + previousFileName + "." + edFileInfo.getFileType() + "." + edFileInfo.getFileCode(); - String destPath; - if (DataOwnEnum.isUserCode(dataOwnCode)) { - destPath = commonService.getPrjRootPath1(dataOwnCode) + - UserThreadLocal.getUserId() + File.separator + - destDirPath + File.separator + sysFileDirPath + - afterFileName + - "." + edFileInfo.getFileType() + - "." + edFileInfo.getFileCode(); - } else { - destPath = commonService.getPrjRootPath1(dataOwnCode) + File.separator + - destDirPath + File.separator + - afterFileName + - "." + edFileInfo.getFileType() + - "." + edFileInfo.getFileCode(); - } - log.info("source path is ----> {}, dest path is --->{}", sourcePath, destPath); + String id = edFileInfo.getId(); + String sourcePath = prjFilePath + File.separator + id; + String destPath = commonService.getPrjRootPath1(dataOwnCode) + File.separator + id; fileSystemService.moveFile(sourcePath, destPath); + log.info("file import to file system source path is ----> {}, dest path is --->{}", sourcePath, destPath); } } @@ -772,22 +737,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 +772,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) - .eq(EdFileRelation::getEffectFlag, EffectFlagEnum.EFFECT.code) - .and(wrapper -> wrapper - .in(EdFileRelation::getId1, accessibleFileIds) - .or() - .in(EdFileRelation::getId2, accessibleFileIds))); - exportInfoMap.put(ED_FILE_RELATION, edFileRelations); + private void exportFileTagInfo(String nowTimeStr, List exportFileIds, String userDownloadDataDir) { + List fileTagRelations = fileTagRelationService.getBaseMapper().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 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) - .eq(EdFileFavorite::getEffectFlag, EffectFlagEnum.EFFECT.code) - .in(EdFileFavorite::getFileId, accessibleFileIds)); - exportInfoMap.put(ED_FILE_FAVORITE, edFileFavorites); + private void exportFileRelationInfo(String nowTimeStr, List exportFileIds, String userDownloadDataDir) { + List edFileRelations = edFileRelationService.getBaseMapper().selectList(Wrappers.lambdaQuery(EdFileRelation.class).in(EdFileRelation::getId1, exportFileIds) + .or() + .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 exportPrjInfo(Map exportInfoMap, int dataOwnCode, String dataIdArr, String userDownloadDataDir) throws IOException { + private void exportCollectionInfo(String nowTimeStr, List exportFileIds, String userDownloadDataDir) { + List edFileFavorites = fileFavoriteService.getBaseMapper().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 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); @@ -878,107 +843,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("", "", "导出数据库成功"); -// // 构建响应实体(可以返回 sameFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) - .select(EdFileInfo.class, file -> !StrUtil.equals(file.getColumn(), "file_content")) + .select() .eq(EdFileInfo::getParentId, targetFolderId) .eq(EdFileInfo::getFileName, srcFileInfo.getFileName()) .eq(EdFileInfo::getFileType, srcFileInfo.getFileType())); @@ -1178,15 +1049,12 @@ public class EdFileInfoServiceImpl extends ServiceImpl copyFile(String id, String targetFolderId, Integer strategy, int dataOwnCode) { Assert.isTrue(FileRepeatEnum.contains(strategy), "解决重名文件参数错误"); // 获取原文件mysql模型 - EdFileInfo srcFileInfo = this.baseMapper.selectById(id); - String srcFileDbPath = srcFileInfo.getFilePath(); + EdFileInfo srcFileInfo = this.baseMapper.selectById1(id); // 判断目标路径下是否有同名文件,如果所有的同名文件:1)如果所有文件都已经被作废,则该文件为新文件,版本号从100开始。2)如果有没有被作废的文件,则冲突处理方式按---1-跳过冲突文件 2-做版本更新 3-重命名,文件名加"_1" long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class) .eq(EdFileInfo::getParentId, targetFolderId) @@ -1246,12 +1111,11 @@ public class EdFileInfoServiceImpl extends ServiceImpl queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class) - .select(EdFileInfo.class, file -> !StrUtil.equals(file.getColumn(), "file_content")) + .select() .eq(EdFileInfo::getParentId, targetFolderId) .eq(EdFileInfo::getFileName, srcFileInfo.getFileName()) .eq(EdFileInfo::getFileType, srcFileInfo.getFileType()); @@ -1357,11 +1221,11 @@ public class EdFileInfoServiceImpl extends ServiceImpl parentFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) @@ -1401,69 +1279,43 @@ public class EdFileInfoServiceImpl extends ServiceImpl e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).toList().get(0); String codePathByDbPath = commonService.getCodePathByDbPath(effectFileInfo.getFilePath()); - String timeStr = EleCommonUtil.getNowTimeStr(); 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())); // 新增文件 - EdFileInfo newEdFileInfo = new EdFileInfo(); - newEdFileInfo.newInit(); newEdFileInfo.setFileId(effectFileInfo.getFileId()) .setParentId(parentId) .setFileCode(fileCode) - .setFileName(mainName) - .setFileType(suffix) .setFileVersion(maxFileVersion + 1) .setPreVersion(maxFileVersion) - .setFileContent(EleCommonUtil.parse(file.getInputStream(), suffix)) - .setFileTime(timeStr) - .setFileSize(file.getSize()) .setFilePath(parentFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId()) - .setDataType(EleDataTypeEnum.FILE.code) - .setDataStatus(PublishEnum.PUBLISHED.getCode()) - .setFileCode(fileCode) - .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code) - .setDataOwn(dataOwnCode) - .setEffectFlag(EffectFlagEnum.EFFECT.code); - this.baseMapper.insert(newEdFileInfo); - String fileDestPath = commonService.getFileSysPath(newEdFileInfo.getFilePath(), dataOwnCode); - fileSystemService.save(file.getInputStream(), fileDestPath); - EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes())); - return newEdFileInfo; - } else if (strategy == FileRepeatEnum.NEW.code) { + .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()); - EdFileInfo newEdFileInfo = new EdFileInfo(); - newEdFileInfo.newInit(); String fileCode = commonService.createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, newEdFileInfo.getFileTime()); newEdFileInfo.setParentId(parentId) .setFileCode(fileCode) - .setFileName(mainName) - .setFileType(suffix) - .setFileContent(EleCommonUtil.parse(file.getInputStream(), suffix)) .setFileVersion(FILE_START_VERSION) - .setFileTime(newEdFileInfo.getFileTime()) .setFileSize(file.getSize()) .setFilePath(parentFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId()) - .setDataType(EleDataTypeEnum.FILE.code) - .setDataStatus(PublishEnum.PUBLISHED.getCode()) - .setFileCode(fileCode) - .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code) - .setDataOwn(dataOwnCode) - .setEffectFlag(EffectFlagEnum.EFFECT.code); + .setFileCode(fileCode); resetFileInfoName(newEdFileInfo); - this.baseMapper.insert(newEdFileInfo); - String fileDestPath = commonService.getFileSysPath(newEdFileInfo.getFilePath(), dataOwnCode); - fileSystemService.save(file.getInputStream(), fileDestPath); - EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes())); - return newEdFileInfo; + } else if (strategy == IGNORE.code) { + return null; + } else { + throw new BizException("参数错误"); } - return null; + 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) { @@ -1546,7 +1398,7 @@ public class EdFileInfoServiceImpl extends ServiceImpllambdaQuery() - .eq(EdFileFavorite::getUserId, userId) - .eq(EdFileFavorite::getFileId, fileId) - ); - // 检查是否已存在有效收藏 - if (favorite != null && EffectFlagEnum.EFFECT.code.equals(favorite.getEffectFlag())) { + // 查询是否已存在 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(EdFileFavorite::getUserId, userId) + .eq(EdFileFavorite::getFileId, fileId); + if (fileFavoriteService.getOne(queryWrapper) != null) { throw new BizException("文件已收藏,无法重复收藏!"); } - boolean isSaved; - if (favorite != null) { - favorite.setEffectFlag(EffectFlagEnum.EFFECT.code); - isSaved = fileFavoriteService.updateById(favorite); - } else { - EdFileFavorite fileFavorite = new EdFileFavorite(); - fileFavorite.newInit(); - fileFavorite.setUserId(userId); - fileFavorite.setFileId(fileId); - isSaved = fileFavoriteService.save(fileFavorite); - } - + // 插入收藏记录 + EdFileFavorite favorite = new EdFileFavorite(); + favorite.setUserId(userId); + favorite.setFileId(fileId); + boolean isSaved = fileFavoriteService.save(favorite); if (isSaved) { - UserThreadLocal.setSuccessInfo("", fileId, StrFormatter.format("收藏了文件")); + EdFileInfo fileInfo = this.baseMapper.selectById(fileId); + UserThreadLocal.setSuccessInfo(Optional.ofNullable(fileInfo).map(EdFileInfo::getParentId).orElse(""), fileId, StrFormatter.format("收藏了文件")); } return isSaved; } @@ -1668,8 +1507,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EdFileFavorite::getUserId, userId) - .eq(EdFileFavorite::getFileId, fileId) - .eq(EdFileFavorite::getEffectFlag, EffectFlagEnum.EFFECT.code); + .eq(EdFileFavorite::getFileId, fileId); return fileFavoriteService.getOne(queryWrapper) != null; } @@ -1682,7 +1520,10 @@ public class EdFileInfoServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(EdFileFavorite::getUserId, userId) + .eq(EdFileFavorite::getFileId, fileId); + boolean isRemoved = fileFavoriteService.remove(queryWrapper); if (isRemoved) { UserThreadLocal.setSuccessInfo("", fileId, StrFormatter.format("取消了收藏")); } @@ -1711,9 +1552,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.select(EdFileFavorite::getFileId) - .eq(EdFileFavorite::getUserId, userId) - .eq(EdFileFavorite::getEffectFlag, EffectFlagEnum.EFFECT.code); + queryWrapper.select(EdFileFavorite::getFileId).eq(EdFileFavorite::getUserId, userId); fileIds = fileFavoriteService.listObjs(queryWrapper, Object::toString); } 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 47d6e79..ae0975a 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,10 +1,7 @@ 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; @@ -34,7 +31,6 @@ import static com.electromagnetic.industry.software.common.cons.ElectromagneticC @Service public class EdFileRelationServiceImpl extends ServiceImpl implements EdFileRelationService { - private final EleLog log = new EleLog(EdFileInfoServiceImpl.class); @Resource EdFileInfoMapper edFileInfoMapper; @Resource @@ -217,98 +213,19 @@ public class EdFileRelationServiceImpl extends ServiceImpl uploadFileAndRelation(String parentId, String id, MultipartFile file, String desc, int dataOwnCode) { - Assert.isTrue(EleCommonUtil.isFileNameValid(file.getOriginalFilename()), NAME_VALID_MSG); - String fileName = file.getOriginalFilename(); - String mainName = FileUtil.mainName(fileName); - String suffix = FileUtil.getSuffix(fileName); - Assert.isTrue(StrUtil.isNotEmpty(suffix), "文件类型不能为空"); - String destPath = commonService.getDbPathById(parentId); - Assert.isTrue(!file.isEmpty(), StrFormatter.format("文件 {} 为空,文件上传到 {} 失败", fileName, destPath)); - Assert.isTrue(EleCommonUtil.isFileNameValid(file.getOriginalFilename()), StrFormatter.format("文件 {} {},上传到 {} 失败", fileName, NAME_VALID_MSG, destPath)); - // 查找下一层,看是否存在顶级定义相关文件,如果存在,则该层属于管理员层级定义的,不允许上传文件 - 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); - EdFileInfo newEdFileInfo = new EdFileInfo(); - EdFileInfo finalEdFileInfo; - newEdFileInfo.newInit(); - - try { - Assert.isTrue(EleCommonUtil.isFileNameValid(fileName), NAME_VALID_MSG); - Long count = edFileInfoService.count(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 = edFileInfoService.handUploadRepeatFile(parentId, file, 3, dataOwnCode); - } else { - EdFileInfo parentFolderInfo = edFileInfoMapper.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); - edFileInfoService.saveOrUpdate(newEdFileInfo); - String fileDestPath = commonService.getFileSysPath(newEdFileInfo.getFilePath(), dataOwnCode); - FileUtil.writeFromStream(file.getInputStream(), fileDestPath); - EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes())); - finalEdFileInfo = newEdFileInfo; - // 创建文件关系 - EdFileRelation relation = new EdFileRelation(); - relation.setId1(id); - relation.setId2(newEdFileInfo.getId()); - relation.setRelationship(desc); - createRelation(relation); - } - } catch (Exception e) { - newEdFileInfo.setParentId(parentId) - .setFileName(mainName) - .setFileType(suffix) - .setFileSize(file.getSize()) - .setDataType(EleDataTypeEnum.FILE.code) - .setDataStatus(PublishEnum.PUBLISHED.getCode()) - .setSaveStatus(EleDataSaveStatusEnum.FAIL.code) - .setDataOwn(dataOwnCode) - .setEffectFlag(EffectFlagEnum.NOT_EFFECTIVE.code); - edFileInfoService.saveOrUpdate(newEdFileInfo); - String info = "上传文件失败"; - log.error(info, e); - throw new BizException(info); - } - String otherFileName = edFileInfoMapper.selectById(id).getFileName(); - UserThreadLocal.setSuccessInfo(Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getParentId).orElse(""), - Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileId).orElse(""), - "文件 {} 为上传到 {} 成功,存入的文件名为 {},成功与文件 {} 建立了关系", - fileName, - destPath, - Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileName).orElse(fileName) + "." + Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileType).orElse(suffix), - otherFileName); + // 上传文件 + ElectromagneticResult uploadResult = edFileInfoService.upload(parentId, file, FileRepeatEnum.NEW.code, dataOwnCode); + Assert.notNull(uploadResult.getData(), "上传失败"); + String relatedFileId = (String) uploadResult.getData(); + // 创建文件关系 + EdFileRelation relation = new EdFileRelation(); + relation.newInit(); + relation.setId1(id); + relation.setId2(relatedFileId); + relation.setRelationship(desc); + createRelation(relation); + UserThreadLocal.setSuccessInfo("", id, StrFormatter.format("建立了文件 {} 与文件 {} 的关系", id, relatedFileId)); return ElectromagneticResultUtil.success(true); } } 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 3d41f69..fef3039 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 @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.text.StrFormatter; -import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -85,24 +84,23 @@ public class EdPrjServiceImpl extends ServiceImpl try { // 保存信息到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) - .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) - .eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code)) - .intValue(); - } else { - prjCount = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getParentId, PRJ_PARENT_ID) - .eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code)) - .intValue(); + Long prjCount; + DataOwnEnum enumByCode = DataOwnEnum.getEnumByCode(dataOwnCode); + LambdaQueryWrapper qw = Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getParentId, PRJ_PARENT_ID); + switch (Objects.requireNonNull(enumByCode)) { + case USER_PRJ, USER_FILE -> + prjCount = this.baseMapper.selectCount(qw.eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code).eq(EdFileInfo::getCreatedBy, UserThreadLocal.getUserId())); + case SYS_PRJ, SYS_FILE -> + prjCount = this.baseMapper.selectCount(qw.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code)); + case REPO_PRJ, REPO_FILE -> + prjCount = this.baseMapper.selectCount(qw.eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code)); + 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("文件夹") @@ -115,19 +113,11 @@ public class EdPrjServiceImpl extends ServiceImpl .setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code) .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code) .setFilePath(newPrjId) - .setSort(++prjCount) + .setSort(prjCount.intValue() + 1) .setFileCode(commonService.createFileCode(newPrjId, EleDataTypeEnum.FOLDER.desc, FILE_START_VERSION, nowTimeStr)) .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 +154,19 @@ 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) { @@ -389,7 +358,7 @@ public class EdPrjServiceImpl extends ServiceImpl @Override @Transactional(rollbackFor = Exception.class) public ElectromagneticResult deleteFolder(String fileId, int dataOwnCode) { - return commonService.deleteFolder(fileId, dataOwnCode); + return commonService.deleteFolder(fileId); } /** @@ -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..fce2e4b 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,8 +135,8 @@ 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()); - backupHandler.backupFiles(fileSysPath, edFileInfo.getParentId()); + String fileSysPath = commonService.getFileSysPath(edFileInfo.getId()); + backupHandler.backupFiles(fileSysPath); String fileDbPath = commonService.getDbPath(edFileInfo.getFilePath()); // 移动到tmp目录,七天后删除 fileSystemService.moveFile(fileSysPath, elePropertyConfig.getEleTmpPath() + File.separator + new File(fileSysPath).getName()); @@ -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..ba8e78a 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,16 +11,15 @@ 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); } + /** + * @param source /user/aaa/bbb.txt + * @param destination /user/bbb/aaa.txt + */ @Override public void moveFile(String source, String destination) { String destParentDir = FileUtil.getParent(destination, 1); @@ -51,11 +50,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/service/serviceimpl/UserAccessLogServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserAccessLogServiceImpl.java index 9285020..3c5dfc0 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserAccessLogServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserAccessLogServiceImpl.java @@ -31,7 +31,6 @@ import java.util.stream.Collectors; @Service public class UserAccessLogServiceImpl extends ServiceImpl implements UserAccessLogService { - @Resource private UserMapper userMapper; diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/tasks/BackupHandler.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/tasks/BackupHandler.java index f904d65..20ef993 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/tasks/BackupHandler.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/tasks/BackupHandler.java @@ -21,10 +21,9 @@ public class BackupHandler { @Resource private ElePropertyConfig elePropertyConfig; - public BackupFileResLog backupFiles(String filePath, String id) { + public BackupFileResLog backupFiles(String filePath) { Map map = new HashMap<>(); map.put("file", new File(filePath)); - map.put("id", id); String url = StrFormatter.format("http://{}:{}/data/file/backup/upload", elePropertyConfig.getRemoteHost(), elePropertyConfig.getRemotePort()); log.info("back up url is {}", url); String res = HttpUtil.post(url, map); @@ -43,15 +42,15 @@ public class BackupHandler { return JSONUtil.toBean(data, BackupFileResLog.class); } - public BackupFileResLog deleteFile(String id) { - Map map = new HashMap<>(); - map.put("id", id); - String url = StrFormatter.format("http://{}:{}/data/file/backup/remove", elePropertyConfig.getRemoteHost(), elePropertyConfig.getRemotePort()); - String res = HttpUtil.get(url, map); - ElectromagneticResult resObj = JSONUtil.toBean(res, ElectromagneticResult.class); - String data = JSONUtil.toJsonStr(resObj.getData()); - return JSONUtil.toBean(data, BackupFileResLog.class); - } +// public BackupFileResLog deleteFile(String id) { +// Map map = new HashMap<>(); +// map.put("id", id); +// String url = StrFormatter.format("http://{}:{}/data/file/backup/remove", elePropertyConfig.getRemoteHost(), elePropertyConfig.getRemotePort()); +// String res = HttpUtil.get(url, map); +// ElectromagneticResult resObj = JSONUtil.toBean(res, ElectromagneticResult.class); +// String data = JSONUtil.toJsonStr(resObj.getData()); +// return JSONUtil.toBean(data, BackupFileResLog.class); +// } public byte[] downloadFile(String id) { String url = StrFormatter.format("http://{}:{}/data/file/backup/download?id={}", elePropertyConfig.getRemoteHost(), elePropertyConfig.getRemotePort(), id); 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..961ec1a 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,9 +66,9 @@ 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); + BackupFileResLog resLog = backupHandler.backupFiles(sysFilePath); long endTime = System.currentTimeMillis(); fileBackupLogMapper.update(null, Wrappers.lambdaUpdate() .eq(FileBackupLog::getFileId, id) @@ -97,10 +97,10 @@ 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()); + BackupFileResLog resLog = backupHandler.backupFiles(fileSysPath); long endTime = System.currentTimeMillis(); FileBackupLog backupLog = new FileBackupLog() .setId(IdWorker.getSnowFlakeIdString()) 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..3cffab6 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 @@ -16,8 +16,6 @@ public interface ElectromagneticConstants { String FILE_SEC_PASSWD = "adknfhkj87654knd"; - String DELETE_FLAG = "_deleted"; - String ED_FILE_FAVORITE = "ed_file_favorite"; String ED_FILE_RELATION = "ed_file_relation"; @@ -27,4 +25,8 @@ public interface ElectromagneticConstants { String PRJ_INFO = "prj_info"; String EXPORT_PRJ_NAME = "electromagnetic_export"; + + String USER_ACCESS_LOG = "user_access_log"; + + String APPEND_NEW_FILE_NAME = "_1"; }