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..7784ea0 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/ElePropertyConfig.java @@ -0,0 +1,47 @@ +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.beans.factory.annotation.Value; +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; + + @Value("${data.tmp.days:7}") + private int tmpFileStoreDays; + + @Value("${backup.remote.host}") + private String remoteHost = ""; + @Value("${backup.remote.port}") + private int remotePort; + + @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/EdFileFavoriteController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileFavoriteController.java deleted file mode 100644 index 86df04b..0000000 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileFavoriteController.java +++ /dev/null @@ -1,55 +0,0 @@ -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.common.util.ElectromagneticResultUtil; -import com.electromagnetic.industry.software.common.util.UserThreadLocal; -import com.electromagnetic.industry.software.manage.pojo.req.FileInfoQueryDTO; -import com.electromagnetic.industry.software.manage.service.EdFileFavoriteService; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; - -@RestController -@RequestMapping("/data/ed/favorite") -public class EdFileFavoriteController { - - @Resource - EdFileFavoriteService edFileFavoriteService; - - /** - * 添加进收藏夹 - * @param id 文件id - * @return - */ - @GetMapping("/add") - @UserOperation(value="收藏了文件", modelName = UserOperationModuleEnum.DATABASE) - public ElectromagneticResult addFavorite(@RequestParam String id) { - String userId = UserThreadLocal.getUserId(); - return ElectromagneticResultUtil.success(edFileFavoriteService.addFavorite(userId, id)); - } - - /** - * 从收藏夹移除 - * @param id 文件id - * @return - */ - @GetMapping("/remove") - @UserOperation(value="从收藏夹移除了文件", modelName = UserOperationModuleEnum.DATABASE) - public ElectromagneticResult removeFavorite(@RequestParam String id) { - String userId = UserThreadLocal.getUserId(); - return ElectromagneticResultUtil.success(edFileFavoriteService.removeFavorite(userId, id)); - } - - /** - * 展示当前用户收藏夹文件 - * @return - */ - @PostMapping("/list") - @UserOperation(value="查看了收藏夹", modelName = UserOperationModuleEnum.DATABASE) - public ElectromagneticResult listFavorite(@RequestBody FileInfoQueryDTO fileInfoQueryDTO) { - String userId = UserThreadLocal.getUserId(); - return ElectromagneticResultUtil.success(edFileFavoriteService.findFavorite(userId, fileInfoQueryDTO)); - } -} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java index 1673099..d4115b5 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java @@ -6,10 +6,13 @@ import com.electromagnetic.industry.software.common.enums.DataOwnEnum; import com.electromagnetic.industry.software.common.enums.FilePermission; import com.electromagnetic.industry.software.common.enums.UserOperationModuleEnum; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil; +import com.electromagnetic.industry.software.common.util.UserThreadLocal; import com.electromagnetic.industry.software.manage.pojo.req.CreateFolderDTO; import com.electromagnetic.industry.software.manage.pojo.req.FileChunkDTO; import com.electromagnetic.industry.software.manage.pojo.req.FileInfoQueryDTO; import com.electromagnetic.industry.software.manage.pojo.req.UpdateFileInfoDTO; +import com.electromagnetic.industry.software.manage.service.EdFileFavoriteService; import com.electromagnetic.industry.software.manage.service.EdFileInfoService; import org.springframework.core.io.InputStreamResource; import org.springframework.http.ResponseEntity; @@ -26,6 +29,8 @@ public class EdFileInfoController { @Resource private EdFileInfoService edFileInfoService; + @Resource + private EdFileFavoriteService edFileFavoriteService; @UserOperation(value = "查看工程树", modelName = UserOperationModuleEnum.DATABASE) @RequestMapping("tree") @@ -161,4 +166,38 @@ public class EdFileInfoController { return edFileInfoService.preview(id, response, DataOwnEnum.COMMON.code); } + /** + * 添加进收藏夹 + * @param id 文件id + * @return + */ + @GetMapping("/collection") + @UserOperation(value="收藏了文件", modelName = UserOperationModuleEnum.DATABASE) + public ElectromagneticResult addFavorite(@RequestParam String id) { + String userId = UserThreadLocal.getUserId(); + return ElectromagneticResultUtil.success(edFileFavoriteService.addFavorite(userId, id)); + } + + /** + * 从收藏夹移除 + * @param id 文件id + * @return + */ + @GetMapping("/removeCollection") + @UserOperation(value="从收藏夹移除了文件", modelName = UserOperationModuleEnum.DATABASE) + public ElectromagneticResult removeFavorite(@RequestParam String id) { + String userId = UserThreadLocal.getUserId(); + return ElectromagneticResultUtil.success(edFileFavoriteService.removeFavorite(userId, id)); + } + + /** + * 展示当前用户收藏夹文件 + * @return + */ + @PostMapping("/listCollection") + @UserOperation(value="查看了收藏夹", modelName = UserOperationModuleEnum.DATABASE) + public ElectromagneticResult listFavorite(@RequestBody FileInfoQueryDTO fileInfoQueryDTO) { + String userId = UserThreadLocal.getUserId(); + return ElectromagneticResultUtil.success(edFileFavoriteService.findFavorite(userId, fileInfoQueryDTO)); + } } 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..5ceb3db --- /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("recover") + @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/controller/UserEdFileInfoController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserEdFileInfoController.java index 3947bb2..5c4cc59 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserEdFileInfoController.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserEdFileInfoController.java @@ -4,9 +4,12 @@ import com.electromagnetic.industry.software.common.annotations.UserOperation; import com.electromagnetic.industry.software.common.enums.DataOwnEnum; import com.electromagnetic.industry.software.common.enums.UserOperationModuleEnum; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil; +import com.electromagnetic.industry.software.common.util.UserThreadLocal; import com.electromagnetic.industry.software.manage.pojo.req.CreateFolderDTO; import com.electromagnetic.industry.software.manage.pojo.req.FileInfoQueryDTO; import com.electromagnetic.industry.software.manage.pojo.req.UpdateFileInfoDTO; +import com.electromagnetic.industry.software.manage.service.EdFileFavoriteService; import com.electromagnetic.industry.software.manage.service.EdFileInfoService; import org.springframework.core.io.InputStreamResource; import org.springframework.http.ResponseEntity; @@ -22,6 +25,8 @@ public class UserEdFileInfoController { @Resource private EdFileInfoService edFileInfoService; + @Resource + private EdFileFavoriteService edFileFavoriteService; @UserOperation(value = "查看工程树", modelName =UserOperationModuleEnum.USER_PRJ) @RequestMapping("tree") @@ -118,4 +123,41 @@ public class UserEdFileInfoController { public ResponseEntity preview(@RequestParam String id, HttpServletResponse response) { return edFileInfoService.preview(id, response, DataOwnEnum.USER_PRJ.code); } + + /** + * 添加进收藏夹 + * @param id 文件id + * @return + */ + @GetMapping("/collection") + @UserOperation(value="收藏了文件", modelName = UserOperationModuleEnum.DATABASE) + public ElectromagneticResult addFavorite(@RequestParam String id) { + String userId = UserThreadLocal.getUserId(); + return ElectromagneticResultUtil.success(edFileFavoriteService.addFavorite(userId, id)); + } + + /** + * 从收藏夹移除 + * @param id 文件id + * @return + */ + @GetMapping("/removeCollection") + @UserOperation(value="从收藏夹移除了文件", modelName = UserOperationModuleEnum.DATABASE) + public ElectromagneticResult removeFavorite(@RequestParam String id) { + String userId = UserThreadLocal.getUserId(); + return ElectromagneticResultUtil.success(edFileFavoriteService.removeFavorite(userId, id)); + } + + /** + * 展示当前用户收藏夹文件 + * @return + */ + @PostMapping("/listCollection") + @UserOperation(value="查看了收藏夹", modelName = UserOperationModuleEnum.DATABASE) + public ElectromagneticResult listFavorite(@RequestBody FileInfoQueryDTO fileInfoQueryDTO) { + String userId = UserThreadLocal.getUserId(); + return ElectromagneticResultUtil.success(edFileFavoriteService.findFavorite(userId, fileInfoQueryDTO)); + } + + } 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..649a628 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/FileBackupLog.java @@ -0,0 +1,39 @@ +package com.electromagnetic.industry.software.manage.pojo.models; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +@TableName("file_backup_log") +@Data +@Accessors(chain = true) +public class FileBackupLog { + + private String id; + + private String fileId; + + private String fileCode; + + 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; + + private Date fileCreateTime; +} 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 da1a2df..1fcb6b5 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..c642478 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; } @@ -431,4 +422,11 @@ public class CommonService { return ""; } + public String getFileCode(String path) { + int index = path.lastIndexOf("."); + return path.substring(index + 1); + + } + + } 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 aa60557..32e4ee6 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 = new FileBackupLog() + .setId(IdWorker.getSnowFlakeIdString()) + .setFileId(edFileInfo.getId()) + .setStartTime(startTime) + .setEndTime(endTime) + .setDuration(endTime - startTime) + .setFileTime(FileUtil.lastModifiedTime(fileSysPath).getTime()) + .setCreateTime(new Date()) + .setFileName(saveFileName) + .setFileCode(commonService.getFileCode(fileSysPath)) + .setFileCreateTime(edFileInfo.getCreatedTime()) + .setSource(FileBackupSource.SYS_BACKUP.code); + + 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()) + .setFileCode(commonService.getFileCode(fileSysPath)) + .setFileCreateTime(edFileInfo.getCreatedTime()) + .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 + @Transactional(rollbackFor = Exception.class) + 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..85fae15 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 @@ -1,21 +1,31 @@ package com.electromagnetic.industry.software.manage.tasks; -import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.text.StrFormatter; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.electromagnetic.industry.software.common.enums.EleDataTypeEnum; +import com.electromagnetic.industry.software.common.enums.FileBackupSource; +import com.electromagnetic.industry.software.common.enums.UserOperationModuleEnum; 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.common.util.IdWorker; +import com.electromagnetic.industry.software.manage.config.ElePropertyConfig; +import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper; +import com.electromagnetic.industry.software.manage.mapper.FileBackupLogMapper; +import com.electromagnetic.industry.software.manage.mapper.UserAccessLogMapper; +import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo; +import com.electromagnetic.industry.software.manage.pojo.models.FileBackupLog; +import com.electromagnetic.industry.software.manage.pojo.models.UserAccessLog; +import com.electromagnetic.industry.software.manage.service.FileSystemService; +import com.electromagnetic.industry.software.manage.service.serviceimpl.CommonService; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.io.File; import java.io.FileFilter; @@ -23,68 +33,136 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Component -public class BackupTask extends ServiceImpl { - - private String host; - private int port; - - private String prjDir; +public class BackupTask extends ServiceImpl { @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); - } - -// @Scheduled(cron = "0 0 1 * * ?") - public void backup() { - long lastFileTime = getLastFileTime(); - List files = filter(lastFileTime, prjDir); - 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); - } - } + private ElePropertyConfig elePropertyConfig; + @Resource + private FileSystemService fileSystemService; + @Resource + private UserAccessLogMapper userAccessLogMapper; + @Resource + private FileBackupLogMapper fileBackupLogMapper; + @Resource + private EdFileInfoMapper edFileInfoMapper; + @Resource + private CommonService commonService; private static List filter(long time, String dir) { - FileFilter filter = file -> file.lastModified() > time; + FileFilter filter = file -> file.lastModified() < time; return FileUtil.loopFiles(dir, filter); } - private String getFileCode(File file) { - String fileName = file.getName(); - int index = fileName.lastIndexOf("."); - return fileName.substring(index + 1); - } + // @Scheduled(cron = "0 0 1 * * ?") + public void backup() { - private long getLastFileTime() { - List eleFileBackupLogs = this.baseMapper.selectList(Wrappers.lambdaQuery(EleFileBackupLog.class) - .select(EleFileBackupLog::getFileTime) - .orderByDesc(EleFileBackupLog::getFileTime) - .last("limit 1")); - if (eleFileBackupLogs.isEmpty()) { - return 0L; + // 首先查看备份失败的文件 + List failBackFailFileIds = getFailBackFile(); + for (String id : failBackFailFileIds) { + EdFileInfo fileInfo = this.edFileInfoMapper.selectOne(Wrappers.lambdaQuery() + .select(EdFileInfo.class, file -> !file.getColumn().equals("file_content")) + .eq(EdFileInfo::getId, id)); + String sysFilePath = commonService.getFileSysPath(fileInfo.getFilePath(), fileInfo.getDataOwn()); + long startTime = System.currentTimeMillis(); + BackupFileResLog resLog = backup(sysFilePath); + long endTime = System.currentTimeMillis(); + fileBackupLogMapper.update(null, Wrappers.lambdaUpdate() + .eq(FileBackupLog::getFileId, id) + .set(FileBackupLog::getFileCode, fileInfo.getFileCode()) + .set(FileBackupLog::getFileName, fileInfo.getFileName() + "." + fileInfo.getFileType()) + .set(FileBackupLog::getStartTime, startTime) + .set(FileBackupLog::getEndTime, endTime) + .set(FileBackupLog::getDuration, endTime - startTime) + .set(FileBackupLog::getFailInfoDetail, resLog.getFailInfoDetail()) + .set(FileBackupLog::isBackupSuccess, resLog.getBackupSuccess())); + } + // 查找最大备份时间 + Date fileMaxCreateTime = getFileMaxCreateTime(); + fileMaxCreateTime = DateUtil.offsetHour(fileMaxCreateTime, -1); + // 需要备份的文件 + List edFileInfos = edFileInfoMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) + .select(EdFileInfo.class, file -> !file.getColumn().equals("file_content")) + .eq(EdFileInfo::getDataType, EleDataTypeEnum.FILE.code) + .gt(EdFileInfo::getCreatedTime, fileMaxCreateTime)); + for (EdFileInfo edFileInfo : edFileInfos) { + long count = fileBackupLogMapper.selectCount(Wrappers.lambdaQuery().eq(FileBackupLog::getFileId, edFileInfo.getId())); + if (count > 0) { + continue; + } + String fileSysPath = commonService.getFileSysPath(edFileInfo.getFilePath(), edFileInfo.getDataOwn()); + long startTime = System.currentTimeMillis(); + BackupFileResLog resLog = backup(fileSysPath); + long endTime = System.currentTimeMillis(); + FileBackupLog backupLog = new FileBackupLog() + .setId(IdWorker.getSnowFlakeIdString()) + .setFileId(edFileInfo.getId()) + .setFileCode(edFileInfo.getFileCode()) + .setBackupSuccess(resLog.getBackupSuccess()) + .setCreateTime(new Date()) + .setStartTime(startTime) + .setEndTime(endTime) + .setDuration(endTime - startTime) + .setFailInfoDetail(resLog.getFailInfoDetail()) + .setFileTime(FileUtil.lastModifiedTime(fileSysPath).getTime()) + .setFileName(edFileInfo.getFileName() + "." + edFileInfo.getFileType()) + .setFileCreateTime(edFileInfo.getCreatedTime()) + .setSource(FileBackupSource.SYS_BACKUP.code); + fileBackupLogMapper.insert(backupLog); } - return eleFileBackupLogs.get(0).getFileTime(); } - private BackupFileResLog backup(String filePath) { - String prjPath = ""; + private Date getFileMaxCreateTime() { + List fileBackupLogs = fileBackupLogMapper.selectList(Wrappers.lambdaQuery().orderByDesc(FileBackupLog::getFileCreateTime).last("limit 1")); + if (CollUtil.isNotEmpty(fileBackupLogs)) { + return fileBackupLogs.get(0).getFileCreateTime(); + } + return new Date(); + } + + public List getFailBackFile() { + List fileBackupLogs = fileBackupLogMapper.selectList(Wrappers.lambdaQuery() + .select(FileBackupLog::getFileId) + .eq(FileBackupLog::isBackupSuccess, false)); + return fileBackupLogs.stream().map(FileBackupLog::getFileId).collect(Collectors.toList()); + } + +// @Scheduled(cron = "0 0 3 * * ?") + public void deleteTmpFile() { + DateTime backDaysTime = DateUtil.offsetDay(new Date(), -elePropertyConfig.getTmpFileStoreDays()); + FileFilter filter = file -> file.lastModified() < backDaysTime.getTime(); + List files = FileUtil.loopFiles(elePropertyConfig.getTmpDir(), filter); + for (File file : files) { + fileSystemService.deleteFile(file.getAbsolutePath()); + UserAccessLog userAccessLog = UserAccessLog.builder() + .id(IdWorker.getSnowFlakeIdString()) + .userId("") + .accessStartTime(new Date()) + .accessEndTime(new Date()) + .accessDuration(0L) + .action("删除") + .requestUrl("") + .requestIp("") + .reqArgs("") + .remoteAddr("") + .accessSuccess(true) + .operationMsg("从系统中物理删除了文件" + file.getName()) + .createTime(new Date()) + .operationModule(UserOperationModuleEnum.DATABASE.key) + .dataId("") + .parentId("") + .response("") + .build(); + userAccessLogMapper.insert(userAccessLog); + } + } + + public BackupFileResLog backup(String filePath) { Map map = new HashMap<>(); map.put("file", new File(filePath)); - map.put("path", prjPath); - String url = StrFormatter.format("http://{}:{}/data/file/backup/upload", host, port); + String url = StrFormatter.format("http://{}:{}/data/file/backup/upload", elePropertyConfig.getRemoteHost(), elePropertyConfig.getRemotePort()); String res = HttpUtil.post(url, map); ElectromagneticResult resObj = JSONUtil.toBean(res, ElectromagneticResult.class); String data = JSONUtil.toJsonStr(resObj.getData()); diff --git a/electrmangnetic/src/main/resources/application.properties b/electrmangnetic/src/main/resources/application.properties index a7a910e..6af01a9 100644 --- a/electrmangnetic/src/main/resources/application.properties +++ b/electrmangnetic/src/main/resources/application.properties @@ -39,4 +39,9 @@ data.linux.user.tmp.path=/szsd/data/eleData/dev/user_tmp prj.folder.max.length=6 -spring.jackson.time-zone=GMT+8 \ No newline at end of file +spring.jackson.time-zone=GMT+8 + +tmp.file.store.days=7 + +backup.remote.host=127.0.0.1 +backup.remote.port=1111 \ No newline at end of file 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)); + } + } + }