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