Compare commits
24 Commits
4819e534eb
...
bb6058be9c
| Author | SHA1 | Date |
|---|---|---|
|
|
bb6058be9c | |
|
|
3639983d59 | |
|
|
1f1266bbee | |
|
|
086ec057a0 | |
|
|
3755ce201a | |
|
|
7a55a351cb | |
|
|
4a80dc3753 | |
|
|
1d323e9081 | |
|
|
e34cf51900 | |
|
|
634dd42778 | |
|
|
de63dfe9d6 | |
|
|
c014db1dcf | |
|
|
d0551b3094 | |
|
|
6ec4c66dd2 | |
|
|
61e2254a93 | |
|
|
b4f4e1b193 | |
|
|
957769f2d1 | |
|
|
c0995be7e7 | |
|
|
cb42bae830 | |
|
|
dac0f34565 | |
|
|
c72e25f4b0 | |
|
|
f1671264d1 | |
|
|
4faab3d89b | |
|
|
731b920547 |
|
|
@ -28,39 +28,54 @@ public class FilePermissionCheckAspect {
|
||||||
|
|
||||||
@Around("@annotation(requiredPermission)")
|
@Around("@annotation(requiredPermission)")
|
||||||
public Object requirePermission(ProceedingJoinPoint joinPoint, RequiredPermission requiredPermission) throws Throwable{
|
public Object requirePermission(ProceedingJoinPoint joinPoint, RequiredPermission requiredPermission) throws Throwable{
|
||||||
|
|
||||||
// 获取方法参数
|
|
||||||
Object[] args = joinPoint.getArgs();
|
Object[] args = joinPoint.getArgs();
|
||||||
|
|
||||||
if (args.length > 0) {
|
if (args.length == 0) {
|
||||||
FilePermission filePermission = requiredPermission.value();
|
return joinPoint.proceed();
|
||||||
String userId = UserThreadLocal.getUserId();
|
}
|
||||||
String id = "";
|
|
||||||
|
|
||||||
if (args[0] instanceof String) {
|
FilePermission filePermission = requiredPermission.value();
|
||||||
String childId = args[0].toString();
|
String userId = UserThreadLocal.getUserId();
|
||||||
id = edFileInfoService.getCategoryId(childId);
|
String id = extractId(args[0]); // 提取ID逻辑封装成方法,减少冗余代码
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0] instanceof UpdateFileInfoDTO) {
|
// 特殊处理 FileInfoQueryDTO
|
||||||
UpdateFileInfoDTO updateFileInfoDTO = (UpdateFileInfoDTO) args[0];
|
if (args[0] instanceof FileInfoQueryDTO) {
|
||||||
String childId = updateFileInfoDTO.getId();
|
if (id.length() > ElectromagneticConstants.PRJ_ID_LENGTH) {
|
||||||
id = edFileInfoService.getCategoryId(childId);
|
return joinPoint.proceed();
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0] instanceof FileInfoQueryDTO) {
|
|
||||||
FileInfoQueryDTO fileInfoQueryDTO = (FileInfoQueryDTO) args[0];
|
|
||||||
id = fileInfoQueryDTO.getParentId();
|
|
||||||
if (id.length() > ElectromagneticConstants.PRJ_ID_LENGTH) {
|
|
||||||
return joinPoint.proceed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String,Boolean> permissions = permissionService.getUserPermission(userId,id,true);
|
|
||||||
if (!permissions.get(filePermission.getCode()).equals(Boolean.TRUE)) {
|
|
||||||
throw new PermissionDeniedException("用户无权限执行此操作");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 先判断是否有权限,避免不必要的 `if` 嵌套
|
||||||
|
if (!permissionService.isPermitted(filePermission.getCode(), userId, id)) {
|
||||||
|
throw new PermissionDeniedException("用户无权限执行此操作");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果是 MOVE 操作,还需要检查目标文件夹权限
|
||||||
|
if (filePermission.equals(FilePermission.MOVE)) {
|
||||||
|
if (args.length < 2 || !(args[1] instanceof String)) {
|
||||||
|
throw new IllegalArgumentException("MOVE 操作需要提供目标文件夹 ID");
|
||||||
|
}
|
||||||
|
String targetId = edFileInfoService.getCategoryId(args[1].toString());
|
||||||
|
if (!permissionService.isPermitted(filePermission.getCode(), userId, targetId)) {
|
||||||
|
throw new PermissionDeniedException("用户无权限对目标文件夹执行此操作");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return joinPoint.proceed();
|
return joinPoint.proceed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提取参数中的 ID,避免重复代码
|
||||||
|
*/
|
||||||
|
private String extractId(Object arg) {
|
||||||
|
if (arg instanceof String) {
|
||||||
|
return edFileInfoService.getCategoryId(arg.toString());
|
||||||
|
} else if (arg instanceof UpdateFileInfoDTO) {
|
||||||
|
return edFileInfoService.getCategoryId(((UpdateFileInfoDTO) arg).getId());
|
||||||
|
} else if (arg instanceof FileInfoQueryDTO) {
|
||||||
|
return ((FileInfoQueryDTO) arg).getParentId();
|
||||||
|
}
|
||||||
|
throw new IllegalArgumentException("不支持的参数类型:" + arg.getClass().getName());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,6 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||||
|
|
||||||
import java.nio.file.AccessDeniedException;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ControllerAdvice
|
@ControllerAdvice
|
||||||
public class GlobalExceptionHandler {
|
public class GlobalExceptionHandler {
|
||||||
|
|
|
||||||
|
|
@ -81,9 +81,7 @@ public class EdFileRelationController {
|
||||||
@RequestMapping(value = "/checkFileNameExist", method = RequestMethod.POST)
|
@RequestMapping(value = "/checkFileNameExist", method = RequestMethod.POST)
|
||||||
@UserOperation(value="校验文件名唯一性", modelName = UserOperationModuleEnum.DATABASE)
|
@UserOperation(value="校验文件名唯一性", modelName = UserOperationModuleEnum.DATABASE)
|
||||||
public ElectromagneticResult<?> checkFileNameExist(@RequestBody CheckNameUniqueRequest checkNameUniqueRequest) {
|
public ElectromagneticResult<?> checkFileNameExist(@RequestBody CheckNameUniqueRequest checkNameUniqueRequest) {
|
||||||
String fileName = checkNameUniqueRequest.getFileName();
|
return ElectromagneticResultUtil.success(edFileRelationService.checkNameExist(checkNameUniqueRequest));
|
||||||
String parentId = checkNameUniqueRequest.getParentId();
|
|
||||||
return ElectromagneticResultUtil.success(edFileRelationService.checkNameUnique(parentId, fileName));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,11 @@ import com.electromagnetic.industry.software.common.annotations.UserOperation;
|
||||||
import com.electromagnetic.industry.software.common.enums.DataOwnEnum;
|
import com.electromagnetic.industry.software.common.enums.DataOwnEnum;
|
||||||
import com.electromagnetic.industry.software.common.enums.UserOperationModuleEnum;
|
import com.electromagnetic.industry.software.common.enums.UserOperationModuleEnum;
|
||||||
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.manage.pojo.req.FolderResortDTO;
|
import com.electromagnetic.industry.software.manage.pojo.req.FolderResortDTO;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.req.QueryPublishStatus;
|
import com.electromagnetic.industry.software.manage.pojo.req.QueryPublishStatus;
|
||||||
import com.electromagnetic.industry.software.manage.service.EdPrjService;
|
import com.electromagnetic.industry.software.manage.service.EdPrjService;
|
||||||
|
import com.electromagnetic.industry.software.manage.service.PermissionService;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
@ -22,6 +24,8 @@ public class ProjectController {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private EdPrjService edPrjService;
|
private EdPrjService edPrjService;
|
||||||
|
@Resource
|
||||||
|
private PermissionService permissionService;
|
||||||
|
|
||||||
@UserOperation(value = "创建工程", modelName = UserOperationModuleEnum.PRJ_SETTING)
|
@UserOperation(value = "创建工程", modelName = UserOperationModuleEnum.PRJ_SETTING)
|
||||||
@RequestMapping("create")
|
@RequestMapping("create")
|
||||||
|
|
@ -74,7 +78,10 @@ public class ProjectController {
|
||||||
@UserOperation(value = "发布工程", modelName = UserOperationModuleEnum.PRJ_SETTING)
|
@UserOperation(value = "发布工程", modelName = UserOperationModuleEnum.PRJ_SETTING)
|
||||||
@RequestMapping("publish")
|
@RequestMapping("publish")
|
||||||
public ElectromagneticResult<?> publish(@RequestParam String prjId) {
|
public ElectromagneticResult<?> publish(@RequestParam String prjId) {
|
||||||
return edPrjService.publish(prjId, DataOwnEnum.SYS_PRJ.code);
|
edPrjService.publish(prjId, DataOwnEnum.SYS_PRJ.code);
|
||||||
|
// 更新项目权限
|
||||||
|
permissionService.syncPermissions(prjId);
|
||||||
|
return ElectromagneticResultUtil.success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@UserOperation(value = "引用工程", modelName = UserOperationModuleEnum.PRJ_SETTING)
|
@UserOperation(value = "引用工程", modelName = UserOperationModuleEnum.PRJ_SETTING)
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,14 @@ package com.electromagnetic.industry.software.manage.mapper;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.models.RolePermission;
|
import com.electromagnetic.industry.software.manage.pojo.models.RolePermission;
|
||||||
|
import com.electromagnetic.industry.software.manage.pojo.req.PublishedFileDTO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface RolePermissionMapper extends BaseMapper<RolePermission> {
|
public interface RolePermissionMapper extends BaseMapper<RolePermission> {
|
||||||
|
|
||||||
|
List<RolePermission> getCurrentPermission(PublishedFileDTO publishedFileDTO);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,12 @@ import lombok.Data;
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class RolePermission {
|
public class RolePermission {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键id
|
||||||
|
*/
|
||||||
|
@TableField(value = "id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 角色编码
|
* 角色编码
|
||||||
*/
|
*/
|
||||||
|
|
@ -27,4 +33,11 @@ public class RolePermission {
|
||||||
*/
|
*/
|
||||||
@TableField(value = "permission_code")
|
@TableField(value = "permission_code")
|
||||||
private String permissionCode;
|
private String permissionCode;
|
||||||
|
|
||||||
|
|
||||||
|
public RolePermission(String roleId, String fileId, String permissionCode) {
|
||||||
|
this.roleId = roleId;
|
||||||
|
this.fileId = fileId;
|
||||||
|
this.permissionCode = permissionCode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,4 +14,9 @@ public class CheckNameUniqueRequest {
|
||||||
* 文件名称
|
* 文件名称
|
||||||
*/
|
*/
|
||||||
private String fileName;
|
private String fileName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件后缀
|
||||||
|
*/
|
||||||
|
private String fileType;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
package com.electromagnetic.industry.software.manage.pojo.req;
|
||||||
|
|
||||||
|
import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
|
||||||
|
import com.electromagnetic.industry.software.common.enums.PublishEnum;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PublishedFileDTO {
|
||||||
|
|
||||||
|
|
||||||
|
private String fileId;
|
||||||
|
|
||||||
|
private Integer dataStatus;
|
||||||
|
|
||||||
|
private Integer effectFlag;
|
||||||
|
|
||||||
|
private Boolean prjDir;
|
||||||
|
|
||||||
|
|
||||||
|
public void newInit() {
|
||||||
|
this.setPrjDir(Boolean.TRUE);
|
||||||
|
this.setDataStatus(PublishEnum.PUBLISHED.getCode());
|
||||||
|
this.setEffectFlag(EffectFlagEnum.EFFECT.code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -15,6 +15,11 @@ public class FileSimpleInfoVO {
|
||||||
*/
|
*/
|
||||||
private String fileName;
|
private String fileName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件类型
|
||||||
|
*/
|
||||||
|
private String fileType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件编号
|
* 文件编号
|
||||||
*/
|
*/
|
||||||
|
|
@ -25,4 +30,8 @@ public class FileSimpleInfoVO {
|
||||||
*/
|
*/
|
||||||
private Integer fileVersion;
|
private Integer fileVersion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否有效
|
||||||
|
*/
|
||||||
|
private Integer effectFlag;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
|
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
|
||||||
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.models.EdFileInfo;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.req.CreateFolderDTO;
|
import com.electromagnetic.industry.software.manage.pojo.req.CreateFolderDTO;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.req.FileChunkDTO;
|
import com.electromagnetic.industry.software.manage.pojo.req.FileChunkDTO;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.req.FileInfoQueryDTO;
|
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.apache.ibatis.annotations.Param;
|
|
||||||
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.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
@ -168,6 +168,7 @@ public interface EdFileInfoService {
|
||||||
* @param parentId
|
* @param parentId
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ElectromagneticResult<?> queryChildFolder(String parentId, int dataOwnCode);
|
ElectromagneticResult<?> queryChildFolder(String parentId, int dataOwnCode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -190,4 +191,11 @@ public interface EdFileInfoService {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
IPage<FileInfoVO> queryFileList (Page<FileInfoVO> page, List<String> ids, FileInfoQueryDTO queryDTO, int saveStatus, int effectFlag);
|
IPage<FileInfoVO> queryFileList (Page<FileInfoVO> page, List<String> ids, FileInfoQueryDTO queryDTO, int saveStatus, int effectFlag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理重名文件,文件名后+_1
|
||||||
|
* @param fileInfo
|
||||||
|
*/
|
||||||
|
void resetFileInfoName(EdFileInfo fileInfo);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package com.electromagnetic.industry.software.manage.service;
|
||||||
|
|
||||||
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
|
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
|
||||||
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.pojo.resp.FileRelationViewVO;
|
import com.electromagnetic.industry.software.manage.pojo.resp.FileRelationViewVO;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
|
@ -34,11 +35,9 @@ public interface EdFileRelationService {
|
||||||
/**
|
/**
|
||||||
* 检查文件名是否唯一
|
* 检查文件名是否唯一
|
||||||
*
|
*
|
||||||
* @param parentId
|
|
||||||
* @param fileName
|
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Boolean checkNameUnique(String parentId, String fileName);
|
Boolean checkNameExist(CheckNameUniqueRequest checkNameUniqueRequest);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件上传并建立关系
|
* 文件上传并建立关系
|
||||||
|
|
|
||||||
|
|
@ -44,4 +44,17 @@ public interface PermissionService {
|
||||||
*/
|
*/
|
||||||
Map<String, Boolean> filterExportIds(String[] ids);
|
Map<String, Boolean> filterExportIds(String[] ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步权限
|
||||||
|
*/
|
||||||
|
void syncPermissions (String prjId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断用户有无权限
|
||||||
|
* @param permissionCode 权限
|
||||||
|
* @param userId 用户编码
|
||||||
|
* @param fileId 文件编码
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean isPermitted (String permissionCode, String userId, String fileId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,33 @@
|
||||||
package com.electromagnetic.industry.software.manage.service;
|
package com.electromagnetic.industry.software.manage.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.models.RolePermission;
|
import com.electromagnetic.industry.software.manage.pojo.models.RolePermission;
|
||||||
|
import com.electromagnetic.industry.software.manage.pojo.req.PublishedFileDTO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface RolePermissionService extends IService<RolePermission> {
|
public interface RolePermissionService extends IService<RolePermission> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步新权限
|
||||||
|
* @param currentPermission
|
||||||
|
* @param infoId
|
||||||
|
*/
|
||||||
|
void syncNewPermissions (List<RolePermission> currentPermission, String infoId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取新权限
|
||||||
|
* @param publishedFileDTO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<RolePermission> getCurrentPermission(PublishedFileDTO publishedFileDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在树形结构变动后同步权限
|
||||||
|
* @param prjId
|
||||||
|
*/
|
||||||
|
void syncPermissionsAfterTreeUpdate (List<EdFileInfo> files, String prjId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -318,7 +318,7 @@ public class CommonService {
|
||||||
} else {
|
} else {
|
||||||
// 先设置dataStatus状态为删除状态
|
// 先设置dataStatus状态为删除状态
|
||||||
edFileInfoMapper.update(null, Wrappers.<EdFileInfo>lambdaUpdate()
|
edFileInfoMapper.update(null, Wrappers.<EdFileInfo>lambdaUpdate()
|
||||||
.eq(EdFileInfo::getId, id)
|
.like(EdFileInfo::getFilePath, id)
|
||||||
.set(EdFileInfo::getSort, -1)
|
.set(EdFileInfo::getSort, -1)
|
||||||
.set(EdFileInfo::getUpdatedBy, currentUserId)
|
.set(EdFileInfo::getUpdatedBy, currentUserId)
|
||||||
.set(EdFileInfo::getUpdatedTime, now)
|
.set(EdFileInfo::getUpdatedTime, now)
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,6 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
@Resource
|
@Resource
|
||||||
private UserMapper userMapper;
|
private UserMapper userMapper;
|
||||||
|
|
||||||
|
|
||||||
private String downloadDataDir = "";
|
private String downloadDataDir = "";
|
||||||
private String uploadDataDir = "";
|
private String uploadDataDir = "";
|
||||||
private String tmpDir = "";
|
private String tmpDir = "";
|
||||||
|
|
@ -102,6 +101,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
|
|
||||||
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::getDataOwn, DataOwnEnum.COMMON.code)
|
||||||
.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())
|
||||||
|
|
@ -115,7 +116,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
.orderByAsc(ObjUtil.equals(pars.getCreatedTime(), 0), EdFileInfo::getCreatedTime)
|
.orderByAsc(ObjUtil.equals(pars.getCreatedTime(), 0), EdFileInfo::getCreatedTime)
|
||||||
.orderByDesc(ObjUtil.equals(pars.getCreatedTime(), 1), EdFileInfo::getCreatedTime)
|
.orderByDesc(ObjUtil.equals(pars.getCreatedTime(), 1), EdFileInfo::getCreatedTime)
|
||||||
.orderByDesc(ObjUtil.isAllEmpty(pars.getCreatedTime(), pars.getVersionSort(), pars.getFileSizeSort(), pars.getFileNameSort(), pars.getUpdatedTime(), pars.getFileTypeSort()), EdFileInfo::getCreatedTime)
|
.orderByDesc(ObjUtil.isAllEmpty(pars.getCreatedTime(), pars.getVersionSort(), pars.getFileSizeSort(), pars.getFileNameSort(), pars.getUpdatedTime(), pars.getFileTypeSort()), EdFileInfo::getCreatedTime)
|
||||||
|
.orderByDesc(ObjUtil.isAllEmpty(pars.getCreatedTime(), pars.getVersionSort(), pars.getFileSizeSort(), pars.getFileNameSort(), pars.getUpdatedTime(), pars.getFileTypeSort()), EdFileInfo::getCreatedTime)
|
||||||
.orderByAsc(ObjUtil.equals(pars.getVersionSort(), 0), EdFileInfo::getFileVersion)
|
.orderByAsc(ObjUtil.equals(pars.getVersionSort(), 0), EdFileInfo::getFileVersion)
|
||||||
.orderByDesc(ObjUtil.equals(pars.getVersionSort(), 1), EdFileInfo::getFileVersion)
|
.orderByDesc(ObjUtil.equals(pars.getVersionSort(), 1), EdFileInfo::getFileVersion)
|
||||||
|
|
||||||
|
|
@ -575,7 +576,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
update2FileSystem(allObjs, prjDirPath, dataOwnCode);
|
update2FileSystem(allObjs, prjDirPath, dataOwnCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resetFileInfoName(EdFileInfo fileInfo) {
|
@Override
|
||||||
|
public void resetFileInfoName(EdFileInfo fileInfo) {
|
||||||
String fileName = fileInfo.getFileName();
|
String fileName = fileInfo.getFileName();
|
||||||
String parentId = fileInfo.getParentId();
|
String parentId = fileInfo.getParentId();
|
||||||
for (int i = 0; i < 1000; ++i) {
|
for (int i = 0; i < 1000; ++i) {
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,13 @@ import com.electromagnetic.industry.software.manage.mapper.EdFileRelationMapper;
|
||||||
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.models.EdFileRelation;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.models.Edge;
|
import com.electromagnetic.industry.software.manage.pojo.models.Edge;
|
||||||
|
import com.electromagnetic.industry.software.manage.pojo.req.CheckNameUniqueRequest;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.resp.FileRelationViewVO;
|
import com.electromagnetic.industry.software.manage.pojo.resp.FileRelationViewVO;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.resp.FileSimpleInfoVO;
|
import com.electromagnetic.industry.software.manage.pojo.resp.FileSimpleInfoVO;
|
||||||
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 org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
@ -41,6 +44,10 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
||||||
EdFileInfoServiceImpl edFileInfoService;
|
EdFileInfoServiceImpl edFileInfoService;
|
||||||
@Resource
|
@Resource
|
||||||
private CommonService commonService;
|
private CommonService commonService;
|
||||||
|
@Resource
|
||||||
|
private FileSystemService fileSystemService;
|
||||||
|
@Autowired
|
||||||
|
private EdFileInfoServiceImpl edFileInfoServiceImpl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建文件关系
|
* 创建文件关系
|
||||||
|
|
@ -130,19 +137,20 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
||||||
/**
|
/**
|
||||||
* 检查文件名是否唯一
|
* 检查文件名是否唯一
|
||||||
*
|
*
|
||||||
* @param parentId
|
|
||||||
* @param fileName
|
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public Boolean checkNameUnique(String parentId, String fileName) {
|
public Boolean checkNameExist(CheckNameUniqueRequest checkNameUniqueRequest) {
|
||||||
String mainName = FileUtil.mainName(fileName);
|
|
||||||
String suffix = FileUtil.getSuffix(fileName);
|
String mainName = checkNameUniqueRequest.getFileName();
|
||||||
|
String suffix = checkNameUniqueRequest.getFileType();
|
||||||
|
String parentId = checkNameUniqueRequest.getParentId();
|
||||||
|
|
||||||
EdFileInfo newEdFileInfo = new EdFileInfo();
|
EdFileInfo newEdFileInfo = new EdFileInfo();
|
||||||
newEdFileInfo.newInit();
|
newEdFileInfo.newInit();
|
||||||
// 首先检查是否是同名文件
|
// 首先检查是否是同名文件
|
||||||
Assert.isTrue(EleCommonUtil.isFileNameValid(fileName), NAME_VALID_MSG);
|
Assert.isTrue(EleCommonUtil.isFileNameValid(mainName + "." +suffix), NAME_VALID_MSG);
|
||||||
Long count = edFileInfoService.count(Wrappers.lambdaQuery(EdFileInfo.class)
|
Long count = edFileInfoService.count(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||||
.eq(EdFileInfo::getParentId, parentId)
|
.eq(EdFileInfo::getParentId, parentId)
|
||||||
.eq(EdFileInfo::getFileName, mainName)
|
.eq(EdFileInfo::getFileName, mainName)
|
||||||
|
|
@ -195,7 +203,6 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
||||||
String suffix = FileUtil.getSuffix(fileName);
|
String suffix = FileUtil.getSuffix(fileName);
|
||||||
EdFileInfo newEdFileInfo = new EdFileInfo();
|
EdFileInfo newEdFileInfo = new EdFileInfo();
|
||||||
newEdFileInfo.newInit();
|
newEdFileInfo.newInit();
|
||||||
// 首先检查是否是同名文件
|
|
||||||
try {
|
try {
|
||||||
Assert.isTrue(EleCommonUtil.isFileNameValid(fileName), NAME_VALID_MSG);
|
Assert.isTrue(EleCommonUtil.isFileNameValid(fileName), NAME_VALID_MSG);
|
||||||
Long count = edFileInfoService.count(Wrappers.lambdaQuery(EdFileInfo.class)
|
Long count = edFileInfoService.count(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||||
|
|
@ -203,7 +210,30 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
||||||
.eq(EdFileInfo::getFileName, mainName)
|
.eq(EdFileInfo::getFileName, mainName)
|
||||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||||
.eq(EdFileInfo::getFileType, suffix));
|
.eq(EdFileInfo::getFileType, suffix));
|
||||||
|
|
||||||
|
EdFileInfo parentFileInfo = edFileInfoMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||||
|
.eq(EdFileInfo::getId, parentId)
|
||||||
|
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
|
||||||
|
String codePathByDbPath = commonService.getCodePathByDbPath(parentFileInfo.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)
|
||||||
|
.setFileTime(newEdFileInfo.getFileTime())
|
||||||
|
.setFileSize(file.getSize())
|
||||||
|
.setFilePath(parentFileInfo.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);
|
||||||
|
|
||||||
|
// 文件名加”_1“,存为新文件
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
|
<<<<<<< HEAD
|
||||||
edFileInfoService.handUploadRepeatFile(parentId, file, 3, dataOwnCode);
|
edFileInfoService.handUploadRepeatFile(parentId, file, 3, dataOwnCode);
|
||||||
} else {
|
} else {
|
||||||
EdFileInfo parentFolderInfo = edFileInfoService.getOne(Wrappers.lambdaQuery(EdFileInfo.class)
|
EdFileInfo parentFolderInfo = edFileInfoService.getOne(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||||
|
|
@ -238,7 +268,23 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
||||||
relation.setId2(newEdFileInfo.getId());
|
relation.setId2(newEdFileInfo.getId());
|
||||||
relation.setRelationship(desc);
|
relation.setRelationship(desc);
|
||||||
createRelation(relation);
|
createRelation(relation);
|
||||||
|
=======
|
||||||
|
edFileInfoService.resetFileInfoName(newEdFileInfo);
|
||||||
|
>>>>>>> test
|
||||||
}
|
}
|
||||||
|
|
||||||
|
edFileInfoService.saveOrUpdate(newEdFileInfo);
|
||||||
|
String fileDestPath = commonService.getFileSysPath(newEdFileInfo.getFilePath());
|
||||||
|
FileUtil.writeFromStream(file.getInputStream(), fileDestPath);
|
||||||
|
EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes()));
|
||||||
|
|
||||||
|
// 创建文件关系
|
||||||
|
EdFileRelation relation = new EdFileRelation();
|
||||||
|
relation.setId1(id);
|
||||||
|
relation.setId2(newEdFileInfo.getId());
|
||||||
|
relation.setRelationship(descrption);
|
||||||
|
createRelation(relation);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
newEdFileInfo.setParentId(parentId)
|
newEdFileInfo.setParentId(parentId)
|
||||||
.setFileName(mainName)
|
.setFileName(mainName)
|
||||||
|
|
|
||||||
|
|
@ -67,8 +67,8 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
||||||
// 首先检查工程是否存在
|
// 首先检查工程是否存在
|
||||||
Long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class)
|
Long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||||
.eq(EdFileInfo::getParentId, PRJ_PARENT_ID)
|
.eq(EdFileInfo::getParentId, PRJ_PARENT_ID)
|
||||||
.eq(EdFileInfo::getEffectFlag, true)
|
|
||||||
.eq(EdFileInfo::getDataOwn, dataOwnCode)
|
.eq(EdFileInfo::getDataOwn, dataOwnCode)
|
||||||
|
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||||
.eq(EdFileInfo::getFileName, prjName));
|
.eq(EdFileInfo::getFileName, prjName));
|
||||||
|
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
|
|
@ -224,6 +224,7 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
||||||
.eq(EdFileInfo::getParentId, parentId)
|
.eq(EdFileInfo::getParentId, parentId)
|
||||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
|
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
|
||||||
Assert.isTrue(count == 0, StrFormatter.format("该层级目录下存在文件,不允许再定义层级目录。父目录id {},子集名称 {}", parentId, folderName));
|
Assert.isTrue(count == 0, StrFormatter.format("该层级目录下存在文件,不允许再定义层级目录。父目录id {},子集名称 {}", parentId, folderName));
|
||||||
|
Assert.isTrue(commonService.notExistSameFolder(parentId, folderName, dataOwnCode), "子集名已经存在");
|
||||||
int id = Integer.parseInt(this.baseMapper.maxPrjId());
|
int id = Integer.parseInt(this.baseMapper.maxPrjId());
|
||||||
String folderId = String.valueOf(id + 1);
|
String folderId = String.valueOf(id + 1);
|
||||||
ElectromagneticResult<?> electromagneticResult = commonService.addFolder(parentId, folderName, true, folderId, null, dataOwnCode);
|
ElectromagneticResult<?> electromagneticResult = commonService.addFolder(parentId, folderName, true, folderId, null, dataOwnCode);
|
||||||
|
|
@ -355,33 +356,40 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
||||||
// 把source工程的层级结构copy到目标工程
|
// 把source工程的层级结构copy到目标工程
|
||||||
// 查找source的全部目录
|
// 查找source的全部目录
|
||||||
List<EdFileInfo> sourceEdFileInfos = commonService.selectAllAdminFolder(sourceId, true, null);
|
List<EdFileInfo> sourceEdFileInfos = commonService.selectAllAdminFolder(sourceId, true, null);
|
||||||
List<EdFileInfo> targetEdFileInfos = commonService.selectAllAdminFolder(targetId, true, null);
|
|
||||||
List<String> needSavePaths = new ArrayList<>();
|
List<String> needSavePaths = new ArrayList<>();
|
||||||
// 确定层级最大为prjFolderMaxLength层,现在逐层来处理。
|
// 确定层级最大为prjFolderMaxLength层,现在逐层来处理。
|
||||||
for (int i = 1; i <= prjFolderMaxLength; ++i) {
|
for (int i = 1; i <= prjFolderMaxLength; ++i) {
|
||||||
|
List<EdFileInfo> targetEdFileInfos = commonService.selectAllAdminFolder(targetId, true, null);
|
||||||
// 先查找source第i层下有那些子集
|
// 先查找source第i层下有那些子集
|
||||||
final int count = i;
|
final int count = i;
|
||||||
EdFileInfo targetParentFile = targetEdFileInfos.stream()
|
// 取source当前层
|
||||||
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count - 1)
|
|
||||||
.collect(Collectors.toList()).stream().findFirst().orElse(null);
|
|
||||||
if (targetParentFile == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
List<EdFileInfo> sourceTmpEdFiles = sourceEdFileInfos.stream()
|
List<EdFileInfo> sourceTmpEdFiles = sourceEdFileInfos.stream()
|
||||||
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
|
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
// 取target父层
|
||||||
List<EdFileInfo> targetTmpEdFiles = targetEdFileInfos.stream()
|
List<EdFileInfo> targetTmpEdFiles = targetEdFileInfos.stream()
|
||||||
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
|
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count - 1)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
// 获取source名称的map
|
||||||
|
Map<String, EdFileInfo> sourceFileNameMap = sourceTmpEdFiles.stream()
|
||||||
|
.collect(Collectors.toMap(EdFileInfo::getFileName, e -> e));
|
||||||
|
// 获取target当前层级的子集名称
|
||||||
|
List<String> targetFileNames = targetEdFileInfos.stream()
|
||||||
|
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
|
||||||
|
.map(EdFileInfo::getFileName)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
Map<String, EdFileInfo> sourceFileNameMap = sourceTmpEdFiles.stream().collect(Collectors.toMap(EdFileInfo::getFileName, e -> e));
|
|
||||||
List<String> targetFileNames = targetTmpEdFiles.stream().map(EdFileInfo::getFileName).collect(Collectors.toList());
|
|
||||||
int sort = targetTmpEdFiles.size();
|
int sort = targetTmpEdFiles.size();
|
||||||
for (EdFileInfo edFileInfo : sourceTmpEdFiles) {
|
for (EdFileInfo edFileInfo : sourceTmpEdFiles) {
|
||||||
String sourceFileName = edFileInfo.getFileName();
|
String sourceFileName = edFileInfo.getFileName();
|
||||||
|
|
||||||
|
String sourceFileParentName = sourceEdFileInfos.stream().filter(e -> e.getId().equals(edFileInfo.getParentId())).findFirst().get().getFileName();
|
||||||
|
EdFileInfo targetParentFile = i == 1 ? targetTmpEdFiles.stream().filter(e -> e.getId().equals(targetId)).findFirst().get() : targetTmpEdFiles.stream().filter(e -> e.getFileName().equals(sourceFileParentName)).findFirst().get();
|
||||||
|
|
||||||
if (!targetFileNames.contains(sourceFileName)) {
|
if (!targetFileNames.contains(sourceFileName)) {
|
||||||
EdFileInfo sourceFile = sourceFileNameMap.get(sourceFileName);
|
EdFileInfo sourceFile = sourceFileNameMap.get(sourceFileName);
|
||||||
EdFileInfo targetFile = new EdFileInfo();
|
EdFileInfo targetFile = new EdFileInfo();
|
||||||
int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId());
|
int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId());
|
||||||
|
|
||||||
String newFolderId = String.valueOf(maxFolderId + 1);
|
String newFolderId = String.valueOf(maxFolderId + 1);
|
||||||
String nowTimeStr = EleCommonUtil.getNowTimeStr();
|
String nowTimeStr = EleCommonUtil.getNowTimeStr();
|
||||||
String fileCode = commonService.createFileCode(targetParentFile.getId(), EleDataTypeEnum.FOLDER.desc, FILE_START_VERSION, nowTimeStr);
|
String fileCode = commonService.createFileCode(targetParentFile.getId(), EleDataTypeEnum.FOLDER.desc, FILE_START_VERSION, nowTimeStr);
|
||||||
|
|
@ -397,6 +405,7 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
||||||
.setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
|
.setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
|
||||||
.setEffectFlag(EffectFlagEnum.EFFECT.code)
|
.setEffectFlag(EffectFlagEnum.EFFECT.code)
|
||||||
.setFileCode(fileCode)
|
.setFileCode(fileCode)
|
||||||
|
.setFileType("文件夹")
|
||||||
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
|
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
|
||||||
.setFilePath(targetParentFile.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
|
.setFilePath(targetParentFile.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
|
||||||
.setSort(++sort)
|
.setSort(++sort)
|
||||||
|
|
@ -423,7 +432,7 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 {}", sourceId, targetId, e.getMessage());
|
String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 {}", sourceId, targetId, e.getMessage());
|
||||||
log.error(info, e);
|
log.error(info, e);
|
||||||
throw new BizException(info);
|
throw new BizException(info, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,16 @@
|
||||||
package com.electromagnetic.industry.software.manage.service.serviceimpl;
|
package com.electromagnetic.industry.software.manage.service.serviceimpl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.electromagnetic.industry.software.common.enums.FilePermission;
|
import com.electromagnetic.industry.software.common.enums.*;
|
||||||
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;
|
||||||
import com.electromagnetic.industry.software.manage.mapper.RolePermissionMapper;
|
|
||||||
import com.electromagnetic.industry.software.manage.mapper.UserRoleMapper;
|
import com.electromagnetic.industry.software.manage.mapper.UserRoleMapper;
|
||||||
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.RolePermission;
|
import com.electromagnetic.industry.software.manage.pojo.models.RolePermission;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.models.UserRole;
|
import com.electromagnetic.industry.software.manage.pojo.models.UserRole;
|
||||||
import com.electromagnetic.industry.software.manage.service.PermissionService;
|
import com.electromagnetic.industry.software.manage.service.PermissionService;
|
||||||
import com.electromagnetic.industry.software.manage.service.RolePermissionService;
|
import com.electromagnetic.industry.software.manage.service.RolePermissionService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
|
@ -19,13 +18,14 @@ import javax.annotation.Resource;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class PermissionServiceImpl implements PermissionService {
|
public class PermissionServiceImpl implements PermissionService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
UserRoleMapper userRoleMapper;
|
UserRoleMapper userRoleMapper;
|
||||||
@Resource
|
@Resource
|
||||||
RolePermissionMapper rolePermissionMapper;
|
RolePermissionService rolePermissionService;
|
||||||
@Resource
|
@Resource
|
||||||
EdFileInfoMapper edFileInfoMapper;
|
EdFileInfoMapper edFileInfoMapper;
|
||||||
|
|
||||||
|
|
@ -49,7 +49,7 @@ public class PermissionServiceImpl implements PermissionService {
|
||||||
queryWrapper1.select(RolePermission::getPermissionCode)
|
queryWrapper1.select(RolePermission::getPermissionCode)
|
||||||
.eq(RolePermission::getFileId, id)
|
.eq(RolePermission::getFileId, id)
|
||||||
.in(RolePermission::getRoleId, roleIds);
|
.in(RolePermission::getRoleId, roleIds);
|
||||||
List<String> permissionCodes = rolePermissionMapper.selectObjs(queryWrapper1).stream().map(Object::toString).collect(Collectors.toList());
|
List<String> permissionCodes = rolePermissionService.listObjs(queryWrapper1).stream().map(Object::toString).collect(Collectors.toList());
|
||||||
return transToMap(permissionCodes, includeView);
|
return transToMap(permissionCodes, includeView);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -72,7 +72,7 @@ public class PermissionServiceImpl implements PermissionService {
|
||||||
queryWrapper1.select(RolePermission::getFileId)
|
queryWrapper1.select(RolePermission::getFileId)
|
||||||
.in(RolePermission::getRoleId, roleIds)
|
.in(RolePermission::getRoleId, roleIds)
|
||||||
.eq(RolePermission::getPermissionCode, FilePermission.VIEW);
|
.eq(RolePermission::getPermissionCode, FilePermission.VIEW);
|
||||||
List<String> ids = rolePermissionMapper.selectObjs(queryWrapper1).stream().map(Object::toString).collect(Collectors.toList());
|
List<String> ids = rolePermissionService.listObjs(queryWrapper1).stream().map(Object::toString).collect(Collectors.toList());
|
||||||
|
|
||||||
Set<String> result = new HashSet<>();
|
Set<String> result = new HashSet<>();
|
||||||
// 把父亲节点加上
|
// 把父亲节点加上
|
||||||
|
|
@ -109,7 +109,7 @@ public class PermissionServiceImpl implements PermissionService {
|
||||||
queryWrapper.select(RolePermission::getPermissionCode)
|
queryWrapper.select(RolePermission::getPermissionCode)
|
||||||
.eq(RolePermission::getFileId, fileId)
|
.eq(RolePermission::getFileId, fileId)
|
||||||
.eq(RolePermission::getRoleId, roleId);
|
.eq(RolePermission::getRoleId, roleId);
|
||||||
return rolePermissionMapper.selectObjs(queryWrapper).stream().map(Object::toString).collect(Collectors.toList());
|
return rolePermissionService.listObjs(queryWrapper).stream().map(Object::toString).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -155,7 +155,7 @@ public class PermissionServiceImpl implements PermissionService {
|
||||||
queryWrapper.eq(RolePermission::getFileId, id)
|
queryWrapper.eq(RolePermission::getFileId, id)
|
||||||
.eq(RolePermission::getPermissionCode, FilePermission.EXPORT.getCode())
|
.eq(RolePermission::getPermissionCode, FilePermission.EXPORT.getCode())
|
||||||
.in(RolePermission::getRoleId, roleIds);
|
.in(RolePermission::getRoleId, roleIds);
|
||||||
long count = rolePermissionMapper.selectCount(queryWrapper);
|
long count = rolePermissionService.count(queryWrapper);
|
||||||
map.put(id, count>0);
|
map.put(id, count>0);
|
||||||
|
|
||||||
// 添加父节点
|
// 添加父节点
|
||||||
|
|
@ -169,4 +169,62 @@ public class PermissionServiceImpl implements PermissionService {
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步权限
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void syncPermissions (String prjId) {
|
||||||
|
|
||||||
|
// 获取当前项目所有已逻辑删除的节点,删除其权限
|
||||||
|
LambdaQueryWrapper<EdFileInfo> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(EdFileInfo::getDataStatus, EleDataStatusEnum.DELETED.code)
|
||||||
|
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)
|
||||||
|
.likeRight(EdFileInfo::getFilePath, prjId);
|
||||||
|
List<String> deletedIds = edFileInfoMapper.selectList(queryWrapper).stream().map(EdFileInfo::getId).collect(Collectors.toList());
|
||||||
|
|
||||||
|
LambdaQueryWrapper<RolePermission> deleteWrapper = new LambdaQueryWrapper<>();
|
||||||
|
if (!deletedIds.isEmpty()) {
|
||||||
|
deleteWrapper.in(RolePermission::getFileId, deletedIds);
|
||||||
|
rolePermissionService.remove(deleteWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取当前项目所有已发布的节点
|
||||||
|
LambdaQueryWrapper<EdFileInfo> infoWrapper = new LambdaQueryWrapper<>();
|
||||||
|
infoWrapper.likeRight(EdFileInfo::getFilePath, prjId)
|
||||||
|
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||||
|
.eq(EdFileInfo::getDataStatus, EleDataStatusEnum.PUBLISHED.code)
|
||||||
|
.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code);
|
||||||
|
List<EdFileInfo> files = edFileInfoMapper.selectList(infoWrapper);
|
||||||
|
|
||||||
|
// 同步权限
|
||||||
|
rolePermissionService.syncPermissionsAfterTreeUpdate(files, prjId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断用户有无权限
|
||||||
|
* @param permissionCode 权限
|
||||||
|
* @param userId 用户编码
|
||||||
|
* @param fileId 文件编码
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean isPermitted (String permissionCode, String userId, String fileId) {
|
||||||
|
LambdaQueryWrapper<UserRole> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(UserRole::getUserId, userId);
|
||||||
|
List<String> roleIds = Optional.ofNullable(userRoleMapper.selectList(queryWrapper))
|
||||||
|
.orElse(Collections.emptyList())
|
||||||
|
.stream().map(UserRole::getRoleId).collect(Collectors.toList());
|
||||||
|
|
||||||
|
if (roleIds.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
LambdaQueryWrapper<RolePermission> queryWrapper1 = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper1.eq(RolePermission::getPermissionCode, permissionCode)
|
||||||
|
.eq(RolePermission::getFileId, fileId)
|
||||||
|
.in(RolePermission::getRoleId, roleIds);
|
||||||
|
return rolePermissionService.count(queryWrapper1)>0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,133 @@
|
||||||
package com.electromagnetic.industry.software.manage.service.serviceimpl;
|
package com.electromagnetic.industry.software.manage.service.serviceimpl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.electromagnetic.industry.software.manage.mapper.RolePermissionMapper;
|
import com.electromagnetic.industry.software.manage.mapper.RolePermissionMapper;
|
||||||
|
import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.models.RolePermission;
|
import com.electromagnetic.industry.software.manage.pojo.models.RolePermission;
|
||||||
|
import com.electromagnetic.industry.software.manage.pojo.req.PublishedFileDTO;
|
||||||
import com.electromagnetic.industry.software.manage.service.RolePermissionService;
|
import com.electromagnetic.industry.software.manage.service.RolePermissionService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class RolePermissionServiceImpl extends ServiceImpl<RolePermissionMapper, RolePermission> implements RolePermissionService {
|
public class RolePermissionServiceImpl extends ServiceImpl<RolePermissionMapper, RolePermission> implements RolePermissionService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RolePermissionMapper rolePermissionMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步新权限
|
||||||
|
* @param currentPermission
|
||||||
|
* @param infoId
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
@Override
|
||||||
|
public void syncNewPermissions (List<RolePermission> currentPermission, String infoId) {
|
||||||
|
|
||||||
|
if (currentPermission == null) {
|
||||||
|
throw new IllegalArgumentException("currentPermission must not be null");
|
||||||
|
}
|
||||||
|
|
||||||
|
LambdaQueryWrapper<RolePermission> deleteWrapper = new LambdaQueryWrapper<>();
|
||||||
|
deleteWrapper.eq(RolePermission::getFileId, infoId);
|
||||||
|
List<RolePermission> oldPermissions = this.list(deleteWrapper);
|
||||||
|
|
||||||
|
Set<String> newPermissionSet = currentPermission.stream()
|
||||||
|
.map(p -> p.getRoleId() + "_" + p.getPermissionCode())
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
List<RolePermission> permissionsToDelete = oldPermissions.stream()
|
||||||
|
.filter(p -> !newPermissionSet.contains(p.getRoleId() + "_" + p.getPermissionCode()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
log.info ("删除旧权限: {}", permissionsToDelete);
|
||||||
|
|
||||||
|
// 删除不需要的权限
|
||||||
|
if (!permissionsToDelete.isEmpty()) {
|
||||||
|
List<Long> idsToDelete = permissionsToDelete.stream()
|
||||||
|
.map(RolePermission::getId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
this.removeBatchByIds(idsToDelete);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量插入/更新新权限(使用 ON DUPLICATE KEY UPDATE 机制)
|
||||||
|
if (!currentPermission.isEmpty()) {
|
||||||
|
for (RolePermission rp : currentPermission) {
|
||||||
|
RolePermission exist = this.getOne(new LambdaQueryWrapper<RolePermission>()
|
||||||
|
.eq(RolePermission::getFileId, rp.getFileId())
|
||||||
|
.eq(RolePermission::getRoleId, rp.getRoleId())
|
||||||
|
.eq(RolePermission::getPermissionCode, rp.getPermissionCode()));
|
||||||
|
if (exist != null) {
|
||||||
|
rp.setId(exist.getId()); // 赋值已有 ID,避免重复插入
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.saveOrUpdateBatch(currentPermission);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取新权限
|
||||||
|
* @param publishedFileDTO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<RolePermission> getCurrentPermission(PublishedFileDTO publishedFileDTO) {
|
||||||
|
return rolePermissionMapper.getCurrentPermission(publishedFileDTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在树形结构变动后同步权限
|
||||||
|
* @param prjId
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
@Override
|
||||||
|
public void syncPermissionsAfterTreeUpdate (List<EdFileInfo> files, String prjId) {
|
||||||
|
|
||||||
|
log.info("开始同步项目权限:{}", prjId);
|
||||||
|
|
||||||
|
// 对files分层
|
||||||
|
TreeMap<Integer, List<EdFileInfo>> levelMap = new TreeMap<>();
|
||||||
|
for (EdFileInfo file : files) {
|
||||||
|
int len = file.getFilePath().split("_").length;
|
||||||
|
levelMap.computeIfAbsent(len, k -> new ArrayList<>()).add(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("levelMap:"+levelMap);
|
||||||
|
|
||||||
|
// 获取叶子节点
|
||||||
|
int maxLen = levelMap.lastKey();
|
||||||
|
|
||||||
|
// 从最底层的叶子节点的上级节点开始遍历,更新权限
|
||||||
|
for (int i=maxLen-1; i>0;i--) {
|
||||||
|
for (EdFileInfo fileInfo : levelMap.get(i)) {
|
||||||
|
String infoId = fileInfo.getId();
|
||||||
|
if (isLeafNode(infoId, files)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
PublishedFileDTO publishedFileDTO = new PublishedFileDTO();
|
||||||
|
publishedFileDTO.newInit();
|
||||||
|
publishedFileDTO.setFileId(infoId);
|
||||||
|
List<RolePermission> currentPermission = getCurrentPermission(publishedFileDTO);
|
||||||
|
syncNewPermissions(currentPermission, infoId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("同步项目权限结束:{}", prjId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isLeafNode(String id, List<EdFileInfo> files) {
|
||||||
|
Set<String> parentIdSet = files.stream()
|
||||||
|
.map(EdFileInfo::getParentId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
return !parentIdSet.contains(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -377,7 +377,10 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements Ro
|
||||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||||
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code)
|
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code)
|
||||||
.eq(EdFileInfo::getDataStatus, EleDataStatusEnum.PUBLISHED.code)
|
.eq(EdFileInfo::getDataStatus, EleDataStatusEnum.PUBLISHED.code)
|
||||||
.eq(EdFileInfo::getDataOwn, dataOwnCode));
|
.eq(EdFileInfo::getDataOwn, dataOwnCode))
|
||||||
|
.and(wrapper -> wrapper.eq(EdFileInfo::getDataStatus, EleDataStatusEnum.PUBLISHED.code)
|
||||||
|
.or()
|
||||||
|
.eq(EdFileInfo::getDataStatus, EleDataStatusEnum.DELETED.code));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -101,6 +101,7 @@ public class UserServiceImpl implements UserService {
|
||||||
claims.put(UserConstants.LOGIN_ADMIN_TYPE, loginInfo.getAdminType());
|
claims.put(UserConstants.LOGIN_ADMIN_TYPE, loginInfo.getAdminType());
|
||||||
return Jwts.builder()
|
return Jwts.builder()
|
||||||
.addClaims(claims)
|
.addClaims(claims)
|
||||||
|
.setId(UUID.randomUUID().toString())
|
||||||
.setIssuedAt(DateTime.now())
|
.setIssuedAt(DateTime.now())
|
||||||
.signWith(SignatureAlgorithm.HS512, UserConstants.SECRET_KEY)
|
.signWith(SignatureAlgorithm.HS512, UserConstants.SECRET_KEY)
|
||||||
.compact();
|
.compact();
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ spring.datasource.typd=com.alibaba.druid.pool.DruidDataSource
|
||||||
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/em_data_dev?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true&rewriteBatchedStatements=true
|
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/em_data_dev?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
spring.datasource.username=user
|
spring.datasource.username=user
|
||||||
spring.datasource.password=123123
|
spring.datasource.password=123123
|
||||||
|
|
||||||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||||
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
|
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
|
||||||
mybatis-plus.mapper-locations=classpath:sqlmapper/*.xml
|
mybatis-plus.mapper-locations=classpath:sqlmapper/*.xml
|
||||||
|
|
@ -12,6 +13,7 @@ spring.servlet.multipart.max-file-size=500MB
|
||||||
spring.servlet.multipart.max-request-size=500MB
|
spring.servlet.multipart.max-request-size=500MB
|
||||||
pagehelper.helperDialect=mysql
|
pagehelper.helperDialect=mysql
|
||||||
pagehelper.reasonable=false
|
pagehelper.reasonable=false
|
||||||
|
|
||||||
server.port=12396
|
server.port=12396
|
||||||
#windows文件存储目录,用于测试
|
#windows文件存储目录,用于测试
|
||||||
data.windows.path=D:/tmp/szsd/data/eleData/dev/project/
|
data.windows.path=D:/tmp/szsd/data/eleData/dev/project/
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.electromagnetic.industry.software.manage.mapper.RolePermissionMapper">
|
||||||
|
|
||||||
|
<resultMap id="RolePermissionMap" type="com.electromagnetic.industry.software.manage.pojo.models.RolePermission">
|
||||||
|
<id column="id" jdbcType="BIGINT" property="id"/>
|
||||||
|
<result column="file_id" jdbcType="VARCHAR" property="fileId"/>
|
||||||
|
<result column="permission_code" jdbcType="VARCHAR" property="permissionCode"/>
|
||||||
|
<result column="role_id" jdbcType="VARCHAR" property="roleId"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<select id="getCurrentPermission" parameterType="com.electromagnetic.industry.software.manage.pojo.req.PublishedFileDTO" resultMap="RolePermissionMap">
|
||||||
|
SELECT f.parent_id as file_id , rp.permission_code, rp.role_id
|
||||||
|
FROM ed_role_permission rp
|
||||||
|
JOIN ed_file_info f ON rp.file_id = f.id
|
||||||
|
WHERE f.parent_id = #{fileId}
|
||||||
|
AND f.prj_dir = #{prjDir}
|
||||||
|
AND f.data_status = #{dataStatus}
|
||||||
|
AND f.effect_flag = #{effectFlag}
|
||||||
|
GROUP BY rp.role_id, rp.permission_code
|
||||||
|
HAVING COUNT(f.id) = (
|
||||||
|
SELECT COUNT(f2.id)
|
||||||
|
FROM ed_file_info f2
|
||||||
|
WHERE f2.parent_id = #{fileId}
|
||||||
|
AND f2.prj_dir = #{prjDir}
|
||||||
|
AND f2.data_status = #{dataStatus}
|
||||||
|
AND f2.effect_flag = #{effectFlag}
|
||||||
|
)
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
|
|
@ -1,74 +1,21 @@
|
||||||
//import cn.hutool.core.io.FileUtil;
|
|
||||||
//import cn.hutool.core.util.IdUtil;
|
|
||||||
//import cn.hutool.core.util.ZipUtil;
|
|
||||||
//import cn.hutool.crypto.SecureUtil;
|
|
||||||
//import cn.hutool.crypto.symmetric.AES;
|
|
||||||
//import com.electromagnetic.industry.software.common.util.UserThreadLocal;
|
|
||||||
//import com.electromagnetic.industry.software.manage.Application;
|
//import com.electromagnetic.industry.software.manage.Application;
|
||||||
//import com.electromagnetic.industry.software.manage.service.FileSystemService;
|
//import com.electromagnetic.industry.software.manage.service.serviceimpl.EdPrjServiceImpl;
|
||||||
//import com.electromagnetic.industry.software.manage.service.serviceimpl.EdFileInfoServiceImpl;
|
|
||||||
//import org.junit.jupiter.api.Test;
|
//import org.junit.jupiter.api.Test;
|
||||||
//import org.springframework.beans.factory.annotation.Value;
|
|
||||||
//import org.springframework.boot.test.context.SpringBootTest;
|
//import org.springframework.boot.test.context.SpringBootTest;
|
||||||
//import org.springframework.core.env.Environment;
|
|
||||||
//
|
//
|
||||||
//import javax.annotation.PostConstruct;
|
|
||||||
//import javax.annotation.Resource;
|
//import javax.annotation.Resource;
|
||||||
//import java.io.File;
|
|
||||||
//import java.io.InputStream;
|
|
||||||
//import java.io.OutputStream;
|
|
||||||
//import java.nio.file.Files;
|
|
||||||
//import java.nio.file.Paths;
|
|
||||||
//
|
//
|
||||||
//@SpringBootTest(classes = Application.class)
|
//@SpringBootTest(classes = Application.class)
|
||||||
//public class Test1 {
|
//public class Test1 {
|
||||||
//
|
//
|
||||||
// @Resource
|
// @Resource
|
||||||
// private EdFileInfoServiceImpl edFileInfoServiceImpl;
|
// private EdPrjServiceImpl edPrjService;
|
||||||
// @Resource
|
|
||||||
// private FileSystemService fileSystemService;
|
|
||||||
//
|
|
||||||
// @Value("${file.security.passwd}")
|
|
||||||
// private String password;
|
|
||||||
//
|
|
||||||
// private String downloadDataDir = "";
|
|
||||||
// private String uploadDataDir = "";
|
|
||||||
//
|
|
||||||
// @Resource
|
|
||||||
// private Environment environment;
|
|
||||||
//
|
|
||||||
// @PostConstruct
|
|
||||||
// public void init() {
|
|
||||||
// String osName = System.getProperty("os.name").toLowerCase();
|
|
||||||
// uploadDataDir = osName.startsWith("win") ? environment.getProperty("data.upload.windows.tmp.path") : environment.getProperty("data.upload.linux.tmp.path");
|
|
||||||
// downloadDataDir = osName.startsWith("win") ? environment.getProperty("data.download.windows.tmp.path") : environment.getProperty("data.download.linux.tmp.path");
|
|
||||||
// }
|
|
||||||
//
|
//
|
||||||
// @Test
|
// @Test
|
||||||
// public void testImport() {
|
// public void testFollow() {
|
||||||
// String currentUserId = UserThreadLocal.getUserId();
|
// String sourceId = "100101";
|
||||||
// String destColibPath = "E:/tmp/测试沿用.colib";
|
// String targetId = "100323";
|
||||||
// String mainName = FileUtil.mainName(destColibPath);
|
// edPrjService.follow(sourceId, targetId);
|
||||||
// String parentDir = FileUtil.getParent(destColibPath, 1);
|
|
||||||
// String zipDirPath = parentDir + File.separator + mainName + ".zip";
|
|
||||||
// AES aes = SecureUtil.aes(password.getBytes());
|
|
||||||
// try (
|
|
||||||
// InputStream inputStream = Files.newInputStream(Paths.get(destColibPath));
|
|
||||||
// OutputStream outputStream = Files.newOutputStream(Paths.get(zipDirPath));
|
|
||||||
// ) {
|
|
||||||
// aes.decrypt(inputStream, outputStream, true);
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// e.printStackTrace();
|
|
||||||
// String info = "文件上传错误";
|
|
||||||
// System.out.println("info = " + info);
|
|
||||||
// }
|
|
||||||
// String uuid = IdUtil.fastSimpleUUID();
|
|
||||||
// String tmpDir = uploadDataDir + currentUserId + File.separator + uuid + File.separator;
|
|
||||||
// ZipUtil.unzip(zipDirPath, tmpDir);
|
|
||||||
//
|
|
||||||
// edFileInfoServiceImpl.update2Database(tmpDir);
|
|
||||||
// fileSystemService.deleteFile(zipDirPath, destColibPath);
|
|
||||||
//
|
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
//}
|
//}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue