This commit is contained in:
s2042968 2025-01-14 11:15:14 +08:00
commit 605ce4ea82
7 changed files with 93 additions and 21 deletions

View File

@ -24,11 +24,13 @@ public class EdFileInfoController {
@Resource
private EdFileInfoService edFileInfoService;
@RequiredPermission(value = FilePermission.VIEW)
@RequestMapping("tree")
public ElectromagneticResult<?> tree() {
return edFileInfoService.tree();
}
@RequiredPermission(value = FilePermission.EDIT)
@RequestMapping("createFolder")
public ElectromagneticResult<?> createFolder(@RequestBody CreateFolderDTO createFolderDTO) {
return edFileInfoService.createFolder(createFolderDTO);
@ -82,21 +84,25 @@ public class EdFileInfoController {
return edFileInfoService.copyFile(id, targetFolderId, strategy);
}
@RequiredPermission(value = FilePermission.VIEW)
@RequestMapping("versionView")
public ElectromagneticResult<?> versionView(@RequestParam String fileId) {
return edFileInfoService.versionView(fileId);
}
@RequiredPermission(value = FilePermission.EDIT)
@RequestMapping("versionBack")
public ElectromagneticResult<?> versionBack(@RequestParam String fileId, @RequestParam int targetVersion) {
return edFileInfoService.versionBack(fileId, targetVersion);
}
@RequiredPermission(value = FilePermission.EXPORT)
@RequestMapping("batchExport")
public ResponseEntity<InputStreamResource> batchExport(@RequestParam String fileIds, HttpServletResponse response) throws IOException {
return edFileInfoService.batchExport(fileIds, response);
}
@RequiredPermission(value = FilePermission.IMPORT)
@RequestMapping(value = "/mergeChunks", method = RequestMethod.GET)
public ElectromagneticResult<?> mergeChunks(@RequestParam String identifier,
@RequestParam String fileName,
@ -104,23 +110,33 @@ public class EdFileInfoController {
return edFileInfoService.mergeChunks(identifier, fileName, totalChunks);
}
@RequiredPermission(value = FilePermission.IMPORT)
@RequestMapping(value = "/batchImport", method = RequestMethod.POST)
public ElectromagneticResult<?> batchImport(FileChunkDTO fileChunkDTO) {
return edFileInfoService.batchImport(fileChunkDTO);
}
@RequiredPermission(value = FilePermission.IMPORT)
@RequestMapping(value = "/batchImport", method = RequestMethod.GET)
public ElectromagneticResult<?> checkChunkExist(FileChunkDTO fileChunkDTO) {
return edFileInfoService.checkChunkExist(fileChunkDTO);
}
@RequiredPermission(value = FilePermission.VIEW)
@RequestMapping(value = "/uploadRecord", method = RequestMethod.GET)
public ElectromagneticResult<?> uploadRecord(@RequestParam int pageNum, @RequestParam int pageSize) {
return edFileInfoService.uploadRecord(pageNum, pageSize);
}
@RequiredPermission(value = FilePermission.VIEW)
@RequestMapping(value = "/fileDetail", method = RequestMethod.GET)
public ElectromagneticResult<?> detail(@RequestParam String id) {
return edFileInfoService.detail(id);
}
@RequiredPermission(value = FilePermission.VIEW)
@RequestMapping(value = "/queryChildFolder", method = RequestMethod.GET)
public ElectromagneticResult<?> queryChildFolder(@RequestParam String parentId) {
return edFileInfoService.queryChildFolder(parentId);
}
}

View File

@ -40,4 +40,5 @@ public class FileInfoVO {
private String fileCode;
private String createdBy;
}

View File

@ -0,0 +1,9 @@
package com.electromagnetic.industry.software.manage.pojo.resp;
import lombok.Data;
@Data
public class ChildFolderVO {
private String id;
private String fileName;
}

View File

@ -157,4 +157,11 @@ public interface EdFileInfoService {
* 获取文件的层级Id
*/
String getCategoryId (String id);
/**
* 根据父id查询其下自定义的文件夹
* @param parentId
* @return
*/
ElectromagneticResult<?> queryChildFolder(String parentId);
}

View File

@ -232,7 +232,9 @@ public class CommonService {
for (String id : ids) {
List<EdFileInfo> edFileInfos = selectAllAdminFolder(id, isAdminQuery, prjIds);
if (!isAdminQuery) {
edFileInfos = edFileInfos.stream().filter(e -> e.getDataStatus().equals(EleDataStatusEnum.PUBLISHED.code)).collect(Collectors.toList());
edFileInfos = edFileInfos.stream().filter(e -> e.getDataStatus().equals(EleDataStatusEnum.PUBLISHED.code)
|| e.getDataStatus().equals(EleDataStatusEnum.DELETED.code))
.collect(Collectors.toList());
} else {
edFileInfos = edFileInfos.stream().filter(e -> !e.getDataStatus().equals(EleDataStatusEnum.DELETED.code)).collect(Collectors.toList());
}

View File

@ -23,14 +23,13 @@ import com.electromagnetic.industry.software.common.exception.BizException;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.common.util.*;
import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper;
import com.electromagnetic.industry.software.manage.mapper.UserMapper;
import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo;
import com.electromagnetic.industry.software.manage.pojo.models.User;
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.*;
import com.electromagnetic.industry.software.manage.pojo.resp.FileInfoQueryPageVO;
import com.electromagnetic.industry.software.manage.pojo.resp.FileProjectVO;
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.*;
import com.electromagnetic.industry.software.manage.service.EdFileInfoService;
import com.electromagnetic.industry.software.manage.service.FileSystemService;
import com.electromagnetic.industry.software.manage.service.PermissionService;
@ -69,6 +68,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
private Environment environment;
@Resource
private PermissionService permissionService;
@Resource
private UserMapper userMapper;
private String downloadDataDir = "";
private String uploadDataDir = "";
@ -366,16 +367,14 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
String currentUserId = UserThreadLocal.getUserId();
String identifier = fileChunkDTO.getIdentifier();
// 首先检查该分片有没被上传如果有则禁止上传
String destPath = uploadDataDir + File.separator + currentUserId + File.separator + identifier + fileChunkDTO.getChunkNumber() + UPLOAD_FILE_CHUNK_SUFFIX;
String destPath = uploadDataDir + File.separator + currentUserId + File.separator + identifier + File.separator + fileChunkDTO.getChunkNumber() + UPLOAD_FILE_CHUNK_SUFFIX;
boolean exist = FileUtil.exist(destPath);
if (exist) {
return ElectromagneticResultUtil.fail("-1", "文件已经存在,请勿重复上传");
}
try (
InputStream inputStream = fileChunkDTO.getFile().getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(destPath);
) {
IoUtil.copy(inputStream, fileOutputStream);
try {
FileUtil.writeFromStream(fileChunkDTO.getFile().getInputStream(), destPath);
} catch (IOException ioException) {
log.error("上传文件失败...", ioException);
throw new BizException(-1, "上传文件失败");
@ -416,7 +415,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
String uuid = IdUtil.fastSimpleUUID();
String tmpDir = uploadDataDir + currentUserId + File.separator + uuid + File.separator;
ZipUtil.unzip(zipDirPath, tmpDir);
update2Database(zipDirPath);
update2Database(tmpDir);
fileSystemService.deleteFile(zipDirPath, destColibPath);
return ElectromagneticResultUtil.success(true);
}
@ -480,11 +479,30 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
List<EdFileInfo> deepCopyV = JSONUtil.toList(JSONUtil.toJsonStr(v), EdFileInfo.class);
List<EdFileInfo> deepCopyDb = JSONUtil.toList(JSONUtil.toJsonStr(dbFileInfos), EdFileInfo.class);
EdFileInfo importEffectFile = deepCopyV.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst().get();
EdFileInfo dbEffectFile = deepCopyDb.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst().get();
// 导入的文件在线下已经被废除了
Optional<EdFileInfo> first = deepCopyV.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst();
if (!first.isPresent()) {
continue;
}
EdFileInfo importEffectFile = first.get();
Optional<EdFileInfo> first1 = deepCopyDb.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).findFirst();
EdFileInfo dbEffectFile = null;
if (!first1.isPresent()) {
// 线下存在线上不存在被废除了此时根据更新时间判断如果线上的比线下的新则以线上的为准
EdFileInfo fileInfo = deepCopyDb.stream().max(Comparator.comparing(EdFileInfo::getUpdatedTime)).get();
if (fileInfo.getUpdatedTime().after(importEffectFile.getUpdatedTime())) {
continue;
}
} else {
dbEffectFile = first1.get();
}
// 如果导入的时间比数据库的时间新则将导入的置为effect
String effectId = importEffectFile.getUpdatedTime().after(dbEffectFile.getUpdatedTime()) ? importEffectFile.getId() : dbEffectFile.getId();
String effectId;
if (ObjUtil.isNull(dbEffectFile)) {
effectId = importEffectFile.getId();
} else {
effectId = importEffectFile.getUpdatedTime().after(dbEffectFile.getUpdatedTime())? importEffectFile.getId() : dbEffectFile.getId();
}
Map<String, String> importVersionRelation = getVersionRelation(deepCopyV);
Map<String, String> dbVersionRelation = getVersionRelation(deepCopyDb);
@ -600,7 +618,6 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
String userDownloadDataDir = downloadDataDir + File.separator + UserThreadLocal.getUserId();
String[] ids = dataIdArr.split(",");
Map<String, Boolean> map = permissionService.filterExportIds(ids);
log.info("map is -->" + map);
Assert.isTrue(!map.containsValue(Boolean.FALSE), "有未授权的层级目录,禁止导出");
Map<String, EdFileInfo> maps = new HashMap<>();
for (String id : ids) {
@ -664,7 +681,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
FileSystemResource fileSystemResource = new FileSystemResource(file);
HttpHeaders headers = new HttpHeaders();
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
String fileName = Base64.encode(fileSystemResource.getFilename());
String fileName = Base64.encode(EleCommonUtil.getNowTimeStr() + "_" + fileSystemResource.getFilename());
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
response.setHeader("content-disposition", "attachment;filename=" + fileName);
@ -738,7 +755,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
String fileDestPath = commonService.getFileSysPath(newEdFileInfo.getFilePath());
FileUtil.writeFromStream(file.getInputStream(), fileDestPath);
EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes()));
fileSystemService.save(FileUtil.getInputStream(fileDestPath), fileDestPath);
// fileSystemService.save(FileUtil.getInputStream(fileDestPath), fileDestPath); // 这里会导致文件大小为0考虑到当前的系统为OS文件系统暂不处理
}
} catch (Exception e) {
newEdFileInfo.setParentId(parentId)
@ -961,6 +978,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
@Override
public ElectromagneticResult<?> detail(String id) {
EdFileInfo fileInfo = this.baseMapper.selectById(id);
User singleUser = userMapper.getSingleUser(fileInfo.getCreatedBy());
fileInfo.setCreatedBy(singleUser.getUserName());
FileInfoVO fileInfoVO = BeanUtil.copyProperties(fileInfo, FileInfoVO.class);
return ElectromagneticResultUtil.success(fileInfoVO);
}
@ -1105,7 +1124,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
private String doSysFileMerge(String identifier, String fileName, Integer totalChunks) {
String currentUserId = UserThreadLocal.getUserId();
for (int i = 1; i <= totalChunks; i++) {
String tmpPath = uploadDataDir + File.separator + currentUserId + identifier + File.separator + i + UPLOAD_FILE_CHUNK_SUFFIX;
String tmpPath = uploadDataDir + File.separator + currentUserId + File.separator + identifier + File.separator + i + UPLOAD_FILE_CHUNK_SUFFIX;
if (!FileUtil.exist(new File(tmpPath))) {
String info = StrFormatter.format("第{}个分片没有上传完成,请上传完成后再合并。", i);
log.error(info);
@ -1147,4 +1166,22 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
return file.getFileCode().substring(0, 6);
}
/**
* 根据父id查询其下自定义的文件夹
*
* @param parentId
* @return
*/
@Override
public ElectromagneticResult<?> queryChildFolder(String parentId) {
List<EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).select(EdFileInfo::getId, EdFileInfo::getFileName)
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code)
.eq(EdFileInfo::getPrjDir, Boolean.FALSE)
.eq(EdFileInfo::getParentId, parentId)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
List<ChildFolderVO> res = BeanUtil.copyToList(edFileInfos, ChildFolderVO.class);
return ElectromagneticResultUtil.success(res);
}
}

View File

@ -234,7 +234,7 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
String fileDestPath = commonService.getFileSysPath(newEdFileInfo.getFilePath());
FileUtil.writeFromStream(file.getInputStream(), fileDestPath);
EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes()));
fileSystemService.save(FileUtil.getInputStream(fileDestPath), fileDestPath);
// fileSystemService.save(FileUtil.getInputStream(fileDestPath), fileDestPath); // 这里会导致文件大小为0考虑到当前的系统为OS文件系统暂不处理
// 创建文件关系
EdFileRelation relation = new EdFileRelation();