mirror of
https://gitee.com/fit2cloud-feizhiyun/MeterSphere.git
synced 2024-12-05 13:38:58 +08:00
refactor(项目设置): 文件管理拖拽接口的重构
修改了接口入参以及的查询逻辑
This commit is contained in:
parent
d6aff9f192
commit
e9ac9d34e9
@ -1,24 +1,20 @@
|
|||||||
package io.metersphere.sdk.dto.request;
|
package io.metersphere.sdk.dto.request;
|
||||||
|
|
||||||
import io.metersphere.sdk.constants.ModuleConstants;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class NodeMoveRequest {
|
public class NodeMoveRequest {
|
||||||
@Schema(description = "模块ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
@Schema(description = "被拖拽的节点", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
@NotEmpty(message = "{node.not_blank}")
|
@NotEmpty(message = "{node.not_blank}")
|
||||||
private String nodeId;
|
private String dragNodeId;
|
||||||
|
|
||||||
@Schema(description = "父模块ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
@Schema(description = "放入的节点", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
@NotEmpty(message = "{parent.node.not_blank}")
|
@NotEmpty(message = "{node.not_blank}")
|
||||||
private String parentId = ModuleConstants.ROOT_NODE_PARENT_ID;
|
private String dropNodeId;
|
||||||
|
|
||||||
@Schema(description = "前一个节点ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
@Schema(description = "放入的位置(取值:-1,,0,,1。 -1:dropNodeId节点之前。 0:dropNodeId节点内。 1:dropNodeId节点后)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
private String previousNodeId;
|
private int dropPosition;
|
||||||
|
|
||||||
@Schema(description = "后一个节点ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
|
||||||
private String nextNodeId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -414,6 +414,7 @@ resource_pool_not_exist=资源池不存在
|
|||||||
|
|
||||||
#file management
|
#file management
|
||||||
file_module.not.exist=文件模块不存在
|
file_module.not.exist=文件模块不存在
|
||||||
|
file_module.parent.not.exist=文件模块父节点不存在
|
||||||
upload.file.error=上传文件失败
|
upload.file.error=上传文件失败
|
||||||
file.not.exist=文件不存在
|
file.not.exist=文件不存在
|
||||||
old.file.not.exist=旧文件不存在
|
old.file.not.exist=旧文件不存在
|
||||||
|
@ -450,6 +450,7 @@ resource_pool_not_exist=Resource pool does not exist
|
|||||||
|
|
||||||
#file management
|
#file management
|
||||||
file_module.not.exist=File module does not exist
|
file_module.not.exist=File module does not exist
|
||||||
|
file_module.parent.not.exist=File module parent does not exist
|
||||||
upload.file.error=Upload file error
|
upload.file.error=Upload file error
|
||||||
file.not.exist=File does not exist
|
file.not.exist=File does not exist
|
||||||
old.file.not.exist=Old file does not exist
|
old.file.not.exist=Old file does not exist
|
||||||
|
@ -449,6 +449,7 @@ resource_pool_not_exist=资源池不存在
|
|||||||
|
|
||||||
#file management
|
#file management
|
||||||
file_module.not.exist=文件模块不存在
|
file_module.not.exist=文件模块不存在
|
||||||
|
file_module.parent.not.exist=文件模块父节点不存在
|
||||||
upload.file.error=上传文件失败
|
upload.file.error=上传文件失败
|
||||||
file.not.exist=文件不存在
|
file.not.exist=文件不存在
|
||||||
old.file.not.exist=旧文件不存在
|
old.file.not.exist=旧文件不存在
|
||||||
|
@ -450,6 +450,7 @@ message.domain.schedule_enable=是否開啟
|
|||||||
resource_pool_not_exist=資源池不存在
|
resource_pool_not_exist=資源池不存在
|
||||||
#file management
|
#file management
|
||||||
file_module.not.exist=文件模塊不存在
|
file_module.not.exist=文件模塊不存在
|
||||||
|
file_module.parent.not.exist=文件模塊父節點不存在
|
||||||
upload.file.error=上傳文件失敗
|
upload.file.error=上傳文件失敗
|
||||||
file.not.exist=文件不存在
|
file.not.exist=文件不存在
|
||||||
old.file.not.exist=舊文件不存在
|
old.file.not.exist=舊文件不存在
|
||||||
|
@ -31,6 +31,13 @@ public class FileManagementController {
|
|||||||
@Resource
|
@Resource
|
||||||
private FileManagementService fileManagementService;
|
private FileManagementService fileManagementService;
|
||||||
|
|
||||||
|
@GetMapping(value = "/type/{projectId}")
|
||||||
|
@Operation(summary = "项目管理-文件管理-获取已存在的文件类型")
|
||||||
|
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ)
|
||||||
|
public List<String> getFileType(@PathVariable String projectId) {
|
||||||
|
return fileMetadataService.getFileType(projectId);
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/page")
|
@PostMapping("/page")
|
||||||
@Operation(summary = "项目管理-文件管理-表格分页查询文件")
|
@Operation(summary = "项目管理-文件管理-表格分页查询文件")
|
||||||
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ)
|
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ)
|
||||||
@ -38,6 +45,7 @@ public class FileManagementController {
|
|||||||
return fileMetadataService.page(request);
|
return fileMetadataService.page(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/module/count")
|
@PostMapping("/module/count")
|
||||||
@Operation(summary = "项目管理-文件管理-表格分页查询文件")
|
@Operation(summary = "项目管理-文件管理-表格分页查询文件")
|
||||||
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ)
|
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ)
|
||||||
|
@ -60,12 +60,7 @@ public class FileModuleController {
|
|||||||
@PostMapping("/move")
|
@PostMapping("/move")
|
||||||
@Operation(summary = "项目管理-文件管理-模块-移动模块")
|
@Operation(summary = "项目管理-文件管理-模块-移动模块")
|
||||||
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_UPDATE)
|
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_UPDATE)
|
||||||
public void moveNode(@RequestBody NodeMoveRequest request) {
|
public void moveNode(@Validated @RequestBody NodeMoveRequest request) {
|
||||||
/**
|
|
||||||
* 拖拽操作。 两种:同级移动 和 跨级移动
|
|
||||||
* 1.判断移动后的parentID,判断是否是移动到其余的目录下
|
|
||||||
* 2.拖拽后的前后ID。 用于排序。
|
|
||||||
*/
|
|
||||||
fileModuleService.moveNode(request, SessionUtils.getUserId());
|
fileModuleService.moveNode(request, SessionUtils.getUserId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
package io.metersphere.project.dto;
|
||||||
|
|
||||||
|
import io.metersphere.sdk.dto.BaseModule;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class NodeSortDTO {
|
||||||
|
|
||||||
|
@Schema(description = "模块ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@NotNull(message = "{file_module.not.exist}")
|
||||||
|
private BaseModule node;
|
||||||
|
|
||||||
|
@Schema(description = "父模块ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@NotNull(message = "{file_module.parent.not.exist}")
|
||||||
|
private BaseModule parent;
|
||||||
|
|
||||||
|
@Schema(description = "前一个节点")
|
||||||
|
private BaseModule previousNode;
|
||||||
|
|
||||||
|
@Schema(description = "后一个节点")
|
||||||
|
private BaseModule nextNode;
|
||||||
|
}
|
||||||
|
|
@ -26,4 +26,5 @@ public interface ExtFileMetadataMapper {
|
|||||||
|
|
||||||
List<FileMetadata> selectRefIdByModuleIds(@Param("moduleIds") List<String> moduleIds);
|
List<FileMetadata> selectRefIdByModuleIds(@Param("moduleIds") List<String> moduleIds);
|
||||||
|
|
||||||
|
List<String> selectFileTypeByProjectId(String projectId);
|
||||||
}
|
}
|
||||||
|
@ -117,6 +117,11 @@
|
|||||||
#{item}
|
#{item}
|
||||||
</foreach>
|
</foreach>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="selectFileTypeByProjectId" resultType="java.lang.String">
|
||||||
|
SELECT DISTINCT f.type
|
||||||
|
FROM file_metadata f
|
||||||
|
WHERE f.project_id = #{projectId}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
@ -1,5 +1,6 @@
|
|||||||
package io.metersphere.project.mapper;
|
package io.metersphere.project.mapper;
|
||||||
|
|
||||||
|
import io.metersphere.project.domain.FileModule;
|
||||||
import io.metersphere.sdk.dto.BaseTreeNode;
|
import io.metersphere.sdk.dto.BaseTreeNode;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
@ -19,4 +20,10 @@ public interface ExtFileModuleMapper {
|
|||||||
Integer getMaxPosByParentId(String parentId);
|
Integer getMaxPosByParentId(String parentId);
|
||||||
|
|
||||||
List<String> selectIdsByProjectId(String projectId);
|
List<String> selectIdsByProjectId(String projectId);
|
||||||
|
|
||||||
|
FileModule getLastModuleByParentId(String id);
|
||||||
|
|
||||||
|
FileModule getNextModuleInParentId(@Param("parentId") String parentId, @Param("pos") int pos);
|
||||||
|
|
||||||
|
FileModule getPreviousModuleInParentId(@Param("parentId") String parentId, @Param("pos") int pos);
|
||||||
}
|
}
|
||||||
|
@ -37,5 +37,29 @@
|
|||||||
SELECT id FROM file_module WHERE parent_id = #{0}
|
SELECT id FROM file_module WHERE parent_id = #{0}
|
||||||
ORDER BY pos ASC
|
ORDER BY pos ASC
|
||||||
</select>
|
</select>
|
||||||
|
<select id="getLastModuleByParentId" resultType="io.metersphere.project.domain.FileModule">
|
||||||
|
SELECT *
|
||||||
|
FROM file_module
|
||||||
|
WHERE parent_id = #{0}
|
||||||
|
ORDER BY pos DESC
|
||||||
|
LIMIT 1
|
||||||
|
</select>
|
||||||
|
<select id="getNextModuleInParentId" resultType="io.metersphere.project.domain.FileModule">
|
||||||
|
SELECT *
|
||||||
|
from file_module
|
||||||
|
WHERE parent_id = #{parentId}
|
||||||
|
AND pos > #{pos}
|
||||||
|
order by pos asc
|
||||||
|
limit 1
|
||||||
|
</select>
|
||||||
|
<select id="getPreviousModuleInParentId" resultType="io.metersphere.project.domain.FileModule">
|
||||||
|
SELECT *
|
||||||
|
from file_module
|
||||||
|
WHERE parent_id = #{parentId}
|
||||||
|
AND pos < #{pos}
|
||||||
|
order by pos
|
||||||
|
desc
|
||||||
|
limit 1
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
@ -294,14 +294,14 @@ public class FileMetadataService {
|
|||||||
|
|
||||||
//获取模块统计
|
//获取模块统计
|
||||||
public Map<String, Long> moduleCount(FileMetadataTableRequest request, String operator) {
|
public Map<String, Long> moduleCount(FileMetadataTableRequest request, String operator) {
|
||||||
//查出每个模块节点下的资源数量
|
//查出每个模块节点下的资源数量。 不需要按照模块进行筛选
|
||||||
FileManagementPageDTO pageDTO = new FileManagementPageDTO(request);
|
FileManagementPageDTO pageDTO = new FileManagementPageDTO(request);
|
||||||
|
pageDTO.setModuleIds(null);
|
||||||
List<ModuleCountDTO> moduleCountDTOList = extFileMetadataMapper.countModuleIdByKeywordAndFileType(pageDTO);
|
List<ModuleCountDTO> moduleCountDTOList = extFileMetadataMapper.countModuleIdByKeywordAndFileType(pageDTO);
|
||||||
long allCount = fileModuleService.getAllCount(moduleCountDTOList);
|
long allCount = fileModuleService.getAllCount(moduleCountDTOList);
|
||||||
|
//查出我的文件数量
|
||||||
pageDTO.setOperator(operator);
|
pageDTO.setOperator(operator);
|
||||||
long myFileCount = extFileMetadataMapper.countMyFile(pageDTO);
|
long myFileCount = extFileMetadataMapper.countMyFile(pageDTO);
|
||||||
|
|
||||||
Map<String, Long> moduleCountMap = fileModuleService.getModuleCountMap(request.getProjectId(), moduleCountDTOList);
|
Map<String, Long> moduleCountMap = fileModuleService.getModuleCountMap(request.getProjectId(), moduleCountDTOList);
|
||||||
moduleCountMap.put(FILE_MODULE_COUNT_MY, myFileCount);
|
moduleCountMap.put(FILE_MODULE_COUNT_MY, myFileCount);
|
||||||
moduleCountMap.put(FILE_MODULE_COUNT_ALL, allCount);
|
moduleCountMap.put(FILE_MODULE_COUNT_ALL, allCount);
|
||||||
@ -331,4 +331,8 @@ public class FileMetadataService {
|
|||||||
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + this.getFileName(fileMetadata.getName(), fileMetadata.getType()) + "\"")
|
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + this.getFileName(fileMetadata.getName(), fileMetadata.getType()) + "\"")
|
||||||
.body(bytes);
|
.body(bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String> getFileType(String projectId) {
|
||||||
|
return extFileMetadataMapper.selectFileTypeByProjectId(projectId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,12 +2,13 @@ package io.metersphere.project.service;
|
|||||||
|
|
||||||
import io.metersphere.project.domain.FileModule;
|
import io.metersphere.project.domain.FileModule;
|
||||||
import io.metersphere.project.domain.Project;
|
import io.metersphere.project.domain.Project;
|
||||||
|
import io.metersphere.project.dto.NodeSortDTO;
|
||||||
import io.metersphere.project.mapper.FileModuleMapper;
|
import io.metersphere.project.mapper.FileModuleMapper;
|
||||||
import io.metersphere.project.mapper.ProjectMapper;
|
import io.metersphere.project.mapper.ProjectMapper;
|
||||||
import io.metersphere.sdk.constants.HttpMethodConstants;
|
import io.metersphere.sdk.constants.HttpMethodConstants;
|
||||||
|
import io.metersphere.sdk.dto.BaseModule;
|
||||||
import io.metersphere.sdk.dto.LogDTO;
|
import io.metersphere.sdk.dto.LogDTO;
|
||||||
import io.metersphere.sdk.dto.builder.LogDTOBuilder;
|
import io.metersphere.sdk.dto.builder.LogDTOBuilder;
|
||||||
import io.metersphere.sdk.dto.request.NodeMoveRequest;
|
|
||||||
import io.metersphere.sdk.util.JSON;
|
import io.metersphere.sdk.util.JSON;
|
||||||
import io.metersphere.sdk.util.Translator;
|
import io.metersphere.sdk.util.Translator;
|
||||||
import io.metersphere.system.log.constants.OperationLogModule;
|
import io.metersphere.system.log.constants.OperationLogModule;
|
||||||
@ -16,6 +17,7 @@ import io.metersphere.system.log.service.OperationLogService;
|
|||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
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.validation.annotation.Validated;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@ -79,24 +81,11 @@ public class FileModuleLogService {
|
|||||||
operationLogService.add(dto);
|
operationLogService.add(dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveMoveLog(NodeMoveRequest request, String operator) {
|
public void saveMoveLog(@Validated NodeSortDTO request, String operator) {
|
||||||
FileModule moveNode;
|
BaseModule moveNode = request.getNode();
|
||||||
FileModule previousNode = null;
|
BaseModule previousNode = request.getPreviousNode();
|
||||||
FileModule nextNode = null;
|
BaseModule nextNode = request.getNextNode();
|
||||||
FileModule parentModule;
|
BaseModule parentModule = request.getParent();
|
||||||
moveNode = fileModuleMapper.selectByPrimaryKey(request.getNodeId());
|
|
||||||
if (request.getPreviousNodeId() != null) {
|
|
||||||
previousNode = fileModuleMapper.selectByPrimaryKey(request.getPreviousNodeId());
|
|
||||||
}
|
|
||||||
if (request.getNextNodeId() != null) {
|
|
||||||
nextNode = fileModuleMapper.selectByPrimaryKey(request.getNextNodeId());
|
|
||||||
}
|
|
||||||
|
|
||||||
parentModule = fileModuleMapper.selectByPrimaryKey(request.getParentId());
|
|
||||||
if (parentModule == null) {
|
|
||||||
parentModule = new FileModule();
|
|
||||||
parentModule.setName(Translator.get("file.module.root"));
|
|
||||||
}
|
|
||||||
|
|
||||||
Project project = projectMapper.selectByPrimaryKey(moveNode.getProjectId());
|
Project project = projectMapper.selectByPrimaryKey(moveNode.getProjectId());
|
||||||
String logContent;
|
String logContent;
|
||||||
|
@ -3,6 +3,7 @@ package io.metersphere.project.service;
|
|||||||
import io.metersphere.project.domain.FileModule;
|
import io.metersphere.project.domain.FileModule;
|
||||||
import io.metersphere.project.domain.FileModuleExample;
|
import io.metersphere.project.domain.FileModuleExample;
|
||||||
import io.metersphere.project.dto.ModuleCountDTO;
|
import io.metersphere.project.dto.ModuleCountDTO;
|
||||||
|
import io.metersphere.project.dto.NodeSortDTO;
|
||||||
import io.metersphere.project.mapper.ExtFileModuleMapper;
|
import io.metersphere.project.mapper.ExtFileModuleMapper;
|
||||||
import io.metersphere.project.mapper.FileModuleMapper;
|
import io.metersphere.project.mapper.FileModuleMapper;
|
||||||
import io.metersphere.project.request.filemanagement.FileModuleCreateRequest;
|
import io.metersphere.project.request.filemanagement.FileModuleCreateRequest;
|
||||||
@ -43,13 +44,13 @@ public class FileModuleService extends ModuleTreeService implements CleanupProje
|
|||||||
|
|
||||||
public List<BaseTreeNode> getTree(String projectId) {
|
public List<BaseTreeNode> getTree(String projectId) {
|
||||||
List<BaseTreeNode> fileModuleList = extFileModuleMapper.selectBaseByProjectId(projectId);
|
List<BaseTreeNode> fileModuleList = extFileModuleMapper.selectBaseByProjectId(projectId);
|
||||||
return this.traverseToBuildTree(fileModuleList, true);
|
return super.buildTreeAndCountResource(fileModuleList, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//节点内容只有Id和parentId
|
|
||||||
public List<BaseTreeNode> getTreeOnlyIdsAndResourceCount(String projectId, List<ModuleCountDTO> moduleCountDTOList) {
|
public List<BaseTreeNode> getTreeOnlyIdsAndResourceCount(String projectId, List<ModuleCountDTO> moduleCountDTOList) {
|
||||||
|
//节点内容只有Id和parentId
|
||||||
List<BaseTreeNode> fileModuleList = extFileModuleMapper.selectIdAndParentIdByProjectId(projectId);
|
List<BaseTreeNode> fileModuleList = extFileModuleMapper.selectIdAndParentIdByProjectId(projectId);
|
||||||
return this.traverseToBuildTree(fileModuleList, moduleCountDTOList, true);
|
return super.buildTreeAndCountResource(fileModuleList, moduleCountDTOList, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String add(FileModuleCreateRequest request, String operator) {
|
public String add(FileModuleCreateRequest request, String operator) {
|
||||||
@ -150,28 +151,92 @@ public class FileModuleService extends ModuleTreeService implements CleanupProje
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void moveNode(NodeMoveRequest request, String currentUser) {
|
public void moveNode(NodeMoveRequest request, String currentUser) {
|
||||||
|
BaseModule module;
|
||||||
|
BaseModule parentModule;
|
||||||
|
BaseModule previousNode = null;
|
||||||
|
BaseModule nextNode = null;
|
||||||
|
|
||||||
|
FileModule dragNode = fileModuleMapper.selectByPrimaryKey(request.getDragNodeId());
|
||||||
|
if (dragNode == null) {
|
||||||
|
throw new MSException("file_module.not.exist:" + request.getDragNodeId());
|
||||||
|
} else {
|
||||||
|
module = new BaseModule(dragNode.getId(), dragNode.getName(), dragNode.getPos(), dragNode.getProjectId(), dragNode.getParentId());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.equals(request.getDragNodeId(), request.getDropNodeId())) {
|
||||||
|
//两种节点不能一样
|
||||||
|
throw new MSException(Translator.get("invalid_parameter"));
|
||||||
|
}
|
||||||
|
|
||||||
|
FileModule dropNode = fileModuleMapper.selectByPrimaryKey(request.getDropNodeId());
|
||||||
|
if (dropNode == null) {
|
||||||
|
throw new MSException("file_module.not.exist:" + request.getDropNodeId());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request.getDropPosition() == 0) {
|
||||||
|
//dropPosition=0: 放到dropNode节点内,最后一个节点之后
|
||||||
|
parentModule = new BaseModule(dropNode.getId(), dropNode.getName(), dropNode.getPos(), dropNode.getProjectId(), dropNode.getParentId());
|
||||||
|
FileModule previousModule = extFileModuleMapper.getLastModuleByParentId(parentModule.getId());
|
||||||
|
if (previousModule != null) {
|
||||||
|
previousNode = new BaseModule(previousModule.getId(), previousModule.getName(), previousModule.getPos(), previousModule.getProjectId(), previousModule.getParentId());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (StringUtils.equals(dropNode.getParentId(), ModuleConstants.ROOT_NODE_PARENT_ID)) {
|
||||||
|
parentModule = new BaseModule(ModuleConstants.ROOT_NODE_PARENT_ID, ModuleConstants.ROOT_NODE_PARENT_ID, 0, module.getProjectId(), ModuleConstants.ROOT_NODE_PARENT_ID);
|
||||||
|
} else {
|
||||||
|
FileModule parent = fileModuleMapper.selectByPrimaryKey(dropNode.getParentId());
|
||||||
|
parentModule = new BaseModule(parent.getId(), parent.getName(), parent.getPos(), parent.getProjectId(), parent.getParentId());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request.getDropPosition() == 1) {
|
||||||
|
//dropPosition=1: 放到dropNode节点后,原dropNode后面的节点之前
|
||||||
|
previousNode = new BaseModule(dropNode.getId(), dropNode.getName(), dropNode.getPos(), dropNode.getProjectId(), dropNode.getParentId());
|
||||||
|
FileModule nextModule = extFileModuleMapper.getNextModuleInParentId(previousNode.getParentId(), previousNode.getPos());
|
||||||
|
if (nextModule != null) {
|
||||||
|
nextNode = new BaseModule(nextModule.getId(), nextModule.getName(), nextModule.getPos(), nextModule.getProjectId(), nextModule.getParentId());
|
||||||
|
}
|
||||||
|
} else if (request.getDropPosition() == -1) {
|
||||||
|
//dropPosition=-1: 放到dropNode节点前,原dropNode前面的节点之后
|
||||||
|
nextNode = new BaseModule(dropNode.getId(), dropNode.getName(), dropNode.getPos(), dropNode.getProjectId(), dropNode.getParentId());
|
||||||
|
FileModule previousModule = extFileModuleMapper.getPreviousModuleInParentId(nextNode.getParentId(), nextNode.getPos());
|
||||||
|
if (previousModule != null) {
|
||||||
|
previousNode = new BaseModule(previousModule.getId(), previousModule.getName(), previousModule.getPos(), previousModule.getProjectId(), previousModule.getParentId());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new MSException(Translator.get("invalid_parameter"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FileModuleExample example = new FileModuleExample();
|
FileModuleExample example = new FileModuleExample();
|
||||||
example.createCriteria().andParentIdEqualTo(request.getParentId()).andIdEqualTo(request.getNodeId());
|
example.createCriteria().andParentIdEqualTo(parentModule.getId()).andIdEqualTo(module.getId());
|
||||||
|
//节点换到了别的节点下,要先更新parent节点.
|
||||||
if (fileModuleMapper.countByExample(example) == 0) {
|
if (fileModuleMapper.countByExample(example) == 0) {
|
||||||
//节点换到了别的节点下
|
|
||||||
FileModule fileModule = new FileModule();
|
FileModule fileModule = new FileModule();
|
||||||
fileModule.setId(request.getNodeId());
|
fileModule.setId(module.getId());
|
||||||
fileModule.setParentId(request.getParentId());
|
fileModule.setParentId(parentModule.getId());
|
||||||
fileModuleMapper.updateByPrimaryKeySelective(fileModule);
|
fileModuleMapper.updateByPrimaryKeySelective(fileModule);
|
||||||
}
|
}
|
||||||
this.sort(request);
|
|
||||||
|
NodeSortDTO nodeMoveDTO = new NodeSortDTO(module, parentModule, previousNode, nextNode);
|
||||||
|
super.sort(nodeMoveDTO);
|
||||||
|
|
||||||
//记录日志
|
//记录日志
|
||||||
fileModuleLogService.saveMoveLog(request, currentUser);
|
fileModuleLogService.saveMoveLog(nodeMoveDTO, currentUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查找当前项目下模块每个节点对应的资源统计
|
||||||
|
*
|
||||||
|
* @param projectId
|
||||||
|
* @param moduleCountDTOList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public Map<String, Long> getModuleCountMap(String projectId, List<ModuleCountDTO> moduleCountDTOList) {
|
public Map<String, Long> getModuleCountMap(String projectId, List<ModuleCountDTO> moduleCountDTOList) {
|
||||||
//构建模块树,然后统计每个节点下的所有数量(包含子节点)
|
|
||||||
List<BaseTreeNode> treeNodeList = this.getTreeOnlyIdsAndResourceCount(projectId, moduleCountDTOList);
|
|
||||||
Map<String, Long> returnMap = new HashMap<>();
|
Map<String, Long> returnMap = new HashMap<>();
|
||||||
|
//构建模块树,并计算每个节点下的所有数量(包含子节点)
|
||||||
List<BaseTreeNode> whileList = new ArrayList<>(treeNodeList);
|
List<BaseTreeNode> treeNodeList = this.getTreeOnlyIdsAndResourceCount(projectId, moduleCountDTOList);
|
||||||
//通过广度遍历的方式构建返回值
|
//通过广度遍历的方式构建返回值
|
||||||
|
List<BaseTreeNode> whileList = new ArrayList<>(treeNodeList);
|
||||||
while (CollectionUtils.isNotEmpty(whileList)) {
|
while (CollectionUtils.isNotEmpty(whileList)) {
|
||||||
List<BaseTreeNode> childList = new ArrayList<>();
|
List<BaseTreeNode> childList = new ArrayList<>();
|
||||||
for (BaseTreeNode treeNode : whileList) {
|
for (BaseTreeNode treeNode : whileList) {
|
||||||
@ -183,15 +248,6 @@ public class FileModuleService extends ModuleTreeService implements CleanupProje
|
|||||||
return returnMap;
|
return returnMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BaseModule getNode(String id) {
|
|
||||||
FileModule module = fileModuleMapper.selectByPrimaryKey(id);
|
|
||||||
if (module == null) {
|
|
||||||
return null;
|
|
||||||
} else {
|
|
||||||
return new BaseModule(module.getId(), module.getName(), module.getPos(), module.getProjectId(), module.getParentId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updatePos(String id, int pos) {
|
public void updatePos(String id, int pos) {
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
package io.metersphere.project.service;
|
package io.metersphere.project.service;
|
||||||
|
|
||||||
import io.metersphere.project.dto.ModuleCountDTO;
|
import io.metersphere.project.dto.ModuleCountDTO;
|
||||||
|
import io.metersphere.project.dto.NodeSortDTO;
|
||||||
import io.metersphere.sdk.constants.ModuleConstants;
|
import io.metersphere.sdk.constants.ModuleConstants;
|
||||||
import io.metersphere.sdk.dto.BaseModule;
|
import io.metersphere.sdk.dto.BaseModule;
|
||||||
import io.metersphere.sdk.dto.BaseTreeNode;
|
import io.metersphere.sdk.dto.BaseTreeNode;
|
||||||
import io.metersphere.sdk.dto.request.NodeMoveRequest;
|
|
||||||
import io.metersphere.sdk.util.Translator;
|
import io.metersphere.sdk.util.Translator;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -26,9 +27,13 @@ public abstract class ModuleTreeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<BaseTreeNode> traverseToBuildTree(List<BaseTreeNode> traverseList, @NotNull List<ModuleCountDTO> moduleCountDTOList, boolean haveVirtualRootNode) {
|
//构建树结构,并为每个节点计算资源数量
|
||||||
List<BaseTreeNode> baseTreeNodeList = this.traverseToBuildTree(traverseList, haveVirtualRootNode);
|
public List<BaseTreeNode> buildTreeAndCountResource(List<BaseTreeNode> traverseList, @NotNull List<ModuleCountDTO> moduleCountDTOList, boolean haveVirtualRootNode) {
|
||||||
|
//构建模块树
|
||||||
|
List<BaseTreeNode> baseTreeNodeList = this.buildTreeAndCountResource(traverseList, haveVirtualRootNode);
|
||||||
|
//构建模块节点统计的数据结构
|
||||||
Map<String, Integer> resourceCountMap = moduleCountDTOList.stream().collect(Collectors.toMap(ModuleCountDTO::getModuleId, ModuleCountDTO::getDataCount));
|
Map<String, Integer> resourceCountMap = moduleCountDTOList.stream().collect(Collectors.toMap(ModuleCountDTO::getModuleId, ModuleCountDTO::getDataCount));
|
||||||
|
//为每个节点赋值资源数量
|
||||||
this.sumModuleResourceCount(baseTreeNodeList, resourceCountMap);
|
this.sumModuleResourceCount(baseTreeNodeList, resourceCountMap);
|
||||||
return baseTreeNodeList;
|
return baseTreeNodeList;
|
||||||
}
|
}
|
||||||
@ -38,9 +43,8 @@ public abstract class ModuleTreeService {
|
|||||||
*
|
*
|
||||||
* @param traverseList 要遍历的节点集合(会被清空)
|
* @param traverseList 要遍历的节点集合(会被清空)
|
||||||
* @param haveVirtualRootNode 是否包含虚拟跟节点
|
* @param haveVirtualRootNode 是否包含虚拟跟节点
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
public List<BaseTreeNode> traverseToBuildTree(List<BaseTreeNode> traverseList, boolean haveVirtualRootNode) {
|
public List<BaseTreeNode> buildTreeAndCountResource(List<BaseTreeNode> traverseList, boolean haveVirtualRootNode) {
|
||||||
List<BaseTreeNode> baseTreeNodeList = new ArrayList<>();
|
List<BaseTreeNode> baseTreeNodeList = new ArrayList<>();
|
||||||
if (haveVirtualRootNode) {
|
if (haveVirtualRootNode) {
|
||||||
BaseTreeNode defaultNode = this.getDefaultModule();
|
BaseTreeNode defaultNode = this.getDefaultModule();
|
||||||
@ -78,13 +82,14 @@ public abstract class ModuleTreeService {
|
|||||||
/**
|
/**
|
||||||
* 模块树排序
|
* 模块树排序
|
||||||
*/
|
*/
|
||||||
public void sort(NodeMoveRequest nodeMoveRequest) {
|
public void sort(@Validated NodeSortDTO nodeMoveDTO) {
|
||||||
// 获取相邻节点
|
// 获取相邻节点
|
||||||
BaseModule previousNode = getNode(nodeMoveRequest.getPreviousNodeId());
|
BaseModule previousNode = nodeMoveDTO.getPreviousNode();
|
||||||
BaseModule nextNode = getNode(nodeMoveRequest.getNextNodeId());
|
BaseModule nextNode = nodeMoveDTO.getNextNode();
|
||||||
|
|
||||||
if (previousNode == null && nextNode == null) {
|
if (previousNode == null && nextNode == null) {
|
||||||
// 没有相邻节点,pos为0
|
// 没有相邻节点,pos为0
|
||||||
updatePos(nodeMoveRequest.getNodeId(), 0);
|
updatePos(nodeMoveDTO.getNode().getId(), 0);
|
||||||
} else {
|
} else {
|
||||||
boolean refreshPos = false;
|
boolean refreshPos = false;
|
||||||
int pos;
|
int pos;
|
||||||
@ -103,24 +108,19 @@ public abstract class ModuleTreeService {
|
|||||||
pos = previousNode.getPos() + quantityDifference;
|
pos = previousNode.getPos() + quantityDifference;
|
||||||
}
|
}
|
||||||
|
|
||||||
updatePos(nodeMoveRequest.getNodeId(), pos);
|
updatePos(nodeMoveDTO.getNode().getId(), pos);
|
||||||
if (refreshPos) {
|
if (refreshPos) {
|
||||||
refreshPos(nodeMoveRequest.getParentId());
|
refreshPos(nodeMoveDTO.getParent().getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract BaseModule getNode(String id);
|
|
||||||
|
|
||||||
public abstract void updatePos(String id, int pos);
|
public abstract void updatePos(String id, int pos);
|
||||||
|
|
||||||
public abstract void refreshPos(String parentId);
|
public abstract void refreshPos(String parentId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过深度遍历的方式,将资源数量复制到节点上,并将子节点上的资源数量统计到父节点上
|
* 通过深度遍历的方式,在为节点赋值资源统计数量的同时,同步计算其子节点的资源数量,并添加到父节点上
|
||||||
*
|
|
||||||
* @param baseTreeNodeList
|
|
||||||
* @param resourceCountMap
|
|
||||||
*/
|
*/
|
||||||
private void sumModuleResourceCount(List<BaseTreeNode> baseTreeNodeList, Map<String, Integer> resourceCountMap) {
|
private void sumModuleResourceCount(List<BaseTreeNode> baseTreeNodeList, Map<String, Integer> resourceCountMap) {
|
||||||
for (BaseTreeNode node : baseTreeNodeList) {
|
for (BaseTreeNode node : baseTreeNodeList) {
|
||||||
|
@ -114,6 +114,17 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
Assertions.assertEquals(result.getCurrent(), request.getCurrent());
|
Assertions.assertEquals(result.getCurrent(), request.getCurrent());
|
||||||
//返回的数据量不超过规定要返回的数据量相同
|
//返回的数据量不超过规定要返回的数据量相同
|
||||||
Assertions.assertTrue(JSON.parseArray(JSON.toJSONString(result.getList())).size() <= request.getPageSize());
|
Assertions.assertTrue(JSON.parseArray(JSON.toJSONString(result.getList())).size() <= request.getPageSize());
|
||||||
|
|
||||||
|
//此时该接口数量应该为空
|
||||||
|
List<String> fileTypes = this.getFileType();
|
||||||
|
Assertions.assertTrue(fileTypes.isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getFileType() throws Exception {
|
||||||
|
MvcResult fileTypeResult = this.requestGetWithOkAndReturn(String.format(FileManagementRequestUtils.URL_FILE_TYPE, project.getId()));
|
||||||
|
String returnData = fileTypeResult.getResponse().getContentAsString(StandardCharsets.UTF_8);
|
||||||
|
ResultHolder resultHolder = JSON.parseObject(returnData, ResultHolder.class);
|
||||||
|
return JSON.parseArray(JSON.toJSONString(resultHolder.getData()), String.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -362,6 +373,8 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
public void fileUploadTestSuccess() throws Exception {
|
public void fileUploadTestSuccess() throws Exception {
|
||||||
this.preliminaryData();
|
this.preliminaryData();
|
||||||
|
|
||||||
|
List<String> uploadedFileTypes = new ArrayList<>();
|
||||||
|
|
||||||
FileUploadRequest fileUploadRequest = new FileUploadRequest();
|
FileUploadRequest fileUploadRequest = new FileUploadRequest();
|
||||||
fileUploadRequest.setProjectId(project.getId());
|
fileUploadRequest.setProjectId(project.getId());
|
||||||
|
|
||||||
@ -375,6 +388,14 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
String returnId = JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class).getData().toString();
|
String returnId = JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class).getData().toString();
|
||||||
checkLog(returnId, OperationLogType.ADD, FileManagementRequestUtils.URL_FILE_UPLOAD);
|
checkLog(returnId, OperationLogType.ADD, FileManagementRequestUtils.URL_FILE_UPLOAD);
|
||||||
FILE_ID_PATH.put(returnId, filePath);
|
FILE_ID_PATH.put(returnId, filePath);
|
||||||
|
uploadedFileTypes.add("JPG");
|
||||||
|
|
||||||
|
//检查文件类型获取接口有没有获取到数据
|
||||||
|
List<String> fileTypes = this.getFileType();
|
||||||
|
Assertions.assertEquals(fileTypes.size(), uploadedFileTypes.size());
|
||||||
|
for (String fileType : fileTypes) {
|
||||||
|
Assertions.assertTrue(uploadedFileTypes.contains(fileType));
|
||||||
|
}
|
||||||
|
|
||||||
//文件上传到a1-a1节点
|
//文件上传到a1-a1节点
|
||||||
BaseTreeNode a1a1Node = FileManagementBaseUtils.getNodeByName(preliminaryTreeNodes, "a1-a1");
|
BaseTreeNode a1a1Node = FileManagementBaseUtils.getNodeByName(preliminaryTreeNodes, "a1-a1");
|
||||||
@ -382,7 +403,7 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
fileUploadRequest.setProjectId(project.getId());
|
fileUploadRequest.setProjectId(project.getId());
|
||||||
fileUploadRequest.setModuleId(a1a1Node.getId());
|
fileUploadRequest.setModuleId(a1a1Node.getId());
|
||||||
filePath = Objects.requireNonNull(this.getClass().getClassLoader().getResource("file/txtFile.txt")).getPath();
|
filePath = Objects.requireNonNull(this.getClass().getClassLoader().getResource("file/txtFile.txt")).getPath();
|
||||||
file = new MockMultipartFile("file", "txtFile.JPG", MediaType.APPLICATION_OCTET_STREAM_VALUE, FileManagementBaseUtils.getFileBytes(filePath));
|
file = new MockMultipartFile("file", "txtFile.txt", MediaType.APPLICATION_OCTET_STREAM_VALUE, FileManagementBaseUtils.getFileBytes(filePath));
|
||||||
paramMap = new LinkedMultiValueMap<>();
|
paramMap = new LinkedMultiValueMap<>();
|
||||||
paramMap.add("file", file);
|
paramMap.add("file", file);
|
||||||
paramMap.add("request", JSON.toJSONString(fileUploadRequest));
|
paramMap.add("request", JSON.toJSONString(fileUploadRequest));
|
||||||
@ -390,6 +411,15 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
returnId = JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class).getData().toString();
|
returnId = JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class).getData().toString();
|
||||||
checkLog(returnId, OperationLogType.ADD, FileManagementRequestUtils.URL_FILE_UPLOAD);
|
checkLog(returnId, OperationLogType.ADD, FileManagementRequestUtils.URL_FILE_UPLOAD);
|
||||||
FILE_ID_PATH.put(returnId, filePath);
|
FILE_ID_PATH.put(returnId, filePath);
|
||||||
|
uploadedFileTypes.add("txt");
|
||||||
|
|
||||||
|
//检查文件类型获取接口有没有获取到数据
|
||||||
|
fileTypes = this.getFileType();
|
||||||
|
Assertions.assertEquals(fileTypes.size(), uploadedFileTypes.size());
|
||||||
|
for (String fileType : fileTypes) {
|
||||||
|
Assertions.assertTrue(uploadedFileTypes.contains(fileType));
|
||||||
|
}
|
||||||
|
|
||||||
//没后缀的文件 (同时上传到a1-a1节点)
|
//没后缀的文件 (同时上传到a1-a1节点)
|
||||||
filePath = Objects.requireNonNull(this.getClass().getClassLoader().getResource("file/noSuffixFile")).getPath();
|
filePath = Objects.requireNonNull(this.getClass().getClassLoader().getResource("file/noSuffixFile")).getPath();
|
||||||
file = new MockMultipartFile("file", "noSuffixFile", MediaType.APPLICATION_OCTET_STREAM_VALUE, FileManagementBaseUtils.getFileBytes(filePath));
|
file = new MockMultipartFile("file", "noSuffixFile", MediaType.APPLICATION_OCTET_STREAM_VALUE, FileManagementBaseUtils.getFileBytes(filePath));
|
||||||
@ -400,6 +430,14 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
returnId = JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class).getData().toString();
|
returnId = JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class).getData().toString();
|
||||||
checkLog(returnId, OperationLogType.ADD, FileManagementRequestUtils.URL_FILE_UPLOAD);
|
checkLog(returnId, OperationLogType.ADD, FileManagementRequestUtils.URL_FILE_UPLOAD);
|
||||||
FILE_ID_PATH.put(returnId, filePath);
|
FILE_ID_PATH.put(returnId, filePath);
|
||||||
|
uploadedFileTypes.add(StringUtils.EMPTY);
|
||||||
|
|
||||||
|
//检查文件类型获取接口有没有获取到数据
|
||||||
|
fileTypes = this.getFileType();
|
||||||
|
Assertions.assertEquals(fileTypes.size(), uploadedFileTypes.size());
|
||||||
|
for (String fileType : fileTypes) {
|
||||||
|
Assertions.assertTrue(uploadedFileTypes.contains(fileType));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -888,18 +926,18 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
//父节点内移动-移动到首位 a1挪到a3后面
|
//父节点内移动-移动到首位 a1挪到a3后面
|
||||||
NodeMoveRequest request = new NodeMoveRequest();
|
NodeMoveRequest request = new NodeMoveRequest();
|
||||||
{
|
{
|
||||||
request.setNodeId(a1Node.getId());
|
request.setDragNodeId(a1Node.getId());
|
||||||
request.setPreviousNodeId(a3Node.getId());
|
request.setDropNodeId(a3Node.getId());
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropPosition(1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a3Node.getId(), a1Node.getId(), null, false);
|
this.checkModulePos(a3Node.getId(), a1Node.getId(), null, false);
|
||||||
}
|
}
|
||||||
//父节点内移动-移动到末位 在上面的基础上,a1挪到a2上面
|
//父节点内移动-移动到末位 在上面的基础上,a1挪到a2上面
|
||||||
{
|
{
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a1Node.getId());
|
request.setDragNodeId(a1Node.getId());
|
||||||
request.setNextNodeId(a2Node.getId());
|
request.setDropNodeId(a2Node.getId());
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropPosition(-1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a1Node.getId(), a2Node.getId(), null, false);
|
this.checkModulePos(a1Node.getId(), a2Node.getId(), null, false);
|
||||||
}
|
}
|
||||||
@ -907,17 +945,16 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
//父节点内移动-移动到中位 a1移动到a2-a3中间
|
//父节点内移动-移动到中位 a1移动到a2-a3中间
|
||||||
{
|
{
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a1Node.getId());
|
request.setDragNodeId(a1Node.getId());
|
||||||
request.setPreviousNodeId(a2Node.getId());
|
request.setDropNodeId(a2Node.getId());
|
||||||
request.setNextNodeId(a3Node.getId());
|
request.setDropPosition(1);
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a2Node.getId(), a1Node.getId(), a3Node.getId(), false);
|
this.checkModulePos(a2Node.getId(), a1Node.getId(), a3Node.getId(), false);
|
||||||
//移动回去
|
//移动回去
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a1Node.getId());
|
request.setDragNodeId(a1Node.getId());
|
||||||
request.setNextNodeId(a2Node.getId());
|
request.setDropNodeId(a2Node.getId());
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropPosition(-1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a1Node.getId(), a2Node.getId(), null, false);
|
this.checkModulePos(a1Node.getId(), a2Node.getId(), null, false);
|
||||||
}
|
}
|
||||||
@ -925,16 +962,16 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
//跨节点移动-移动到首位 a3移动到a1-b1前面,然后移动回来;
|
//跨节点移动-移动到首位 a3移动到a1-b1前面,然后移动回来;
|
||||||
{
|
{
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setNextNodeId(a1b1Node.getId());
|
request.setDropNodeId(a1b1Node.getId());
|
||||||
request.setParentId(a1Node.getId());
|
request.setDropPosition(-1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a3Node.getId(), a1b1Node.getId(), null, false);
|
this.checkModulePos(a3Node.getId(), a1b1Node.getId(), null, false);
|
||||||
//移动回去
|
//移动回去
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setPreviousNodeId(a2Node.getId());
|
request.setDropNodeId(a2Node.getId());
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropPosition(1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
||||||
}
|
}
|
||||||
@ -942,16 +979,16 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
//跨节点移动-移动到末尾 a3移动到a1-a1后面,然后移动回来;
|
//跨节点移动-移动到末尾 a3移动到a1-a1后面,然后移动回来;
|
||||||
{
|
{
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setPreviousNodeId(a1a1Node.getId());
|
request.setDropNodeId(a1a1Node.getId());
|
||||||
request.setParentId(a1Node.getId());
|
request.setDropPosition(1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a1a1Node.getId(), a3Node.getId(), null, false);
|
this.checkModulePos(a1a1Node.getId(), a3Node.getId(), null, false);
|
||||||
//移动回去
|
//移动回去
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setPreviousNodeId(a2Node.getId());
|
request.setDropNodeId(a2Node.getId());
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropPosition(1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
||||||
}
|
}
|
||||||
@ -959,17 +996,16 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
//跨节点移动-移动到中位 a3移动到a1-b1和a1-a1中间,然后移动回来;
|
//跨节点移动-移动到中位 a3移动到a1-b1和a1-a1中间,然后移动回来;
|
||||||
{
|
{
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setPreviousNodeId(a1b1Node.getId());
|
request.setDropNodeId(a1b1Node.getId());
|
||||||
request.setNextNodeId(a1a1Node.getId());
|
request.setDropPosition(1);
|
||||||
request.setParentId(a1Node.getId());
|
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a1b1Node.getId(), a3Node.getId(), a1a1Node.getId(), false);
|
this.checkModulePos(a1b1Node.getId(), a3Node.getId(), a1a1Node.getId(), false);
|
||||||
//移动回去
|
//移动回去
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setPreviousNodeId(a2Node.getId());
|
request.setDropNodeId(a2Node.getId());
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropPosition(1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
||||||
}
|
}
|
||||||
@ -984,17 +1020,17 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
|
|
||||||
//开始移动
|
//开始移动
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setNextNodeId(a1Node.getId());
|
request.setDropNodeId(a1Node.getId());
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropPosition(-1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a3Node.getId(), a1Node.getId(), null, true);
|
this.checkModulePos(a3Node.getId(), a1Node.getId(), null, true);
|
||||||
|
|
||||||
//移动回去
|
//移动回去
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setPreviousNodeId(a2Node.getId());
|
request.setDropNodeId(a2Node.getId());
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropPosition(1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
||||||
}
|
}
|
||||||
@ -1012,18 +1048,17 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
|
|
||||||
//开始移动
|
//开始移动
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setPreviousNodeId(a1Node.getId());
|
request.setDropNodeId(a1Node.getId());
|
||||||
request.setNextNodeId(a2Node.getId());
|
request.setDropPosition(1);
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a1Node.getId(), a3Node.getId(), a2Node.getId(), true);
|
this.checkModulePos(a1Node.getId(), a3Node.getId(), a2Node.getId(), true);
|
||||||
|
|
||||||
//移动回去
|
//移动回去
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setPreviousNodeId(a2Node.getId());
|
request.setDropNodeId(a2Node.getId());
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropPosition(1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
||||||
}
|
}
|
||||||
@ -1037,17 +1072,17 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
|
|
||||||
//开始移动
|
//开始移动
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setNextNodeId(a1b1Node.getId());
|
request.setDropNodeId(a1b1Node.getId());
|
||||||
request.setParentId(a1Node.getId());
|
request.setDropPosition(-1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a3Node.getId(), a1b1Node.getId(), null, true);
|
this.checkModulePos(a3Node.getId(), a1b1Node.getId(), null, true);
|
||||||
|
|
||||||
//移动回去
|
//移动回去
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setPreviousNodeId(a2Node.getId());
|
request.setDropNodeId(a2Node.getId());
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropPosition(1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
||||||
}
|
}
|
||||||
@ -1064,18 +1099,17 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
|
|
||||||
//开始移动
|
//开始移动
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setPreviousNodeId(a1b1Node.getId());
|
request.setDropNodeId(a1a1Node.getId());
|
||||||
request.setNextNodeId(a1a1Node.getId());
|
request.setDropPosition(-1);
|
||||||
request.setParentId(a1Node.getId());
|
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a1b1Node.getId(), a3Node.getId(), a1a1Node.getId(), true);
|
this.checkModulePos(a1b1Node.getId(), a3Node.getId(), a1a1Node.getId(), true);
|
||||||
|
|
||||||
//移动回去
|
//移动回去
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setPreviousNodeId(a2Node.getId());
|
request.setDropNodeId(a2Node.getId());
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropPosition(1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
||||||
}
|
}
|
||||||
@ -1083,17 +1117,18 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
{
|
{
|
||||||
//开始移动
|
//开始移动
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setParentId(a2Node.getId());
|
request.setDropNodeId(a2Node.getId());
|
||||||
|
request.setDropPosition(0);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
FileModule a3Module = fileModuleMapper.selectByPrimaryKey(a3Node.getId());
|
FileModule a3Module = fileModuleMapper.selectByPrimaryKey(a3Node.getId());
|
||||||
Assertions.assertEquals(a3Module.getParentId(), a2Node.getId());
|
Assertions.assertEquals(a3Module.getParentId(), a2Node.getId());
|
||||||
|
|
||||||
//移动回去
|
//移动回去
|
||||||
request = new NodeMoveRequest();
|
request = new NodeMoveRequest();
|
||||||
request.setNodeId(a3Node.getId());
|
request.setDragNodeId(a3Node.getId());
|
||||||
request.setPreviousNodeId(a2Node.getId());
|
request.setDropNodeId(a2Node.getId());
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropPosition(1);
|
||||||
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostWithOk(FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
this.checkModulePos(a2Node.getId(), a3Node.getId(), null, false);
|
||||||
}
|
}
|
||||||
@ -1102,6 +1137,60 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
checkLog(a3Node.getId(), OperationLogType.UPDATE, FileManagementRequestUtils.URL_MODULE_MOVE);
|
checkLog(a3Node.getId(), OperationLogType.UPDATE, FileManagementRequestUtils.URL_MODULE_MOVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Order(81)
|
||||||
|
public void moveTestError() throws Exception {
|
||||||
|
this.preliminaryData();
|
||||||
|
BaseTreeNode a1Node = FileManagementBaseUtils.getNodeByName(preliminaryTreeNodes, "a1");
|
||||||
|
BaseTreeNode a2Node = FileManagementBaseUtils.getNodeByName(preliminaryTreeNodes, "a2");
|
||||||
|
//drag节点为空
|
||||||
|
NodeMoveRequest request = new NodeMoveRequest();
|
||||||
|
request.setDragNodeId(null);
|
||||||
|
request.setDropNodeId(a1Node.getId());
|
||||||
|
request.setDropPosition(1);
|
||||||
|
this.requestPost(FileManagementRequestUtils.URL_MODULE_MOVE, request).andExpect(status().isBadRequest());
|
||||||
|
//drag节点不存在
|
||||||
|
request = new NodeMoveRequest();
|
||||||
|
request.setDragNodeId(IDGenerator.nextStr());
|
||||||
|
request.setDropNodeId(a1Node.getId());
|
||||||
|
request.setDropPosition(1);
|
||||||
|
this.requestPost(FileManagementRequestUtils.URL_MODULE_MOVE, request).andExpect(status().is5xxServerError());
|
||||||
|
|
||||||
|
//drop节点为空
|
||||||
|
request = new NodeMoveRequest();
|
||||||
|
request.setDragNodeId(a1Node.getId());
|
||||||
|
request.setDropNodeId(null);
|
||||||
|
request.setDropPosition(1);
|
||||||
|
this.requestPost(FileManagementRequestUtils.URL_MODULE_MOVE, request).andExpect(status().isBadRequest());
|
||||||
|
|
||||||
|
//drop节点不存在
|
||||||
|
request = new NodeMoveRequest();
|
||||||
|
request.setDragNodeId(a1Node.getId());
|
||||||
|
request.setDropNodeId(IDGenerator.nextStr());
|
||||||
|
request.setDropPosition(1);
|
||||||
|
this.requestPost(FileManagementRequestUtils.URL_MODULE_MOVE, request).andExpect(status().is5xxServerError());
|
||||||
|
|
||||||
|
//position为0的时候节点不存在
|
||||||
|
request = new NodeMoveRequest();
|
||||||
|
request.setDragNodeId(a1Node.getId());
|
||||||
|
request.setDropNodeId(IDGenerator.nextStr());
|
||||||
|
request.setDropPosition(0);
|
||||||
|
this.requestPost(FileManagementRequestUtils.URL_MODULE_MOVE, request).andExpect(status().is5xxServerError());
|
||||||
|
|
||||||
|
//dragNode和dropNode一样
|
||||||
|
request = new NodeMoveRequest();
|
||||||
|
request.setDragNodeId(a1Node.getId());
|
||||||
|
request.setDropNodeId(a1Node.getId());
|
||||||
|
request.setDropPosition(1);
|
||||||
|
this.requestPost(FileManagementRequestUtils.URL_MODULE_MOVE, request).andExpect(status().is5xxServerError());
|
||||||
|
|
||||||
|
//position不是-1 0 1
|
||||||
|
request = new NodeMoveRequest();
|
||||||
|
request.setDragNodeId(a1Node.getId());
|
||||||
|
request.setDropNodeId(a2Node.getId());
|
||||||
|
request.setDropPosition(4);
|
||||||
|
this.requestPost(FileManagementRequestUtils.URL_MODULE_MOVE, request).andExpect(status().is5xxServerError());
|
||||||
|
}
|
||||||
@Test
|
@Test
|
||||||
@Order(90)
|
@Order(90)
|
||||||
public void deleteModuleTestSuccess() throws Exception {
|
public void deleteModuleTestSuccess() throws Exception {
|
||||||
@ -1126,6 +1215,9 @@ public class FileManagementControllerTests extends BaseTest {
|
|||||||
|
|
||||||
//service层判断:测试删除空集合
|
//service层判断:测试删除空集合
|
||||||
fileModuleService.deleteModule(new ArrayList<>());
|
fileModuleService.deleteModule(new ArrayList<>());
|
||||||
|
|
||||||
|
//service层判断:测试删除项目
|
||||||
|
fileModuleService.deleteResources(project.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkModuleIsEmpty(String id) {
|
private void checkModuleIsEmpty(String id) {
|
||||||
|
@ -130,8 +130,10 @@ public class FileManagementPermissionControllerTests extends BaseTest {
|
|||||||
|
|
||||||
{
|
{
|
||||||
NodeMoveRequest request = new NodeMoveRequest();
|
NodeMoveRequest request = new NodeMoveRequest();
|
||||||
request.setNodeId(TEST_ID);
|
request.setDragNodeId(TEST_ID);
|
||||||
request.setParentId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
request.setDropNodeId(ModuleConstants.ROOT_NODE_PARENT_ID);
|
||||||
|
request.setDropPosition(0);
|
||||||
|
|
||||||
this.requestPostPermissionTest(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_UPDATE, FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
this.requestPostPermissionTest(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_UPDATE, FileManagementRequestUtils.URL_MODULE_MOVE, request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,8 @@ public class FileManagementRequestUtils {
|
|||||||
|
|
||||||
//文件上传
|
//文件上传
|
||||||
public static final String URL_FILE_UPLOAD = "/project/file/upload";
|
public static final String URL_FILE_UPLOAD = "/project/file/upload";
|
||||||
|
//获取文件类型
|
||||||
|
public static final String URL_FILE_TYPE = "/project/file/type/%s";
|
||||||
//文件列表查询
|
//文件列表查询
|
||||||
public static final String URL_FILE_PAGE = "/project/file/page";
|
public static final String URL_FILE_PAGE = "/project/file/page";
|
||||||
//文件列表查询对应的模块统计
|
//文件列表查询对应的模块统计
|
||||||
|
Loading…
Reference in New Issue
Block a user