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 index 078390d..649a628 100644 --- 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 @@ -34,4 +34,6 @@ public class FileBackupLog { private String fileName; private Integer source; + + private Date fileCreateTime; } 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 fa31676..0c52dee 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 @@ -147,6 +147,7 @@ public class FileRecycleServiceImpl implements FileRecycleService { .setCreateTime(new Date()) .setFileName(saveFileName) .setFileCode(commonService.getFileCode(fileSysPath)) + .setFileCreateTime(edFileInfo.getCreatedTime()) .setSource(FileBackupSource.SYS_BACKUP.code); if (backup.getBackupSuccess()) { @@ -169,6 +170,7 @@ public class FileRecycleServiceImpl implements FileRecycleService { .setFileTime(FileUtil.lastModifiedTime(fileSysPath).getTime()) .setCreateTime(new Date()) .setFileCode(commonService.getFileCode(fileSysPath)) + .setFileCreateTime(edFileInfo.getCreatedTime()) .setFileName(saveFileName); if (backup.getBackupSuccess()) { fileBackupLog.setBackupSuccess(true); 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 5418951..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 @@ -9,17 +9,21 @@ 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.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 org.springframework.scheduling.annotation.Scheduled; +import com.electromagnetic.industry.software.manage.service.serviceimpl.CommonService; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -29,6 +33,7 @@ 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 { @@ -39,24 +44,94 @@ public class BackupTask extends ServiceImpl 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; + return FileUtil.loopFiles(dir, filter); + } // @Scheduled(cron = "0 0 1 * * ?") public void backup() { - long lastFileTime = getLastFileTime(); - 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(); -// this.saveOrUpdate(resDb); + // 首先查看备份失败的文件 + 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); } } - @Scheduled(cron = "0 0 3 * * ?") + 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()); + 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) { @@ -84,28 +159,6 @@ public class BackupTask extends ServiceImpl } } - private static List filter(long time, String dir) { - 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); - } - - private long getLastFileTime() { - List eleFileBackupLogs = this.baseMapper.selectList(Wrappers.lambdaQuery(FileBackupLog.class) - .select(FileBackupLog::getFileTime) - .orderByDesc(FileBackupLog::getFileTime) - .last("limit 1")); - if (CollUtil.isEmpty(eleFileBackupLogs)) { - return 0L; - } - return eleFileBackupLogs.get(0).getFileTime(); - } - public BackupFileResLog backup(String filePath) { Map map = new HashMap<>(); map.put("file", new File(filePath));