From f59031bd5ca9c07d2cd8605d2b5f4b7cbf760db2 Mon Sep 17 00:00:00 2001 From: chenxudong Date: Tue, 11 Feb 2025 15:03:49 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E4=BA=86=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=87=E4=BB=BD=E7=9A=84=E5=B7=A5=E7=A8=8B=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E5=9F=BA=E7=A1=80=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E3=80=822.=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=A4=87=E4=BB=BD=E6=96=87=E4=BB=B6=E7=9A=84=E6=A0=B8=E5=BF=83?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electrmangnetic-backup/pom.xml | 64 +++++++++++++ .../industry/software/backup/MainApp.java | 11 +++ .../backup/controller/FileController.java | 53 +++++++++++ .../software/backup/pojo/BackupPro.java | 16 ++++ .../software/backup/service/FileService.java | 11 +++ .../backup/serviceimp/FileServiceImpl.java | 28 ++++++ .../src/main/resources/application.yml | 11 +++ .../manage/mapper/EleFileBackupLogMapper.java | 9 ++ .../manage/pojo/models/EleFileBackupLog.java | 35 +++++++ .../software/manage/tasks/BackupTask.java | 93 +++++++++++++++++++ .../common/pojo/BackupFileResLog.java | 16 ++++ pom.xml | 1 + 12 files changed, 348 insertions(+) create mode 100644 electrmangnetic-backup/pom.xml create mode 100644 electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/MainApp.java create mode 100644 electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/controller/FileController.java create mode 100644 electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/pojo/BackupPro.java create mode 100644 electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/service/FileService.java create mode 100644 electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/serviceimp/FileServiceImpl.java create mode 100644 electrmangnetic-backup/src/main/resources/application.yml create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EleFileBackupLogMapper.java create 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/tasks/BackupTask.java create mode 100644 electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/pojo/BackupFileResLog.java diff --git a/electrmangnetic-backup/pom.xml b/electrmangnetic-backup/pom.xml new file mode 100644 index 0000000..18290fb --- /dev/null +++ b/electrmangnetic-backup/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + com.electromagnetic.data + electromagnetic-data-new + 1.0-SNAPSHOT + + + electrmangnetic-backup + + + 8 + 8 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.projectlombok + lombok + + + cn.hutool + hutool-all + 5.8.22 + + + com.electromagnetic.data + electromagnetic-common + 1.0-SNAPSHOT + compile + + + + + electrmangnetic-backup + + + org.springframework.boot + spring-boot-maven-plugin + 2.6.12 + + + + com.electromagnetic.industry.software.backup.MainApp + + + repackage + + + + + + + + + \ No newline at end of file diff --git a/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/MainApp.java b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/MainApp.java new file mode 100644 index 0000000..dbd6c9c --- /dev/null +++ b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/MainApp.java @@ -0,0 +1,11 @@ +package com.electromagnetic.industry.software.backup; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class MainApp { + public static void main(String[] args) { + SpringApplication.run(MainApp.class, args); + } +} 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 new file mode 100644 index 0000000..727999b --- /dev/null +++ b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/controller/FileController.java @@ -0,0 +1,53 @@ +package com.electromagnetic.industry.software.backup.controller; + +import cn.hutool.core.exceptions.ExceptionUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.json.JSONConfig; +import cn.hutool.json.JSONUtil; +import com.electromagnetic.industry.software.backup.pojo.BackupPro; +import com.electromagnetic.industry.software.common.pojo.BackupFileResLog; +import com.electromagnetic.industry.software.backup.service.FileService; +import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.Date; + +@RestController +@RequestMapping("/data/file/backup") +@Slf4j +public class FileController { + + @Resource + private FileService fileService; + @Resource + private BackupPro backupPro; + + @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(); + try { + fileService.upload(file, path); + } catch (Exception e) { + String details = ExceptionUtil.stacktraceToString(e); + backupFileResLog.setBackupStatus(false); + backupFileResLog.setFailInfoDetail(details); + log.error("备份文件失败,原因--->{}", e.getMessage(), e); + } + JSONConfig jsonConfig = JSONConfig.create(); + jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); + backupFileResLog.setBackupEndTime(new Date()); + StringBuffer info = new StringBuffer() + .append("\n") + .append("#") + .append("\n") + .append(JSONUtil.toJsonStr(backupFileResLog, jsonConfig)); + FileUtil.appendUtf8String(info.toString(), backupPro.getLogPath()); + return ElectromagneticResultUtil.success(JSONUtil.toJsonStr(backupFileResLog, jsonConfig)); + } +} diff --git a/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/pojo/BackupPro.java b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/pojo/BackupPro.java new file mode 100644 index 0000000..c690ea4 --- /dev/null +++ b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/pojo/BackupPro.java @@ -0,0 +1,16 @@ +package com.electromagnetic.industry.software.backup.pojo; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "ele.backup") +public class BackupPro { + + private String saveFolder; + + private String logPath; + +} diff --git a/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/service/FileService.java b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/service/FileService.java new file mode 100644 index 0000000..8234da0 --- /dev/null +++ b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/service/FileService.java @@ -0,0 +1,11 @@ +package com.electromagnetic.industry.software.backup.service; + +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +public interface FileService { + + void upload(MultipartFile file, String path) throws IOException; + +} diff --git a/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/serviceimp/FileServiceImpl.java b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/serviceimp/FileServiceImpl.java new file mode 100644 index 0000000..c62d818 --- /dev/null +++ b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/serviceimp/FileServiceImpl.java @@ -0,0 +1,28 @@ +package com.electromagnetic.industry.software.backup.serviceimp; + +import cn.hutool.core.io.FileUtil; +import com.electromagnetic.industry.software.backup.pojo.BackupPro; +import com.electromagnetic.industry.software.backup.service.FileService; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; + +@Service +public class FileServiceImpl implements FileService { + + @Resource + private BackupPro backupPro; + + @Override + public void upload(MultipartFile file, String path) throws IOException { + String saveFolder = backupPro.getSaveFolder(); + String fileName = file.getOriginalFilename(); + String destPath = saveFolder + File.separator + path + File.separator + fileName; + if (!FileUtil.exist(destPath)) { + FileUtil.writeFromStream(file.getInputStream(), destPath); + } + } +} diff --git a/electrmangnetic-backup/src/main/resources/application.yml b/electrmangnetic-backup/src/main/resources/application.yml new file mode 100644 index 0000000..1999a62 --- /dev/null +++ b/electrmangnetic-backup/src/main/resources/application.yml @@ -0,0 +1,11 @@ + +ele: + backup: + saveFolder: "E:/szsd/ele/data/backup/" + logPath: "E:/szsd/ele/data/backup.log" + +spring: + servlet: + multipart: + max-file-size: 500MB + max-request-size: 500MB \ No newline at end of file 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/EleFileBackupLogMapper.java new file mode 100644 index 0000000..e9f0607 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EleFileBackupLogMapper.java @@ -0,0 +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 org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface EleFileBackupLogMapper 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 new file mode 100644 index 0000000..21faa29 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EleFileBackupLog.java @@ -0,0 +1,35 @@ +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/tasks/BackupTask.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/tasks/BackupTask.java new file mode 100644 index 0000000..bd59433 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/tasks/BackupTask.java @@ -0,0 +1,93 @@ +package com.electromagnetic.industry.software.manage.tasks; + +import cn.hutool.core.bean.BeanUtil; +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.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 org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.io.File; +import java.io.FileFilter; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +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); + } + +// @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 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(EleFileBackupLog.class) + .select(EleFileBackupLog::getFileTime) + .orderByDesc(EleFileBackupLog::getFileTime) + .last("limit 1")); + if (eleFileBackupLogs.isEmpty()) { + return 0L; + } + return eleFileBackupLogs.get(0).getFileTime(); + } + + private BackupFileResLog backup(String filePath) { + String prjPath = ""; + 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 res = HttpUtil.post(url, map); + ElectromagneticResult resObj = JSONUtil.toBean(res, ElectromagneticResult.class); + String data = JSONUtil.toJsonStr(resObj.getData()); + return JSONUtil.toBean(data, BackupFileResLog.class); + } +} 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 new file mode 100644 index 0000000..146d91e --- /dev/null +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/pojo/BackupFileResLog.java @@ -0,0 +1,16 @@ +package com.electromagnetic.industry.software.common.pojo; + +import lombok.Builder; +import lombok.Data; + +import java.util.Date; + +@Data +@Builder +public class BackupFileResLog { + private Date backupStartTime; + private String fileName; + private Boolean backupStatus; + private Date backupEndTime; + private String failInfoDetail; +} diff --git a/pom.xml b/pom.xml index d003aa6..17b4071 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,7 @@ electrmangnetic electromagnetic-common + electrmangnetic-backup