本地上传文件并建立关系
This commit is contained in:
parent
061516f82e
commit
62c0545c9a
|
|
@ -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.resp.ElectromagneticResult;
|
||||||
import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil;
|
import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.models.EdFileRelation;
|
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 com.electromagnetic.industry.software.manage.service.EdFileRelationService;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
|
@ -14,6 +17,8 @@ public class EdFileRelationController {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
EdFileRelationService edFileRelationService;
|
EdFileRelationService edFileRelationService;
|
||||||
|
@Resource
|
||||||
|
EdFileInfoService edFileInfoService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建文件关系
|
* 创建文件关系
|
||||||
|
|
@ -42,4 +47,25 @@ public class EdFileRelationController {
|
||||||
public ElectromagneticResult<?> listRelations (@PathVariable("id") String id) {
|
public ElectromagneticResult<?> listRelations (@PathVariable("id") String id) {
|
||||||
return ElectromagneticResultUtil.success(edFileRelationService.listRelations(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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,10 @@ public class PermissionController {
|
||||||
private PermissionService permissionService;
|
private PermissionService permissionService;
|
||||||
|
|
||||||
@ApiOperation(value = "查询当前用户在当前目录的功能权限", notes = "")
|
@ApiOperation(value = "查询当前用户在当前目录的功能权限", notes = "")
|
||||||
@GetMapping(value = "/{fileId}")
|
@GetMapping(value = "/{id}")
|
||||||
public ElectromagneticResult<?> getUserPermission(@PathVariable("fileId") String fileId) {
|
public ElectromagneticResult<?> getUserPermission(@PathVariable("id") String id) {
|
||||||
String userId = UserThreadLocal.getUserId();
|
String userId = UserThreadLocal.getUserId();
|
||||||
return ElectromagneticResultUtil.success(permissionService.getUserPermission(userId, fileId));
|
return ElectromagneticResultUtil.success(permissionService.getUserPermission(userId, id));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -18,7 +18,7 @@ public class FileSimpleInfoVO {
|
||||||
/**
|
/**
|
||||||
* 文件编号
|
* 文件编号
|
||||||
*/
|
*/
|
||||||
private String fileId;
|
private String fileCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件版本
|
* 文件版本
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import com.electromagnetic.industry.software.manage.pojo.req.FileInfoQueryDTO;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.req.UpdateFileInfoDTO;
|
import com.electromagnetic.industry.software.manage.pojo.req.UpdateFileInfoDTO;
|
||||||
import org.springframework.core.io.InputStreamResource;
|
import org.springframework.core.io.InputStreamResource;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
@ -150,4 +151,15 @@ public interface EdFileInfoService {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
ElectromagneticResult<?> detail(String id);
|
ElectromagneticResult<?> detail(String id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件上传并建立关系
|
||||||
|
*
|
||||||
|
* @param parentId
|
||||||
|
* @param id 主文件Id
|
||||||
|
* @param file
|
||||||
|
* @param descrption 关系描述
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ElectromagneticResult<?> uploadFileAndRelation(String parentId, String id, MultipartFile file, String descrption);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,4 +25,12 @@ public interface EdFileRelationService {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
FileRelationViewVO listRelations (String id);
|
FileRelationViewVO listRelations (String id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查文件名是否唯一
|
||||||
|
* @param parentId
|
||||||
|
* @param fileName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean checkNameUnique(String parentId, String fileName);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
|
||||||
import com.electromagnetic.industry.software.common.util.*;
|
import com.electromagnetic.industry.software.common.util.*;
|
||||||
import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper;
|
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.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.FileInfoVO;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.other.UploadRecordDTO;
|
import com.electromagnetic.industry.software.manage.pojo.other.UploadRecordDTO;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.req.*;
|
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.FileVersionViewVO;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.resp.UploadRecordVO;
|
import com.electromagnetic.industry.software.manage.pojo.resp.UploadRecordVO;
|
||||||
import com.electromagnetic.industry.software.manage.service.EdFileInfoService;
|
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.FileSystemService;
|
||||||
import com.electromagnetic.industry.software.manage.service.PermissionService;
|
import com.electromagnetic.industry.software.manage.service.PermissionService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
@ -69,6 +71,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
private Environment environment;
|
private Environment environment;
|
||||||
@Resource
|
@Resource
|
||||||
private PermissionService permissionService;
|
private PermissionService permissionService;
|
||||||
|
@Resource
|
||||||
|
private EdFileRelationService edFileRelationService;
|
||||||
|
|
||||||
private String downloadDataDir = "";
|
private String downloadDataDir = "";
|
||||||
private String uploadDataDir = "";
|
private String uploadDataDir = "";
|
||||||
|
|
@ -1046,4 +1050,85 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
Arrays.stream(partFiles).forEach(e -> FileUtil.del(e.getAbsolutePath()));
|
Arrays.stream(partFiles).forEach(e -> FileUtil.del(e.getAbsolutePath()));
|
||||||
return destColibPath;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,14 @@
|
||||||
package com.electromagnetic.industry.software.manage.service.serviceimpl;
|
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.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
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.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.IdWorker;
|
||||||
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
|
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
|
||||||
import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper;
|
import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper;
|
||||||
|
|
@ -21,11 +27,15 @@ import org.springframework.transaction.annotation.Transactional;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.NAME_VALID_MSG;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper, EdFileRelation> implements EdFileRelationService {
|
public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper, EdFileRelation> implements EdFileRelationService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
EdFileInfoMapper edFileInfoMapper;
|
EdFileInfoMapper edFileInfoMapper;
|
||||||
|
@Resource
|
||||||
|
EdFileInfoServiceImpl edFileInfoService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建文件关系
|
* 创建文件关系
|
||||||
|
|
@ -110,6 +120,31 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
||||||
return fileRelationViewVO;
|
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) {
|
private List<Edge> getEdges(String id) {
|
||||||
LambdaQueryWrapper<EdFileRelation> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<EdFileRelation> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
queryWrapper.eq(EdFileRelation::getId1, id)
|
queryWrapper.eq(EdFileRelation::getId1, id)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue