解决已知问题。

This commit is contained in:
chenxudong 2025-03-03 15:42:20 +08:00
parent 5cb52e3252
commit 68724883a7
4 changed files with 161 additions and 29 deletions

View File

@ -0,0 +1,97 @@
package com.electromagnetic.industry.software.manage.controller;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.electromagnetic.industry.software.common.annotations.UserOperation;
import com.electromagnetic.industry.software.common.enums.DataOwnEnum;
import com.electromagnetic.industry.software.common.enums.UserOperationModuleEnum;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import com.electromagnetic.industry.software.manage.pojo.models.EdFileRelation;
import com.electromagnetic.industry.software.manage.pojo.req.CheckNameUniqueRequest;
import com.electromagnetic.industry.software.manage.pojo.req.UpdateRelationDTO;
import com.electromagnetic.industry.software.manage.service.serviceimpl.EdFileRelationServiceImpl;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
@RestController
@RequestMapping("/data/ed/user/relation")
public class UserEdFileRelationController {
@Resource
EdFileRelationServiceImpl edFileRelationService;
/**
* 创建文件关系
*
* @param relation
* @return
*/
@RequestMapping(value = "/create", method = RequestMethod.POST)
@UserOperation(value="创建了文件关系", modelName = UserOperationModuleEnum.DATABASE)
public ElectromagneticResult<?> createRelation(@RequestBody EdFileRelation relation) {
return ElectromagneticResultUtil.success(edFileRelationService.createRelation(relation));
}
/**
* 更新文件关系
*
* @param updateRelation
* @return
*/
@RequestMapping(value = "/update", method = RequestMethod.POST)
@UserOperation(value="更新了文件关系", modelName = UserOperationModuleEnum.DATABASE)
public ElectromagneticResult<?> updateRelation(@RequestBody UpdateRelationDTO updateRelation) {
LambdaUpdateWrapper<EdFileRelation> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(EdFileRelation::getId, updateRelation.getRelationId()).set(EdFileRelation::getRelationship, updateRelation.getRelationship());
boolean isUpdated = edFileRelationService.update(wrapper);
if (isUpdated) {
UserThreadLocal.setSuccessInfo("", updateRelation.getRelationId(), "更新了文件关系");
}
return ElectromagneticResultUtil.success(isUpdated);
}
/**
* 取消文件关系
*
* @param relationId 关系主键id
* @return
*/
@RequestMapping(value = "/cancel/{relationId}", method = RequestMethod.GET)
@UserOperation(value="取消了文件关系", modelName = UserOperationModuleEnum.DATABASE)
public ElectromagneticResult<?> cancelRelation(@PathVariable("relationId") String relationId) {
return ElectromagneticResultUtil.success(edFileRelationService.cancelRelation(relationId));
}
/**
* 展示文件关系
*/
@RequestMapping(value = "listRelations/{id}", method = RequestMethod.GET)
@UserOperation(value="查看了文件关系", modelName = UserOperationModuleEnum.DATABASE)
public ElectromagneticResult<?> listRelations(@PathVariable("id") String id) {
return ElectromagneticResultUtil.success(edFileRelationService.listRelations(id));
}
/**
* 检验文件名是否唯一
*/
@RequestMapping(value = "/checkFileNameExist", method = RequestMethod.POST)
@UserOperation(value="校验文件名唯一性", modelName = UserOperationModuleEnum.DATABASE)
public ElectromagneticResult<?> checkFileNameExist(@RequestBody CheckNameUniqueRequest checkNameUniqueRequest) {
return ElectromagneticResultUtil.success(edFileRelationService.checkNameExist(checkNameUniqueRequest));
}
/**
* 本地上传并建立关系
*/
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@UserOperation(value="上传了文件并创建了文件关系", modelName = UserOperationModuleEnum.DATABASE)
public ElectromagneticResult<?> uploadRelation(@RequestParam("parentId") String parentId,
@RequestParam("file") MultipartFile file,
@RequestParam("description") String description,
@RequestParam("id") String id) {
return ElectromagneticResultUtil.success(edFileRelationService.uploadFileAndRelation(parentId, id, file, description, DataOwnEnum.COMMON.code));
}
}

View File

@ -232,6 +232,7 @@ public class CommonService {
queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code); queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code);
} else if (dataOwnCode == DataOwnEnum.USER_FILE.code) { } else if (dataOwnCode == DataOwnEnum.USER_FILE.code) {
queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code); queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code);
queryWrapper.eq(EdFileInfo::getCreatedBy, UserThreadLocal.getUserId());
} }
if (dataOwnCode == DataOwnEnum.SYS_PRJ.code || dataOwnCode == DataOwnEnum.USER_PRJ.code) { if (dataOwnCode == DataOwnEnum.SYS_PRJ.code || dataOwnCode == DataOwnEnum.USER_PRJ.code) {

View File

@ -76,6 +76,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
@Resource @Resource
private ElePropertyConfig elePropertyConfig; private ElePropertyConfig elePropertyConfig;
/** /**
* 查询文件列表 * 查询文件列表
* *
@ -87,13 +88,14 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
String parentId = pars.getParentId(); String parentId = pars.getParentId();
List<String> accessibleTree = permissionService.getAccessibleTree(); List<String> accessibleTree = permissionService.getAccessibleTree();
if (!accessibleTree.contains(parentId) && parentId.length() == PRJ_ID_LENGTH) { if ((dataOwnCode != DataOwnEnum.USER_FILE.code) && (!accessibleTree.contains(parentId) && parentId.length() == PRJ_ID_LENGTH)) {
throw new PermissionDeniedException(); throw new PermissionDeniedException();
} }
LambdaQueryWrapper<EdFileInfo> queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class) LambdaQueryWrapper<EdFileInfo> queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
.select(EdFileInfo.class, file -> !file.getColumn().equals("file_content")) .select(EdFileInfo.class, file -> !file.getColumn().equals("file_content"))
.select()
.eq(EdFileInfo::getSaveStatus, EleDataSaveStatusEnum.SUCCESS.code) .eq(EdFileInfo::getSaveStatus, EleDataSaveStatusEnum.SUCCESS.code)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
.eq(EdFileInfo::getParentId, pars.getParentId()) .eq(EdFileInfo::getParentId, pars.getParentId())
@ -123,6 +125,10 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
.orderByAsc(ObjUtil.equals(pars.getFileTypeSort(), 0), EdFileInfo::getSort) .orderByAsc(ObjUtil.equals(pars.getFileTypeSort(), 0), EdFileInfo::getSort)
.orderByDesc(ObjUtil.equals(pars.getFileTypeSort(), 1), EdFileInfo::getSort); .orderByDesc(ObjUtil.equals(pars.getFileTypeSort(), 1), EdFileInfo::getSort);
if (dataOwnCode == DataOwnEnum.USER_FILE.code) {
queryWrapper.eq(EdFileInfo::getCreatedBy, UserThreadLocal.getUserId());
}
if (StrUtil.isNotEmpty(pars.getKeyword())) { if (StrUtil.isNotEmpty(pars.getKeyword())) {
queryWrapper.and(qr -> qr.like(EdFileInfo::getFileName, pars.getKeyword()) queryWrapper.and(qr -> qr.like(EdFileInfo::getFileName, pars.getKeyword())
.or() .or()
@ -161,10 +167,22 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
*/ */
@Override @Override
public ElectromagneticResult<?> tree(int dataOwnCode) { public ElectromagneticResult<?> tree(int dataOwnCode) {
List<String> prjIds = permissionService.getAccessibleTree();
List<String> prjIds;
if (dataOwnCode != DataOwnEnum.USER_FILE.code) {
prjIds = permissionService.getAccessibleTree();
if (CollUtil.isEmpty(prjIds) && dataOwnCode != DataOwnEnum.USER_FILE.code ) { if (CollUtil.isEmpty(prjIds) && dataOwnCode != DataOwnEnum.USER_FILE.code ) {
return ElectromagneticResultUtil.success(new ArrayList<>()); return ElectromagneticResultUtil.success(new ArrayList<>());
} }
} else {
prjIds = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
.eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code)
.eq(EdFileInfo::getCreatedBy, UserThreadLocal.getUserId())
.eq(EdFileInfo::getParentId, PRJ_PARENT_ID)).stream().map(EdFileInfo::getId).collect(Collectors.toList());
}
List<String> strings = commonService.queryAllPrjInfo(prjIds, dataOwnCode); List<String> strings = commonService.queryAllPrjInfo(prjIds, dataOwnCode);
List<FileProjectVO> res = new ArrayList<>(); List<FileProjectVO> res = new ArrayList<>();
strings.forEach(e -> { strings.forEach(e -> {
@ -716,11 +734,16 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
Assert.isTrue(!file.isEmpty(), StrFormatter.format("文件 {} 为空,文件上传到 {} 失败,同名同后缀的处理方式为 {}", fileName, destPath, strategyStr)); Assert.isTrue(!file.isEmpty(), StrFormatter.format("文件 {} 为空,文件上传到 {} 失败,同名同后缀的处理方式为 {}", fileName, destPath, strategyStr));
Assert.isTrue(EleCommonUtil.isFileNameValid(file.getOriginalFilename()), StrFormatter.format("文件 {} {},上传到 {} 失败,同名同后缀的处理方式为 {}", fileName, NAME_VALID_MSG, destPath, strategyStr)); Assert.isTrue(EleCommonUtil.isFileNameValid(file.getOriginalFilename()), StrFormatter.format("文件 {} {},上传到 {} 失败,同名同后缀的处理方式为 {}", fileName, NAME_VALID_MSG, destPath, strategyStr));
// 查找下一层看是否存在顶级定义相关文件如果存在则该层属于管理员层级定义的不允许上传文件 // 查找下一层看是否存在顶级定义相关文件如果存在则该层属于管理员层级定义的不允许上传文件
long dirCount = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class) LambdaQueryWrapper<EdFileInfo> queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
.eq(EdFileInfo::getParentId, parentId) .eq(EdFileInfo::getParentId, parentId)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
.eq(EdFileInfo::getDataOwn, dataOwnCode) .eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code);
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code)); if (dataOwnCode == DataOwnEnum.USER_FILE.code) {
queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code);
} else {
queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code);
}
long dirCount = this.baseMapper.selectCount(queryWrapper);
Assert.isTrue(dirCount == 0, "文件 {} 上传到 {} 失败,层级结构不允许上传文件,同名同后缀的处理方式为 {}", fileName, destPath, strategyStr); Assert.isTrue(dirCount == 0, "文件 {} 上传到 {} 失败,层级结构不允许上传文件,同名同后缀的处理方式为 {}", fileName, destPath, strategyStr);
String mainName = FileUtil.mainName(fileName); String mainName = FileUtil.mainName(fileName);
@ -856,7 +879,9 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
throw new BizException(info); throw new BizException(info);
} }
if (strategy == 2) { if (strategy == 1) {
return srcFileInfo;
} else if (strategy == 2) {
// 做版本更新 // 做版本更新
List<EdFileInfo> sameFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) List<EdFileInfo> sameFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
.eq(EdFileInfo::getParentId, targetFolderId) .eq(EdFileInfo::getParentId, targetFolderId)
@ -885,7 +910,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
.set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code) .set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)
.eq(EdFileInfo::getId, fileInfoTmp.getId())); .eq(EdFileInfo::getId, fileInfoTmp.getId()));
return destSaveFileInfo; return destSaveFileInfo;
} else if (strategy == 3) { } else {
// 文件名加_1版本号从100开始 // 文件名加_1版本号从100开始
// 处理MySQL相关逻辑 // 处理MySQL相关逻辑
EdFileInfo newEdFileInfo = BeanUtil.copyProperties(srcFileInfo, EdFileInfo.class); EdFileInfo newEdFileInfo = BeanUtil.copyProperties(srcFileInfo, EdFileInfo.class);
@ -906,7 +931,6 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
this.baseMapper.deleteById(srcFileInfo.getId()); this.baseMapper.deleteById(srcFileInfo.getId());
return newEdFileInfo; return newEdFileInfo;
} }
return null;
} }
/** /**
@ -964,6 +988,15 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
@Override @Override
public ElectromagneticResult<?> uploadRecord(int pageNum, int pageSize, int dataOwnCode) { public ElectromagneticResult<?> uploadRecord(int pageNum, int pageSize, int dataOwnCode) {
LambdaQueryWrapper<EdFileInfo> lambdaQuery = Wrappers.lambdaQuery(EdFileInfo.class)
.select(EdFileInfo::getId, EdFileInfo::getFileName, EdFileInfo::getSaveStatus, EdFileInfo::getCreatedTime, EdFileInfo::getFileType)
.eq(EdFileInfo::getDataOwn, dataOwnCode)
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FILE.code)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code);
if (dataOwnCode == DataOwnEnum.USER_FILE.code) {
lambdaQuery.eq(EdFileInfo::getCreatedBy, UserThreadLocal.getUserId());
} else {
List<String> accessibleIds = permissionService.getAccessibleTree(); List<String> accessibleIds = permissionService.getAccessibleTree();
Set<String> allLeafIds = commonService.selectPrjLeafs(dataOwnCode); Set<String> allLeafIds = commonService.selectPrjLeafs(dataOwnCode);
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
@ -975,16 +1008,14 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
if (CollUtil.isEmpty(list)) { if (CollUtil.isEmpty(list)) {
return ElectromagneticResultUtil.success(new UploadRecordVO(0, new ArrayList<>())); return ElectromagneticResultUtil.success(new UploadRecordVO(0, new ArrayList<>()));
} }
LambdaQueryWrapper<EdFileInfo> lambdaQuery = Wrappers.lambdaQuery(EdFileInfo.class)
.select(EdFileInfo::getId, EdFileInfo::getFileName, EdFileInfo::getSaveStatus, EdFileInfo::getCreatedTime, EdFileInfo::getFileType)
.eq(EdFileInfo::getDataOwn, dataOwnCode)
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FILE.code)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code);
lambdaQuery.or(qr -> { lambdaQuery.or(qr -> {
for (String id : list) { for (String id : list) {
qr.likeRight(EdFileInfo::getFileCode, id); qr.likeRight(EdFileInfo::getFileCode, id);
} }
}); });
}
Page<EdFileInfo> edFileInfoPage = this.baseMapper.selectPage(new Page<>(pageNum, pageSize), lambdaQuery); Page<EdFileInfo> edFileInfoPage = this.baseMapper.selectPage(new Page<>(pageNum, pageSize), lambdaQuery);
long total = edFileInfoPage.getTotal(); long total = edFileInfoPage.getTotal();
List<UploadRecordDTO> uploadRecordDTOS = BeanUtil.copyToList(edFileInfoPage.getRecords(), UploadRecordDTO.class); List<UploadRecordDTO> uploadRecordDTOS = BeanUtil.copyToList(edFileInfoPage.getRecords(), UploadRecordDTO.class);
@ -1015,7 +1046,9 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
log.info(info); log.info(info);
throw new BizException(info); throw new BizException(info);
} }
if (strategy == 1) {
return destFolderInfo;
}
if (strategy == 2) { if (strategy == 2) {
// 做版本更新 // 做版本更新
LambdaQueryWrapper<EdFileInfo> queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class) LambdaQueryWrapper<EdFileInfo> queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
@ -1291,4 +1324,5 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
Assert.notNull(fileInfo, StrFormatter.format("文件不存在ID为{}", id)); Assert.notNull(fileInfo, StrFormatter.format("文件不存在ID为{}", id));
return fileInfo.getDataType().equals(EleDataTypeEnum.FOLDER.code); return fileInfo.getDataType().equals(EleDataTypeEnum.FOLDER.code);
} }
} }

View File

@ -26,8 +26,8 @@ public class UserThreadLocal {
public static String getUserId() { public static String getUserId() {
return "1859514019333836800"; // return "1876888149980930048";
// return userThread.get().getUserId(); return userThread.get().getUserId();
} }
public static String getAdminType() { public static String getAdminType() {