Compare commits

...

2 Commits

Author SHA1 Message Date
wanxiaoli
87ea4e16fc Merge remote-tracking branch 'origin/main' 2025-06-10 10:47:27 +08:00
wanxiaoli
b7a056d08b 专项文档-节点递归删除,文件递归删除。 2025-06-10 10:46:42 +08:00
5 changed files with 55 additions and 20 deletions

View File

@ -19,4 +19,7 @@ public interface FilesMapper extends BaseMapper<Files> {
int batchInsertFiles(List<Files> filesList);
int updateNodeIdByPathHierarchy(@Param("id") String id);
//根据节点删除文件递归子节点文件
int deleteByNodeId(@Param("nodeId")String nodeId);
}

View File

@ -18,4 +18,6 @@ public interface NodesMapper extends BaseMapper<Nodes> {
int batchInsertIgnore(List<Nodes> nodesList);
int updateParentIdByPathHierarchy();
int deleteNodesRecursively(String nodeId);
}

View File

@ -545,26 +545,30 @@ public class NodesServiceImpl extends ServiceImpl<NodesMapper, Nodes> implements
if (nodes == null) {
return false; // 节点不存在
}
//递归获取当前节点和它下面的所有节点
List<Nodes> nodesList = selectChildrenNodes(id, nodes.getProjectId());
// 提取所有节点的 ID
List<String> nodeIds = nodesList.stream()
.map(Nodes::getId) // 获取每个节点的 ID
.collect(Collectors.toList());
// 执行批量删除节点操作
if (!nodeIds.isEmpty()) {
QueryWrapper<Nodes> deleteWrapper = new QueryWrapper<>();
deleteWrapper.in("id", nodeIds); // 根据节点 ID 批量删除
nodesMapper.delete(deleteWrapper);
}
//执行批量删除文件操作
if (!nodeIds.isEmpty()) {
QueryWrapper<Files> deleteWrapper = new QueryWrapper<>();
deleteWrapper.in("node_id", nodeIds); // 根据节点 ID 批量删除
deleteWrapper.eq("project_id", nodes.getProjectId());
filesMapper.delete(deleteWrapper);
}
// //递归获取当前节点和它下面的所有节点
// List<Nodes> nodesList = selectChildrenNodes(id, nodes.getProjectId());
// // 提取所有节点的 ID
// List<String> nodeIds = nodesList.stream()
// .map(Nodes::getId) // 获取每个节点的 ID
// .collect(Collectors.toList());
//
// // 执行批量删除节点操作
// if (!nodeIds.isEmpty()) {
// QueryWrapper<Nodes> deleteWrapper = new QueryWrapper<>();
// deleteWrapper.in("id", nodeIds); // 根据节点 ID 批量删除
// nodesMapper.delete(deleteWrapper);
// }
// //执行批量删除文件操作
// if (!nodeIds.isEmpty()) {
// QueryWrapper<Files> deleteWrapper = new QueryWrapper<>();
// deleteWrapper.in("node_id", nodeIds); // 根据节点 ID 批量删除
// deleteWrapper.eq("project_id", nodes.getProjectId());
// filesMapper.delete(deleteWrapper);
// }
//递归删除节点
nodesMapper.deleteNodesRecursively(id);
//递归删除文件
filesMapper.deleteByNodeId(id);
// 删除 sdlocal 中的文件夹
List<BatchDeleteRequest.DeleteItem> deleteItemList = new ArrayList<>();

View File

@ -24,4 +24,17 @@
AND a.project_id = #{id}
</update>
<delete id="deleteByNodeId">
WITH RECURSIVE node_tree AS (
SELECT id
FROM sd_nodes
WHERE id = #{nodeId}
UNION ALL
SELECT n.id
FROM sd_nodes n
INNER JOIN node_tree t ON n.parent_id = t.id
)
DELETE FROM sd_files WHERE node_id IN (SELECT id FROM node_tree)
</delete>
</mapper>

View File

@ -24,4 +24,17 @@
b.id IS NOT NULL
</update>
<delete id="deleteNodesRecursively">
WITH RECURSIVE node_tree AS (
SELECT id
FROM sd_nodes
WHERE id = #{nodeId}
UNION ALL
SELECT n.id
FROM sd_nodes n
INNER JOIN node_tree t ON n.parent_id = t.id
)
DELETE FROM sd_nodes WHERE id IN (SELECT id FROM node_tree)
</delete>
</mapper>