diff --git a/electrmangnetic-backup/pom.xml b/electrmangnetic-backup/pom.xml
new file mode 100644
index 0000000..d848fd8
--- /dev/null
+++ b/electrmangnetic-backup/pom.xml
@@ -0,0 +1,64 @@
+
+
+ 4.0.0
+
+ com.electromagnetic.data
+ electromagnetic-data-new
+ 1.0
+
+
+ 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
+ compile
+
+
+
+
+ electromagnetic-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..b4c5814
--- /dev/null
+++ b/electrmangnetic-backup/src/main/java/com/electromagnetic/industry/software/backup/pojo/BackupPro.java
@@ -0,0 +1,25 @@
+package com.electromagnetic.industry.software.backup.pojo;
+
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Setter
+@Component
+@ConfigurationProperties(prefix = "ele.backup")
+public class BackupPro {
+
+ private String saveFolder;
+
+ private String logPath;
+
+ private String winPrefix;
+
+ public String getSaveFolder() {
+ return System.getProperty("os.name").toLowerCase().startsWith("win") ? winPrefix + saveFolder : saveFolder;
+ }
+
+ public String getLogPath() {
+ return System.getProperty("os.name").toLowerCase().startsWith("win") ? winPrefix + logPath : 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..cfe6996
--- /dev/null
+++ b/electrmangnetic-backup/src/main/resources/application.yml
@@ -0,0 +1,12 @@
+
+ele:
+ backup:
+ saveFolder: "/szsd/ele/data/backup/"
+ logPath: "/szsd/ele/data/backup.log"
+ winPrefix: "D:/tmp"
+
+spring:
+ servlet:
+ multipart:
+ max-file-size: 500MB
+ max-request-size: 500MB
\ No newline at end of file
diff --git a/electrmangnetic/pom.xml b/electrmangnetic/pom.xml
index 424fcca..8652bd5 100644
--- a/electrmangnetic/pom.xml
+++ b/electrmangnetic/pom.xml
@@ -6,7 +6,7 @@
com.electromagnetic.data
electromagnetic-data-new
- 1.0-SNAPSHOT
+ 1.0
electrmangnetic
@@ -61,7 +61,7 @@
com.electromagnetic.data
electromagnetic-common
- 1.0-SNAPSHOT
+ 1.0
compile
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/aop/RoleCheckAspect.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/aop/RoleCheckAspect.java
index 64c3237..42a2356 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/aop/RoleCheckAspect.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/aop/RoleCheckAspect.java
@@ -8,7 +8,6 @@ import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
-
@Component
@Aspect
public class RoleCheckAspect {
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/EdFileInfo.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileInfo.java
index d78e23a..ffaddb2 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileInfo.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileInfo.java
@@ -116,6 +116,16 @@ public class EdFileInfo extends BaseModel {
@TableField(value = "prj_dir")
private Boolean prjDir;
+ /** 当一个文件作废时,其所有的历史文件也会跟着作废,此时该文件及其历史文件的all_deleted=true**/
+ @TableField(value = "all_deleted")
+ private Boolean allDeleted;
+
+ /**
+ * 当文件被管理员永久物理删除,此时为true
+ */
+ @TableField(value = "permanent_deleted")
+ private Boolean permanentDeleted;
+
public void newInit() {
String userId = UserThreadLocal.getUserId();
String newFileDbId = IdWorker.getSnowFlakeIdString();
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/service/serviceimpl/EdFileInfoServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java
index 0e2c43c..16b1ca0 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
@@ -209,7 +209,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl FileUtil.del(e.getAbsolutePath()));
+ FileUtil.del(path);
return destColibPath;
}
@@ -1171,6 +1171,9 @@ public class EdFileInfoServiceImpl extends ServiceImpl
Assert.isTrue(EleCommonUtil.isFileNameValid(folderName), NAME_VALID_MSG);
// 检查当前目录下有文件,如果有则不允许添加
long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class)
- .eq(EdFileInfo::getDataStatus, EleDataTypeEnum.FILE.code)
+ .eq(EdFileInfo::getFileType, EleDataTypeEnum.FILE.code)
.eq(EdFileInfo::getParentId, parentId)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
Assert.isTrue(count == 0, "该层级目录下存在文件,不允许再定义层级目录");
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/electrmangnetic/src/main/resources/application.properties b/electrmangnetic/src/main/resources/application.properties
index b63fb91..e364943 100644
--- a/electrmangnetic/src/main/resources/application.properties
+++ b/electrmangnetic/src/main/resources/application.properties
@@ -1,25 +1,27 @@
#required
spring.application.name=electromagnetic-data
spring.datasource.typd=com.alibaba.druid.pool.DruidDataSource
-spring.datasource.url=jdbc:mysql://139.224.43.89:3306/em_data?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true&rewriteBatchedStatements=true
-spring.datasource.username=comac
-spring.datasource.password=2024*Comac
+spring.datasource.url=jdbc:mysql://127.0.0.1:3306/em_data_dev?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true&rewriteBatchedStatements=true
+spring.datasource.username=user
+spring.datasource.password=123123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
mybatis-plus.mapper-locations=classpath:sqlmapper/*.xml
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
spring.servlet.multipart.max-file-size=500MB
-spring.servlet.multipart.max-request-size=10MB
+spring.servlet.multipart.max-request-size=500MB
pagehelper.helperDialect=mysql
pagehelper.reasonable=false
-server.port=12395
-file.security.passwd=adknfhkj87654knd
+server.port=12396
#windows文件存储目录,用于测试
-data.windows.path=D:/tmp/eleData/project/
-data.linux.path=/szsd/data/eleData/project/
-data.upload.windows.tmp.path=D:/tmp/eleData/upload/
-data.upload.linux.tmp.path=/szsd/data/eleData/upload/
-data.download.windows.tmp.path=D:/tmp/eleData/download/
-data.download.linux.tmp.path=/szsd/data/eleData/download/
+data.windows.path=D:/tmp/szsd/data/eleData/dev/project/
+data.upload.windows.tmp.path=D:/tmp/szsd/data/eleData/dev/upload/
+data.download.windows.tmp.path=D:/tmp/szsd/data/eleData/dev/download/
+
+data.linux.path=/szsd/data/eleData/dev/project/
+data.upload.linux.tmp.path=/szsd/data/eleData/dev/upload/
+data.download.linux.tmp.path=/szsd/data/eleData/dev/download/
+
prj.folder.max.length=6
+spring.jackson.time-zone=GMT+8
\ No newline at end of file
diff --git a/electromagnetic-common/pom.xml b/electromagnetic-common/pom.xml
index ecdbafb..bf830ed 100644
--- a/electromagnetic-common/pom.xml
+++ b/electromagnetic-common/pom.xml
@@ -6,7 +6,7 @@
com.electromagnetic.data
electromagnetic-data-new
- 1.0-SNAPSHOT
+ 1.0
electromagnetic-common
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..b3dfc52 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,11 +6,12 @@
com.electromagnetic.data
electromagnetic-data-new
- 1.0-SNAPSHOT
+ 1.0
pom
electrmangnetic
electromagnetic-common
+ electrmangnetic-backup