mirror of
https://github.com/dataease/dataease.git
synced 2026-05-15 05:22:13 +08:00
perf(X-Pack): 对接 SQLBot 接口
This commit is contained in:
committed by
fit2cloud-chenyw
parent
0fc089933a
commit
6aeac2f5cb
@@ -1,6 +1,7 @@
|
||||
package io.dataease.dataset.dao.ext.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
@@ -12,7 +13,7 @@ public interface DataSetAssistantMapper {
|
||||
@Select(
|
||||
"""
|
||||
select
|
||||
cdt.*,
|
||||
cdt.id, cdt.datasource_id, cdt.table_name, cdt.info,
|
||||
cdg.name as dataset_name,
|
||||
cd.name as ds_name,
|
||||
cd.description as ds_desc,
|
||||
@@ -30,8 +31,114 @@ public interface DataSetAssistantMapper {
|
||||
left join `core_datasource` cd on cdt.datasource_id = cd.id
|
||||
left join `core_dataset_table_field` cdtf on cdtf.dataset_table_id = cdt.id
|
||||
left join `core_dataset_group` cdg on cdg.id = cdt.dataset_group_id
|
||||
where cdg.mode = 0 and cdg.is_cross != 1 and cd.status = 'Success'
|
||||
where cdg.is_cross != 1 and (cd.STATUS IS NULL OR cd.STATUS != 'Error')
|
||||
"""
|
||||
)
|
||||
List<Map<String, Object>> query();
|
||||
List<Map<String, Object>> queryAll();
|
||||
|
||||
@Select("""
|
||||
WITH user_ds_permissions AS (
|
||||
SELECT DISTINCT resource_id
|
||||
FROM (
|
||||
select id as resource_id from per_busi_resource where rt_id = 4
|
||||
) temp
|
||||
),
|
||||
user_dg_permissions AS (
|
||||
SELECT DISTINCT resource_id
|
||||
FROM (
|
||||
select id as resource_id from per_busi_resource where rt_id = 3
|
||||
) temp
|
||||
)
|
||||
SELECT
|
||||
cdt.id, cdt.datasource_id, cdt.table_name, cdt.info,
|
||||
cdg.name as dataset_name,
|
||||
cd.name as ds_name,
|
||||
cd.description as ds_desc,
|
||||
cd.type as ds_type,
|
||||
cd.configuration as ds_config,
|
||||
cdtf.id as field_id,
|
||||
cdtf.origin_name,
|
||||
cdtf.name as field_show_name,
|
||||
cdtf.description as field_desc,
|
||||
cdtf.dataease_name,
|
||||
cdtf.type as field_type
|
||||
FROM `core_dataset_table` cdt
|
||||
INNER JOIN `core_datasource` cd ON cdt.datasource_id = cd.id and (cd.STATUS IS NULL OR cd.STATUS != 'Error')
|
||||
INNER JOIN `core_dataset_group` cdg ON cdg.id = cdt.dataset_group_id
|
||||
AND cdg.is_cross != 1
|
||||
INNER JOIN `core_dataset_table_field` cdtf ON cdtf.dataset_table_id = cdt.id
|
||||
where not exists( select 1 from user_ds_permissions ds_p where cd.id = ds_p.resource_id )
|
||||
and not exists( select 1 from user_dg_permissions dg_p where cdg.id = dg_p.resource_id )
|
||||
""")
|
||||
List<Map<String, Object>> queryCommunity();
|
||||
|
||||
|
||||
|
||||
@Select("""
|
||||
<script>
|
||||
WITH user_ds_permissions AS (
|
||||
<choose>
|
||||
<when test="!orgAdmin">
|
||||
SELECT DISTINCT resource_id
|
||||
FROM (
|
||||
SELECT resource_id FROM per_auth_busi_user
|
||||
WHERE oid = #{oid} AND uid = #{uid} AND resource_type = 4
|
||||
UNION ALL
|
||||
SELECT a.resource_id FROM per_auth_busi_role a
|
||||
INNER JOIN per_user_role b ON a.rid = b.rid
|
||||
WHERE b.oid = #{oid} AND b.uid = #{uid} AND a.resource_type = 4
|
||||
) temp
|
||||
</when>
|
||||
<otherwise>
|
||||
SELECT id as resource_id FROM per_busi_resource
|
||||
WHERE org_id = #{oid} AND rt_id = 4
|
||||
</otherwise>
|
||||
</choose>
|
||||
),
|
||||
user_dg_permissions AS (
|
||||
<choose>
|
||||
<when test="!orgAdmin">
|
||||
SELECT DISTINCT resource_id
|
||||
FROM (
|
||||
SELECT resource_id FROM per_auth_busi_user
|
||||
WHERE oid = #{oid} AND uid = #{uid} AND resource_type = 3
|
||||
UNION ALL
|
||||
SELECT a.resource_id FROM per_auth_busi_role a
|
||||
INNER JOIN per_user_role b ON a.rid = b.rid
|
||||
WHERE b.oid = #{oid} AND b.uid = #{uid} AND a.resource_type = 3
|
||||
) temp
|
||||
</when>
|
||||
<otherwise>
|
||||
SELECT id as resource_id FROM per_busi_resource
|
||||
WHERE org_id = #{oid} AND rt_id = 3
|
||||
</otherwise>
|
||||
</choose>
|
||||
)
|
||||
SELECT
|
||||
cdt.id, cdt.datasource_id, cdt.table_name, cdt.info,
|
||||
cdg.id as dataset_group_id,
|
||||
cdg.name as dataset_name,
|
||||
cd.name as ds_name,
|
||||
cd.description as ds_desc,
|
||||
cd.type as ds_type,
|
||||
cd.configuration as ds_config,
|
||||
cdtf.id as field_id,
|
||||
cdtf.origin_name,
|
||||
cdtf.name as field_show_name,
|
||||
cdtf.description as field_desc,
|
||||
cdtf.dataease_name,
|
||||
cdtf.type as field_type
|
||||
FROM `core_dataset_table` cdt
|
||||
INNER JOIN `core_datasource` cd ON cdt.datasource_id = cd.id
|
||||
AND (cd.STATUS IS NULL OR cd.STATUS != 'Error')
|
||||
INNER JOIN `core_dataset_group` cdg ON cdg.id = cdt.dataset_group_id
|
||||
AND cdg.is_cross != 1
|
||||
INNER JOIN `core_dataset_table_field` cdtf ON cdtf.dataset_table_id = cdt.id
|
||||
INNER JOIN user_ds_permissions ds_p ON cd.id = ds_p.resource_id
|
||||
INNER JOIN user_dg_permissions dg_p ON cdg.id = dg_p.resource_id
|
||||
</script>
|
||||
""")
|
||||
List<Map<String, Object>> queryEnterprise(@Param("oid") Long oid, @Param("uid") Long uid, @Param("orgAdmin") Boolean orgAdmin);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -4,27 +4,138 @@ import io.dataease.api.dataset.union.DatasetTableInfoDTO;
|
||||
import io.dataease.api.dataset.vo.DataSQLBotAssistantVO;
|
||||
import io.dataease.api.dataset.vo.SQLBotAssistanTable;
|
||||
import io.dataease.api.dataset.vo.SQLBotAssistantField;
|
||||
import io.dataease.api.permissions.dataset.api.ColumnPermissionsApi;
|
||||
import io.dataease.api.permissions.dataset.api.RowPermissionsApi;
|
||||
import io.dataease.api.permissions.dataset.dto.DataSetColumnPermissionsDTO;
|
||||
import io.dataease.api.permissions.dataset.dto.DataSetRowPermissionsTreeDTO;
|
||||
import io.dataease.api.permissions.dataset.dto.DatasetRowPermissionsTreeRequest;
|
||||
import io.dataease.api.permissions.role.api.RoleApi;
|
||||
import io.dataease.api.permissions.role.dto.RoleRequest;
|
||||
import io.dataease.api.permissions.role.vo.RoleVO;
|
||||
import io.dataease.auth.bo.TokenUserBO;
|
||||
import io.dataease.commons.utils.EncryptUtils;
|
||||
import io.dataease.dataset.dao.ext.mapper.DataSetAssistantMapper;
|
||||
import io.dataease.datasource.dao.auto.entity.CoreDatasource;
|
||||
import io.dataease.datasource.manage.EngineManage;
|
||||
import io.dataease.extensions.datasource.vo.Configuration;
|
||||
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
|
||||
import io.dataease.home.manage.DeIndexManage;
|
||||
import io.dataease.utils.AuthUtils;
|
||||
import io.dataease.utils.CommonBeanFactory;
|
||||
import io.dataease.utils.JsonUtil;
|
||||
import io.dataease.utils.LogUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class DatasetSQLBotManage {
|
||||
|
||||
@Resource
|
||||
private DeIndexManage deIndexManage;
|
||||
|
||||
@Resource
|
||||
private DataSetAssistantMapper dataSetAssistantMapper;
|
||||
|
||||
@Resource
|
||||
private EngineManage engineManage;
|
||||
|
||||
@Resource
|
||||
private Environment environment;
|
||||
|
||||
private Map<Long, List<DataSetColumnPermissionsDTO>> getColPermission(Long uid, List<Long> roleIds) {
|
||||
ColumnPermissionsApi columnPermissionsApi = CommonBeanFactory.getBean(ColumnPermissionsApi.class);
|
||||
Objects.requireNonNull(columnPermissionsApi);
|
||||
|
||||
DataSetColumnPermissionsDTO dataSetColumnPermissionsDTO = new DataSetColumnPermissionsDTO();
|
||||
dataSetColumnPermissionsDTO.setAuthTargetId(uid);
|
||||
dataSetColumnPermissionsDTO.setAuthTargetType("user");
|
||||
dataSetColumnPermissionsDTO.setEnable(true);
|
||||
List<DataSetColumnPermissionsDTO> dataSetColumnPermissionsDTOS = columnPermissionsApi.list(dataSetColumnPermissionsDTO);
|
||||
|
||||
if (CollectionUtils.isNotEmpty(roleIds)) {
|
||||
dataSetColumnPermissionsDTO.setAuthTargetId(null);
|
||||
dataSetColumnPermissionsDTO.setAuthTargetIds(roleIds);
|
||||
dataSetColumnPermissionsDTO.setAuthTargetType("role");
|
||||
List<DataSetColumnPermissionsDTO> roleDataSetColumnPermissionsDTOS = columnPermissionsApi.list(dataSetColumnPermissionsDTO);
|
||||
if (CollectionUtils.isNotEmpty(roleDataSetColumnPermissionsDTOS)) {
|
||||
dataSetColumnPermissionsDTOS.addAll(roleDataSetColumnPermissionsDTOS);
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isEmpty(dataSetColumnPermissionsDTOS)) {
|
||||
return null;
|
||||
}
|
||||
return dataSetColumnPermissionsDTOS.stream().collect(Collectors.groupingBy(DataSetColumnPermissionsDTO::getDatasetId));
|
||||
}
|
||||
|
||||
private Map<Long, List<DataSetRowPermissionsTreeDTO>> getRowPermission(Long uid, List<Long> roleIds) {
|
||||
RowPermissionsApi rowPermissionsApi = CommonBeanFactory.getBean(RowPermissionsApi.class);
|
||||
Objects.requireNonNull(rowPermissionsApi);
|
||||
|
||||
DatasetRowPermissionsTreeRequest request = new DatasetRowPermissionsTreeRequest();
|
||||
request.setEnable(true);
|
||||
|
||||
request.setAuthTargetId(uid);
|
||||
request.setAuthTargetType("user");
|
||||
List<DataSetRowPermissionsTreeDTO> permissionsTreeDTOS = rowPermissionsApi.list(request);
|
||||
|
||||
if (ObjectUtils.isNotEmpty(roleIds)) {
|
||||
request.setAuthTargetId(null);
|
||||
request.setAuthTargetIds(roleIds);
|
||||
request.setAuthTargetType("role");
|
||||
List<DataSetRowPermissionsTreeDTO> rolePermissionDTOS = rowPermissionsApi.list(request);
|
||||
if (CollectionUtils.isNotEmpty(rolePermissionDTOS)) {
|
||||
permissionsTreeDTOS.addAll(rolePermissionDTOS);
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isEmpty(permissionsTreeDTOS)) {
|
||||
return null;
|
||||
}
|
||||
return permissionsTreeDTOS.stream().collect(Collectors.groupingBy(DataSetRowPermissionsTreeDTO::getDatasetId));
|
||||
}
|
||||
|
||||
|
||||
public List<DataSQLBotAssistantVO> getDatasourceList(List<Long> ids) {
|
||||
List<Map<String, Object>> list = dataSetAssistantMapper.query();
|
||||
TokenUserBO user = Objects.requireNonNull(AuthUtils.getUser());
|
||||
Long oid = user.getDefaultOid();
|
||||
Long uid = user.getUserId();
|
||||
List<Long> roleIds = null;
|
||||
Map<Long, List<DataSetColumnPermissionsDTO>> colPermissionMap = null;
|
||||
Map<Long, List<DataSetRowPermissionsTreeDTO>> rowPermissionMap = null;
|
||||
Boolean model = deIndexManage.xpackModel();
|
||||
List<Map<String, Object>> list = null;
|
||||
boolean isAdmin = uid == 1;
|
||||
if (ObjectUtils.isEmpty(model)) {
|
||||
if (!isAdmin) {
|
||||
return null;
|
||||
}
|
||||
list = dataSetAssistantMapper.queryAll();
|
||||
} else if (!model) {
|
||||
if (!isAdmin) {
|
||||
return null;
|
||||
}
|
||||
list = dataSetAssistantMapper.queryCommunity();
|
||||
} else {
|
||||
boolean isRootRole = isAdmin;
|
||||
if (!isAdmin) {
|
||||
RoleRequest request = new RoleRequest();
|
||||
request.setUid(uid);
|
||||
List<RoleVO> roleVOS = Objects.requireNonNull(CommonBeanFactory.getBean(RoleApi.class)).selectedForUser(request);
|
||||
isRootRole = roleVOS.stream().anyMatch(RoleVO::isRoot);
|
||||
/*roleIds = roleVOS.stream().map(RoleVO::getId).toList();
|
||||
|
||||
colPermissionMap = getColPermission(uid, roleIds);
|
||||
rowPermissionMap = getRowPermission(uid, roleIds);*/
|
||||
}
|
||||
list = dataSetAssistantMapper.queryEnterprise(oid, uid, isRootRole);
|
||||
}
|
||||
|
||||
|
||||
List<DataSQLBotAssistantVO> result = new ArrayList<>();
|
||||
Map<String, DataSQLBotAssistantVO> dsFlagMap = new HashMap<>();
|
||||
@@ -80,8 +191,23 @@ public class DatasetSQLBotManage {
|
||||
if (ObjectUtils.isEmpty(dsConfig) || StringUtils.isBlank(dsConfig.toString())) {
|
||||
return null;
|
||||
}
|
||||
String config_json = EncryptUtils.aesDecrypt(dsConfig.toString()).toString();
|
||||
Configuration config = JsonUtil.parseObject(config_json, Configuration.class);
|
||||
String dsHost = environment.getProperty("dataease.dsHost", String.class);
|
||||
if (StringUtils.isBlank(dsHost)) {
|
||||
dsHost = environment.getProperty("dataease.dataease-servers", String.class);
|
||||
}
|
||||
String dsType = row.get("ds_type").toString();
|
||||
Configuration config = null;
|
||||
if (dsType.contains(DatasourceConfiguration.DatasourceType.Excel.name()) || dsType.contains(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
CoreDatasource deEngine = engineManage.getDeEngine();
|
||||
String config_json = EncryptUtils.aesDecrypt(deEngine.getConfiguration()).toString();
|
||||
config = JsonUtil.parseObject(config_json, Configuration.class);
|
||||
if (StringUtils.isNotBlank(dsHost) && ObjectUtils.isNotEmpty(config)) {
|
||||
config.setHost(dsHost);
|
||||
}
|
||||
} else {
|
||||
String config_json = EncryptUtils.aesDecrypt(dsConfig.toString()).toString();
|
||||
config = JsonUtil.parseObject(config_json, Configuration.class);
|
||||
}
|
||||
DataSQLBotAssistantVO vo = new DataSQLBotAssistantVO();
|
||||
vo.setDataBase(config.getDataBase());
|
||||
vo.setExtraParams(config.getExtraParams());
|
||||
@@ -89,7 +215,7 @@ public class DatasetSQLBotManage {
|
||||
vo.setPort(config.getPort());
|
||||
vo.setName(row.get("ds_name").toString());
|
||||
vo.setComment(ObjectUtils.isEmpty(row.get("ds_desc")) ? vo.getName() : row.get("ds_desc").toString());
|
||||
vo.setType(row.get("ds_type").toString());
|
||||
vo.setType(dsType);
|
||||
vo.setSchema(config.getSchema());
|
||||
vo.setUser(config.getUsername());
|
||||
vo.setPassword(config.getPassword());
|
||||
@@ -100,6 +226,7 @@ public class DatasetSQLBotManage {
|
||||
SQLBotAssistanTable table = new SQLBotAssistanTable();
|
||||
table.setName(row.get("table_name").toString());
|
||||
table.setComment(row.get("dataset_name").toString());
|
||||
|
||||
Object infoObj = null;
|
||||
if (ObjectUtils.isNotEmpty(infoObj = row.get("info"))) {
|
||||
String info = infoObj.toString();
|
||||
|
||||
2
de-xpack
2
de-xpack
Submodule de-xpack updated: a6df1a50d2...acda00c592
Reference in New Issue
Block a user