From 926f0ae96e6ced2a873ad534a6f5f97d2fd15f5e Mon Sep 17 00:00:00 2001 From: chenxudong Date: Thu, 19 Dec 2024 17:16:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=8F=91=E4=BA=86=E4=B8=80=E9=83=A8?= =?UTF-8?q?=E5=88=86=E7=9A=84=E6=96=87=E4=BB=B6=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/EdFileInfoController.java | 77 +++++ .../manage/controller/ProjectController.java | 4 +- .../manage/mapper/EdFileInfoMapper.java | 3 - .../manage/pojo/models/EdFileInfo.java | 26 +- .../manage/pojo/other/FileInfoDTO.java | 38 +++ .../manage/pojo/req/FileInfoQueryDTO.java | 34 ++ .../manage/pojo/resp/FileInfoQueryPageVO.java | 19 ++ .../manage/service/EdFileInfoService.java | 49 +++ .../software/manage/service/EdPrjService.java | 2 +- .../service/serviceimpl/CommonService.java | 297 ++++++++++++++++++ .../serviceimpl/EdFileInfoServiceImpl.java | 155 +++++++++ .../service/serviceimpl/EdPrjServiceImpl.java | 262 ++++----------- .../resources/sqlmapper/EdFileInfoMapper.xml | 11 - .../common/cons/ElectromagneticConstants.java | 3 + .../software/common/enums/EffectFlagEnum.java | 5 +- .../common/enums/EleDataSaveStatusEnum.java | 4 +- .../common/enums/EleDataStatusEnum.java | 4 +- .../common/enums/EleDataTypeEnum.java | 8 +- .../software/common/enums/PublishEnum.java | 4 +- 19 files changed, 767 insertions(+), 238 deletions(-) create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/FileInfoDTO.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/FileInfoQueryDTO.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileInfoQueryPageVO.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java 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 c21d7cd..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,11 +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/ProjectController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/ProjectController.java index 501003a..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 @@ -46,8 +46,8 @@ public class ProjectController { } @RequestMapping("modifyFolder") - public ElectromagneticResult modifyFolder(@RequestParam String newFolderName, @RequestParam String id) { - return edPrjService.modifyFolder(id, newFolderName); + public ElectromagneticResult modifyFolder(@RequestParam String newFolderName, @RequestParam String id, @RequestParam String parentId) { + return edPrjService.modifyFolder(id, newFolderName, parentId); } @RequestMapping("deleteFolder") 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 dbba768..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,7 +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/EdFileInfo.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileInfo.java index 5b65cac..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 @@ -25,6 +25,12 @@ public class EdFileInfo extends BaseModel { @TableField(value = "file_id") private String fileId; + /** + * 父目录id + */ + @TableField(value = "parent_id") + private String parentId; + /** * 文件类型 */ @@ -68,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-文件 */ @@ -113,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/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/service/EdFileInfoService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java new file mode 100644 index 0000000..ac7e497 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java @@ -0,0 +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.FileInfoQueryDTO; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.ResponseEntity; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public interface EdFileInfoService { + + /** + * 查询文件列表 + * @param fileInfoQueryDTO + * @return + */ + ElectromagneticResult queryEdFileInfo(FileInfoQueryDTO fileInfoQueryDTO); + + /** + * 新建文件夹 + * @param parentId + * @param newFolderName + * @return + */ + 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 index 2509fbc..ec4effe 100644 --- 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 @@ -88,5 +88,5 @@ public interface EdPrjService { * @param newFolderName * @return */ - ElectromagneticResult modifyFolder(String id, String newFolderName); + ElectromagneticResult modifyFolder(String id, String newFolderName, String parentId); } 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/EdFileInfoServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java new file mode 100644 index 0000000..7316021 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java @@ -0,0 +1,155 @@ +package com.electromagnetic.industry.software.manage.service.serviceimpl; + +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.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.exception.BizException; +import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +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.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 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 javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.BindException; +import java.util.List; +import java.util.Objects; + +@Service +public class EdFileInfoServiceImpl extends ServiceImpl implements EdFileInfoService { + + @Resource + private CommonService commonService; + + private EleLog log = new EleLog(EdFileInfoServiceImpl.class); + + /** + * 查询文件列表 + * @param fileInfoQueryDTO + * @return + */ + @Override + public ElectromagneticResult queryEdFileInfo(FileInfoQueryDTO fileInfoQueryDTO) { + + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class) + .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) + + .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) + + .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)); + } + + /** + * 新建文件夹 + * @param parentId + * @param newFolderName + * @return + */ + @Override + 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().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); + // 构建响应实体(可以返回 implements EdPrjService { - private static final String PRJ_PARENT_ID = "0"; private final EleLog log = new EleLog(EdPrjServiceImpl.class); - @Resource - private Environment environment; @Resource private FileSystemService fileSystemService; @@ -58,14 +47,8 @@ public class EdPrjServiceImpl extends ServiceImpl @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"); - } - + @Resource + private CommonService commonService; /** * 创建一个新的工程 @@ -85,12 +68,11 @@ public class EdPrjServiceImpl extends ServiceImpl // 首先检查工程是否存在 // TODO 一个项目如果被废除了,然后又新建了一个同名工程,这种情况怎么处理,需要产品确认。当前这里先按照同名如果存在则抛出异常处理。 - LambdaQueryWrapper existPrjWrapper = Wrappers.lambdaQuery(EdFileInfo.class) - .eq(EdFileInfo::getParentId, "") - .isNull(EdFileInfo::getParentId); + Long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getParentId, PRJ_PARENT_ID) + .eq(EdFileInfo::getFileName, prjName)); - List existEdFileInfos = this.baseMapper.selectList(existPrjWrapper); - if (CollUtil.isNotEmpty(existEdFileInfos)) { + if (count > 0) { String info = StrFormatter.format("{} 已经存在", prjName); log.info(info); ElectromagneticResultUtil.fail("-1", "该项目名称已经存在。"); @@ -105,25 +87,28 @@ public class EdPrjServiceImpl extends ServiceImpl String newPrjId = String.valueOf(id + 1); EdFileInfo fileInfo = new EdFileInfo(); + String nowTimeStr = EleCommonUtil.getNowTimeStr(); fileInfo.setId(newPrjId) .setFileId(newPrjId) .setFileName(prjName) - .setFileVersion(100) + .setFileVersion(FILE_START_VERSION) .setParentId(PRJ_PARENT_ID) - .setFileTime(EleCommonUtil.getNowTimeStr()) + .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(eleDataPath + File.separator + prjName); + fileSystemService.createDirectory(commonService.getEleDataPath() + File.separator + prjName); } catch (Exception e) { String info = StrFormatter.format("文件创建失败,具体为--->{}", e.getMessage()); log.error(info, e); @@ -134,7 +119,6 @@ public class EdPrjServiceImpl extends ServiceImpl /** * 修改项目名称 - * * @param prjId * @param newPrjName * @return @@ -143,18 +127,32 @@ public class EdPrjServiceImpl extends ServiceImpl @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); + 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 = eleDataPath + File.separator + newPrjName; + String newPath = commonService.getEleDataPath(); 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); + 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); @@ -165,7 +163,6 @@ public class EdPrjServiceImpl extends ServiceImpl /** * 删除一个项目,做逻辑删除 - * * @param prjId * @return */ @@ -173,6 +170,16 @@ public class EdPrjServiceImpl extends ServiceImpl @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) @@ -199,72 +206,7 @@ public class EdPrjServiceImpl extends ServiceImpl @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); - } - - // 判断文件夹名称是否存在 - 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); - } - - 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); - this.save(fileInfo); - // 保存到文件系统 - String targetFilePath = eleDataPath + 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); - } + return commonService.addFolder(parentId, folderName, true, true); } /** @@ -274,41 +216,7 @@ public class EdPrjServiceImpl extends ServiceImpl */ @Override 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 = this.baseMapper.selectList(queryWrapper).stream().map(EdFileInfo::getId).collect(Collectors.toList()); - - List projectVOS = new ArrayList<>(); - - for (String id : ids) { - List edFileInfos = this.baseMapper.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); - } + return commonService.queryAllPrjInfo(); } /** @@ -367,43 +275,7 @@ public class EdPrjServiceImpl extends ServiceImpl @Override @Transactional(rollbackFor = Exception.class) public ElectromagneticResult deleteFolder(String fileId, String parentId) { - - 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); - // 同层级的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)); - Date now = new Date(); - String currentUserId = UserThreadLocal.getUserId(); - for (int i = 0; i < edFileInfos1.size(); i++) { - String id = edFileInfos1.get(i).getId(); - this.baseMapper.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); - } + return commonService.deleteFolder(fileId, parentId, true); } /** @@ -420,8 +292,8 @@ public class EdPrjServiceImpl extends ServiceImpl String currentUserId = UserThreadLocal.getUserId(); // 把source工程的层级结构copy到目标工程 // 查找source的全部目录 - List sourceEdFileInfos = this.baseMapper.selectAllAdminFolder(sourceId); - List targetEdFileInfos = this.baseMapper.selectAllAdminFolder(targetId); + List sourceEdFileInfos = commonService.selectAllAdminFolder(sourceId); + List targetEdFileInfos = commonService.selectAllAdminFolder(targetId); // 确定层级最大为prjFolderMaxLength层,现在逐层来处理。 for (int i = 1; i <= prjFolderMaxLength; ++i) { // 先查找source第i层下有那些子集 @@ -448,7 +320,8 @@ public class EdPrjServiceImpl extends ServiceImpl targetFile.setId(newFolderId) .setFileId(newFolderId) .setFileName(sourceFile.getFileName()) - .setFileVersion(100) + .setFileVersion(FILE_START_VERSION) + .setPrjDir(true) .setParentId(targetParentFile.getParentId()) .setFileTime(EleCommonUtil.getNowTimeStr()) .setDataType(EleDataTypeEnum.FOLDER.code) @@ -462,9 +335,9 @@ public class EdPrjServiceImpl extends ServiceImpl .setCreatedBy(currentUserId) .setUpdatedBy(currentUserId); this.save(targetFile); - String targetSysFilePath = getFileSysPath(targetFile.getFilePath()) + File.separator + sourceFileName; + String targetSysFilePath = commonService.getFileSysPath(targetFile.getFilePath()) + File.separator + sourceFileName; fileSystemService.createDirectory(targetSysFilePath); - targetEdFileInfos = this.baseMapper.selectAllAdminFolder(targetId); + targetEdFileInfos = commonService.selectAllAdminFolder(targetId); } } } @@ -478,20 +351,25 @@ public class EdPrjServiceImpl extends ServiceImpl /** * 修改子集名称 - * * @param id * @param newFolderName * @return */ @Override @Transactional(rollbackFor = Exception.class) - public ElectromagneticResult modifyFolder(String id, String newFolderName) { + 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 = getFileSysPath(fileInfo.getFilePath()); + String sysFilePath = commonService.getFileSysPath(fileInfo.getFilePath()); this.baseMapper.update(null, Wrappers.lambdaUpdate(EdFileInfo.class) .set(EdFileInfo::getUpdateTime, now) .set(EdFileInfo::getUpdatedBy, currentUserId) @@ -506,24 +384,4 @@ public class EdPrjServiceImpl extends ServiceImpl } } - private String getFileSysPath(String dbPath) { - ArrayList paths = CollUtil.newArrayList(dbPath.split(MYSQL_FILE_PATH_SPLIT)); - String path = getPath(paths); - return eleDataPath + File.separator + path; - } - - 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/resources/sqlmapper/EdFileInfoMapper.xml b/electrmangnetic/src/main/resources/sqlmapper/EdFileInfoMapper.xml index 775424b..d1200a4 100644 --- a/electrmangnetic/src/main/resources/sqlmapper/EdFileInfoMapper.xml +++ b/electrmangnetic/src/main/resources/sqlmapper/EdFileInfoMapper.xml @@ -8,15 +8,4 @@ from ed_file_info where length(id) = 6 - - - \ No newline at end of file diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/cons/ElectromagneticConstants.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/cons/ElectromagneticConstants.java index 13abaed..f07299c 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/cons/ElectromagneticConstants.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/cons/ElectromagneticConstants.java @@ -6,4 +6,7 @@ public interface ElectromagneticConstants { String MYSQL_FILE_PATH_SPLIT = "_"; + int FILE_START_VERSION = 100; + + String PRJ_PARENT_ID = "0"; } diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EffectFlagEnum.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EffectFlagEnum.java index a6bc964..8b044c8 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EffectFlagEnum.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EffectFlagEnum.java @@ -18,7 +18,8 @@ public enum EffectFlagEnum { * 无效 */ NOT_EFFECTIVE(0, "无效"); - public Integer code; - public String desc; + + public final Integer code; + public final String desc; } \ No newline at end of file diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EleDataSaveStatusEnum.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EleDataSaveStatusEnum.java index b5c6c49..91e15f7 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EleDataSaveStatusEnum.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EleDataSaveStatusEnum.java @@ -9,7 +9,7 @@ public enum EleDataSaveStatusEnum { SUCCESS(1, "上传成功"), FAIL(2, "上传失败"); - public int code; - public String des; + public final int code; + public final String des; } diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EleDataStatusEnum.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EleDataStatusEnum.java index ac43024..36a977f 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EleDataStatusEnum.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EleDataStatusEnum.java @@ -9,7 +9,7 @@ public enum EleDataStatusEnum { PUBLISHED(1, "已发布"), OCCUPY(2, "占用"); - public int code; - public String desc; + public final int code; + public final String desc; } diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EleDataTypeEnum.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EleDataTypeEnum.java index 899df06..dd9a768 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EleDataTypeEnum.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/EleDataTypeEnum.java @@ -5,9 +5,9 @@ import lombok.AllArgsConstructor; @AllArgsConstructor public enum EleDataTypeEnum { - FOLDER(0, "文件夹"), - FILE(1, "普通文件"); + FOLDER(0, "folder"), + FILE(1, "file"); - public int code; - public String desc; + public final int code; + public final String desc; } diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/PublishEnum.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/PublishEnum.java index d56a4cd..5665dea 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/PublishEnum.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/PublishEnum.java @@ -15,7 +15,7 @@ public enum PublishEnum { */ UNPUBLISHED(0, "未发布"), ; - private Integer code; - private String desc; + private final Integer code; + private final String desc; }