完成文件备份相关的功能
This commit is contained in:
parent
dd85e18e76
commit
4f51521354
|
|
@ -34,4 +34,6 @@ public class FileBackupLog {
|
|||
private String fileName;
|
||||
|
||||
private Integer source;
|
||||
|
||||
private Date fileCreateTime;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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<FileBackupLogMapper, FileBackupLog> {
|
||||
|
|
@ -39,24 +44,94 @@ public class BackupTask extends ServiceImpl<FileBackupLogMapper, FileBackupLog>
|
|||
private FileSystemService fileSystemService;
|
||||
@Resource
|
||||
private UserAccessLogMapper userAccessLogMapper;
|
||||
@Resource
|
||||
private FileBackupLogMapper fileBackupLogMapper;
|
||||
@Resource
|
||||
private EdFileInfoMapper edFileInfoMapper;
|
||||
@Resource
|
||||
private CommonService commonService;
|
||||
|
||||
private static List<File> 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<File> 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<String> failBackFailFileIds = getFailBackFile();
|
||||
for (String id : failBackFailFileIds) {
|
||||
EdFileInfo fileInfo = this.edFileInfoMapper.selectOne(Wrappers.<EdFileInfo>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.<FileBackupLog>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<EdFileInfo> 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.<FileBackupLog>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<FileBackupLog> fileBackupLogs = fileBackupLogMapper.selectList(Wrappers.<FileBackupLog>lambdaQuery().orderByDesc(FileBackupLog::getFileCreateTime).last("limit 1"));
|
||||
if (CollUtil.isNotEmpty(fileBackupLogs)) {
|
||||
return fileBackupLogs.get(0).getFileCreateTime();
|
||||
}
|
||||
return new Date();
|
||||
}
|
||||
|
||||
public List<String> getFailBackFile() {
|
||||
List<FileBackupLog> fileBackupLogs = fileBackupLogMapper.selectList(Wrappers.<FileBackupLog>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<File> files = FileUtil.loopFiles(elePropertyConfig.getTmpDir(), filter);
|
||||
for (File file : files) {
|
||||
|
|
@ -84,28 +159,6 @@ public class BackupTask extends ServiceImpl<FileBackupLogMapper, FileBackupLog>
|
|||
}
|
||||
}
|
||||
|
||||
private static List<File> 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<FileBackupLog> 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<String, Object> map = new HashMap<>();
|
||||
map.put("file", new File(filePath));
|
||||
|
|
|
|||
Loading…
Reference in New Issue