专项文档-节点递归删除,文件递归删除。

This commit is contained in:
wanxiaoli 2025-06-10 10:46:42 +08:00
parent 7eccb66643
commit b7a056d08b
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 batchInsertFiles(List<Files> filesList);
int updateNodeIdByPathHierarchy(@Param("id") String id); 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 batchInsertIgnore(List<Nodes> nodesList);
int updateParentIdByPathHierarchy(); int updateParentIdByPathHierarchy();
int deleteNodesRecursively(String nodeId);
} }

View File

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

View File

@ -24,4 +24,17 @@
AND a.project_id = #{id} AND a.project_id = #{id}
</update> </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> </mapper>

View File

@ -24,4 +24,17 @@
b.id IS NOT NULL b.id IS NOT NULL
</update> </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> </mapper>