Compare commits

..

No commits in common. "71e99ed8e59c0a6492b4f6c4f42bd94e7d74692b" and "dbbc7e8699f6f33ade602cf2173fd5f57dd04333" have entirely different histories.

3 changed files with 26 additions and 38 deletions

View File

@ -37,7 +37,7 @@ public class EdFileInfoController {
return edFileInfoService.delete(id); return edFileInfoService.delete(id);
} }
@RequestMapping("info") @RequestMapping("getFileInfoList")
public ElectromagneticResult<?> info(@RequestBody FileInfoQueryDTO fileInfoQueryDTO) { public ElectromagneticResult<?> info(@RequestBody FileInfoQueryDTO fileInfoQueryDTO) {
return edFileInfoService.queryEdFileInfo(fileInfoQueryDTO); return edFileInfoService.queryEdFileInfo(fileInfoQueryDTO);
} }
@ -84,8 +84,8 @@ public class EdFileInfoController {
} }
@RequestMapping("batchExport") @RequestMapping("batchExport")
public ResponseEntity<InputStreamResource> batchExport(@RequestParam String fileIds, HttpServletResponse response) throws IOException { public ResponseEntity<InputStreamResource> batchExport(@RequestParam String dataIdArr, HttpServletResponse response) throws IOException {
return edFileInfoService.batchExport(fileIds, response); return edFileInfoService.batchExport(dataIdArr, response);
} }
@RequestMapping(value = "/mergeChunks", method = RequestMethod.GET) @RequestMapping(value = "/mergeChunks", method = RequestMethod.GET)
@ -110,7 +110,7 @@ public class EdFileInfoController {
return edFileInfoService.uploadRecord(pageNum, pageSize); return edFileInfoService.uploadRecord(pageNum, pageSize);
} }
@RequestMapping(value = "/fileDetail", method = RequestMethod.GET) @RequestMapping(value = "/detail", method = RequestMethod.GET)
public ElectromagneticResult<?> detail(@RequestParam String id) { public ElectromagneticResult<?> detail(@RequestParam String id) {
return edFileInfoService.detail(id); return edFileInfoService.detail(id);
} }

View File

@ -134,7 +134,7 @@ public class CommonService {
} }
public String createFileCode(String parentId, String fileType, int version, String timeStr) { public String createFileCode(String parentId, String fileType, int version, String timeStr) {
return parentId + FILE_TYPE_ENUM.getOrDefault(fileType, "00") + version + timeStr; return parentId + FILE_TYPE_ENUM.get(fileType) + version + timeStr;
} }
public List<EdFileInfo> selectAllAdminFolder(String id) { public List<EdFileInfo> selectAllAdminFolder(String id) {

View File

@ -3,6 +3,7 @@ package com.electromagnetic.industry.software.manage.service.serviceimpl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64; import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
@ -23,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.*;
@ -34,8 +36,8 @@ 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 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.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.InputStreamResource;
@ -70,9 +72,6 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
private Environment environment; private Environment environment;
@Resource @Resource
private PermissionService permissionService; private PermissionService permissionService;
@Resource
@Lazy
private EdFileRelationService edFileRelationService;
private String downloadDataDir = ""; private String downloadDataDir = "";
private String uploadDataDir = ""; private String uploadDataDir = "";
@ -176,7 +175,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
res.add(fileProjectVO); res.add(fileProjectVO);
}); });
res.sort(Comparator.comparing(FileProjectVO::getSort)); res.sort(Comparator.comparing(FileProjectVO::getSort));
return ElectromagneticResultUtil.success(res); return ElectromagneticResultUtil.success(commonService.queryAllPrjInfo(false));
} }
/** /**
@ -216,12 +215,11 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
String fileSysPath = commonService.getFileSysPath(fileInfo.getFilePath()); String fileSysPath = commonService.getFileSysPath(fileInfo.getFilePath());
Assert.isTrue(FileUtil.exist(fileSysPath), "下载文件不存在。"); Assert.isTrue(FileUtil.exist(fileSysPath), "下载文件不存在。");
FileSystemResource fileSystemResource = new FileSystemResource(fileSysPath); FileSystemResource fileSystemResource = new FileSystemResource(fileSysPath);
String fileName = fileSystemResource.getFilename();
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Pragma", "no-cache"); headers.add("Pragma", "no-cache");
headers.add("Expires", "0"); headers.add("Expires", "0");
fileName = Base64.encode(fileName.substring(0, fileName.lastIndexOf("."))); String fileName = Base64.encode(fileSystemResource.getFilename());
response.setHeader("content-disposition", "attachment;filename=" + fileName); response.setHeader("content-disposition", "attachment;filename=" + fileName);
// 构建响应实体(可以返回<byte[]或Resource返回类型取决body入参类型) // 构建响应实体(可以返回<byte[]或Resource返回类型取决body入参类型)
return ResponseEntity return ResponseEntity
@ -263,21 +261,13 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
} else { } else {
queryWrapper.eq(EdFileInfo::getDataType, EleDataTypeEnum.FILE.code); queryWrapper.eq(EdFileInfo::getDataType, EleDataTypeEnum.FILE.code);
} }
List<EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.<EdFileInfo>lambdaQuery() long count = this.baseMapper.selectCount(Wrappers.<EdFileInfo>lambdaQuery()
.select(EdFileInfo::getId, EdFileInfo::getFileName) .select(EdFileInfo::getFileName)
.eq(EdFileInfo::getParentId, parentId) .eq(EdFileInfo::getParentId, parentId)
.eq(EdFileInfo::getFileName, updateFileInfoDTO.getFileName()) .eq(EdFileInfo::getFileName, updateFileInfoDTO.getFileName())
.eq(EdFileInfo::getFileType, fileInfo.getFileType()) .eq(EdFileInfo::getFileType, fileInfo.getFileType())
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)); .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
Map<String, EdFileInfo> map = edFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); Assert.isTrue(count == 0, "文件名已存在");
if (map.size() == 1) {
if (!map.values().iterator().next().getId().equals(updateFileInfoDTO.getId())) {
throw new BizException(-1, "文件名已经存在");
}
} else if (map.size() > 1) {
log.warn("数据库中存在了两份同名同后缀的文件");
throw new BizException(-1, "文件名已经存在");
}
String srcFilePath = commonService.getFileSysPath(fileInfo.getFilePath()); String srcFilePath = commonService.getFileSysPath(fileInfo.getFilePath());
Date now = new Date(); Date now = new Date();
@ -573,14 +563,13 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
@Override @Override
public ResponseEntity<InputStreamResource> batchExport(String dataIdArr, HttpServletResponse response) throws IOException { public ResponseEntity<InputStreamResource> batchExport(String dataIdArr, HttpServletResponse response) throws IOException {
String[] ids = dataIdArr.split(","); String[] ids = dataIdArr.split(",");
Map<String, EdFileInfo> maps = new HashMap<>(); List<EdFileInfo> resFiles = new ArrayList<>();
for (String id : ids) { for (String id : ids) {
Map<String, EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) List<EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
.like(EdFileInfo::getFilePath, MYSQL_FILE_PATH_SPLIT + id + MYSQL_FILE_PATH_SPLIT) .like(EdFileInfo::getFilePath, MYSQL_FILE_PATH_SPLIT + id + MYSQL_FILE_PATH_SPLIT)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)).stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e)); .eq(EdFileInfo::getEffectFlag, true));
maps.putAll(edFileInfos); resFiles.addAll(edFileInfos);
} }
List<EdFileInfo> resFiles = new ArrayList<>(maps.values());
String prjId = resFiles.get(0).getFilePath().split(MYSQL_FILE_PATH_SPLIT)[0]; String prjId = resFiles.get(0).getFilePath().split(MYSQL_FILE_PATH_SPLIT)[0];
List<EdFileInfo> prjFolders = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) List<EdFileInfo> prjFolders = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
.likeRight(EdFileInfo::getFilePath, prjId + MYSQL_FILE_PATH_SPLIT) .likeRight(EdFileInfo::getFilePath, prjId + MYSQL_FILE_PATH_SPLIT)
@ -745,7 +734,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
// 获取原文件mysql模型 // 获取原文件mysql模型
EdFileInfo srcFileInfo = this.baseMapper.selectById(id); EdFileInfo srcFileInfo = this.baseMapper.selectById(id);
String srcFilePath = commonService.getFileSysPath(srcFileInfo.getFilePath()); String srcFileDbPath = srcFileInfo.getFilePath();
String fileCode = srcFileInfo.getFileCode();
// 判断目标路径下是否有同名文件如果所有的同名文件1如果所有文件都已经被作废则该文件为新文件版本号从100开始2如果有没有被作废的文件则冲突处理方式按---1-跳过冲突文件 2-做版本更新 3-重命名文件名加"_1" // 判断目标路径下是否有同名文件如果所有的同名文件1如果所有文件都已经被作废则该文件为新文件版本号从100开始2如果有没有被作废的文件则冲突处理方式按---1-跳过冲突文件 2-做版本更新 3-重命名文件名加"_1"
long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class) long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class)
.eq(EdFileInfo::getParentId, targetFolderId) .eq(EdFileInfo::getParentId, targetFolderId)
@ -767,7 +757,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
.setFileCode(newFileCode); .setFileCode(newFileCode);
this.baseMapper.updateById(srcFileInfo); this.baseMapper.updateById(srcFileInfo);
// 文件系统移动文件 // 文件系统移动文件
String destFilePath = commonService.getFileSysPath(srcFileInfo.getFilePath()); String srcFilePath = commonService.getFileSysPath(srcFileDbPath);
String destFilePath = commonService.getFileSysPath(destFolderInfo.getFilePath());
fileSystemService.moveFile(srcFilePath, destFilePath); fileSystemService.moveFile(srcFilePath, destFilePath);
} else { } else {
return handMoveConflict(targetFolderId, strategy, srcFileInfo, destFolderInfo); return handMoveConflict(targetFolderId, strategy, srcFileInfo, destFolderInfo);
@ -889,8 +880,9 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
LambdaQueryWrapper<EdFileInfo> lambdaQuery = Wrappers.lambdaQuery(EdFileInfo.class) LambdaQueryWrapper<EdFileInfo> lambdaQuery = Wrappers.lambdaQuery(EdFileInfo.class)
.select(EdFileInfo::getId, EdFileInfo::getFileName, EdFileInfo::getSaveStatus, EdFileInfo::getCreatedTime, EdFileInfo::getFileType) .select(EdFileInfo::getId, EdFileInfo::getFileName, EdFileInfo::getSaveStatus, EdFileInfo::getCreatedTime, EdFileInfo::getFileType)
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FILE.code) .eq(EdFileInfo::getDataType, EleDataTypeEnum.FILE.code)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code); .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
for (int i = 0; i < prjIds.size(); i++) { .likeRight(EdFileInfo::getFilePath, prjIds.get(0));
for (int i = 1; i < pageSize; i++) {
lambdaQuery.or().likeRight(EdFileInfo::getFilePath, prjIds.get(i)); lambdaQuery.or().likeRight(EdFileInfo::getFilePath, prjIds.get(i));
} }
Page<EdFileInfo> edFileInfoPage = this.baseMapper.selectPage(new Page<>(pageNum, pageSize), lambdaQuery); Page<EdFileInfo> edFileInfoPage = this.baseMapper.selectPage(new Page<>(pageNum, pageSize), lambdaQuery);
@ -922,11 +914,10 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
if (strategy == 2) { if (strategy == 2) {
// 做版本更新 // 做版本更新
LambdaQueryWrapper<EdFileInfo> queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class) List<EdFileInfo> sameFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
.eq(EdFileInfo::getParentId, targetFolderId) .eq(EdFileInfo::getParentId, targetFolderId)
.eq(EdFileInfo::getFileName, srcFileInfo.getFileName()) .eq(EdFileInfo::getFileName, srcFileInfo.getFileName())
.eq(EdFileInfo::getFileType, srcFileInfo.getFileType()); .eq(EdFileInfo::getFileType, srcFileInfo.getFileType()));
List<EdFileInfo> sameFileInfos = this.baseMapper.selectList(queryWrapper);
Integer maxFileVersion = Collections.max(sameFileInfos, Comparator.comparing(EdFileInfo::getFileVersion)).getFileVersion(); Integer maxFileVersion = Collections.max(sameFileInfos, Comparator.comparing(EdFileInfo::getFileVersion)).getFileVersion();
String newFileDbId = IdWorker.getSnowFlakeIdString(); String newFileDbId = IdWorker.getSnowFlakeIdString();
String fileTime = EleCommonUtil.getNowTimeStr(); String fileTime = EleCommonUtil.getNowTimeStr();
@ -940,9 +931,6 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
.setPreVersion(maxFileVersion) .setPreVersion(maxFileVersion)
.setEffectFlag(EffectFlagEnum.EFFECT.code) .setEffectFlag(EffectFlagEnum.EFFECT.code)
.setFileCode(fileCode); .setFileCode(fileCode);
this.baseMapper.update(null, Wrappers.lambdaUpdate(EdFileInfo.class).eq(EdFileInfo::getParentId, targetFolderId)
.eq(EdFileInfo::getFileName, srcFileInfo.getFileName())
.eq(EdFileInfo::getFileType, srcFileInfo.getFileType()).set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code));
this.baseMapper.insert(destSaveFileInfo); this.baseMapper.insert(destSaveFileInfo);
String srcFilePath = commonService.getFileSysPath(srcFileInfo.getFilePath()); String srcFilePath = commonService.getFileSysPath(srcFileInfo.getFilePath());
String destFilePath = commonService.getFileSysPath(destSaveFileInfo.getFilePath()); String destFilePath = commonService.getFileSysPath(destSaveFileInfo.getFilePath());