本地上传文件并建立关系

This commit is contained in:
s2042968 2025-01-03 15:38:25 +08:00
parent 061516f82e
commit 62c0545c9a
8 changed files with 187 additions and 4 deletions

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -18,7 +18,7 @@ public class FileSimpleInfoVO {
/**
* 文件编号
*/
private String fileId;
private String fileCode;
/**
* 文件版本

View File

@ -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);
}

View File

@ -25,4 +25,12 @@ public interface EdFileRelationService {
* @return
*/
FileRelationViewVO listRelations (String id);
/**
* 检查文件名是否唯一
* @param parentId
* @param fileName
* @return
*/
Boolean checkNameUnique(String parentId, String fileName);
}

View File

@ -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<EdFileInfoMapper, EdFileI
private Environment environment;
@Resource
private PermissionService permissionService;
@Resource
private EdFileRelationService edFileRelationService;
private String downloadDataDir = "";
private String uploadDataDir = "";
@ -1046,4 +1050,85 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
Arrays.stream(partFiles).forEach(e -> 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);
}
}

View File

@ -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<EdFileRelationMapper, EdFileRelation> implements EdFileRelationService {
@Resource
EdFileInfoMapper edFileInfoMapper;
@Resource
EdFileInfoServiceImpl edFileInfoService;
/**
* 创建文件关系
@ -110,6 +120,31 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
return fileRelationViewVO;
}
/**
* 检查文件名是否唯一
* @param parentId
* @param fileName
* @return
*/
@Override
@Transactional
public Boolean checkNameUnique(String parentId, String fileName) {
EdFileInfo fileInfo = edFileInfoService.getById(parentId);
Assert.isTrue(fileInfo.getDataType().equals(EleDataTypeEnum.FOLDER.code) && !fileInfo.getPrjDir(), "层级目录不允许上传文件");
String mainName = FileUtil.mainName(fileName);
String suffix = FileUtil.getSuffix(fileName);
EdFileInfo newEdFileInfo = new EdFileInfo();
newEdFileInfo.newInit();
// 首先检查是否是同名文件
Assert.isTrue(EleCommonUtil.isFileNameValid(fileName), NAME_VALID_MSG);
Long count = edFileInfoService.count(Wrappers.lambdaQuery(EdFileInfo.class)
.eq(EdFileInfo::getParentId, parentId)
.eq(EdFileInfo::getFileName, mainName)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
.eq(EdFileInfo::getFileType, suffix));
return count > 0;
}
private List<Edge> getEdges(String id) {
LambdaQueryWrapper<EdFileRelation> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(EdFileRelation::getId1, id)