diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileRelationController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileRelationController.java index be7fa9e..04ee98d 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileRelationController.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileRelationController.java @@ -3,8 +3,11 @@ package com.electromagnetic.industry.software.manage.controller; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil; import com.electromagnetic.industry.software.manage.pojo.models.EdFileRelation; +import com.electromagnetic.industry.software.manage.pojo.req.CheckNameUniqueRequest; +import com.electromagnetic.industry.software.manage.service.EdFileInfoService; import com.electromagnetic.industry.software.manage.service.EdFileRelationService; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; @@ -14,6 +17,8 @@ public class EdFileRelationController { @Resource EdFileRelationService edFileRelationService; + @Resource + EdFileInfoService edFileInfoService; /** * 创建文件关系 @@ -42,4 +47,25 @@ public class EdFileRelationController { public ElectromagneticResult listRelations (@PathVariable("id") String id) { return ElectromagneticResultUtil.success(edFileRelationService.listRelations(id)); } + + /** + * 检验文件名是否唯一 + */ + @RequestMapping (value = "/checkFileNameExist", method = RequestMethod.POST) + public ElectromagneticResult checkFileNameExist (@RequestBody CheckNameUniqueRequest checkNameUniqueRequest) { + String fileName = checkNameUniqueRequest.getFileName(); + String parentId = checkNameUniqueRequest.getParentId(); + return ElectromagneticResultUtil.success(edFileRelationService.checkNameUnique(parentId, fileName)); + } + + /** + * 本地上传并建立关系 + */ + @RequestMapping (value="/upload", method = RequestMethod.POST) + public ElectromagneticResult uploadRelation(@RequestParam("parentId") String parentId, + @RequestParam("file") MultipartFile file, + @RequestParam("description") String description, + @RequestParam("id") String id){ + return ElectromagneticResultUtil.success(edFileInfoService.uploadFileAndRelation(parentId,id,file,description)); + } } 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 fe198a3..3ed24fd 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 @@ -20,10 +20,10 @@ public class PermissionController { private PermissionService permissionService; @ApiOperation(value = "查询当前用户在当前目录的功能权限", notes = "") - @GetMapping(value = "/{fileId}") - public ElectromagneticResult getUserPermission(@PathVariable("fileId") String fileId) { + @GetMapping(value = "/{id}") + public ElectromagneticResult getUserPermission(@PathVariable("id") String id) { String userId = UserThreadLocal.getUserId(); - return ElectromagneticResultUtil.success(permissionService.getUserPermission(userId, fileId)); + return ElectromagneticResultUtil.success(permissionService.getUserPermission(userId, id)); } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/CheckNameUniqueRequest.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/CheckNameUniqueRequest.java new file mode 100644 index 0000000..e20f693 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/CheckNameUniqueRequest.java @@ -0,0 +1,17 @@ +package com.electromagnetic.industry.software.manage.pojo.req; + +import lombok.Data; + +@Data +public class CheckNameUniqueRequest { + + /** + * 目录id + */ + private String parentId; + + /** + * 文件名称 + */ + private String fileName; +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileSimpleInfoVO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileSimpleInfoVO.java index b6694ca..8d69250 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileSimpleInfoVO.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileSimpleInfoVO.java @@ -18,7 +18,7 @@ public class FileSimpleInfoVO { /** * 文件编号 */ - private String fileId; + private String fileCode; /** * 文件版本 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 819bec8..05500a7 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 @@ -7,6 +7,7 @@ import com.electromagnetic.industry.software.manage.pojo.req.FileInfoQueryDTO; import com.electromagnetic.industry.software.manage.pojo.req.UpdateFileInfoDTO; import org.springframework.core.io.InputStreamResource; import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; @@ -150,4 +151,15 @@ public interface EdFileInfoService { * @return */ ElectromagneticResult detail(String id); + + /** + * 文件上传并建立关系 + * + * @param parentId + * @param id 主文件Id + * @param file + * @param descrption 关系描述 + * @return + */ + ElectromagneticResult uploadFileAndRelation(String parentId, String id, MultipartFile file, String descrption); } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileRelationService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileRelationService.java index 19ad3ac..b7205d0 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileRelationService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileRelationService.java @@ -25,4 +25,12 @@ public interface EdFileRelationService { * @return */ FileRelationViewVO listRelations (String id); + + /** + * 检查文件名是否唯一 + * @param parentId + * @param fileName + * @return + */ + Boolean checkNameUnique(String parentId, String fileName); } 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 ca4c227..575007c 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 @@ -24,6 +24,7 @@ import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; import com.electromagnetic.industry.software.common.util.*; import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper; import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo; +import com.electromagnetic.industry.software.manage.pojo.models.EdFileRelation; import com.electromagnetic.industry.software.manage.pojo.other.FileInfoVO; import com.electromagnetic.industry.software.manage.pojo.other.UploadRecordDTO; import com.electromagnetic.industry.software.manage.pojo.req.*; @@ -31,6 +32,7 @@ import com.electromagnetic.industry.software.manage.pojo.resp.FileInfoQueryPageV import com.electromagnetic.industry.software.manage.pojo.resp.FileVersionViewVO; import com.electromagnetic.industry.software.manage.pojo.resp.UploadRecordVO; import com.electromagnetic.industry.software.manage.service.EdFileInfoService; +import com.electromagnetic.industry.software.manage.service.EdFileRelationService; import com.electromagnetic.industry.software.manage.service.FileSystemService; import com.electromagnetic.industry.software.manage.service.PermissionService; import org.springframework.beans.factory.annotation.Autowired; @@ -69,6 +71,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl FileUtil.del(e.getAbsolutePath())); return destColibPath; } + + /** + * 文件上传 + * + * @param parentId + * @param id 主文件Id + * @param file + * @param descrption 关系描述 + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public ElectromagneticResult uploadFileAndRelation(String parentId, String id, MultipartFile file, String descrption) { + + Assert.isTrue(EleCommonUtil.isFileNameValid(file.getOriginalFilename()), NAME_VALID_MSG); + EdFileInfo fileInfo = this.baseMapper.selectById(parentId); + Assert.isTrue(fileInfo.getDataType().equals(EleDataTypeEnum.FOLDER.code) && !fileInfo.getPrjDir(), "层级目录不允许上传文件"); + String fileName = file.getOriginalFilename(); + String mainName = FileUtil.mainName(fileName); + String suffix = FileUtil.getSuffix(fileName); + EdFileInfo newEdFileInfo = new EdFileInfo(); + newEdFileInfo.newInit(); + // 首先检查是否是同名文件 + try { + + Assert.isTrue(EleCommonUtil.isFileNameValid(fileName), NAME_VALID_MSG); + Long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getParentId, parentId) + .eq(EdFileInfo::getFileName, mainName) + .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) + .eq(EdFileInfo::getFileType, suffix)); + if (count > 0) { + handUploadRepeatFile(parentId, file, 3); + } else { + EdFileInfo parentFolderInfo = this.baseMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getId, parentId) + .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)); + + String codePathByDbPath = commonService.getCodePathByDbPath(parentFolderInfo.getFilePath()); + String fileCode = commonService.createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, newEdFileInfo.getFileTime()); + newEdFileInfo.setParentId(parentId) + .setFileCode(fileCode) + .setFileName(mainName) + .setFileType(suffix) + .setFileVersion(FILE_START_VERSION) + .setFileSize(file.getSize()) + .setFilePath(parentFolderInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId()) + .setDataType(EleDataTypeEnum.FILE.code) + .setDataStatus(PublishEnum.PUBLISHED.getCode()) + .setEffectFlag(EffectFlagEnum.EFFECT.code) + .setFileCode(fileCode) + .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code) + .setPrjDir(false); + this.saveOrUpdate(newEdFileInfo); + String fileDestPath = commonService.getFileSysPath(newEdFileInfo.getFilePath()); + fileSystemService.save(file.getInputStream(), fileDestPath); + + // 创建文件关系 + EdFileRelation relation = new EdFileRelation(); + relation.setId1(id); + relation.setId2(newEdFileInfo.getId()); + relation.setRelationship(descrption); + edFileRelationService.createRelation(relation); + } + } catch (Exception e) { + newEdFileInfo.setParentId(parentId) + .setFileName(mainName) + .setFileType(suffix) + .setFileSize(file.getSize()) + .setDataType(EleDataTypeEnum.FILE.code) + .setDataStatus(PublishEnum.PUBLISHED.getCode()) + .setEffectFlag(EffectFlagEnum.NOT_EFFECTIVE.code) + .setSaveStatus(EleDataSaveStatusEnum.FAIL.code) + .setPrjDir(false); + this.saveOrUpdate(newEdFileInfo); + String info = "上传文件失败"; + log.error(info, e); + throw new BizException(-1, info); + } + return ElectromagneticResultUtil.success(true); + } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java index 6fd07ed..9523650 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java @@ -1,8 +1,14 @@ package com.electromagnetic.industry.software.manage.service.serviceimpl; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.EleDataTypeEnum; import com.electromagnetic.industry.software.common.exception.BizException; +import com.electromagnetic.industry.software.common.util.EleCommonUtil; import com.electromagnetic.industry.software.common.util.IdWorker; import com.electromagnetic.industry.software.common.util.UserThreadLocal; import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper; @@ -21,11 +27,15 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; +import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.NAME_VALID_MSG; + @Service public class EdFileRelationServiceImpl extends ServiceImpl implements EdFileRelationService { @Resource EdFileInfoMapper edFileInfoMapper; + @Resource + EdFileInfoServiceImpl edFileInfoService; /** * 创建文件关系 @@ -110,6 +120,31 @@ public class EdFileRelationServiceImpl extends ServiceImpl 0; + } + private List getEdges(String id) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EdFileRelation::getId1, id)