From 5eb98d6f781691abf56548244b5b51068c1dcd34 Mon Sep 17 00:00:00 2001 From: chenxudong Date: Thu, 27 Feb 2025 15:35:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=89=A9=E7=90=86=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E4=B8=8E=E6=81=A2=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backup/controller/FileController.java | 4 +- .../manage/config/ElePropertyConfig.java | 38 +++ .../controller/FileRecycleController.java | 40 ++++ ...ogMapper.java => FileBackupLogMapper.java} | 4 +- .../manage/pojo/models/EleFileBackupLog.java | 35 --- .../manage/pojo/models/FileBackupLog.java | 37 +++ .../manage/pojo/req/RecycleFileQueryDTO.java | 50 ++++ .../manage/pojo/resp/FileRecycleQueryVO.java | 32 +++ .../manage/service/EdFileInfoService.java | 5 - .../manage/service/FileRecycleService.java | 14 ++ .../service/serviceimpl/CommonService.java | 19 +- .../EdFileFavoriteServiceImpl.java | 3 +- .../serviceimpl/EdFileInfoServiceImpl.java | 58 ++--- .../serviceimpl/FileRecycleServiceImpl.java | 223 ++++++++++++++++++ .../software/manage/tasks/BackupTask.java | 36 +-- .../common/enums/FileBackupSource.java | 14 ++ .../common/pojo/BackupFileResLog.java | 7 +- .../software/common/util/EleCommonUtil.java | 13 + 18 files changed, 507 insertions(+), 125 deletions(-) create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/ElePropertyConfig.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/FileRecycleController.java rename electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/{EleFileBackupLogMapper.java => FileBackupLogMapper.java} (71%) delete mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EleFileBackupLog.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/FileBackupLog.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RecycleFileQueryDTO.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileRecycleQueryVO.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/FileRecycleService.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileRecycleServiceImpl.java create mode 100644 electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/FileBackupSource.java 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 18a56f8..4a8d2a7 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 @@ -30,12 +30,12 @@ public class FileController { @RequestMapping("/upload") public ElectromagneticResult upload(@RequestParam("file") MultipartFile file, @RequestParam("path") String path) { - BackupFileResLog backupFileResLog = BackupFileResLog.builder().backupStartTime(new Date()).fileName(file.getOriginalFilename()).backupStatus(true).build(); + BackupFileResLog backupFileResLog = BackupFileResLog.builder().backupStartTime(new Date()).fileName(file.getOriginalFilename()).backupSuccess(true).build(); try { fileService.upload(file); } catch (Exception e) { String details = ExceptionUtil.stacktraceToString(e); - backupFileResLog.setBackupStatus(false); + backupFileResLog.setBackupSuccess(false); backupFileResLog.setFailInfoDetail(details); log.error("备份文件失败,原因--->{}", e.getMessage(), e); } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/ElePropertyConfig.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/ElePropertyConfig.java new file mode 100644 index 0000000..6d7ae33 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/ElePropertyConfig.java @@ -0,0 +1,38 @@ +package com.electromagnetic.industry.software.manage.config; + +import cn.hutool.core.io.FileUtil; +import com.electromagnetic.industry.software.common.util.EleCommonUtil; +import lombok.Getter; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; + +@Component +@Getter +public class ElePropertyConfig { + + @Resource + private Environment environment; + + private String downloadDataDir = ""; + private String uploadDataDir = ""; + private String tmpDir = ""; + private String eleDataPath; + private String userDataPath; + + private String prjDir; + + @PostConstruct + public void init() { + uploadDataDir = EleCommonUtil.isWinOs() ? environment.getProperty("data.upload.windows.tmp.path") : environment.getProperty("data.upload.linux.tmp.path"); + downloadDataDir = EleCommonUtil.isWinOs() ? environment.getProperty("data.download.windows.tmp.path") : environment.getProperty("data.download.linux.tmp.path"); + tmpDir = EleCommonUtil.isWinOs() ? environment.getProperty("data.windows.tmp.path") : environment.getProperty("data.linux.tmp.path"); + eleDataPath = EleCommonUtil.isWinOs() ? environment.getProperty("data.windows.path") : environment.getProperty("data.linux.path"); + userDataPath = EleCommonUtil.isWinOs() ? environment.getProperty("data.windows.user.path") : environment.getProperty("data.linux.user.path"); + String tmp = EleCommonUtil.isWinOs() ? environment.getProperty("data.windows.path") : environment.getProperty("data.linux.path"); + prjDir = FileUtil.getParent(tmp, 1); + } + +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/FileRecycleController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/FileRecycleController.java new file mode 100644 index 0000000..cfbb546 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/FileRecycleController.java @@ -0,0 +1,40 @@ +package com.electromagnetic.industry.software.manage.controller; + +import com.electromagnetic.industry.software.common.annotations.UserOperation; +import com.electromagnetic.industry.software.common.enums.UserOperationModuleEnum; +import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +import com.electromagnetic.industry.software.manage.pojo.req.RecycleFileQueryDTO; +import com.electromagnetic.industry.software.manage.service.FileRecycleService; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/data/ed/recycle/file") +public class FileRecycleController { + + @Resource + private FileRecycleService fileRecycleService; + + @RequestMapping("list") + @UserOperation(value = "查看回收站", modelName = UserOperationModuleEnum.DATABASE) + public ElectromagneticResult list(@RequestBody RecycleFileQueryDTO pars) { + return fileRecycleService.list(pars); + } + + @RequestMapping("remove") + @UserOperation(value = "查看回收站", modelName = UserOperationModuleEnum.DATABASE) + public ElectromagneticResult remove(@RequestParam String fileId) { + return fileRecycleService.remove(fileId); + } + + @RequestMapping("list") + @UserOperation(value = "查看回收站", modelName = UserOperationModuleEnum.DATABASE) + public ElectromagneticResult recover(@RequestParam String fileId) { + return fileRecycleService.recover(fileId); + } + +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EleFileBackupLogMapper.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/FileBackupLogMapper.java similarity index 71% rename from electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EleFileBackupLogMapper.java rename to electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/FileBackupLogMapper.java index e9f0607..236d691 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EleFileBackupLogMapper.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/FileBackupLogMapper.java @@ -1,9 +1,9 @@ package com.electromagnetic.industry.software.manage.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.electromagnetic.industry.software.manage.pojo.models.EleFileBackupLog; +import com.electromagnetic.industry.software.manage.pojo.models.FileBackupLog; import org.apache.ibatis.annotations.Mapper; @Mapper -public interface EleFileBackupLogMapper extends BaseMapper { +public interface FileBackupLogMapper extends BaseMapper { } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EleFileBackupLog.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EleFileBackupLog.java deleted file mode 100644 index 21faa29..0000000 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EleFileBackupLog.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.electromagnetic.industry.software.manage.pojo.models; - -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Date; - -@TableName("ele_file_backup_log") -@Data -@NoArgsConstructor -public class EleFileBackupLog { - - public EleFileBackupLog(Date reqStartTime, Date reqEndTime, long fileTime, String id) { - this.reqStartTime = reqStartTime; - this.reqEndTime = reqEndTime; - this.fileTime = fileTime; - this.id = id; - } - - private String id; - private Date reqStartTime; - private Date backupStartTime; - private Date backupEndTime; - private Date reqEndTime; - private Date createTime; - - private String fileName; - - private Boolean backupStatus; - - private String failInfoDetail; - - private long fileTime; -} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/FileBackupLog.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/FileBackupLog.java new file mode 100644 index 0000000..d523932 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/FileBackupLog.java @@ -0,0 +1,37 @@ +package com.electromagnetic.industry.software.manage.pojo.models; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Builder; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +@TableName("file_backup_log") +@Builder +@Data +@Accessors(chain = true) +public class FileBackupLog { + + private String id; + + private String fileId; + + private boolean backupSuccess; + + private Date createTime; + + private Long startTime; + + private Long endTime; + + private Long duration; + + private String failInfoDetail; + + private long fileTime; + + private String fileName; + + private Integer source; +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RecycleFileQueryDTO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RecycleFileQueryDTO.java new file mode 100644 index 0000000..e353a4b --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RecycleFileQueryDTO.java @@ -0,0 +1,50 @@ +package com.electromagnetic.industry.software.manage.pojo.req; + +import lombok.Data; + +@Data +public class RecycleFileQueryDTO { + + private String keyword; + + private int pageNum; + + private int pageSize; + + /** + * 文件名排序 (0-升序,1-降序) + */ + private Integer fileNameSort; + + /** + * 文件类型 (0-升序,1-降序) + */ + private Integer fileTypeSort; + + /** + * 文件类型过滤 + */ + private String fileType; + + /** + * 上传时间(0-升序,1-降序) + */ + private Integer createdTime; + + /** + * 修改时间(0-升序,1-降序) + */ + private Integer updatedTime; + + + /** + * 版本号(0-升序,1-降序 + */ + private Integer versionSort; + + /** + * 文件大小0-升序,1-降序) + */ + private Integer fileSizeSort; + +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileRecycleQueryVO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileRecycleQueryVO.java new file mode 100644 index 0000000..cc6b0ba --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileRecycleQueryVO.java @@ -0,0 +1,32 @@ +package com.electromagnetic.industry.software.manage.pojo.resp; + +import lombok.Data; + +import java.util.Date; + +@Data +public class FileRecycleQueryVO { + + private String id; + + private String fileId; + + private String fileName; + + private String fileType; + + private String fileVersion; + + private Date updateTime; + + private String fileNote; + + private long fileSize; + + private String fileSizeShow; + + private String updatedBy; + + private String userName; + +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java index 9344e93..3a483f4 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java @@ -177,11 +177,6 @@ public interface EdFileInfoService { * @param response */ ResponseEntity preview(String id, HttpServletResponse response, int dataOwnCode); - /** - * 计算fileSizeShow字段 - * @param records - */ - void resetFileSize(List records); /** * 收藏页 数据查询 diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/FileRecycleService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/FileRecycleService.java new file mode 100644 index 0000000..ad11b5e --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/FileRecycleService.java @@ -0,0 +1,14 @@ +package com.electromagnetic.industry.software.manage.service; + +import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +import com.electromagnetic.industry.software.manage.pojo.req.RecycleFileQueryDTO; + +public interface FileRecycleService { + + ElectromagneticResult list(RecycleFileQueryDTO queryDTO); + + ElectromagneticResult remove(String fileId); + + ElectromagneticResult recover(String fileId); + +} 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 e83139f..7620921 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 @@ -18,6 +18,7 @@ import com.electromagnetic.industry.software.common.util.EleCommonUtil; import com.electromagnetic.industry.software.common.util.EleLog; import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil; import com.electromagnetic.industry.software.common.util.UserThreadLocal; +import com.electromagnetic.industry.software.manage.config.ElePropertyConfig; import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper; import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo; import com.electromagnetic.industry.software.manage.pojo.resp.FileProjectVO; @@ -67,12 +68,8 @@ public class CommonService { @Value("${prj.folder.max.length}") private int prjFolderMaxLength; - private String eleDataPath; - - private String userDataPath; - @Resource - private Environment environment; + private ElePropertyConfig elePropertyConfig; @Resource private EdFileInfoMapper edFileInfoMapper; @@ -80,17 +77,11 @@ public class CommonService { @Resource private FileSystemService fileSystemService; - @PostConstruct - public void init() { - eleDataPath = EleCommonUtil.isWinOs() ? environment.getProperty("data.windows.path") : environment.getProperty("data.linux.path"); - userDataPath = EleCommonUtil.isWinOs() ? environment.getProperty("data.windows.user.path") : environment.getProperty("data.linux.user.path"); - } - public String getEleDataPath(int dataOwnCode) { if (dataOwnCode == DataOwnEnum.USER_PRJ.code) { - return userDataPath; + return elePropertyConfig.getUserDataPath(); } - return eleDataPath; + return elePropertyConfig.getEleDataPath(); } /** @@ -110,7 +101,7 @@ public class CommonService { public String getFileSysPath(String dbPath, int dataOwnCode) { ArrayList paths = CollUtil.newArrayList(dbPath.split(MYSQL_FILE_PATH_SPLIT)); String path = getDbPath(paths); - String prePath = dataOwnCode == DataOwnEnum.USER_PRJ.code ? userDataPath : eleDataPath; + String prePath = dataOwnCode == DataOwnEnum.USER_PRJ.code ? elePropertyConfig.getUserDataPath() : elePropertyConfig.getEleDataPath(); return prePath + File.separator + path; } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileFavoriteServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileFavoriteServiceImpl.java index c5ea729..9e10eec 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileFavoriteServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileFavoriteServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.electromagnetic.industry.software.common.enums.EffectFlagEnum; import com.electromagnetic.industry.software.common.enums.EleDataSaveStatusEnum; import com.electromagnetic.industry.software.common.exception.BizException; +import com.electromagnetic.industry.software.common.util.EleCommonUtil; import com.electromagnetic.industry.software.common.util.UserThreadLocal; import com.electromagnetic.industry.software.manage.mapper.EdFileFavoriteMapper; import com.electromagnetic.industry.software.manage.pojo.models.EdFileFavorite; @@ -78,7 +79,7 @@ public class EdFileFavoriteServiceImpl extends ServiceImpl page = new Page<>(fileInfoQueryDTO.getPageNum(), fileInfoQueryDTO.getPageSize()); IPage fileInfoVOIPage = fileInfoService.queryFileList(page, fileIds, fileInfoQueryDTO, EleDataSaveStatusEnum.SUCCESS.code, EffectFlagEnum.EFFECT.code); - fileInfoService.resetFileSize(fileInfoVOIPage.getRecords()); + fileInfoVOIPage.getRecords().forEach(e -> e.setFileSizeShow(EleCommonUtil.convertFileSize(e.getFileSize()))); UserThreadLocal.setSuccessInfo("", "", "查询了收藏列表"); return fileInfoVOIPage; } 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 6c76d8c..ccfc4c2 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 @@ -24,6 +24,7 @@ import com.electromagnetic.industry.software.common.exception.BizException; import com.electromagnetic.industry.software.common.exception.PermissionDeniedException; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; import com.electromagnetic.industry.software.common.util.*; +import com.electromagnetic.industry.software.manage.config.ElePropertyConfig; import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper; import com.electromagnetic.industry.software.manage.mapper.UserMapper; import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo; @@ -35,7 +36,6 @@ import com.electromagnetic.industry.software.manage.pojo.resp.*; import com.electromagnetic.industry.software.manage.service.EdFileInfoService; import com.electromagnetic.industry.software.manage.service.FileSystemService; import com.electromagnetic.industry.software.manage.service.PermissionService; -import org.springframework.core.env.Environment; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; @@ -46,7 +46,6 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; -import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; @@ -62,28 +61,21 @@ import static com.electromagnetic.industry.software.common.cons.ElectromagneticC public class EdFileInfoServiceImpl extends ServiceImpl implements EdFileInfoService { private final EleLog log = new EleLog(EdFileInfoServiceImpl.class); + @Resource private CommonService commonService; + @Resource private FileSystemService fileSystemService; - @Resource - private Environment environment; + @Resource private PermissionService permissionService; + @Resource private UserMapper userMapper; - private String downloadDataDir = ""; - private String uploadDataDir = ""; - private String tmpDir = ""; - - @PostConstruct - public void init() { - uploadDataDir = EleCommonUtil.isWinOs() ? environment.getProperty("data.upload.windows.tmp.path") : environment.getProperty("data.upload.linux.tmp.path"); - downloadDataDir = EleCommonUtil.isWinOs() ? environment.getProperty("data.download.windows.tmp.path") : environment.getProperty("data.download.linux.tmp.path"); - tmpDir = EleCommonUtil.isWinOs() ? environment.getProperty("data.windows.tmp.path") : environment.getProperty("data.linux.tmp.path"); - } - + @Resource + private ElePropertyConfig elePropertyConfig; /** * 查询文件列表 * @@ -102,7 +94,6 @@ public class EdFileInfoServiceImpl extends ServiceImpl queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class) .select(EdFileInfo.class, file -> !file.getColumn().equals("file_content")) .select() - .eq(EdFileInfo::getDataOwn, DataOwnEnum.COMMON.code) .eq(EdFileInfo::getSaveStatus, EleDataSaveStatusEnum.SUCCESS.code) .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) .eq(EdFileInfo::getParentId, pars.getParentId()) @@ -144,26 +135,11 @@ public class EdFileInfoServiceImpl extends ServiceImpl edFileInfoPage = this.baseMapper.selectPage(new Page<>(pars.getPageNum(), pars.getPageSize()), queryWrapper); long total = edFileInfoPage.getTotal(); List records = BeanUtil.copyToList(edFileInfoPage.getRecords(), FileInfoVO.class); - resetFileSize(records); + records.forEach(e -> e.setFileSizeShow(EleCommonUtil.convertFileSize(e.getFileSize()))); UserThreadLocal.setSuccessInfo("", "", "查询文件成功"); return ElectromagneticResultUtil.success(new RespPageVO<>(total, records)); } - @Override - public void resetFileSize(List records) { - for (FileInfoVO fileInfoDTO : records) { - if (fileInfoDTO.getFileSize() < 1024) { - fileInfoDTO.setFileSizeShow(fileInfoDTO.getFileSize() + "B"); - } else if (fileInfoDTO.getFileSize() < 1024 * 1024) { - fileInfoDTO.setFileSizeShow(String.format("%.2f KB", fileInfoDTO.getFileSize() / 1024.0)); - } else if (fileInfoDTO.getFileSize() < 1024 * 1024 * 1024) { - fileInfoDTO.setFileSizeShow(String.format("%.2f MB", fileInfoDTO.getFileSize() / (1024.0 * 1024))); - } else { - fileInfoDTO.setFileSizeShow(String.format("%.2f GB", fileInfoDTO.getFileSize() / (1024.0 * 1024 * 1024))); - } - } - } - /** * 新建文件夹 * @@ -362,7 +338,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl checkChunkExist(FileChunkDTO fileChunkDTO) { String currentUserId = UserThreadLocal.getUserId(); - String userUploadFolder = uploadDataDir + File.separator + currentUserId; + String userUploadFolder = elePropertyConfig.getUploadDataDir() + File.separator + currentUserId; String identifier = fileChunkDTO.getIdentifier(); List uploadedChunks = getUploadedChunks(identifier, userUploadFolder); return ElectromagneticResultUtil.success(new FileChunkResultDTO(false, new HashSet<>(uploadedChunks))); @@ -392,7 +368,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl batchExport(String dataIdArr, HttpServletResponse response, int dataOwnCode) throws IOException { - String userDownloadDataDir = downloadDataDir + File.separator + UserThreadLocal.getUserId(); + String userDownloadDataDir = elePropertyConfig.getDownloadDataDir() + File.separator + UserThreadLocal.getUserId(); String[] ids = dataIdArr.split(","); Map map = permissionService.filterExportIds(ids); Assert.isTrue(!map.containsValue(Boolean.FALSE), "有未授权的层级目录,禁止导出"); @@ -1176,7 +1152,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl list(RecycleFileQueryDTO pars) { + + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class) + .select(EdFileInfo.class, file -> !file.getColumn().equals("file_content")) + .eq(EdFileInfo::getAllDeleted, true) + .eq(EdFileInfo::getPermanentDeleted, false) + .eq(EdFileInfo::getDataType, EleDataTypeEnum.FILE.code) + + .eq(StrUtil.isNotEmpty(pars.getFileType()), EdFileInfo::getFileType, pars.getFileType()) + .orderByAsc(ObjUtil.equals(pars.getCreatedTime(), 0), EdFileInfo::getCreatedTime) + .orderByDesc(ObjUtil.equals(pars.getCreatedTime(), 1), EdFileInfo::getCreatedTime) + .orderByDesc(ObjUtil.isAllEmpty(pars.getCreatedTime(), pars.getVersionSort(), pars.getFileSizeSort(), pars.getFileNameSort(), pars.getUpdatedTime(), pars.getFileTypeSort()), EdFileInfo::getCreatedTime) + .orderByDesc(ObjUtil.isAllEmpty(pars.getCreatedTime(), pars.getVersionSort(), pars.getFileSizeSort(), pars.getFileNameSort(), pars.getUpdatedTime(), pars.getFileTypeSort()), EdFileInfo::getCreatedTime) + .orderByAsc(ObjUtil.equals(pars.getVersionSort(), 0), EdFileInfo::getFileVersion) + .orderByDesc(ObjUtil.equals(pars.getVersionSort(), 1), EdFileInfo::getFileVersion) + + .orderByAsc(ObjUtil.equals(pars.getFileSizeSort(), 0), EdFileInfo::getFileSize) + .orderByDesc(ObjUtil.equals(pars.getFileSizeSort(), 1), EdFileInfo::getFileSize) + + .orderByAsc(ObjUtil.equals(pars.getFileNameSort(), 0), EdFileInfo::getFileName) + .orderByDesc(ObjUtil.equals(pars.getFileNameSort(), 1), EdFileInfo::getFileName) + + .orderByAsc(ObjUtil.equals(pars.getUpdatedTime(), 0), EdFileInfo::getUpdatedTime) + .orderByDesc(ObjUtil.equals(pars.getUpdatedTime(), 1), EdFileInfo::getUpdatedTime) + + .orderByAsc(ObjUtil.equals(pars.getFileTypeSort(), 0), EdFileInfo::getSort) + .orderByDesc(ObjUtil.equals(pars.getFileTypeSort(), 1), EdFileInfo::getSort); + + if (StrUtil.isNotEmpty(pars.getKeyword())) { + queryWrapper.and(qr -> qr.like(EdFileInfo::getFileName, pars.getKeyword()) + .or() + .like(EdFileInfo::getFileCode, pars.getKeyword()) + .or() + .like(EdFileInfo::getFileNote, pars.getKeyword()) + .or() + .like(EdFileInfo::getFileContent, pars.getKeyword())); + } + + if (!UserThreadLocal.getAdminType().equals(AdminTypeEnum.SYSTEM.getValue())) { + List accessibleTree = permissionService.getAccessibleTree(); + if (CollUtil.isNotEmpty(accessibleTree)) { + for (String permission : accessibleTree) { + queryWrapper.or().likeRight(EdFileInfo::getFileCode, permission); + } + } + } + + Page edFileInfoPage = this.edFileInfoMapper.selectPage(new Page<>(pars.getPageNum(), pars.getPageSize()), queryWrapper); + long total = edFileInfoPage.getTotal(); + List records = BeanUtil.copyToList(edFileInfoPage.getRecords(), FileRecycleQueryVO.class); + resetRes(records); + UserThreadLocal.setSuccessInfo("", "", "查询所有删除文件成功"); + return ElectromagneticResultUtil.success(new RespPageVO<>(total, records)); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ElectromagneticResult remove(String fileId) { + + // 备份该文件 + List edFileInfos = this.edFileInfoMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) + .select(EdFileInfo.class, file -> !file.getColumn().equals("file_content")) + .eq(EdFileInfo::getFileId, fileId)); + List fileSysPaths = new ArrayList<>(); + for (EdFileInfo edFileInfo : edFileInfos) { + String fileSysPath = commonService.getFileSysPath(edFileInfo.getFilePath(), edFileInfo.getDataOwn()); + FileBackupLog fileBackupLog = backupTask.getBaseMapper().selectOne(Wrappers.lambdaQuery(FileBackupLog.class).eq(FileBackupLog::getFileId, edFileInfo.getId())); + + String saveFileName = edFileInfo.getFileName() + "." + edFileInfo.getFileType() + "." + edFileInfo.getFileCode(); + + // 表示从没有备份过该文件 + if (fileBackupLog != null) { + long startTime = System.currentTimeMillis(); + BackupFileResLog backup = backupTask.backup(fileSysPath); + long endTime = System.currentTimeMillis(); + + FileBackupLog backupLog = FileBackupLog.builder() + .id(IdWorker.getSnowFlakeIdString()) + .fileId(edFileInfo.getId()) + .startTime(startTime) + .endTime(endTime) + .duration(endTime - startTime) + .fileTime(FileUtil.lastModifiedTime(fileSysPath).getTime()) + .createTime(new Date()) + .fileName(saveFileName) + .source(FileBackupSource.SYS_BACKUP.code) + .build(); + + if (backup.getBackupSuccess()) { + backupLog.setBackupSuccess(true); + backupTask.getBaseMapper().insert(backupLog); + } else { + backupLog.setBackupSuccess(false); + backupLog.setFailInfoDetail(backup.getFailInfoDetail()); + backupTask.getBaseMapper().insert(backupLog); + throw new BizException(StrFormatter.format("删除文件 {} 失败,原因 备份该文件出现错误,联系管理员查看日志", saveFileName)); + } + + } else { + long startTime = System.currentTimeMillis(); + BackupFileResLog backup = backupTask.backup(fileSysPath); + long endTime = System.currentTimeMillis(); + fileBackupLog.setStartTime(startTime) + .setEndTime(endTime) + .setDuration(endTime - startTime) + .setFileTime(FileUtil.lastModifiedTime(fileSysPath).getTime()) + .setCreateTime(new Date()) + .setFileName(saveFileName); + if (backup.getBackupSuccess()) { + fileBackupLog.setBackupSuccess(true); + backupTask.getBaseMapper().update(fileBackupLog, null); + } else { + fileBackupLog.setBackupSuccess(false); + fileBackupLog.setFailInfoDetail(backup.getFailInfoDetail()); + backupTask.getBaseMapper().update(fileBackupLog, null); + throw new BizException(StrFormatter.format("删除文件 {} 失败,原因 备份该文件出现错误,联系管理员查看日志", saveFileName)); + } + } + fileSysPaths.add(fileSysPath); + } + + // 移动到tmp目录,七天后删除 + for (String fileSysPath : fileSysPaths) { + fileSystemService.moveFile(fileSysPath, elePropertyConfig.getTmpDir() + File.separator + new File(fileSysPath).getName()); + } + + // 更新MySQL数据库 + this.edFileInfoMapper.update(null, Wrappers.lambdaUpdate(EdFileInfo.class) + .eq(EdFileInfo::getFileId, fileId) + .set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code) + .set(EdFileInfo::getPermanentDeleted, true) + .set(EdFileInfo::getAllDeleted, true)); + UserThreadLocal.setSuccessInfo("", "", "删除文件 {} 成功,文件id {}", edFileInfos.get(0).getFileName() + "." + edFileInfos.get(0).getFileType(), fileId); + return ElectromagneticResultUtil.success("删除文件成功"); + } + + @Override + public ElectromagneticResult recover(String fileId) { + + List edFileInfos = this.edFileInfoMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) + .select(EdFileInfo.class, file -> !file.getColumn().equals("file_content")) + .orderByDesc(EdFileInfo::getUpdatedTime) + .eq(EdFileInfo::getFileId, fileId) + .last("limit 1")); + EdFileInfo edFileInfo = edFileInfos.get(0); + edFileInfo.setEffectFlag(EffectFlagEnum.EFFECT.code); + this.edFileInfoMapper.update(edFileInfo, null); + UserThreadLocal.setSuccessInfo(edFileInfo.getParentId(), edFileInfo.getId(), "还原文件 {} 成功,文件id为 {}", edFileInfo.getFileName() + "." + edFileInfo.getFileType(), fileId); + return ElectromagneticResultUtil.success("还原文件成功"); + } + + private void resetRes(List records) { + List userIds = records.stream().map(FileRecycleQueryVO::getUpdatedBy).collect(Collectors.toList()); + Map idNameMap = userMapper.selectList(Wrappers.lambdaQuery().in(User::getId, userIds)).stream().collect(Collectors.toMap(User::getUserId, User::getUserName)); + records.forEach(e -> { + e.setFileSizeShow(EleCommonUtil.convertFileSize(e.getFileSize())); + e.setUserName(idNameMap.get(e.getUpdatedBy())); + }); + } +} 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 bd59433..b75d50c 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 @@ -9,13 +9,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.electromagnetic.industry.software.common.pojo.BackupFileResLog; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; -import com.electromagnetic.industry.software.manage.mapper.EleFileBackupLogMapper; -import com.electromagnetic.industry.software.manage.pojo.models.EleFileBackupLog; -import org.springframework.core.env.Environment; -import org.springframework.scheduling.annotation.Scheduled; +import com.electromagnetic.industry.software.manage.config.ElePropertyConfig; +import com.electromagnetic.industry.software.manage.mapper.FileBackupLogMapper; +import com.electromagnetic.industry.software.manage.pojo.models.FileBackupLog; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.io.File; import java.io.FileFilter; @@ -25,35 +23,25 @@ import java.util.List; import java.util.Map; @Component -public class BackupTask extends ServiceImpl { +public class BackupTask extends ServiceImpl { private String host; private int port; - private String prjDir; - @Resource - private Environment environment; - - @PostConstruct - public void init() { - String osName = System.getProperty("os.name").toLowerCase(); - String tmp = osName.startsWith("win") ? environment.getProperty("data.windows.path") : environment.getProperty("data.linux.path"); - prjDir = FileUtil.getParent(tmp, 1); - } + private ElePropertyConfig elePropertyConfig; // @Scheduled(cron = "0 0 1 * * ?") public void backup() { long lastFileTime = getLastFileTime(); - List files = filter(lastFileTime, prjDir); + List files = filter(lastFileTime, elePropertyConfig.getPrjDir()); for (File file : files) { String fileCode = getFileCode(file); Date reqStartTime = new Date(); BackupFileResLog resLog = backup(file.getAbsolutePath()); Date reqEndTime = new Date(); - EleFileBackupLog resDb = new EleFileBackupLog(reqStartTime, reqEndTime, file.lastModified(), fileCode); - BeanUtil.copyProperties(resLog, resDb); - this.saveOrUpdate(resDb); + +// this.saveOrUpdate(resDb); } } @@ -69,9 +57,9 @@ public class BackupTask extends ServiceImpl eleFileBackupLogs = this.baseMapper.selectList(Wrappers.lambdaQuery(EleFileBackupLog.class) - .select(EleFileBackupLog::getFileTime) - .orderByDesc(EleFileBackupLog::getFileTime) + List eleFileBackupLogs = this.baseMapper.selectList(Wrappers.lambdaQuery(FileBackupLog.class) + .select(FileBackupLog::getFileTime) + .orderByDesc(FileBackupLog::getFileTime) .last("limit 1")); if (eleFileBackupLogs.isEmpty()) { return 0L; @@ -79,7 +67,7 @@ public class BackupTask extends ServiceImpl map = new HashMap<>(); map.put("file", new File(filePath)); diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/FileBackupSource.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/FileBackupSource.java new file mode 100644 index 0000000..18c783d --- /dev/null +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/FileBackupSource.java @@ -0,0 +1,14 @@ +package com.electromagnetic.industry.software.common.enums; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum FileBackupSource { + + SYS_BACKUP(0, "系统备份"), + REMOVE(1, "删除文件"); + + public int code; + public String desc; + +} diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/pojo/BackupFileResLog.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/pojo/BackupFileResLog.java index 146d91e..1429408 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/pojo/BackupFileResLog.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/pojo/BackupFileResLog.java @@ -8,9 +8,14 @@ import java.util.Date; @Data @Builder public class BackupFileResLog { + private Date backupStartTime; + private String fileName; - private Boolean backupStatus; + + private Boolean backupSuccess; + private Date backupEndTime; + private String failInfoDetail; } diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/util/EleCommonUtil.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/util/EleCommonUtil.java index 695fc25..3568c60 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/util/EleCommonUtil.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/util/EleCommonUtil.java @@ -122,4 +122,17 @@ public final class EleCommonUtil { } return stringBuilder.toString(); } + + public static String convertFileSize(long size) { + if (size < 1024) { + return size + "B"; + } else if (size < 1024 * 1024) { + return String.format("%.2f KB", size / 1024.0); + } else if (size < 1024 * 1024 * 1024) { + return String.format("%.2f MB", size / (1024.0 * 1024)); + } else { + return String.format("%.2f GB", size / (1024.0 * 1024 * 1024)); + } + } + }