Merge pull request #11049 from dataease/pr@dev-v2@refactor_xpack

refactor: 数据源插件优化
This commit is contained in:
Junjun 2024-07-19 17:18:12 +08:00 committed by GitHub
commit ca1c3c6b58
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 55 additions and 62 deletions

View File

@ -14,13 +14,14 @@ import io.dataease.datasource.manage.EngineManage;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;
import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.api.PluginManageApi;
import io.dataease.extensions.datasource.dto.DatasetTableDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.datasource.dto.DsTypeDTO;
import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
import io.dataease.extensions.datasource.vo.PluginDatasourceType;
import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO;
import io.dataease.extensions.view.dto.ChartExtFilterDTO;
import io.dataease.extensions.view.dto.ChartExtRequest;
import io.dataease.extensions.view.dto.SqlVariableDetails;
@ -33,6 +34,7 @@ import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
@ -54,6 +56,9 @@ public class DatasetSQLManage {
@Resource
private CorePermissionManage corePermissionManage;
@Autowired(required = false)
private PluginManageApi pluginManage;
private static Logger logger = LoggerFactory.getLogger(DatasetSQLManage.class);
private List<SqlVariableDetails> filterParameters(ChartExtRequest chartExtRequest, Long datasetTableId) {
@ -362,16 +367,30 @@ public class DatasetSQLManage {
} else {
type = datasourceSchemaDTO.getType();
}
if (Arrays.stream(DatasourceConfiguration.DatasourceType.values()).map(DatasourceConfiguration.DatasourceType::getType).toList().contains(type)) {
DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(type);
DsTypeDTO dto = new DsTypeDTO();
BeanUtils.copyBean(dto, datasourceType);
return dto;
} else {
PluginDatasourceType.DatasourceType datasourceType = PluginDatasourceType.DatasourceType.valueOf(type);
DsTypeDTO dto = new DsTypeDTO();
BeanUtils.copyBean(dto, datasourceType);
return dto;
if (pluginManage != null) {
List<XpackPluginsDatasourceVO> xpackPluginsDatasourceVOS = pluginManage.queryPluginDs();
List<XpackPluginsDatasourceVO> list = xpackPluginsDatasourceVOS.stream().filter(ele -> StringUtils.equals(ele.getType(), type)).toList();
if (ObjectUtils.isNotEmpty(list)) {
XpackPluginsDatasourceVO first = list.getFirst();
DsTypeDTO dto = new DsTypeDTO();
dto.setName(first.getName());
dto.setCatalog(first.getCategory());
dto.setType(first.getType());
dto.setPrefix(first.getPrefix());
dto.setSuffix(first.getSuffix());
return dto;
} else {
DEException.throwException("当前数据源插件不存在");
}
}
return null;
}
}

View File

@ -32,11 +32,12 @@ import io.dataease.datasource.provider.CalciteProvider;
import io.dataease.datasource.provider.ExcelUtils;
import io.dataease.engine.constant.SQLConstants;
import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.api.PluginManageApi;
import io.dataease.extensions.datasource.dto.*;
import io.dataease.extensions.datasource.factory.ProviderFactory;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
import io.dataease.extensions.datasource.vo.PluginDatasourceType;
import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO;
import io.dataease.i18n.Translator;
import io.dataease.job.schedule.CheckDsStatusJob;
import io.dataease.job.schedule.ScheduleManager;
@ -55,6 +56,7 @@ import org.apache.commons.lang3.StringUtils;
import org.quartz.JobDataMap;
import org.quartz.JobKey;
import org.quartz.TriggerKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@ -102,6 +104,9 @@ public class DatasourceServer implements DatasourceApi {
@Resource
private CoreUserManage coreUserManage;
@Autowired(required = false)
private PluginManageApi pluginManage;
@Override
public List<DatasourceDTO> query(String keyWord) {
return null;
@ -853,8 +858,13 @@ public class DatasourceServer implements DatasourceApi {
}
private void preCheckDs(DatasourceDTO datasource) throws DEException {
if (!datasourceTypes().stream().map(DatasourceConfiguration.DatasourceType::getType).toList().contains(datasource.getType())
&& !Arrays.stream(PluginDatasourceType.DatasourceType.values()).map(PluginDatasourceType.DatasourceType::getType).toList().contains(datasource.getType())) {
List<String> list = datasourceTypes().stream().map(DatasourceConfiguration.DatasourceType::getType).collect(Collectors.toList());
if (pluginManage != null) {
List<XpackPluginsDatasourceVO> xpackPluginsDatasourceVOS = pluginManage.queryPluginDs();
xpackPluginsDatasourceVOS.forEach(ele -> list.add(ele.getType()));
}
if (!list.contains(datasource.getType())) {
DEException.throwException("Datasource type not supported.");
}
}

View File

@ -1358,6 +1358,8 @@ const svgClass = computed(() => {
overflow: hidden;
vertical-align: -0.1em;
fill: currentcolor;
width: 100%;
height: 100%;
}
}
</style>

View File

@ -0,0 +1,12 @@
package io.dataease.extensions.datasource.api;
import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO;
import java.util.List;
/**
* @Author Junjun
*/
public interface PluginManageApi {
List<XpackPluginsDatasourceVO> queryPluginDs();
}

View File

@ -1,54 +0,0 @@
package io.dataease.extensions.datasource.vo;
import lombok.Data;
import java.util.List;
/**
* @Author Junjun
*/
@Data
public class PluginDatasourceType extends Configuration {
private List<String> illegalParameters;
private List<String> showTableSqls;
static public enum DatasourceType {
hive("hive", "Apache Hive", "DL", "`", "`");
private String type;
private String name;
private String catalog;
private String prefix;
private String suffix;
DatasourceType(String type, String name, String catalog, String prefix, String suffix) {
this.type = type;
this.name = name;
this.catalog = catalog;
this.prefix = prefix;
this.suffix = suffix;
}
public String getType() {
return type;
}
public String getName() {
return name;
}
public String getCatalog() {
return catalog;
}
public String getPrefix() {
return prefix;
}
public String getSuffix() {
return suffix;
}
}
}

View File

@ -23,6 +23,10 @@ public class XpackPluginsDatasourceVO implements Serializable {
private String extraParams;
private String prefix;
private String suffix;
private Map<String, String> staticMap;
}