diff --git a/electrmangnetic/pom.xml b/electrmangnetic/pom.xml
index 0eae279..b9ccd7e 100644
--- a/electrmangnetic/pom.xml
+++ b/electrmangnetic/pom.xml
@@ -63,11 +63,6 @@
pagehelper
5.1.2
-
- org.apache.commons
- commons-lang3
- 3.8.1
-
com.alibaba
druid
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java
index 9532f58..3c6af82 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java
@@ -1,12 +1,88 @@
package com.electromagnetic.industry.software.manage.controller;
+import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
+import com.electromagnetic.industry.software.manage.pojo.req.FileInfoQueryDTO;
+import com.electromagnetic.industry.software.manage.service.EdFileInfoService;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
@RestController
@RequestMapping("/data/ed/file")
public class EdFileInfoController {
+ @Resource
+ private EdFileInfoService edFileInfoService;
+ @RequestMapping("tree")
+ public ElectromagneticResult> tree() {
+ return edFileInfoService.tree();
+ }
+ @RequestMapping("createFolder")
+ public ElectromagneticResult> createFolder(@RequestParam String parentId, @RequestParam String newFolderName) {
+ return edFileInfoService.createFolder(parentId, newFolderName);
+ }
+
+ @RequestMapping("deleteFolder")
+ public ElectromagneticResult> deleteFolder(@RequestParam String id, @RequestParam Integer dataType) {
+ return edFileInfoService.deleteFolder(id, dataType);
+ }
+
+ @RequestMapping("info")
+ public ElectromagneticResult> info(@RequestBody FileInfoQueryDTO fileInfoQueryDTO) {
+ return edFileInfoService.queryEdFileInfo(fileInfoQueryDTO);
+ }
+
+ @RequestMapping("upload")
+ public ElectromagneticResult> upload() {
+ return null;
+ }
+
+ @RequestMapping("download")
+ public ResponseEntity download(@RequestParam String id, HttpServletResponse response) {
+ return edFileInfoService.download(id, response);
+ }
+
+ @RequestMapping("updateFileInfo")
+ public ElectromagneticResult> updateFileInfo() {
+ return null;
+ }
+
+ @RequestMapping("deleteFile")
+ public ElectromagneticResult> deleteFile() {
+ return null;
+ }
+
+ @RequestMapping("moveFile")
+ public ElectromagneticResult> moveFile() {
+ return null;
+ }
+
+ @RequestMapping("copyFile")
+ public ElectromagneticResult> copyFile() {
+ return null;
+ }
+
+ @RequestMapping("versionView")
+ public ElectromagneticResult> versionView() {
+ return null;
+ }
+
+ @RequestMapping("versionBack")
+ public ElectromagneticResult> versionBack() {
+ return null;
+ }
+
+ @RequestMapping("batchExport")
+ public ElectromagneticResult> batchExport() {
+ return null;
+ }
}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/PermissionController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/PermissionController.java
index 11ade56..fe198a3 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/PermissionController.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/PermissionController.java
@@ -19,8 +19,8 @@ public class PermissionController {
@Resource
private PermissionService permissionService;
- @ApiOperation(value="查询当前用户在当前目录的功能权限",notes = "")
- @GetMapping(value="/{fileId}")
+ @ApiOperation(value = "查询当前用户在当前目录的功能权限", notes = "")
+ @GetMapping(value = "/{fileId}")
public ElectromagneticResult> getUserPermission(@PathVariable("fileId") String fileId) {
String userId = UserThreadLocal.getUserId();
return ElectromagneticResultUtil.success(permissionService.getUserPermission(userId, fileId));
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/ProjectController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/ProjectController.java
index 9dcab0e..ee506c5 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/ProjectController.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/ProjectController.java
@@ -2,7 +2,7 @@ package com.electromagnetic.industry.software.manage.controller;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.manage.pojo.req.FolderResortDTO;
-import com.electromagnetic.industry.software.manage.service.EdFileInfoService;
+import com.electromagnetic.industry.software.manage.service.EdPrjService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@@ -17,56 +17,56 @@ import java.util.List;
public class ProjectController {
@Resource
- private EdFileInfoService edFileInfoService;
+ private EdPrjService edPrjService;
@RequestMapping("create")
public ElectromagneticResult> create(@RequestParam String prjName) {
- return edFileInfoService.createNewPrj(prjName);
+ return edPrjService.createNewPrj(prjName);
}
@RequestMapping("delete")
public ElectromagneticResult> delete(@RequestParam String prjId) {
- return edFileInfoService.delete(prjId);
+ return edPrjService.delete(prjId);
}
@RequestMapping("modify")
public ElectromagneticResult> modifyPrjName(@RequestParam String newPrjName, @RequestParam String prjId) {
- return edFileInfoService.modifyPrjName(prjId, newPrjName);
+ return edPrjService.modifyPrjName(prjId, newPrjName);
}
@RequestMapping("queryAll")
public ElectromagneticResult> queryAll() {
- return edFileInfoService.queryAllPrjInfo();
+ return edPrjService.queryAllPrjInfo();
}
@RequestMapping("addFolder")
public ElectromagneticResult> addFolder(@RequestParam String folderName, @RequestParam String parentId) {
- return edFileInfoService.addFolder(parentId, folderName);
+ return edPrjService.addFolder(parentId, folderName);
}
@RequestMapping("modifyFolder")
- public ElectromagneticResult> modifyFolder(@RequestParam String newFolderName, @RequestParam String id) {
- return edFileInfoService.modifyFolder(id, newFolderName);
+ public ElectromagneticResult> modifyFolder(@RequestParam String newFolderName, @RequestParam String id, @RequestParam String parentId) {
+ return edPrjService.modifyFolder(id, newFolderName, parentId);
}
@RequestMapping("deleteFolder")
- public ElectromagneticResult> deleteFolder(@RequestParam String fileId) {
- return edFileInfoService.deleteFolder(fileId);
+ public ElectromagneticResult> deleteFolder(@RequestParam String id, @RequestParam String parentId) {
+ return edPrjService.deleteFolder(id, parentId);
}
@RequestMapping("folderResort")
public ElectromagneticResult> folderResort(@RequestBody List folderResortDTOList) {
- return edFileInfoService.folderResort(folderResortDTOList);
+ return edPrjService.folderResort(folderResortDTOList);
}
@RequestMapping("publish")
public ElectromagneticResult> publish(@RequestParam String prjId) {
- return edFileInfoService.publish(prjId);
+ return edPrjService.publish(prjId);
}
@RequestMapping("follow")
public ElectromagneticResult> follow(@RequestParam String sourceId, @RequestParam String targetId) {
- return edFileInfoService.follow(sourceId, targetId);
+ return edPrjService.follow(sourceId, targetId);
}
}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserController.java
index a7bc132..018a63f 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserController.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserController.java
@@ -70,13 +70,13 @@ public class UserController {
return userService.logout(token);
}
- @ApiOperation(value="人员绑定", notes = "")
+ @ApiOperation(value = "人员绑定", notes = "")
@RequestMapping(value = "/bindRoles", method = RequestMethod.POST)
public ElectromagneticResult> bindRoles(@RequestBody UserRoleRequest userRoleRequest) {
if (userService.bindRoles(userRoleRequest)) {
return ElectromagneticResultUtil.success(true);
} else {
- return ElectromagneticResultUtil.fail("500","不可绑定空用户");
+ return ElectromagneticResultUtil.fail("500", "不可绑定空用户");
}
}
}
\ No newline at end of file
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EdFileInfoMapper.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EdFileInfoMapper.java
index 68d5fec..eaa25ed 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EdFileInfoMapper.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EdFileInfoMapper.java
@@ -11,6 +11,4 @@ public interface EdFileInfoMapper extends BaseMapper {
String maxPrjId();
- List selectAllAdminFolder(String prjId);
-
}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/BaseModel.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/BaseModel.java
index 8ec428b..f094a1b 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/BaseModel.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/BaseModel.java
@@ -24,7 +24,7 @@ public class BaseModel {
/**
* 最后更新时间
*/
- @TableField(value = "update_time")
+ @TableField(value = "updated_time")
private Date updateTime;
/**
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 017ad7b..2c6a826 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
@@ -2,7 +2,8 @@ package com.electromagnetic.industry.software.manage.pojo.models;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import lombok.experimental.FieldNameConstants;
@@ -24,6 +25,12 @@ public class EdFileInfo extends BaseModel {
@TableField(value = "file_id")
private String fileId;
+ /**
+ * 父目录id
+ */
+ @TableField(value = "parent_id")
+ private String parentId;
+
/**
* 文件类型
*/
@@ -67,12 +74,6 @@ public class EdFileInfo extends BaseModel {
@TableField(value = "file_path")
private String filePath;
- /**
- * 父目录id
- */
- @TableField(value = "parent_id")
- private String parentId;
-
/**
* 数据类型,0-文件夹 1-文件
*/
@@ -98,17 +99,11 @@ public class EdFileInfo extends BaseModel {
private Integer effectFlag;
/**
- *保存状态,0-上传中 1-上传成功 2-上传失败
+ * 保存状态,0-上传中 1-上传成功 2-上传失败
*/
@TableField(value = "save_status")
private Integer saveStatus;
- /**
- * 文件夹发布状态,0-未发布,1-已发布
- */
- @TableField(value = "publish_status")
- private int publishStatus;
-
/**
* 文件大小
*/
@@ -118,6 +113,18 @@ public class EdFileInfo extends BaseModel {
/**
* 文件夹顺序
*/
- @TableField("sort")
+ @TableField(value = "sort")
private Integer sort;
+
+ /**
+ * 文件编码
+ */
+ @TableField(value = "file_code")
+ private String fileCode;
+
+ /**
+ * 是否是管理员定义的系统层级目录
+ */
+ @TableField(value = "prj_dir")
+ private Boolean prjDir;
}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/RolePermission.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/RolePermission.java
index 6b8c312..5c8d3df 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/RolePermission.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/RolePermission.java
@@ -13,7 +13,7 @@ public class RolePermission {
/**
* 角色编码
*/
- @TableField(value="role_id")
+ @TableField(value = "role_id")
private String roleId;
/**
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/UserRole.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/UserRole.java
index d6a28ea..0ad0944 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/UserRole.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/UserRole.java
@@ -17,6 +17,6 @@ public class UserRole {
/**
* 角色编码
*/
- @TableField(value="role_id")
+ @TableField(value = "role_id")
private String roleId;
}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/FileInfoDTO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/FileInfoDTO.java
new file mode 100644
index 0000000..1849880
--- /dev/null
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/FileInfoDTO.java
@@ -0,0 +1,38 @@
+package com.electromagnetic.industry.software.manage.pojo.other;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class FileInfoDTO {
+
+ private String id;
+
+ private String fileId;
+
+ private String fileType;
+
+ private String fileName;
+
+ private String fileNote;
+
+ private Integer fileVersion;
+
+ private String parentId;
+
+ private Integer dataType;
+
+ private Integer dataStatus;
+
+ private Integer saveStatus;
+
+ private String fileSize;
+
+ private Date updateTime;
+
+ private Date createTime;
+
+ private String fileCode;
+
+}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/FileInfoQueryDTO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/FileInfoQueryDTO.java
new file mode 100644
index 0000000..b8561c9
--- /dev/null
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/FileInfoQueryDTO.java
@@ -0,0 +1,34 @@
+package com.electromagnetic.industry.software.manage.pojo.req;
+
+import lombok.Data;
+
+@Data
+public class FileInfoQueryDTO {
+
+ /** 父文件夹id */
+ private String parentId;
+
+ /** 当前页码 */
+ private Integer pageNum;
+
+ /** 每页的数量 */
+ private Integer pageSize;
+
+ /** 搜索关键词 */
+ private String keyword;
+
+ /** 文件类型 (0-文件夹 1-文件)*/
+ private Integer fileType;
+
+ /** 上传时间(0-升序,1-降序)*/
+ private Integer createdTime;
+
+ /** 版本号(0-升序,1-降序 */
+ private Integer fileVersion;
+
+ /** 文件大小0-升序,1-降序) */
+ private Integer fileSize;
+
+ /** 状态(0-未发布 1-已发布 2-占用) */
+ private Integer dataStatus;
+}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileInfoQueryPageVO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileInfoQueryPageVO.java
new file mode 100644
index 0000000..1db19a0
--- /dev/null
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileInfoQueryPageVO.java
@@ -0,0 +1,19 @@
+package com.electromagnetic.industry.software.manage.pojo.resp;
+
+import com.electromagnetic.industry.software.manage.pojo.other.FileInfoDTO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class FileInfoQueryPageVO {
+
+ private long total;
+
+ private List records = new ArrayList<>();
+}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/ProjectVO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/ProjectVO.java
index 45c3b26..71be337 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/ProjectVO.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/ProjectVO.java
@@ -2,6 +2,7 @@ package com.electromagnetic.industry.software.manage.pojo.resp;
import lombok.Data;
+import java.util.ArrayList;
import java.util.List;
@Data
@@ -12,6 +13,6 @@ public class ProjectVO {
private String parentId;
private int sort;
- private List children;
+ private List children = new ArrayList<>();
}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java
index 8d7034c..ac7e497 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java
@@ -1,81 +1,49 @@
package com.electromagnetic.industry.software.manage.service;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
-import com.electromagnetic.industry.software.manage.pojo.req.FolderResortDTO;
+import com.electromagnetic.industry.software.manage.pojo.req.FileInfoQueryDTO;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.http.ResponseEntity;
-import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
public interface EdFileInfoService {
/**
- * 创建一个新的工程
- * @param prjName 新的工程名
- */
- ElectromagneticResult> createNewPrj(String prjName);
-
- /**
- * 修改项目名称
- * @param prjId
- * @param newPrjName
+ * 查询文件列表
+ * @param fileInfoQueryDTO
* @return
*/
- ElectromagneticResult> modifyPrjName(String prjId, String newPrjName);
+ ElectromagneticResult> queryEdFileInfo(FileInfoQueryDTO fileInfoQueryDTO);
/**
- * 删除一个项目,做逻辑删除
- * @param prjId
- * @return
- */
- ElectromagneticResult> delete(String prjId);
-
- /**
- * 添加子集
+ * 新建文件夹
* @param parentId
- * @param folderName
- * @return
- */
- ElectromagneticResult> addFolder(String parentId, String folderName);
-
- /**
- * 查询所有项目
- * @return
- */
- ElectromagneticResult> queryAllPrjInfo();
-
- /**
- * 子集拖拽重排序
- * @param folderResortDTOList
- * @return
- */
- ElectromagneticResult> folderResort(List folderResortDTOList);
-
- /**
- * 项目发布
- * @param prjId
- * @return
- */
- ElectromagneticResult> publish(String prjId);
-
- /**
- * 删除子集
- * @param fileId
- * @return
- */
- ElectromagneticResult> deleteFolder(String fileId);
-
- /**
- * 层级沿用
- * @param sourceId
- * @param targetId
- * @return
- */
- ElectromagneticResult> follow(String sourceId, String targetId);
-
- /**
- * 修改子集名称
- * @param id
* @param newFolderName
* @return
*/
- ElectromagneticResult> modifyFolder(String id, String newFolderName);
+ ElectromagneticResult> createFolder(String parentId, String newFolderName);
+
+ /**
+ * 项目层级结构查询
+ * @return
+ */
+ ElectromagneticResult> tree();
+
+ /**
+ * 删除目录
+ *
+ * @param id
+ * @param dataType
+ * @return
+ */
+ ElectromagneticResult> deleteFolder(String id, Integer dataType);
+
+ /**
+ * 下载文件
+ * @param id
+ * @return
+ */
+ ResponseEntity download(String id, HttpServletResponse response);
}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdPrjService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdPrjService.java
new file mode 100644
index 0000000..ec4effe
--- /dev/null
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdPrjService.java
@@ -0,0 +1,92 @@
+package com.electromagnetic.industry.software.manage.service;
+
+import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
+import com.electromagnetic.industry.software.manage.pojo.req.FolderResortDTO;
+
+import java.util.List;
+
+public interface EdPrjService {
+
+ /**
+ * 创建一个新的工程
+ *
+ * @param prjName 新的工程名
+ */
+ ElectromagneticResult> createNewPrj(String prjName);
+
+ /**
+ * 修改项目名称
+ *
+ * @param prjId
+ * @param newPrjName
+ * @return
+ */
+ ElectromagneticResult> modifyPrjName(String prjId, String newPrjName);
+
+ /**
+ * 删除一个项目,做逻辑删除
+ *
+ * @param prjId
+ * @return
+ */
+ ElectromagneticResult> delete(String prjId);
+
+ /**
+ * 添加子集
+ *
+ * @param parentId
+ * @param folderName
+ * @return
+ */
+ ElectromagneticResult> addFolder(String parentId, String folderName);
+
+ /**
+ * 查询所有项目
+ *
+ * @return
+ */
+ ElectromagneticResult> queryAllPrjInfo();
+
+ /**
+ * 子集拖拽重排序
+ *
+ * @param folderResortDTOList
+ * @return
+ */
+ ElectromagneticResult> folderResort(List folderResortDTOList);
+
+ /**
+ * 项目发布
+ *
+ * @param prjId
+ * @return
+ */
+ ElectromagneticResult> publish(String prjId);
+
+ /**
+ * 删除子集
+ *
+ * @param fileId
+ * @param parentId
+ * @return
+ */
+ ElectromagneticResult> deleteFolder(String fileId, String parentId);
+
+ /**
+ * 层级沿用
+ *
+ * @param sourceId
+ * @param targetId
+ * @return
+ */
+ ElectromagneticResult> follow(String sourceId, String targetId);
+
+ /**
+ * 修改子集名称
+ *
+ * @param id
+ * @param newFolderName
+ * @return
+ */
+ ElectromagneticResult> modifyFolder(String id, String newFolderName, String parentId);
+}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/PermissionService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/PermissionService.java
index bd4c806..4133f4a 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/PermissionService.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/PermissionService.java
@@ -7,11 +7,12 @@ public interface PermissionService {
/**
* 查询当前用户在当前目录的功能权限
+ *
* @param userId
* @param fileId
* @return
*/
- Map getUserPermission(String userId, String fileId);
+ Map getUserPermission(String userId, String fileId);
/**
* 获取当前用户有权限访问的目录id
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java
new file mode 100644
index 0000000..ebd6ad5
--- /dev/null
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java
@@ -0,0 +1,297 @@
+package com.electromagnetic.industry.software.manage.service.serviceimpl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.lang.tree.TreeNodeConfig;
+import cn.hutool.core.lang.tree.TreeUtil;
+import cn.hutool.core.text.StrFormatter;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
+import com.electromagnetic.industry.software.common.enums.EleDataSaveStatusEnum;
+import com.electromagnetic.industry.software.common.enums.EleDataStatusEnum;
+import com.electromagnetic.industry.software.common.enums.EleDataTypeEnum;
+import com.electromagnetic.industry.software.common.exception.BizException;
+import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
+import com.electromagnetic.industry.software.common.util.EleCommonUtil;
+import com.electromagnetic.industry.software.common.util.EleLog;
+import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil;
+import com.electromagnetic.industry.software.common.util.UserThreadLocal;
+import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper;
+import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo;
+import com.electromagnetic.industry.software.manage.pojo.resp.ProjectVO;
+import com.electromagnetic.industry.software.manage.service.FileSystemService;
+import lombok.Getter;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.*;
+
+@Component
+public class CommonService {
+
+ private final EleLog log = new EleLog(CommonService.class);
+ private static final Map FILE_TYPE_ENUM = new HashMap<>();
+ @Value("${prj.folder.max.length}")
+ private int prjFolderMaxLength;
+
+ static {
+ FILE_TYPE_ENUM.put(EleDataTypeEnum.FOLDER.desc, "01");
+ FILE_TYPE_ENUM.put("py", "02");
+ FILE_TYPE_ENUM.put("zip", "03");
+ FILE_TYPE_ENUM.put("jpg", "04");
+ FILE_TYPE_ENUM.put("jpeg", "05");
+ FILE_TYPE_ENUM.put("png", "06");
+ FILE_TYPE_ENUM.put("gif", "07");
+ FILE_TYPE_ENUM.put("bmp", "08");
+ FILE_TYPE_ENUM.put("tif", "09");
+ FILE_TYPE_ENUM.put("tiff", "10");
+ FILE_TYPE_ENUM.put("svg", "11");
+ FILE_TYPE_ENUM.put("psd", "12");
+ FILE_TYPE_ENUM.put("pdf", "13");
+ FILE_TYPE_ENUM.put("doc", "14");
+ FILE_TYPE_ENUM.put("docx", "15");
+ FILE_TYPE_ENUM.put("xls", "16");
+ FILE_TYPE_ENUM.put("xlsx", "17");
+ FILE_TYPE_ENUM.put("ppt", "18");
+ FILE_TYPE_ENUM.put("pptx", "19");
+ }
+
+ @Getter
+ private String eleDataPath;
+
+ @Resource
+ private Environment environment;
+
+ @Resource
+ private EdFileInfoMapper edFileInfoMapper;
+
+ @Resource
+ private FileSystemService fileSystemService;
+
+ @PostConstruct
+ public void init() {
+ String osName = System.getProperty("os.name").toLowerCase();
+ eleDataPath = osName.startsWith("win") ? environment.getProperty("data.windows.path") : environment.getProperty("data.linux.path");
+ }
+
+ /**
+ * 检查同层级是否有同名的文件夹
+ */
+ public boolean checkSameFolder(String parentId, String newFolderName) {
+ Long count = edFileInfoMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class)
+ .eq(EdFileInfo::getParentId, parentId)
+ .eq(EdFileInfo::getFileName, newFolderName));
+
+ return count > 0;
+ }
+
+ public String getFileSysPath(String dbPath) {
+ ArrayList paths = CollUtil.newArrayList(dbPath.split(MYSQL_FILE_PATH_SPLIT));
+ String path = getPath(paths);
+ return eleDataPath + File.separator + path;
+ }
+
+ public String getPath(List ids) {
+ LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
+ .select(EdFileInfo::getId, EdFileInfo::getFileName)
+ .in(EdFileInfo::getId, ids);
+ List edFileInfos = edFileInfoMapper.selectList(queryWrapper);
+ Map map = edFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, EdFileInfo::getFileName));
+ StringBuilder path = new StringBuilder();
+ for (String id : ids) {
+ String tmp = map.get(id) + File.separator;
+ path.append(tmp);
+ }
+ return path.toString();
+ }
+
+ public String createFileCode(String parentId, String fileType, int version, String timeStr) {
+ return parentId + FILE_TYPE_ENUM.get(fileType) + version + timeStr;
+ }
+
+ public List selectAllAdminFolder(String id) {
+ return edFileInfoMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
+ .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
+ .eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code)
+ .eq(EdFileInfo::getPrjDir, true)
+ .likeRight(EdFileInfo::getFilePath, id));
+ }
+
+ public ElectromagneticResult> addFolder(String parentId, String folderName, boolean maxLengthCheck, boolean isPrjDir) {
+
+ // 验证名称是否合法
+ Assert.isTrue(EleCommonUtil.isFileNameValid(folderName), "文件名不符合规范,只能包含中文字符、下划线、连字符、加号、数字和英文字符且长度小于32。");
+
+ if (!EleCommonUtil.isFileNameValid(folderName)) {
+ String info = StrFormatter.format("子集名称{}不符合要求", folderName);
+ log.error(info);
+ return ElectromagneticResultUtil.fail("-1", info);
+ }
+
+ LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
+ .select(EdFileInfo::getId, EdFileInfo::getFilePath)
+ .eq(EdFileInfo::getId, parentId);
+ EdFileInfo edFileInfo = edFileInfoMapper.selectOne(queryWrapper);
+ String currentPath = edFileInfo.getFilePath();
+ List paths = CollUtil.newArrayList(edFileInfo.getFilePath().split(MYSQL_FILE_PATH_SPLIT));
+ if (maxLengthCheck) {
+ if (paths.size() >= prjFolderMaxLength) {
+ String info = "当前子集已达到最大层级,禁止创建子集。";
+ log.error(info);
+ return ElectromagneticResultUtil.fail("-1", info);
+ }
+ }
+
+ // 判断文件夹名称是否存在
+ List edFileInfos = edFileInfoMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
+ .select(EdFileInfo::getId, EdFileInfo::getFileName)
+ .eq(EdFileInfo::getParentId, parentId));
+ List names = edFileInfos.stream().map(EdFileInfo::getFileName).collect(Collectors.toList());
+ if (names.contains(folderName)) {
+ String info = "该子集名称已存在";
+ log.error(info);
+ return ElectromagneticResultUtil.fail("-1", info);
+ }
+
+ try {
+ int id = Integer.parseInt(edFileInfoMapper.maxPrjId());
+ Date now = new Date();
+ String currentUserId = UserThreadLocal.getUserId();
+ String newFolderId = String.valueOf(id + 1);
+ String path = currentPath + MYSQL_FILE_PATH_SPLIT + newFolderId;
+ EdFileInfo fileInfo = new EdFileInfo();
+ String nowTimeStr = EleCommonUtil.getNowTimeStr();
+ fileInfo.setId(newFolderId)
+ .setFileId(newFolderId)
+ .setFileName(folderName)
+ .setFileVersion(FILE_START_VERSION)
+ .setParentId(parentId)
+ .setFileCode(createFileCode(parentId, EleDataTypeEnum.FOLDER.desc, FILE_START_VERSION, nowTimeStr))
+ .setFileTime(nowTimeStr)
+ .setPrjDir(isPrjDir)
+ .setDataType(EleDataTypeEnum.FOLDER.code)
+ .setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
+ .setEffectFlag(EffectFlagEnum.EFFECT.code)
+ .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
+ .setFilePath(path)
+ .setSort(names.size() + 1)
+ .setCreatedTime(now)
+ .setUpdateTime(now)
+ .setCreatedBy(currentUserId)
+ .setUpdatedBy(currentUserId);
+ edFileInfoMapper.insert(fileInfo);
+ // 保存到文件系统
+ String targetFilePath = getEleDataPath() + File.separator + getPath(paths) + File.separator + folderName;
+ fileSystemService.createDirectory(targetFilePath);
+ return ElectromagneticResultUtil.success(true);
+ } catch (Exception e) {
+ String info = "添加子集失败";
+ log.error(info, e);
+ throw new BizException(-1, info);
+ }
+ }
+
+ public ElectromagneticResult> queryAllPrjInfo() {
+
+ try {
+ LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
+ .select(EdFileInfo::getId)
+ .eq(EdFileInfo::getParentId, PRJ_PARENT_ID)
+ .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code);
+ List ids = edFileInfoMapper.selectList(queryWrapper).stream().map(EdFileInfo::getId).collect(Collectors.toList());
+
+ List projectVOS = new ArrayList<>();
+
+ for (String id : ids) {
+ List edFileInfos = selectAllAdminFolder(id);
+
+ // 转换为树
+ TreeNodeConfig config = new TreeNodeConfig();
+ config.setIdKey(EdFileInfo.Fields.id);
+ config.setParentIdKey(EdFileInfo.Fields.parentId);
+ config.setWeightKey(EdFileInfo.Fields.sort);
+
+ List> trees = TreeUtil.build(edFileInfos, PRJ_PARENT_ID, config, ((obj, treeNode) -> {
+ treeNode.putExtra(EdFileInfo.Fields.id, obj.getId());
+ treeNode.putExtra(EdFileInfo.Fields.parentId, obj.getParentId());
+ treeNode.putExtra(EdFileInfo.Fields.sort, obj.getSort());
+ treeNode.putExtra(EdFileInfo.Fields.fileName, obj.getFileName());
+ }));
+
+ String jsonStr = JSONUtil.toJsonStr(trees);
+ ProjectVO projectVO = JSONUtil.toList(jsonStr, ProjectVO.class).get(0);
+ projectVOS.add(projectVO);
+ }
+ return ElectromagneticResultUtil.success(projectVOS);
+ } catch (Exception e) {
+ String info = "查询项目失败";
+ log.error(info, e);
+ throw new BizException(-1, info);
+ }
+ }
+
+ public ElectromagneticResult> deleteFolder(String fileId, String parentId, boolean needResort) {
+
+ try {
+ // TODO 如果文件夹下存在文件(不包括文件夹,包括已经删除的文件),则不允许删除
+ Long count = edFileInfoMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class)
+ .like(EdFileInfo::getFilePath, MYSQL_FILE_PATH_SPLIT + fileId + MYSQL_FILE_PATH_SPLIT)
+ .eq(EdFileInfo::getDataType, EleDataTypeEnum.FILE.code));
+ if (count > 0) {
+ String info = "禁止删除非空文件夹";
+ log.info(info);
+ throw new BizException(-1, info);
+ }
+
+ LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
+ .select(EdFileInfo::getId, EdFileInfo::getFilePath)
+ .like(EdFileInfo::getFilePath, MYSQL_FILE_PATH_SPLIT + fileId + MYSQL_FILE_PATH_SPLIT)
+ .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code);
+ List edFileInfos = edFileInfoMapper.selectList(queryWrapper);
+ List ids = edFileInfos.stream().map(EdFileInfo::getId).collect(Collectors.toList());
+ ids.add(fileId);
+ LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(EdFileInfo.class)
+ .set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)
+ .set(EdFileInfo::getSort, -1)
+ .set(EdFileInfo::getUpdateTime, new Date())
+ .set(EdFileInfo::getUpdatedBy, UserThreadLocal.getUserId())
+ .in(EdFileInfo::getId, ids);
+ edFileInfoMapper.update(null, updateWrapper);
+ if (!needResort) {
+ return ElectromagneticResultUtil.success(true);
+ }
+ // 同层级的resort
+ List edFileInfos1 = edFileInfoMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
+ .select(EdFileInfo::getId, EdFileInfo::getSort)
+ .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
+ .eq(EdFileInfo::getParentId, parentId)
+ .orderByAsc(EdFileInfo::getSort));
+ Date now = new Date();
+ String currentUserId = UserThreadLocal.getUserId();
+ for (int i = 0; i < edFileInfos1.size(); i++) {
+ String id = edFileInfos1.get(i).getId();
+ edFileInfoMapper.update(null, Wrappers.lambdaUpdate(EdFileInfo.class)
+ .set(EdFileInfo::getSort, i + 1)
+ .set(EdFileInfo::getUpdatedBy, currentUserId)
+ .set(EdFileInfo::getUpdateTime, now)
+ .eq(EdFileInfo::getId, id));
+ }
+ return ElectromagneticResultUtil.success(true);
+ } catch (Exception e) {
+ String info = "删除子集异常";
+ log.error(info, e);
+ throw new BizException(-1, info);
+ }
+ }
+}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EDDataServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EDDataServiceImpl.java
index f472147..8bc5f51 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EDDataServiceImpl.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EDDataServiceImpl.java
@@ -32,7 +32,6 @@ import com.electromagnetic.industry.software.manage.service.EDDataService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
@@ -63,25 +62,25 @@ public class EDDataServiceImpl implements EDDataService {
private EDDataMapper edDataMapper;
@Resource
private CategoryMapper categoryMapper;
-// @Value("${data.windows.path}")
+ // @Value("${data.windows.path}")
private String uploadFilePath;
-// @Value("${data.file.storage.dir}")
+ // @Value("${data.file.storage.dir}")
private String fileStorageDir;
-// @Value("${data.import.cache.dir}")
+ // @Value("${data.import.cache.dir}")
private String importCacheDir;
-// @Value("${file.encode.passwd}")
+ // @Value("${file.encode.passwd}")
private String encodePasswd;
-// @Value("${data.type.folder}")
+ // @Value("${data.type.folder}")
private String dataTypeFolder;
-// @Value("${data.windows.path}")
+ // @Value("${data.windows.path}")
private String windowsDir;
-// @Value("${data.file.cache.dir}")
+ // @Value("${data.file.cache.dir}")
private String fileCacheDir;
-// @Value("${data.upload.cache.dir}")
+ // @Value("${data.upload.cache.dir}")
private String uploadCacheDir;
-// @Value("${data.export.cache.dir}")
+ // @Value("${data.export.cache.dir}")
private String exportCacheDir;
-// @Value("${data.type.file}")
+ // @Value("${data.type.file}")
private String dataTypeFile;
@Override
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 a65f93f..7316021 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
@@ -1,520 +1,155 @@
package com.electromagnetic.industry.software.manage.service.serviceimpl;
-import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Assert;
-import cn.hutool.core.lang.tree.Tree;
-import cn.hutool.core.lang.tree.TreeNodeConfig;
-import cn.hutool.core.lang.tree.TreeUtil;
-import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
-import com.electromagnetic.industry.software.common.enums.EleDataSaveStatusEnum;
-import com.electromagnetic.industry.software.common.enums.EleDataStatusEnum;
-import com.electromagnetic.industry.software.common.enums.EleDataTypeEnum;
import com.electromagnetic.industry.software.common.exception.BizException;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
-import com.electromagnetic.industry.software.common.util.*;
+import com.electromagnetic.industry.software.common.util.EleLog;
+import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil;
import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper;
import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo;
-import com.electromagnetic.industry.software.manage.pojo.req.FolderResortDTO;
-import com.electromagnetic.industry.software.manage.pojo.resp.ProjectVO;
+import com.electromagnetic.industry.software.manage.pojo.other.FileInfoDTO;
+import com.electromagnetic.industry.software.manage.pojo.req.FileInfoQueryDTO;
+import com.electromagnetic.industry.software.manage.pojo.resp.FileInfoQueryPageVO;
import com.electromagnetic.industry.software.manage.service.EdFileInfoService;
-import com.electromagnetic.industry.software.manage.service.FileSystemService;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.env.Environment;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import javax.annotation.PostConstruct;
import javax.annotation.Resource;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Date;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.BindException;
import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.*;
+import java.util.Objects;
@Service
public class EdFileInfoServiceImpl extends ServiceImpl implements EdFileInfoService {
+ @Resource
+ private CommonService commonService;
+
private EleLog log = new EleLog(EdFileInfoServiceImpl.class);
- @Resource
- private Environment environment;
-
- @Resource
- private FileSystemService fileSystemService;
-
- @Value("${prj.folder.max.length}")
- private int prjFolderMaxLength;
-
- private String eleDataPath;
-
- @PostConstruct
- public void init() {
- String osName = System.getProperty("os.name").toLowerCase();
- eleDataPath = osName.startsWith("win") ? environment.getProperty("data.windows.path") : environment.getProperty("data.linux.path");
- }
-
-
/**
- * 创建一个新的工程
- * @param prjName 新的工程名
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public ElectromagneticResult> createNewPrj(String prjName) {
-
- Assert.isTrue(EleCommonUtil.isFileNameValid(prjName), "文件名不符合规范,只能包含中文字符、下划线、连字符、加号、数字和英文字符且长度小于32。");
- if (!EleCommonUtil.isFileNameValid(prjName)) {
- String info = StrFormatter.format("工程名称{}不符合要求", prjName);
- log.error(info);
- return ElectromagneticResultUtil.fail("-1", info);
- }
-
- // 首先检查工程是否存在
- // TODO 一个项目如果被废除了,然后又新建了一个同名工程,这种情况怎么处理,需要产品确认。当前这里先按照同名如果存在则抛出异常处理。
- LambdaQueryWrapper existPrjWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
- .eq(EdFileInfo::getParentId, "")
- .isNull(EdFileInfo::getParentId);
-
- List existEdFileInfos = this.baseMapper.selectList(existPrjWrapper);
- if (CollUtil.isNotEmpty(existEdFileInfos)) {
- String info = StrFormatter.format("{} 已经存在", prjName);
- log.info(info);
- ElectromagneticResultUtil.fail("-1", "该项目名称已经存在。");
- }
-
- try {
- // 保存信息到MySQL
- int id = Integer.parseInt(this.baseMapper.maxPrjId());
- Date now = new Date();
- String currentUserId = UserThreadLocal.getUserId();
- String newPrjId = String.valueOf(id + 1);
-
- EdFileInfo fileInfo = new EdFileInfo();
- fileInfo.setId(newPrjId)
- .setFileId(newPrjId)
- .setFileName(prjName)
- .setFileVersion(100)
- .setFileTime(EleCommonUtil.getNowTimeStr())
- .setDataType(EleDataTypeEnum.FOLDER.code)
- .setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
- .setEffectFlag(EffectFlagEnum.EFFECT.code)
- .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
- .setFilePath(newPrjId)
- .setSort(1)
- .setCreatedTime(now)
- .setUpdateTime(now)
- .setCreatedBy(currentUserId)
- .setUpdatedBy(currentUserId);
- this.save(fileInfo);
- // 保存到文件系统
- fileSystemService.createDirectory(eleDataPath);
- } catch (Exception e) {
- String info = StrFormatter.format("文件创建失败,具体为--->{}", e.getMessage());
- log.error(info, e);
- throw new BizException(-1, info);
- }
- return ElectromagneticResultUtil.success(true);
- }
-
- /**
- * 修改项目名称
- * @param prjId
- * @param newPrjName
+ * 查询文件列表
+ * @param fileInfoQueryDTO
* @return
*/
@Override
- @Transactional(rollbackFor = Exception.class)
- public ElectromagneticResult> modifyPrjName(String prjId, String newPrjName) {
- try {
- LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getId, prjId);
- EdFileInfo fileInfo = this.baseMapper.selectOne(queryWrapper);
- String oldPrjName = fileInfo.getFileName();
- String newPath = eleDataPath + File.separator + newPrjName;
- if (fileSystemService.checkFolderExist(newPath)) {
- String info = StrFormatter.format("工程名{}已经存在", newPrjName);
- log.error(info);
- return ElectromagneticResultUtil.fail("-1", info);
- }
- fileInfo.setFileName(newPrjName);
- this.baseMapper.updateById(fileInfo);
- fileSystemService.renameFile(eleDataPath, oldPrjName, newPrjName);
- } catch (Exception e) {
- String info = StrFormatter.format("修改工程名异常--->{},{}", newPrjName, e.getMessage());
- log.error(info, e);
- throw new BizException(-1, info);
- }
- return ElectromagneticResultUtil.success(true);
- }
+ public ElectromagneticResult> queryEdFileInfo(FileInfoQueryDTO fileInfoQueryDTO) {
- /**
- * 删除一个项目,做逻辑删除
- *
- * @param prjId
- * @return
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public ElectromagneticResult> delete(String prjId) {
- try {
- List ids = new ArrayList<>();
- ids.add(prjId);
- LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
- .select(EdFileInfo::getId)
- .likeRight(EdFileInfo::getFilePath, prjId + MYSQL_FILE_PATH_SPLIT);
- List edFileInfos = this.baseMapper.selectList(queryWrapper);
- edFileInfos.forEach(e -> ids.add(e.getId()));
- Wrappers.lambdaUpdate(EdFileInfo.class).set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code).in(EdFileInfo::getId, ids);
- return ElectromagneticResultUtil.success(true);
- } catch (Exception e) {
- String info = "删除项目失败";
- log.error(info, e);
- throw new BizException(-1, info);
- }
- }
-
- /**
- * 添加子集
- *
- * @param parentId
- * @param folderName
- * @return
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public ElectromagneticResult> addFolder(String parentId, String folderName) {
-
- // 验证名称是否合法
- Assert.isTrue(EleCommonUtil.isFileNameValid(folderName), "文件名不符合规范,只能包含中文字符、下划线、连字符、加号、数字和英文字符且长度小于32。");
-
- if (!EleCommonUtil.isFileNameValid(folderName)) {
- String info = StrFormatter.format("子集名称{}不符合要求", folderName);
- log.error(info);
- return ElectromagneticResultUtil.fail("-1", info);
- }
- // 首先判断判断当前深度是否已经达到6层
LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
- .select(EdFileInfo::getId, EdFileInfo::getFilePath)
- .eq(EdFileInfo::getId, parentId);
- EdFileInfo edFileInfo = this.baseMapper.selectOne(queryWrapper);
- String currentPath = edFileInfo.getFilePath();
- List paths = CollUtil.newArrayList(edFileInfo.getFilePath().split(MYSQL_FILE_PATH_SPLIT));
- if (paths.size() >= prjFolderMaxLength) {
- String info = "当前子集已达到最大层级,禁止创建子集。";
- log.error(info);
- return ElectromagneticResultUtil.fail("-1", info);
- }
+ .select()
+ .eq(EdFileInfo::getParentId, fileInfoQueryDTO.getParentId())
+ .like(StrUtil.isNotEmpty(fileInfoQueryDTO.getKeyword()), EdFileInfo::getFileName, fileInfoQueryDTO.getKeyword())
+ .like(StrUtil.isNotEmpty(fileInfoQueryDTO.getKeyword()), EdFileInfo::getFileNote, fileInfoQueryDTO.getKeyword())
+ .eq(Objects.equals(fileInfoQueryDTO.getFileType(), 0), EdFileInfo::getFileType, 0)
+ .eq(Objects.equals(fileInfoQueryDTO.getFileType(), 1), EdFileInfo::getFileType, 1)
- // 判断文件夹名称是否存在
- List edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
- .select(EdFileInfo::getId, EdFileInfo::getFileName)
- .eq(EdFileInfo::getParentId, parentId));
- List names = edFileInfos.stream().map(EdFileInfo::getFileName).collect(Collectors.toList());
- if (names.contains(folderName)) {
- String info = "该子集名称已存在";
- log.error(info);
- return ElectromagneticResultUtil.fail("-1", info);
- }
+ .eq(Objects.equals(fileInfoQueryDTO.getDataStatus(), 0), EdFileInfo::getDataStatus, 0)
+ .eq(Objects.equals(fileInfoQueryDTO.getDataStatus(), 1), EdFileInfo::getDataStatus, 1)
+ .eq(Objects.equals(fileInfoQueryDTO.getDataStatus(), 2), EdFileInfo::getDataStatus, 2)
- try {
- int id = Integer.parseInt(this.baseMapper.maxPrjId());
- Date now = new Date();
- String currentUserId = UserThreadLocal.getUserId();
- String newFolderId = String.valueOf(id + 1);
- String path = currentPath + MYSQL_FILE_PATH_SPLIT + newFolderId;
- EdFileInfo fileInfo = new EdFileInfo();
- fileInfo.setId(newFolderId)
- .setFileId(newFolderId)
- .setFileName(folderName)
- .setFileVersion(100)
- .setParentId(parentId)
- .setFileTime(EleCommonUtil.getNowTimeStr())
- .setDataType(EleDataTypeEnum.FOLDER.code)
- .setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
- .setEffectFlag(EffectFlagEnum.EFFECT.code)
- .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
- .setFilePath(path)
- .setSort(names.size() + 1)
- .setCreatedTime(now)
- .setUpdateTime(now)
- .setCreatedBy(currentUserId)
- .setUpdatedBy(currentUserId);
- // 保存到文件系统
- String targetFilePath = getPath(paths) + File.separator + folderName;
- fileSystemService.createDirectory(targetFilePath);
- return ElectromagneticResultUtil.success(true);
- } catch (Exception e) {
- String info = "添加子集失败";
- log.error(info, e);
- throw new BizException(-1, info);
- }
+ .orderByAsc(Objects.equals(fileInfoQueryDTO.getCreatedTime(), 0), EdFileInfo::getCreatedTime)
+ .orderByDesc(Objects.equals(fileInfoQueryDTO.getCreatedTime(), 1), EdFileInfo::getCreatedTime)
+
+ .orderByAsc(Objects.equals(fileInfoQueryDTO.getFileVersion(), 0), EdFileInfo::getFileVersion)
+ .orderByDesc(Objects.equals(fileInfoQueryDTO.getFileVersion(), 1), EdFileInfo::getFileVersion)
+
+ .orderByAsc(Objects.equals(fileInfoQueryDTO.getFileSize(), 0), EdFileInfo::getFileSize)
+ .orderByDesc(Objects.equals(fileInfoQueryDTO.getFileSize(), 1), EdFileInfo::getFileSize)
+
+ .orderByAsc(Objects.equals(fileInfoQueryDTO.getCreatedTime(), 0), EdFileInfo::getCreatedTime)
+ .orderByDesc(Objects.equals(fileInfoQueryDTO.getCreatedTime(), 1), EdFileInfo::getCreatedTime);
+ Page edFileInfoPage = this.baseMapper.selectPage(new Page<>(fileInfoQueryDTO.getPageNum(), fileInfoQueryDTO.getPageSize()), queryWrapper);
+ long total = edFileInfoPage.getTotal();
+ List records = BeanUtil.copyToList(edFileInfoPage.getRecords(), FileInfoDTO.class);
+ return ElectromagneticResultUtil.success(new FileInfoQueryPageVO(total, records));
}
/**
- * 查询所有项目
- *
- * @return
- */
- @Override
- public ElectromagneticResult> queryAllPrjInfo() {
-
- try {
- LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
- .select(EdFileInfo::getId)
- .eq(EdFileInfo::getParentId, 0)
- .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code);
- List ids = this.baseMapper.selectList(queryWrapper).stream().map(EdFileInfo::getId).collect(Collectors.toList());
-
- List projectVOS = new ArrayList<>();
-
- for (String id : ids) {
- LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(EdFileInfo.class)
- .select(EdFileInfo::getId, EdFileInfo::getFileName, EdFileInfo::getParentId, EdFileInfo::getSort)
- .like(EdFileInfo::getFilePath, MYSQL_FILE_PATH_SPLIT + id + MYSQL_FILE_PATH_SPLIT);
- List edFileInfos = this.baseMapper.selectList(queryWrapper1);
- // 转换为树
- TreeNodeConfig config = new TreeNodeConfig();
- config.setIdKey(EdFileInfo.Fields.id);
- config.setParentIdKey(EdFileInfo.Fields.parentId);
- config.setWeightKey(EdFileInfo.Fields.sort);
-
- List> trees = TreeUtil.build(edFileInfos, "0", config, ((obj, treeNode) -> {
- treeNode.putExtra(EdFileInfo.Fields.id, obj.getId());
- treeNode.putExtra(EdFileInfo.Fields.parentId, obj.getParentId());
- treeNode.putExtra(EdFileInfo.Fields.sort, obj.getSort());
- treeNode.putExtra(EdFileInfo.Fields.fileName, obj.getFileName());
- }));
-
- String jsonStr = JSONUtil.toJsonStr(trees);
- ProjectVO projectVO = JSONUtil.toList(jsonStr, ProjectVO.class).get(0);
- projectVOS.add(projectVO);
- }
- return ElectromagneticResultUtil.success(projectVOS);
- } catch (Exception e) {
- String info = "查询项目失败";
- log.error(info, e);
- throw new BizException(-1, info);
- }
- }
-
- /**
- * 子集拖拽重排序
- *
- * @param folderResortDTOList
- * @return
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public ElectromagneticResult> folderResort(List folderResortDTOList) {
- try {
- for (FolderResortDTO folderResortDTO : folderResortDTOList) {
- LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(EdFileInfo.class)
- .set(EdFileInfo::getSort, folderResortDTO.getSort())
- .eq(EdFileInfo::getId, folderResortDTO.getId());
- this.update(updateWrapper);
- }
- return ElectromagneticResultUtil.success(true);
- } catch (Exception e) {
- String info = "子集重排序异常";
- log.error(info, e);
- throw new BizException(-1, info);
- }
- }
-
- /**
- * 项目发布
- *
- * @param prjId
- * @return
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public ElectromagneticResult> publish(String prjId) {
- try {
- LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(EdFileInfo.class)
- .set(EdFileInfo::getDataStatus, EleDataStatusEnum.PUBLISHED.code)
- .likeRight(EdFileInfo::getFilePath, prjId);
- this.update(updateWrapper);
- return ElectromagneticResultUtil.success(true);
- } catch (Exception e) {
- String info = "项目发布异常";
- log.error(info, e);
- throw new BizException(-1, info);
- }
- }
-
- /**
- * 删除子集
- *
- * @param fileId
- * @return
- */
- @Override
- public ElectromagneticResult> deleteFolder(String fileId) {
-
- try {
- // TODO是否需要判断文件夹是否为空
- LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
- .select(EdFileInfo::getId, EdFileInfo::getFilePath)
- .like(EdFileInfo::getFilePath, MYSQL_FILE_PATH_SPLIT + fileId + MYSQL_FILE_PATH_SPLIT)
- .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code);
- List edFileInfos = this.baseMapper.selectList(queryWrapper);
- List ids = edFileInfos.stream().map(EdFileInfo::getId).collect(Collectors.toList());
- ids.add(fileId);
- LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(EdFileInfo.class)
- .set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)
- .set(EdFileInfo::getSort, -1)
- .in(EdFileInfo::getId, ids);
- this.baseMapper.update(null, updateWrapper);
-
- String[] tmpFileIds = edFileInfos.get(0).getFilePath().split(MYSQL_FILE_PATH_SPLIT);
- String parentId = tmpFileIds[0];
- for (String tmpPathId : tmpFileIds) {
- parentId = this.baseMapper.maxPrjId();
- if (fileId.equals(tmpPathId)) {
- break;
- }
- }
- // 同层级的resort
- List edFileInfos1 = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
- .select(EdFileInfo::getId, EdFileInfo::getSort)
- .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
- .eq(EdFileInfo::getParentId, parentId)
- .orderByAsc(EdFileInfo::getSort));
- for (int i = 1; i <= edFileInfos1.size(); i++) {
- String id = edFileInfos1.get(i).getId();
- this.baseMapper.update(null, Wrappers.lambdaUpdate(EdFileInfo.class)
- .set(EdFileInfo::getSort, i)
- .eq(EdFileInfo::getId, id));
- }
- return ElectromagneticResultUtil.success(true);
- } catch (Exception e) {
- String info = "删除子集异常";
- log.error(info, e);
- throw new BizException(-1, info);
- }
- }
-
- /**
- * 层级沿用
- *
- * @param sourceId
- * @param targetId
- * @return
- */
- @Override
- public ElectromagneticResult> follow(String sourceId, String targetId) {
-
- try {
- String currentUserId = UserThreadLocal.getUserId();
- // 把source工程的层级结构copy到目标工程
- // 查找source的全部目录
- List sourceEdFileInfos = this.baseMapper.selectAllAdminFolder(sourceId);
- List targetEdFileInfos = this.baseMapper.selectAllAdminFolder(targetId);
- // 确定层级最大为prjFolderMaxLength层,现在逐层来处理。
- for (int i = 1; i <= prjFolderMaxLength; ++i) {
- // 先查找source第i层下有那些子集
- final int count = i;
- EdFileInfo targetParentFile = targetEdFileInfos.stream()
- .filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count - 1)
- .collect(Collectors.toList()).get(0);
- List sourceTmpEdFiles = sourceEdFileInfos.stream()
- .filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
- .collect(Collectors.toList());
- List targetTmpEdFiles = targetEdFileInfos.stream()
- .filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
- .collect(Collectors.toList());
- Map sourceFileNameMap= sourceTmpEdFiles.stream().collect(Collectors.toMap(EdFileInfo::getFileName, e -> e));
- List targetFileNames = targetTmpEdFiles.stream().map(EdFileInfo::getFileName).collect(Collectors.toList());
- for (EdFileInfo edFileInfo : sourceTmpEdFiles) {
- String sourceFileName = edFileInfo.getFileName();
- if (!targetFileNames.contains(sourceFileName)) {
- EdFileInfo sourceFile = sourceFileNameMap.get(sourceFileName);
- EdFileInfo targetFile = new EdFileInfo();
- int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId());
- String newFolderId = String.valueOf(maxFolderId + 1);
- Date now = new Date();
- targetFile.setId(newFolderId)
- .setFileId(newFolderId)
- .setFileName(sourceFile.getFileName())
- .setFileVersion(100)
- .setParentId(targetParentFile.getParentId())
- .setFileTime(EleCommonUtil.getNowTimeStr())
- .setDataType(EleDataTypeEnum.FOLDER.code)
- .setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
- .setEffectFlag(EffectFlagEnum.EFFECT.code)
- .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
- .setFilePath(targetParentFile.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
- .setSort(targetTmpEdFiles.size() + 1)
- .setCreatedTime(now)
- .setUpdateTime(now)
- .setCreatedBy(currentUserId)
- .setUpdatedBy(currentUserId);
- this.save(targetFile);
- String targetSysFilePath = getSysFilePathByDbPath(targetFile.getFilePath()) + File.separator + sourceFileName;
- fileSystemService.createDirectory(targetSysFilePath);
- targetEdFileInfos = this.baseMapper.selectAllAdminFolder(targetId);
- }
- }
- }
- return ElectromagneticResultUtil.success(true);
- } catch (Exception e) {
- String info = StrFormatter.format("层级沿用失败");
- log.error(info, e);
- return ElectromagneticResultUtil.fail("-1", info);
- }
- }
-
- /**
- * 修改子集名称
- *
- * @param id
+ * 新建文件夹
+ * @param parentId
* @param newFolderName
* @return
*/
@Override
- public ElectromagneticResult> modifyFolder(String id, String newFolderName) {
+ public ElectromagneticResult> createFolder(String parentId, String newFolderName) {
+ return commonService.addFolder(parentId, newFolderName, false, false);
+ }
+
+ /**
+ * 项目层级结构查询
+ *
+ * @return
+ */
+ @Override
+ public ElectromagneticResult> tree() {
+ return commonService.queryAllPrjInfo();
+ }
+
+ /**
+ * 删除目录
+ * @param id
+ * @param dataType
+ * @return
+ */
+ @Override
+ public ElectromagneticResult> deleteFolder(String id, Integer dataType) {
+
+ Assert.isTrue(dataType == 0 || dataType == 1, "参数错误");
+ if (dataType == 0) {
+ return commonService.deleteFolder(id, null, false);
+ }
+
+ this.baseMapper.update(null, Wrappers.lambdaUpdate(EdFileInfo.class)
+ .set(EdFileInfo::getEffectFlag, false)
+ .eq(EdFileInfo::getId, id));
+ return ElectromagneticResultUtil.success(true);
+ }
+
+ /**
+ * 下载文件
+ *
+ * @param id
+ * @return
+ */
+ @Override
+ public ResponseEntity download(String id, HttpServletResponse response) {
+
try {
- EdFileInfo fileInfo = this.baseMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class)
- .eq(EdFileInfo::getId, id));
- String sysFilePath = getSysFilePathByDbPath(fileInfo.getFilePath());
- this.baseMapper.update(null, Wrappers.lambdaUpdate(EdFileInfo.class)
- .set(EdFileInfo::getFileName, newFolderName));
- fileSystemService.renameFile(sysFilePath, newFolderName);
- return ElectromagneticResultUtil.success(true);
- } catch(Exception e) {
- String info = StrFormatter.format("修改子集名称为{}失败", newFolderName);
+ EdFileInfo fileInfo = this.baseMapper.selectOne(Wrappers.lambdaQuery().eq(EdFileInfo::getId, id));
+ String fileSysPath = commonService.getFileSysPath(fileInfo.getFilePath());
+ Assert.isTrue(FileUtil.exist(fileSysPath), "下载文件不存在。");
+ FileSystemResource fileSystemResource = new FileSystemResource(fileSysPath);
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
+ headers.add("Pragma", "no-cache");
+ headers.add("Expires", "0");
+ String fileName = Base64.encode(fileSystemResource.getFilename());
+ response.setHeader("content-disposition","attachment;filename=" + fileName);
+ // 构建响应实体(可以返回 paths = CollUtil.newArrayList(dbPath.split(MYSQL_FILE_PATH_SPLIT));
- return getPath(paths);
- }
-
- private String getPath(List ids) {
- LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
- .select(EdFileInfo::getId, EdFileInfo::getFileName)
- .in(EdFileInfo::getId, ids);
- List edFileInfos = this.baseMapper.selectList(queryWrapper);
- Map map = edFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, EdFileInfo::getFileName));
- StringBuilder path = new StringBuilder();
- for (String id : ids) {
- String tmp = map.get(id) + File.separator;
- path.append(tmp);
- }
- return path.toString();
- }
-
}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdPrjServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdPrjServiceImpl.java
new file mode 100644
index 0000000..99cf88e
--- /dev/null
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdPrjServiceImpl.java
@@ -0,0 +1,387 @@
+package com.electromagnetic.industry.software.manage.service.serviceimpl;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.text.StrFormatter;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
+import com.electromagnetic.industry.software.common.enums.EleDataSaveStatusEnum;
+import com.electromagnetic.industry.software.common.enums.EleDataStatusEnum;
+import com.electromagnetic.industry.software.common.enums.EleDataTypeEnum;
+import com.electromagnetic.industry.software.common.exception.BizException;
+import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
+import com.electromagnetic.industry.software.common.util.EleCommonUtil;
+import com.electromagnetic.industry.software.common.util.EleLog;
+import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil;
+import com.electromagnetic.industry.software.common.util.UserThreadLocal;
+import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper;
+import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo;
+import com.electromagnetic.industry.software.manage.pojo.req.FolderResortDTO;
+import com.electromagnetic.industry.software.manage.service.EdPrjService;
+import com.electromagnetic.industry.software.manage.service.FileSystemService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.*;
+
+@Service
+public class EdPrjServiceImpl extends ServiceImpl implements EdPrjService {
+
+ private final EleLog log = new EleLog(EdPrjServiceImpl.class);
+
+ @Resource
+ private FileSystemService fileSystemService;
+
+ @Value("${prj.folder.max.length}")
+ private int prjFolderMaxLength;
+
+ @Resource
+ private CommonService commonService;
+
+ /**
+ * 创建一个新的工程
+ *
+ * @param prjName 新的工程名
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public ElectromagneticResult> createNewPrj(String prjName) {
+
+ Assert.isTrue(EleCommonUtil.isFileNameValid(prjName), "文件名不符合规范,只能包含中文字符、下划线、连字符、加号、数字和英文字符且长度小于32。");
+ if (!EleCommonUtil.isFileNameValid(prjName)) {
+ String info = StrFormatter.format("工程名称{}不符合要求", prjName);
+ log.error(info);
+ return ElectromagneticResultUtil.fail("-1", info);
+ }
+
+ // 首先检查工程是否存在
+ // TODO 一个项目如果被废除了,然后又新建了一个同名工程,这种情况怎么处理,需要产品确认。当前这里先按照同名如果存在则抛出异常处理。
+ Long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class)
+ .eq(EdFileInfo::getParentId, PRJ_PARENT_ID)
+ .eq(EdFileInfo::getFileName, prjName));
+
+ if (count > 0) {
+ String info = StrFormatter.format("{} 已经存在", prjName);
+ log.info(info);
+ ElectromagneticResultUtil.fail("-1", "该项目名称已经存在。");
+ }
+
+ try {
+ // 保存信息到MySQL
+ String maxPrjId = this.baseMapper.maxPrjId();
+ int id = Integer.parseInt(StrUtil.isEmpty(maxPrjId) ? "100000" : maxPrjId);
+ Date now = new Date();
+ String currentUserId = UserThreadLocal.getUserId();
+ String newPrjId = String.valueOf(id + 1);
+
+ EdFileInfo fileInfo = new EdFileInfo();
+ String nowTimeStr = EleCommonUtil.getNowTimeStr();
+ fileInfo.setId(newPrjId)
+ .setFileId(newPrjId)
+ .setFileName(prjName)
+ .setFileVersion(FILE_START_VERSION)
+ .setParentId(PRJ_PARENT_ID)
+ .setFileTime(nowTimeStr)
+ .setPrjDir(true)
+ .setDataType(EleDataTypeEnum.FOLDER.code)
+ .setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
+ .setEffectFlag(EffectFlagEnum.EFFECT.code)
+ .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
+ .setFilePath(newPrjId)
+ .setSort(1)
+ .setFileCode(commonService.createFileCode(newPrjId, EleDataTypeEnum.FOLDER.desc, FILE_START_VERSION, nowTimeStr))
+ .setCreatedTime(now)
+ .setUpdateTime(now)
+ .setCreatedBy(currentUserId)
+ .setUpdatedBy(currentUserId);
+ this.save(fileInfo);
+ // 保存到文件系统
+ fileSystemService.createDirectory(commonService.getEleDataPath() + File.separator + prjName);
+ } catch (Exception e) {
+ String info = StrFormatter.format("文件创建失败,具体为--->{}", e.getMessage());
+ log.error(info, e);
+ throw new BizException(-1, info);
+ }
+ return ElectromagneticResultUtil.success(true);
+ }
+
+ /**
+ * 修改项目名称
+ * @param prjId
+ * @param newPrjName
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public ElectromagneticResult> modifyPrjName(String prjId, String newPrjName) {
+ try {
+ Long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class)
+ .eq(EdFileInfo::getParentId, PRJ_PARENT_ID)
+ .eq(EdFileInfo::getFileName, newPrjName));
+
+ if (count > 0) {
+ String info = StrFormatter.format("{} 已经存在", newPrjName);
+ log.info(info);
+ ElectromagneticResultUtil.fail("-1", "该项目名称已经存在。");
+ }
+
+ EdFileInfo fileInfo = this.baseMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class)
+ .select(EdFileInfo::getFileName)
+ .eq(EdFileInfo::getId, prjId));
+ String oldPrjName = fileInfo.getFileName();
+ String newPath = commonService.getEleDataPath();
+ if (fileSystemService.checkFolderExist(newPath)) {
+ String info = StrFormatter.format("工程名{}已经存在", newPrjName);
+ log.error(info);
+ return ElectromagneticResultUtil.fail("-1", info);
+ }
+ this.baseMapper.update(null, Wrappers.lambdaUpdate(EdFileInfo.class)
+ .eq(EdFileInfo::getId, prjId)
+ .set(EdFileInfo::getFileName, newPrjName)
+ .set(EdFileInfo::getUpdatedBy, UserThreadLocal.getUserId())
+ .set(EdFileInfo::getUpdateTime, new Date()));
+ fileSystemService.renameFile(commonService.getEleDataPath(), oldPrjName, newPrjName);
+ } catch (Exception e) {
+ String info = StrFormatter.format("修改工程名异常--->{},{}", newPrjName, e.getMessage());
+ log.error(info, e);
+ throw new BizException(-1, info);
+ }
+ return ElectromagneticResultUtil.success(true);
+ }
+
+ /**
+ * 删除一个项目,做逻辑删除
+ * @param prjId
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public ElectromagneticResult> delete(String prjId) {
+ try {
+ Long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class)
+ .eq(EdFileInfo::getDataType, EleDataTypeEnum.FILE.code)
+ .likeRight(EdFileInfo::getFilePath, prjId));
+
+ if (count > 0) {
+ String info = StrFormatter.format("禁止删除非空项目");
+ log.info(info);
+ ElectromagneticResultUtil.fail("-1", info);
+ }
+
+ List ids = new ArrayList<>();
+ ids.add(prjId);
+ LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
+ .select(EdFileInfo::getId)
+ .likeRight(EdFileInfo::getFilePath, prjId + MYSQL_FILE_PATH_SPLIT);
+ List edFileInfos = this.baseMapper.selectList(queryWrapper);
+ edFileInfos.forEach(e -> ids.add(e.getId()));
+ Wrappers.lambdaUpdate(EdFileInfo.class).set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code).in(EdFileInfo::getId, ids);
+ return ElectromagneticResultUtil.success(true);
+ } catch (Exception e) {
+ String info = "删除项目失败";
+ log.error(info, e);
+ throw new BizException(-1, info);
+ }
+ }
+
+ /**
+ * 添加子集
+ *
+ * @param parentId
+ * @param folderName
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public ElectromagneticResult> addFolder(String parentId, String folderName) {
+ return commonService.addFolder(parentId, folderName, true, true);
+ }
+
+ /**
+ * 查询所有项目
+ *
+ * @return
+ */
+ @Override
+ public ElectromagneticResult> queryAllPrjInfo() {
+ return commonService.queryAllPrjInfo();
+ }
+
+ /**
+ * 子集拖拽重排序
+ *
+ * @param folderResortDTOList
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public ElectromagneticResult> folderResort(List folderResortDTOList) {
+ try {
+ for (FolderResortDTO folderResortDTO : folderResortDTOList) {
+ LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(EdFileInfo.class)
+ .set(EdFileInfo::getSort, folderResortDTO.getSort())
+ .eq(EdFileInfo::getId, folderResortDTO.getId());
+ this.update(updateWrapper);
+ }
+ return ElectromagneticResultUtil.success(true);
+ } catch (Exception e) {
+ String info = "子集重排序异常";
+ log.error(info, e);
+ throw new BizException(-1, info);
+ }
+ }
+
+ /**
+ * 项目发布
+ *
+ * @param prjId
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public ElectromagneticResult> publish(String prjId) {
+ try {
+ LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(EdFileInfo.class)
+ .set(EdFileInfo::getDataStatus, EleDataStatusEnum.PUBLISHED.code)
+ .likeRight(EdFileInfo::getFilePath, prjId);
+ this.update(updateWrapper);
+ return ElectromagneticResultUtil.success(true);
+ } catch (Exception e) {
+ String info = "项目发布异常";
+ log.error(info, e);
+ throw new BizException(-1, info);
+ }
+ }
+
+ /**
+ * 删除子集
+ *
+ * @param fileId
+ * @param parentId
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public ElectromagneticResult> deleteFolder(String fileId, String parentId) {
+ return commonService.deleteFolder(fileId, parentId, true);
+ }
+
+ /**
+ * 层级沿用
+ *
+ * @param sourceId
+ * @param targetId
+ * @return
+ */
+ @Override
+ public ElectromagneticResult> follow(String sourceId, String targetId) {
+
+ try {
+ String currentUserId = UserThreadLocal.getUserId();
+ // 把source工程的层级结构copy到目标工程
+ // 查找source的全部目录
+ List sourceEdFileInfos = commonService.selectAllAdminFolder(sourceId);
+ List targetEdFileInfos = commonService.selectAllAdminFolder(targetId);
+ // 确定层级最大为prjFolderMaxLength层,现在逐层来处理。
+ for (int i = 1; i <= prjFolderMaxLength; ++i) {
+ // 先查找source第i层下有那些子集
+ final int count = i;
+ EdFileInfo targetParentFile = targetEdFileInfos.stream()
+ .filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count - 1)
+ .collect(Collectors.toList()).get(0);
+ List sourceTmpEdFiles = sourceEdFileInfos.stream()
+ .filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
+ .collect(Collectors.toList());
+ List targetTmpEdFiles = targetEdFileInfos.stream()
+ .filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
+ .collect(Collectors.toList());
+ Map sourceFileNameMap = sourceTmpEdFiles.stream().collect(Collectors.toMap(EdFileInfo::getFileName, e -> e));
+ List targetFileNames = targetTmpEdFiles.stream().map(EdFileInfo::getFileName).collect(Collectors.toList());
+ for (EdFileInfo edFileInfo : sourceTmpEdFiles) {
+ String sourceFileName = edFileInfo.getFileName();
+ if (!targetFileNames.contains(sourceFileName)) {
+ EdFileInfo sourceFile = sourceFileNameMap.get(sourceFileName);
+ EdFileInfo targetFile = new EdFileInfo();
+ int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId());
+ String newFolderId = String.valueOf(maxFolderId + 1);
+ Date now = new Date();
+ targetFile.setId(newFolderId)
+ .setFileId(newFolderId)
+ .setFileName(sourceFile.getFileName())
+ .setFileVersion(FILE_START_VERSION)
+ .setPrjDir(true)
+ .setParentId(targetParentFile.getParentId())
+ .setFileTime(EleCommonUtil.getNowTimeStr())
+ .setDataType(EleDataTypeEnum.FOLDER.code)
+ .setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
+ .setEffectFlag(EffectFlagEnum.EFFECT.code)
+ .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
+ .setFilePath(targetParentFile.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
+ .setSort(targetTmpEdFiles.size() + 1)
+ .setCreatedTime(now)
+ .setUpdateTime(now)
+ .setCreatedBy(currentUserId)
+ .setUpdatedBy(currentUserId);
+ this.save(targetFile);
+ String targetSysFilePath = commonService.getFileSysPath(targetFile.getFilePath()) + File.separator + sourceFileName;
+ fileSystemService.createDirectory(targetSysFilePath);
+ targetEdFileInfos = commonService.selectAllAdminFolder(targetId);
+ }
+ }
+ }
+ return ElectromagneticResultUtil.success(true);
+ } catch (Exception e) {
+ String info = StrFormatter.format("层级沿用失败");
+ log.error(info, e);
+ return ElectromagneticResultUtil.fail("-1", info);
+ }
+ }
+
+ /**
+ * 修改子集名称
+ * @param id
+ * @param newFolderName
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public ElectromagneticResult> modifyFolder(String id, String newFolderName, String parentId) {
+ try {
+ // 首先检查同层是否有同名目录
+ if (commonService.checkSameFolder(parentId, newFolderName)) {
+ String info = "存在同名子集,禁止修改";
+ log.error(info);
+ throw new BizException(-1, info);
+ }
+ String currentUserId = UserThreadLocal.getUserId();
+ Date now = new Date();
+ EdFileInfo fileInfo = this.baseMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class)
+ .eq(EdFileInfo::getId, id));
+ String sysFilePath = commonService.getFileSysPath(fileInfo.getFilePath());
+ this.baseMapper.update(null, Wrappers.lambdaUpdate(EdFileInfo.class)
+ .set(EdFileInfo::getUpdateTime, now)
+ .set(EdFileInfo::getUpdatedBy, currentUserId)
+ .eq(EdFileInfo::getId, id)
+ .set(EdFileInfo::getFileName, newFolderName));
+ fileSystemService.renameFile(sysFilePath, newFolderName);
+ return ElectromagneticResultUtil.success(true);
+ } catch (Exception e) {
+ String info = StrFormatter.format("修改子集名称为{}失败", newFolderName);
+ log.error(info, e);
+ throw new BizException(-1, info);
+ }
+ }
+
+}
diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/PermissionServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/PermissionServiceImpl.java
index 0e2a9db..c85f9b8 100644
--- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/PermissionServiceImpl.java
+++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/PermissionServiceImpl.java
@@ -1,7 +1,6 @@
package com.electromagnetic.industry.software.manage.service.serviceimpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.electromagnetic.industry.software.common.enums.FilePermission;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import com.electromagnetic.industry.software.manage.mapper.RolePermissionMapper;
@@ -27,13 +26,14 @@ public class PermissionServiceImpl implements PermissionService {
/**
* 查询当前用户在当前目录的功能权限
+ *
* @param userId
* @param fileId
* @return
*/
@Override
- public Map getUserPermission (String userId, String fileId){
- Map result = new HashMap<>();
+ public Map getUserPermission(String userId, String fileId) {
+ Map result = new HashMap<>();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.select("role_id").eq("user_id", userId);
@@ -70,8 +70,8 @@ public class PermissionServiceImpl implements PermissionService {
QueryWrapper queryWrapper1 = new QueryWrapper<>();
queryWrapper1.select("file_id")
- .in("role_id",roleIds)
- .eq("permission_code",FilePermission.VIEW);
+ .in("role_id", roleIds)
+ .eq("permission_code", FilePermission.VIEW);
List