From b53206a2b50493f7d7dc0217f9d7be7856d3db55 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Fri, 20 Dec 2024 12:27:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E6=BA=90):=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=BA=90=E5=88=A0=E9=99=A4=E3=80=81=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mapper/CoreDatasourceExtMapper.java | 4 +++ .../datasource/dao/ext/po/DsItem.java | 16 ++++++++++ .../datasource/manage/DataSourceManage.java | 31 +++++++++++++++++++ .../datasource/server/DatasourceServer.java | 14 ++------- 4 files changed, 54 insertions(+), 11 deletions(-) create mode 100644 core/core-backend/src/main/java/io/dataease/datasource/dao/ext/po/DsItem.java diff --git a/core/core-backend/src/main/java/io/dataease/datasource/dao/ext/mapper/CoreDatasourceExtMapper.java b/core/core-backend/src/main/java/io/dataease/datasource/dao/ext/mapper/CoreDatasourceExtMapper.java index a3b1fb26ff..514341dd6e 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/dao/ext/mapper/CoreDatasourceExtMapper.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/dao/ext/mapper/CoreDatasourceExtMapper.java @@ -1,6 +1,7 @@ package io.dataease.datasource.dao.ext.mapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.dataease.datasource.dao.ext.po.DsItem; import io.dataease.datasource.dto.DatasourceNodePO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -17,4 +18,7 @@ public interface CoreDatasourceExtMapper { """) List query(@Param("ew") QueryWrapper queryWrapper); + + @Select("select id, pid from core_datasource where id = #{id}") + DsItem queryItem(@Param("id") Long id); } diff --git a/core/core-backend/src/main/java/io/dataease/datasource/dao/ext/po/DsItem.java b/core/core-backend/src/main/java/io/dataease/datasource/dao/ext/po/DsItem.java new file mode 100644 index 0000000000..d5b7a43d7f --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/datasource/dao/ext/po/DsItem.java @@ -0,0 +1,16 @@ +package io.dataease.datasource.dao.ext.po; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class DsItem implements Serializable { + @Serial + private static final long serialVersionUID = 370886385725258461L; + + private Long id; + + private Long pid; +} diff --git a/core/core-backend/src/main/java/io/dataease/datasource/manage/DataSourceManage.java b/core/core-backend/src/main/java/io/dataease/datasource/manage/DataSourceManage.java index a2d3904238..08ceeb8003 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/manage/DataSourceManage.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/manage/DataSourceManage.java @@ -7,8 +7,10 @@ import io.dataease.commons.constants.TaskStatus; import io.dataease.constant.DataSourceType; import io.dataease.datasource.dao.auto.entity.CoreDatasource; import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; +import io.dataease.datasource.dao.ext.mapper.CoreDatasourceExtMapper; import io.dataease.datasource.dao.ext.mapper.DataSourceExtMapper; import io.dataease.datasource.dao.ext.po.DataSourceNodePO; +import io.dataease.datasource.dao.ext.po.DsItem; import io.dataease.datasource.dto.DatasourceNodeBO; import io.dataease.exception.DEException; import io.dataease.extensions.datasource.dto.DatasourceDTO; @@ -29,6 +31,7 @@ import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; +import java.util.Stack; @Component public class DataSourceManage { @@ -43,6 +46,9 @@ public class DataSourceManage { @Resource private CoreOptRecentManage coreOptRecentManage; + @Resource + private CoreDatasourceExtMapper coreDatasourceExtMapper; + private DatasourceNodeBO rootNode() { return new DatasourceNodeBO(0L, "root", false, 7, -1L, 0, "mysql"); } @@ -168,6 +174,31 @@ public class DataSourceManage { return coreDatasourceMapper.selectById(id); } + public List getPidList(Long pid) { + if (ObjectUtils.isEmpty(pid) || pid.equals(0L)) { + return null; + } + List result = new ArrayList<>(); + Stack stack = new Stack<>(); + stack.push(pid); + while (!stack.isEmpty()) { + Long cid = stack.pop(); + DsItem item = coreDatasourceExtMapper.queryItem(cid); + if (ObjectUtils.isNotEmpty(item)) { + result.add(cid); + Long cpid = null; + if (ObjectUtils.isNotEmpty(cpid = item.getPid()) && !cpid.equals(0L)) { + stack.add(cpid); + } + } + } + return result; + } + + public CoreDatasource getDatasource(Long id) { + return getCoreDatasource(id); + } + public DatasourceDTO getDs(Long id) { CoreDatasource coreDatasource = getCoreDatasource(id); DatasourceDTO dto = new DatasourceDTO(); diff --git a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java index f873355dd5..91d5f109d3 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java @@ -189,9 +189,8 @@ public class DatasourceServer implements DatasourceApi { DEException.throwException(Translator.get("i18n_pid_not_eq_id")); } if (dataSourceDTO.getPid() != 0) { - List ids = new ArrayList<>(); - getParents(dataSourceDTO.getPid(), ids); - if (ids.contains(dataSourceDTO.getId())) { + List pidList = dataSourceManage.getPidList(dataSourceDTO.getPid()); + if (pidList.contains(dataSourceDTO.getId())) { DEException.throwException(Translator.get("i18n_pid_not_eq_id")); } } @@ -571,7 +570,7 @@ public class DatasourceServer implements DatasourceApi { } public void recursionDel(Long datasourceId) throws DEException { - CoreDatasource coreDatasource = dataSourceManage.getCoreDatasource(datasourceId); + CoreDatasource coreDatasource = dataSourceManage.getDatasource(datasourceId); if (ObjectUtils.isEmpty(coreDatasource)) { return; } @@ -1065,13 +1064,6 @@ public class DatasourceServer implements DatasourceApi { return datasourceDTO; } - private void getParents(Long pid, List ids) { - CoreDatasource parent = dataSourceManage.getCoreDatasource(pid);// 查找父级folder - ids.add(parent.getId()); - if (parent.getPid() != null && parent.getPid() != 0) { - getParents(parent.getPid(), ids); - } - } private void filterDs(List busiNodeVOS, List ids, String type, Long id) { for (BusiNodeVO busiNodeVO : busiNodeVOS) {