mirror of
https://github.com/dataease/dataease.git
synced 2026-05-21 04:08:10 +08:00
feat: 支持飞书数据源插件
This commit is contained in:
@@ -34,6 +34,7 @@ import io.dataease.extensions.datasource.dto.*;
|
||||
import io.dataease.extensions.datasource.factory.ProviderFactory;
|
||||
import io.dataease.extensions.datasource.model.SQLMeta;
|
||||
import io.dataease.extensions.datasource.provider.Provider;
|
||||
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
|
||||
import io.dataease.extensions.view.dto.ChartExtFilterDTO;
|
||||
import io.dataease.extensions.view.dto.ChartExtRequest;
|
||||
import io.dataease.extensions.view.dto.ColumnPermissionItem;
|
||||
@@ -103,7 +104,7 @@ public class DatasetDataManage {
|
||||
if (StringUtils.equalsIgnoreCase(type, DatasetTableType.DB) || StringUtils.equalsIgnoreCase(type, DatasetTableType.SQL)) {
|
||||
CoreDatasource coreDatasource = dataSourceManage.getCoreDatasource(datasetTableDTO.getDatasourceId());
|
||||
DatasourceSchemaDTO datasourceSchemaDTO = new DatasourceSchemaDTO();
|
||||
if (StringUtils.equalsIgnoreCase("excel", coreDatasource.getType()) || StringUtils.equalsIgnoreCase("api", coreDatasource.getType())) {
|
||||
if (StringUtils.equalsIgnoreCase("excel", coreDatasource.getType()) || coreDatasource.getType().contains(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
coreDatasource = engineManage.getDeEngine();
|
||||
}
|
||||
if (StringUtils.isNotEmpty(coreDatasource.getStatus()) && "Error".equalsIgnoreCase(coreDatasource.getStatus())) {
|
||||
@@ -406,7 +407,7 @@ public class DatasetDataManage {
|
||||
public Map<String, Object> previewSql(PreviewSqlDTO dto) throws DEException {
|
||||
CoreDatasource coreDatasource = dataSourceManage.getCoreDatasource(dto.getDatasourceId());
|
||||
DatasourceSchemaDTO datasourceSchemaDTO = new DatasourceSchemaDTO();
|
||||
if (coreDatasource.getType().equalsIgnoreCase("API") || coreDatasource.getType().equalsIgnoreCase("Excel")) {
|
||||
if (coreDatasource.getType().contains(DatasourceConfiguration.DatasourceType.API.name()) || coreDatasource.getType().equalsIgnoreCase("Excel")) {
|
||||
BeanUtils.copyBean(datasourceSchemaDTO, engineManage.getDeEngine());
|
||||
} else {
|
||||
BeanUtils.copyBean(datasourceSchemaDTO, coreDatasource);
|
||||
|
||||
@@ -510,7 +510,7 @@ public class DatasetSQLManage {
|
||||
if (coreDatasource == null) {
|
||||
DEException.throwException(Translator.get("i18n_dataset_ds_error") + ",ID:" + ds.getDatasourceId());
|
||||
}
|
||||
if (StringUtils.equalsIgnoreCase("excel", coreDatasource.getType()) || StringUtils.equalsIgnoreCase("api", coreDatasource.getType())) {
|
||||
if (StringUtils.equalsIgnoreCase("excel", coreDatasource.getType()) || coreDatasource.getType().contains(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
coreDatasource = engineManage.getDeEngine();
|
||||
}
|
||||
|
||||
|
||||
@@ -29,9 +29,7 @@ import org.quartz.JobKey;
|
||||
import org.quartz.TriggerKey;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
import static io.dataease.datasource.server.DatasourceTaskServer.ScheduleType.CRON;
|
||||
import static io.dataease.datasource.server.DatasourceTaskServer.ScheduleType.MANUAL;
|
||||
@@ -49,6 +47,9 @@ public class DatasourceSyncManage {
|
||||
private ScheduleManager scheduleManager;
|
||||
@Resource
|
||||
private CalciteProvider calciteProvider;
|
||||
@Resource
|
||||
private DatasourceServer datasourceServer;
|
||||
|
||||
|
||||
public void extractExcelData(CoreDatasource coreDatasource, String type) {
|
||||
if (coreDatasource == null) {
|
||||
@@ -138,11 +139,11 @@ public class DatasourceSyncManage {
|
||||
public void extractedData(Long taskId, CoreDatasource coreDatasource, DatasourceServer.UpdateType updateType, String scheduleType) {
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(transDTO(coreDatasource));
|
||||
List<DatasetTableDTO> tables = ApiUtils.getTables(datasourceRequest);
|
||||
List<DatasetTableDTO> tables = (List<DatasetTableDTO>) datasourceServer.invokeMethod(coreDatasource.getType(), "getApiTables", DatasourceRequest.class, datasourceRequest);
|
||||
for (DatasetTableDTO api : tables) {
|
||||
CoreDatasourceTaskLog datasetTableTaskLog = datasourceTaskServer.initTaskLog(coreDatasource.getId(), taskId, api.getTableName(), scheduleType);
|
||||
datasourceRequest.setTable(api.getTableName());
|
||||
List<TableField> tableFields = ApiUtils.getTableFields(datasourceRequest);
|
||||
List<TableField> tableFields = (List<TableField>) datasourceServer.invokeMethod(coreDatasource.getType(), "getTableFields", DatasourceRequest.class, datasourceRequest);
|
||||
try {
|
||||
datasetTableTaskLog.setInfo(datasetTableTaskLog.getInfo() + "/n Begin to sync datatable: " + datasourceRequest.getTable());
|
||||
createEngineTable(datasourceRequest.getTable(), tableFields);
|
||||
@@ -191,11 +192,11 @@ public class DatasourceSyncManage {
|
||||
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(transDTO(coreDatasource));
|
||||
List<DatasetTableDTO> tables = ApiUtils.getTables(datasourceRequest);
|
||||
List<DatasetTableDTO> tables = (List<DatasetTableDTO>) datasourceServer.invokeMethod(coreDatasource.getType(), "getApiTables", DatasourceRequest.class, datasourceRequest);
|
||||
for (DatasetTableDTO api : tables) {
|
||||
if (api.getTableName().equalsIgnoreCase(tableName)) {
|
||||
datasourceRequest.setTable(api.getTableName());
|
||||
List<TableField> tableFields = ApiUtils.getTableFields(datasourceRequest);
|
||||
List<TableField> tableFields = (List<TableField>) datasourceServer.invokeMethod(coreDatasource.getType(), "getTableFields", DatasourceRequest.class, datasourceRequest);
|
||||
try {
|
||||
datasetTableTaskLog.setInfo(datasetTableTaskLog.getInfo() + "/n Begin to sync datatable: " + datasourceRequest.getTable());
|
||||
createEngineTable(datasourceRequest.getTable(), tableFields);
|
||||
@@ -227,7 +228,7 @@ public class DatasourceSyncManage {
|
||||
}
|
||||
|
||||
private void extractApiData(DatasourceRequest datasourceRequest, DatasourceServer.UpdateType extractType, List<TableField> tableFields) throws Exception {
|
||||
Map<String, Object> result = ApiUtils.fetchResultField(datasourceRequest);
|
||||
Map<String, Object> result = (Map<String, Object>) datasourceServer.invokeMethod(datasourceRequest.getDatasource().getType(), "fetchApiResultField", DatasourceRequest.class, datasourceRequest);
|
||||
List<String[]> dataList = (List<String[]>) result.get("dataList");
|
||||
CoreDeEngine engine = engineManage.info();
|
||||
EngineRequest engineRequest = new EngineRequest();
|
||||
@@ -300,11 +301,7 @@ public class DatasourceSyncManage {
|
||||
|
||||
public void addSchedule(CoreDatasourceTask datasourceTask) throws DEException {
|
||||
if (StringUtils.equalsIgnoreCase(datasourceTask.getSyncRate(), DatasourceTaskServer.ScheduleType.RIGHTNOW.toString())) {
|
||||
scheduleManager.addOrUpdateSingleJob(new JobKey(datasourceTask.getId().toString(), datasourceTask.getDsId().toString()),
|
||||
new TriggerKey(datasourceTask.getId().toString(), datasourceTask.getDsId().toString()),
|
||||
ExtractDataJob.class,
|
||||
new Date(datasourceTask.getStartTime()),
|
||||
scheduleManager.getDefaultJobDataMap(datasourceTask.getDsId().toString(), datasourceTask.getCron(), datasourceTask.getId().toString(), datasourceTask.getUpdateType()));
|
||||
scheduleManager.addOrUpdateSingleJob(new JobKey(datasourceTask.getId().toString(), datasourceTask.getDsId().toString()), new TriggerKey(datasourceTask.getId().toString(), datasourceTask.getDsId().toString()), ExtractDataJob.class, new Date(datasourceTask.getStartTime()), scheduleManager.getDefaultJobDataMap(datasourceTask.getDsId().toString(), datasourceTask.getCron(), datasourceTask.getId().toString(), datasourceTask.getUpdateType()));
|
||||
} else {
|
||||
Date endTime;
|
||||
if (datasourceTask.getEndTime() == null || datasourceTask.getEndTime() == 0) {
|
||||
@@ -317,11 +314,7 @@ public class DatasourceSyncManage {
|
||||
}
|
||||
}
|
||||
|
||||
scheduleManager.addOrUpdateCronJob(new JobKey(datasourceTask.getId().toString(), datasourceTask.getDsId().toString()),
|
||||
new TriggerKey(datasourceTask.getId().toString(), datasourceTask.getDsId().toString()),
|
||||
ExtractDataJob.class,
|
||||
datasourceTask.getCron(), new Date(datasourceTask.getStartTime()), endTime,
|
||||
scheduleManager.getDefaultJobDataMap(datasourceTask.getDsId().toString(), datasourceTask.getCron(), datasourceTask.getId().toString(), datasourceTask.getUpdateType()));
|
||||
scheduleManager.addOrUpdateCronJob(new JobKey(datasourceTask.getId().toString(), datasourceTask.getDsId().toString()), new TriggerKey(datasourceTask.getId().toString(), datasourceTask.getDsId().toString()), ExtractDataJob.class, datasourceTask.getCron(), new Date(datasourceTask.getStartTime()), endTime, scheduleManager.getDefaultJobDataMap(datasourceTask.getDsId().toString(), datasourceTask.getCron(), datasourceTask.getId().toString(), datasourceTask.getUpdateType()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@ import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.jayway.jsonpath.JsonPath;
|
||||
import io.dataease.api.ds.vo.ApiDefinition;
|
||||
import io.dataease.api.ds.vo.ApiDefinitionRequest;
|
||||
import io.dataease.extensions.datasource.dto.ApiDefinition;
|
||||
import io.dataease.extensions.datasource.dto.ApiDefinitionRequest;
|
||||
import io.dataease.exception.DEException;
|
||||
import io.dataease.extensions.datasource.dto.DatasetTableDTO;
|
||||
import io.dataease.extensions.datasource.dto.DatasourceRequest;
|
||||
@@ -75,7 +75,7 @@ public class ApiUtils {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
List<String[]> dataList = new ArrayList<>();
|
||||
List<TableField> fieldList = new ArrayList<>();
|
||||
ApiDefinition apiDefinition = checkApiDefinition(datasourceRequest);
|
||||
ApiDefinition apiDefinition = getApiDefinition(datasourceRequest);
|
||||
if (apiDefinition == null) {
|
||||
DEException.throwException("未找到");
|
||||
}
|
||||
@@ -178,7 +178,7 @@ public class ApiUtils {
|
||||
}
|
||||
|
||||
private static List<String[]> getData(DatasourceRequest datasourceRequest) throws Exception {
|
||||
ApiDefinition apiDefinition = checkApiDefinition(datasourceRequest);
|
||||
ApiDefinition apiDefinition = getApiDefinition(datasourceRequest);
|
||||
if (apiDefinition == null) {
|
||||
DEException.throwException("未找到");
|
||||
}
|
||||
@@ -463,7 +463,28 @@ public class ApiUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static ApiDefinition checkApiDefinition(ApiDefinition apiDefinition, String response) throws DEException {
|
||||
public static ApiDefinition checkApiDefinition(DatasourceRequest datasourceRequest) throws DEException {
|
||||
ApiDefinition apiDefinition = new ApiDefinition();
|
||||
List<ApiDefinition> apiDefinitionList = new ArrayList<>();
|
||||
TypeReference<List<ApiDefinition>> listTypeReference = new TypeReference<List<ApiDefinition>>() {
|
||||
};
|
||||
try {
|
||||
apiDefinitionList = objectMapper.readValue(datasourceRequest.getDatasource().getConfiguration(), listTypeReference);
|
||||
} catch (Exception e) {
|
||||
DEException.throwException(e);
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(apiDefinitionList)) {
|
||||
for (ApiDefinition definition : apiDefinitionList) {
|
||||
if (definition != null && (definition.getType() == null || !definition.getType().equalsIgnoreCase("params"))) {
|
||||
apiDefinition = definition;
|
||||
}
|
||||
}
|
||||
}
|
||||
String response = execHttpRequest(true, apiDefinition, apiDefinition.getApiQueryTimeout() == null || apiDefinition.getApiQueryTimeout() <= 0 ? 10 : apiDefinition.getApiQueryTimeout(), params(datasourceRequest));
|
||||
return checkApiDefinition(apiDefinition, response);
|
||||
}
|
||||
|
||||
private static ApiDefinition checkApiDefinition(ApiDefinition apiDefinition, String response) throws DEException {
|
||||
if (StringUtils.isEmpty(response)) {
|
||||
DEException.throwException("该请求返回数据为空");
|
||||
}
|
||||
@@ -802,7 +823,7 @@ public class ApiUtils {
|
||||
return apiDefinitionListTemp.stream().filter(apiDefinition -> apiDefinition != null && apiDefinition.getType() != null && apiDefinition.getType().equalsIgnoreCase("params")).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private static ApiDefinition checkApiDefinition(DatasourceRequest datasourceRequest) throws DEException {
|
||||
private static ApiDefinition getApiDefinition(DatasourceRequest datasourceRequest) throws DEException {
|
||||
List<ApiDefinition> apiDefinitionList = new ArrayList<>();
|
||||
TypeReference<List<ApiDefinition>> listTypeReference = new TypeReference<List<ApiDefinition>>() {
|
||||
};
|
||||
|
||||
@@ -5,6 +5,7 @@ import io.dataease.dataset.utils.TableUtils;
|
||||
import io.dataease.datasource.dao.auto.entity.CoreDeEngine;
|
||||
import io.dataease.datasource.server.DatasourceServer;
|
||||
import io.dataease.extensions.datasource.dto.TableField;
|
||||
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -68,7 +69,7 @@ public class MysqlEngineProvider extends EngineProvider {
|
||||
.append("'),");
|
||||
}
|
||||
String insetSql = (insertSql + values.substring(0, values.length() - 1)).replaceAll("'null'", "null");
|
||||
if (dsType.equalsIgnoreCase("api")) {
|
||||
if (dsType.contains(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
List<TableField> keys = tableFields.stream().filter(tableField -> tableField.isPrimaryKey() && tableField.isChecked()).toList();
|
||||
List<TableField> notKeys = tableFields.stream().filter(tableField -> tableField.isChecked() && !tableField.isPrimaryKey()).toList();
|
||||
if (CollectionUtils.isNotEmpty(keys) && extractType.equals(DatasourceServer.UpdateType.add_scope)) {
|
||||
|
||||
@@ -10,10 +10,12 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.dataease.api.dataset.dto.PreviewSqlDTO;
|
||||
import io.dataease.api.ds.DatasourceApi;
|
||||
import io.dataease.api.ds.vo.*;
|
||||
import io.dataease.api.lark.vo.LarkInfoVO;
|
||||
import io.dataease.api.permissions.relation.api.RelationApi;
|
||||
import io.dataease.commons.constants.TaskStatus;
|
||||
import io.dataease.constant.LogOT;
|
||||
import io.dataease.constant.LogST;
|
||||
import io.dataease.constant.MessageEnum;
|
||||
import io.dataease.dataset.manage.DatasetDataManage;
|
||||
import io.dataease.dataset.utils.TableUtils;
|
||||
import io.dataease.datasource.dao.auto.entity.*;
|
||||
@@ -25,7 +27,6 @@ import io.dataease.datasource.dao.ext.mapper.TaskLogExtMapper;
|
||||
import io.dataease.datasource.manage.DataSourceManage;
|
||||
import io.dataease.datasource.manage.DatasourceSyncManage;
|
||||
import io.dataease.datasource.manage.EngineManage;
|
||||
import io.dataease.datasource.provider.ApiUtils;
|
||||
import io.dataease.datasource.provider.CalciteProvider;
|
||||
import io.dataease.datasource.provider.ExcelUtils;
|
||||
import io.dataease.constant.SQLConstants;
|
||||
@@ -47,6 +48,9 @@ import io.dataease.model.BusiNodeVO;
|
||||
import io.dataease.system.dao.auto.entity.CoreSysSetting;
|
||||
import io.dataease.system.manage.CoreUserManage;
|
||||
import io.dataease.utils.*;
|
||||
import io.dataease.xpack.base.settings.dao.entity.ExternalTokenEntity;
|
||||
import io.dataease.xpack.base.settings.platform.common.ExternalTokenManage;
|
||||
import io.dataease.xpack.base.settings.platform.lark.manage.LarkManage;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
@@ -66,6 +70,7 @@ import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -100,6 +105,8 @@ public class DatasourceServer implements DatasourceApi {
|
||||
@Resource
|
||||
private DatasetDataManage datasetDataManage;
|
||||
@Resource
|
||||
private LarkManage larkManage;
|
||||
@Resource
|
||||
private ScheduleManager scheduleManager;
|
||||
@Resource
|
||||
private CoreUserManage coreUserManage;
|
||||
@@ -107,11 +114,14 @@ public class DatasourceServer implements DatasourceApi {
|
||||
private PluginManageApi pluginManage;
|
||||
@Autowired(required = false)
|
||||
private RelationApi relationManage;
|
||||
@Resource(name = "externalTokenManage")
|
||||
private ExternalTokenManage externalTokenManage;
|
||||
|
||||
public enum UpdateType {
|
||||
all_scope, add_scope
|
||||
}
|
||||
|
||||
private static final String tenantAccessTokenUrl = "https://open.larksuite.com/open-apis/auth/v3/tenant_access_token/internal";
|
||||
private TypeReference<List<ApiDefinition>> listTypeReference = new TypeReference<List<ApiDefinition>>() {
|
||||
};
|
||||
@Resource
|
||||
@@ -126,7 +136,7 @@ public class DatasourceServer implements DatasourceApi {
|
||||
}
|
||||
|
||||
public boolean checkRepeat(@RequestBody BusiDsRequest dataSourceDTO) {
|
||||
if (Arrays.asList("API", "Excel", "folder", "es").contains(dataSourceDTO.getType())) {
|
||||
if (Arrays.asList("Excel", "folder", "es").contains(dataSourceDTO.getType()) || dataSourceDTO.getType().contains("API")) {
|
||||
return false;
|
||||
}
|
||||
BusiNodeRequest request = new BusiNodeRequest();
|
||||
@@ -152,7 +162,13 @@ public class DatasourceServer implements DatasourceApi {
|
||||
if (Arrays.asList("API", "Excel", "folder").contains(datasource.getType())) {
|
||||
continue;
|
||||
}
|
||||
if (StringUtils.isEmpty(datasource.getConfiguration())) {
|
||||
continue;
|
||||
}
|
||||
DatasourceConfiguration compare = JsonUtil.parseObject(datasource.getConfiguration(), DatasourceConfiguration.class);
|
||||
if (compare == null) {
|
||||
continue;
|
||||
}
|
||||
switch (dataSourceDTO.getType()) {
|
||||
case "sqlServer":
|
||||
case "db2":
|
||||
@@ -274,7 +290,7 @@ public class DatasourceServer implements DatasourceApi {
|
||||
}
|
||||
}
|
||||
datasourceSyncManage.extractExcelData(coreDatasource, "all_scope");
|
||||
} else if (dataSourceDTO.getType().equals(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
} else if (dataSourceDTO.getType().contains(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
CoreDatasourceTask coreDatasourceTask = new CoreDatasourceTask();
|
||||
BeanUtils.copyBean(coreDatasourceTask, dataSourceDTO.getSyncSetting());
|
||||
coreDatasourceTask.setName(coreDatasource.getName() + "-task");
|
||||
@@ -294,11 +310,11 @@ public class DatasourceServer implements DatasourceApi {
|
||||
datasourceSyncManage.addSchedule(coreDatasourceTask);
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(dataSourceDTO);
|
||||
List<DatasetTableDTO> tables = ApiUtils.getTables(datasourceRequest);
|
||||
List<DatasetTableDTO> tables = (List<DatasetTableDTO>) invokeMethod(coreDatasource.getType(), "getApiTables", DatasourceRequest.class, datasourceRequest);
|
||||
checkName(tables.stream().map(DatasetTableDTO::getName).collect(Collectors.toList()));
|
||||
for (DatasetTableDTO api : tables) {
|
||||
datasourceRequest.setTable(api.getTableName());
|
||||
List<TableField> tableFields = ApiUtils.getTableFields(datasourceRequest);
|
||||
List<TableField> tableFields = (List<TableField>) invokeMethod(coreDatasource.getType(), "getTableFields", DatasourceRequest.class, datasourceRequest);
|
||||
try {
|
||||
datasourceSyncManage.createEngineTable(datasourceRequest.getTable(), tableFields);
|
||||
} catch (Exception e) {
|
||||
@@ -344,10 +360,12 @@ public class DatasourceServer implements DatasourceApi {
|
||||
datasourceRequest.setDatasource(dataSourceDTO);
|
||||
List<String> toCreateTables = new ArrayList<>();
|
||||
List<String> toDeleteTables = new ArrayList<>();
|
||||
if (dataSourceDTO.getType().equals(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
if (dataSourceDTO.getType().contains(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
requestDatasource.setEnableDataFill(null);
|
||||
List<String> sourceTables = ApiUtils.getTables(sourceTableRequest).stream().map(DatasetTableDTO::getTableName).toList();
|
||||
List<DatasetTableDTO> datasetTableDTOS = ApiUtils.getTables(datasourceRequest);
|
||||
List<DatasetTableDTO> sourceTableDTOs = (List<DatasetTableDTO>) invokeMethod(sourceData.getType(), "getApiTables", DatasourceRequest.class, sourceTableRequest);
|
||||
List<String> sourceTables = sourceTableDTOs.stream().map(DatasetTableDTO::getTableName).toList();
|
||||
List<DatasetTableDTO> datasetTableDTOS = (List<DatasetTableDTO>) invokeMethod(sourceData.getType(), "getApiTables", DatasourceRequest.class, datasourceRequest);
|
||||
|
||||
List<String> tables = datasetTableDTOS.stream().map(DatasetTableDTO::getTableName).collect(Collectors.toList());
|
||||
checkName(datasetTableDTOS.stream().map(DatasetTableDTO::getName).collect(Collectors.toList()));
|
||||
toCreateTables = tables.stream().filter(table -> !sourceTables.contains(table)).collect(Collectors.toList());
|
||||
@@ -356,9 +374,11 @@ public class DatasourceServer implements DatasourceApi {
|
||||
for (String sourceTable : sourceTables) {
|
||||
if (table.equals(sourceTable)) {
|
||||
datasourceRequest.setTable(table);
|
||||
List<String> tableFields = ApiUtils.getTableFields(datasourceRequest).stream().map(TableField::getName).sorted().collect(Collectors.toList());
|
||||
List<TableField> tableFieldList = (List<TableField>) invokeMethod(datasourceRequest.getDatasource().getType(), "getTableFields", DatasourceRequest.class, datasourceRequest);
|
||||
List<String> tableFields = tableFieldList.stream().map(TableField::getName).sorted().collect(Collectors.toList());
|
||||
sourceTableRequest.setTable(sourceTable);
|
||||
List<String> sourceTableFields = ApiUtils.getTableFields(sourceTableRequest).stream().map(TableField::getName).sorted().collect(Collectors.toList());
|
||||
List<TableField> sourceTableFieldList = (List<TableField>) invokeMethod(sourceTableRequest.getDatasource().getType(), "getTableFields", DatasourceRequest.class, sourceTableRequest);
|
||||
List<String> sourceTableFields = sourceTableFieldList.stream().map(TableField::getName).sorted().collect(Collectors.toList());
|
||||
if (!String.join(",", tableFields).equals(String.join(",", sourceTableFields))) {
|
||||
toDeleteTables.add(table);
|
||||
toCreateTables.add(table);
|
||||
@@ -390,7 +410,7 @@ public class DatasourceServer implements DatasourceApi {
|
||||
for (String toCreateTable : toCreateTables) {
|
||||
datasourceRequest.setTable(toCreateTable);
|
||||
try {
|
||||
datasourceSyncManage.createEngineTable(toCreateTable, ApiUtils.getTableFields(datasourceRequest));
|
||||
datasourceSyncManage.createEngineTable(toCreateTable, (List<TableField>) invokeMethod(sourceTableRequest.getDatasource().getType(), "getTableFields", DatasourceRequest.class, sourceTableRequest));
|
||||
} catch (Exception e) {
|
||||
DEException.throwException("Failed to create table " + toCreateTable + ", " + e.getMessage());
|
||||
}
|
||||
@@ -486,7 +506,7 @@ public class DatasourceServer implements DatasourceApi {
|
||||
if (datasource == null) {
|
||||
DEException.throwException(Translator.get("i18n_datasource_not_exists"));
|
||||
}
|
||||
if (datasource.getType().equalsIgnoreCase("api")) {
|
||||
if (datasource.getType().contains("API")) {
|
||||
datasource.setConfiguration("[]");
|
||||
} else {
|
||||
datasource.setConfiguration("");
|
||||
@@ -589,10 +609,10 @@ public class DatasourceServer implements DatasourceApi {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (coreDatasource.getType().equals(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
if (coreDatasource.getType().contains(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(datasourceDTO);
|
||||
List<DatasetTableDTO> tables = ApiUtils.getTables(datasourceRequest);
|
||||
List<DatasetTableDTO> tables = (List<DatasetTableDTO>) invokeMethod(coreDatasource.getType(), "getApiTables", DatasourceRequest.class, datasourceRequest);
|
||||
for (DatasetTableDTO api : tables) {
|
||||
datasourceRequest.setTable(api.getTableName());
|
||||
try {
|
||||
@@ -671,8 +691,8 @@ public class DatasourceServer implements DatasourceApi {
|
||||
BeanUtils.copyBean(datasourceDTO, coreDatasource);
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(datasourceDTO);
|
||||
if (coreDatasource.getType().equals("API")) {
|
||||
List<DatasetTableDTO> datasetTableDTOS = ApiUtils.getTables(datasourceRequest);
|
||||
if (coreDatasource.getType().contains(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
List<DatasetTableDTO> datasetTableDTOS = (List<DatasetTableDTO>) invokeMethod(coreDatasource.getType(), "getApiTables", DatasourceRequest.class, datasourceRequest);
|
||||
datasetTableDTOS.forEach(datasetTableDTO1 -> {
|
||||
CoreDatasourceTaskLog log = datasourceTaskServer.lastSyncLogForTable(datasetTableDTO.getDatasourceId(), datasetTableDTO1.getTableName());
|
||||
if (log != null) {
|
||||
@@ -701,7 +721,7 @@ public class DatasourceServer implements DatasourceApi {
|
||||
CoreDatasource coreDatasource = dataSourceManage.getCoreDatasource(Long.parseLong(datasourceId));
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(transDTO(coreDatasource));
|
||||
if (coreDatasource.getType().equals("API") || coreDatasource.getType().equals("Excel")) {
|
||||
if (coreDatasource.getType().contains(DatasourceConfiguration.DatasourceType.API.name()) || coreDatasource.getType().equals("Excel")) {
|
||||
datasourceRequest.setDatasource(transDTO(engineManage.getDeEngine()));
|
||||
DatasourceSchemaDTO datasourceSchemaDTO = new DatasourceSchemaDTO();
|
||||
BeanUtils.copyBean(datasourceSchemaDTO, engineManage.getDeEngine());
|
||||
@@ -781,7 +801,7 @@ public class DatasourceServer implements DatasourceApi {
|
||||
List<ExcelSheetData> excelSheetDataList = new ArrayList<>();
|
||||
for (ExcelSheetData sheet : excelFileData.getSheets()) {
|
||||
for (DatasetTableDTO datasetTableDTO : datasetTableDTOS) {
|
||||
if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName())){
|
||||
if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName())) {
|
||||
List<TableField> newTableFields = sheet.getFields();
|
||||
datasourceRequest.setTable(datasetTableDTO.getTableName());
|
||||
List<TableField> oldTableFields = ExcelUtils.getTableFields(datasourceRequest);
|
||||
@@ -802,7 +822,7 @@ public class DatasourceServer implements DatasourceApi {
|
||||
List<DatasetTableDTO> datasetTableDTOS = ExcelUtils.getTables(datasourceRequest);
|
||||
for (ExcelSheetData sheet : excelFileData.getSheets()) {
|
||||
for (DatasetTableDTO datasetTableDTO : datasetTableDTOS) {
|
||||
if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName())){
|
||||
if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName())) {
|
||||
sheet.setDeTableName(datasetTableDTO.getTableName());
|
||||
}
|
||||
}
|
||||
@@ -876,12 +896,17 @@ public class DatasourceServer implements DatasourceApi {
|
||||
|
||||
public ApiDefinition checkApiDatasource(Map<String, String> request) throws DEException {
|
||||
ApiDefinition apiDefinition = JsonUtil.parseObject(new String(java.util.Base64.getDecoder().decode(request.get("data"))), ApiDefinition.class);
|
||||
List<ApiDefinition> paramsList = JsonUtil.parseList(new String(java.util.Base64.getDecoder().decode(request.get("paramsList"))), listTypeReference);
|
||||
String response = ApiUtils.execHttpRequest(true, apiDefinition, apiDefinition.getApiQueryTimeout() == null || apiDefinition.getApiQueryTimeout() <= 0 ? 10 : apiDefinition.getApiQueryTimeout(), paramsList);
|
||||
if (request.keySet().contains("type") && request.get("type").equals("apiStructure")) {
|
||||
apiDefinition.setShowApiStructure(true);
|
||||
}
|
||||
ApiUtils.checkApiDefinition(apiDefinition, response);
|
||||
List<ApiDefinition> paramsList = JsonUtil.parseList(new String(java.util.Base64.getDecoder().decode(request.get("paramsList"))), listTypeReference);
|
||||
paramsList.add(apiDefinition);
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
DatasourceDTO datasource = new DatasourceDTO();
|
||||
datasource.setConfiguration(JsonUtil.toJSONString(paramsList).toString());
|
||||
datasourceRequest.setDatasource(datasource);
|
||||
|
||||
apiDefinition = (ApiDefinition) invokeMethod(request.get("dsType"), "checkApiDefinition", DatasourceRequest.class, datasourceRequest);
|
||||
if (apiDefinition.getRequest().getAuthManager() != null && StringUtils.isNotBlank(apiDefinition.getRequest().getAuthManager().getUsername()) && StringUtils.isNotBlank(apiDefinition.getRequest().getAuthManager().getPassword()) && apiDefinition.getRequest().getAuthManager().getVerification().equals("Basic Auth")) {
|
||||
apiDefinition.getRequest().getAuthManager().setUsername(new String(Base64.getEncoder().encode(apiDefinition.getRequest().getAuthManager().getUsername().getBytes())));
|
||||
apiDefinition.getRequest().getAuthManager().setPassword(new String(Base64.getEncoder().encode(apiDefinition.getRequest().getAuthManager().getPassword().getBytes())));
|
||||
@@ -889,6 +914,47 @@ public class DatasourceServer implements DatasourceApi {
|
||||
return apiDefinition;
|
||||
}
|
||||
|
||||
private void generateToken(LarkInfoVO info) {
|
||||
if (ObjectUtils.isEmpty(info)) {
|
||||
info = larkManage.query();
|
||||
}
|
||||
HttpClientConfig clientConfig = new HttpClientConfig();
|
||||
clientConfig.addHeader("Content-Type", "application/json");
|
||||
String tokenPost = HttpClientUtil.post(tenantAccessTokenUrl, buildAccessTokenParam(info.getAppId(), info.getAppSecret()), clientConfig);
|
||||
Map<String, Object> parse = null;
|
||||
try {
|
||||
parse = buildAccessTokenResult(tokenPost);
|
||||
} catch (Exception e) {
|
||||
DEException.throwException("请检查appId和appSecret参数," + e.getMessage());
|
||||
}
|
||||
String tenantAccessToken = parse.get("tenant_access_token").toString();
|
||||
Integer expires_in = (Integer) parse.get("expire");
|
||||
ExternalTokenEntity externalTokenEntity = new ExternalTokenEntity();
|
||||
long expTimePoint = System.currentTimeMillis() + expires_in * 1000L;
|
||||
externalTokenEntity.setId(MessageEnum.LARK.getFlag());
|
||||
externalTokenEntity.setToken(tenantAccessToken);
|
||||
externalTokenEntity.setExpTime(expTimePoint);
|
||||
externalTokenManage.refreshToken(externalTokenEntity);
|
||||
}
|
||||
|
||||
private Map<String, Object> buildAccessTokenResult(String json) {
|
||||
if (ObjectUtils.isEmpty(json)) {
|
||||
DEException.throwException("get access token error");
|
||||
}
|
||||
Map<String, Object> resultMap = JsonUtil.parse(json, Map.class);
|
||||
if (Integer.parseInt(resultMap.get("code").toString()) != 0) {
|
||||
DEException.throwException(resultMap.get("msg").toString());
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
private String buildAccessTokenParam(String appId, String appSecret) {
|
||||
Map<String, String> param = new HashMap<>();
|
||||
param.put("app_id", appId);
|
||||
param.put("app_secret", appSecret);
|
||||
return Objects.requireNonNull(JsonUtil.toJSONString(param)).toString();
|
||||
}
|
||||
|
||||
private void preCheckDs(DatasourceDTO datasource) throws DEException {
|
||||
List<String> list = datasourceTypes().stream().map(DatasourceConfiguration.DatasourceType::getType).collect(Collectors.toList());
|
||||
if (LicenseUtil.licenseValid()) {
|
||||
@@ -909,8 +975,8 @@ public class DatasourceServer implements DatasourceApi {
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(coreDatasource);
|
||||
String status = null;
|
||||
if (coreDatasource.getType().equals("API")) {
|
||||
status = ApiUtils.checkStatus(datasourceRequest);
|
||||
if (coreDatasource.getType().startsWith("API")) {
|
||||
status = (String) invokeMethod(coreDatasource.getType(), "checkAPIStatus", DatasourceRequest.class, datasourceRequest);
|
||||
} else {
|
||||
Provider provider = ProviderFactory.getProvider(coreDatasource.getType());
|
||||
status = provider.checkStatus(datasourceRequest);
|
||||
@@ -921,6 +987,10 @@ public class DatasourceServer implements DatasourceApi {
|
||||
}
|
||||
}
|
||||
|
||||
public String getTenantAccessToken() {
|
||||
LarkInfoVO larkInfo = larkManage.query();
|
||||
return externalTokenManage.getToken(MessageEnum.LARK.getFlag(), t -> generateToken(larkInfo));
|
||||
}
|
||||
|
||||
public void updateDemoDs() {
|
||||
}
|
||||
@@ -968,7 +1038,7 @@ public class DatasourceServer implements DatasourceApi {
|
||||
CoreDatasource coreDatasource = dataSourceManage.getCoreDatasource(dsId);
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(transDTO(coreDatasource));
|
||||
List<DatasetTableDTO> datasetTableDTOS = ApiUtils.getTables(datasourceRequest);
|
||||
List<DatasetTableDTO> datasetTableDTOS = (List<DatasetTableDTO>) invokeMethod(coreDatasource.getType(), "getApiTables", DatasourceRequest.class, datasourceRequest);
|
||||
for (int i = 0; i < pager.getRecords().size(); i++) {
|
||||
for (int i1 = 0; i1 < datasetTableDTOS.size(); i1++) {
|
||||
if (pager.getRecords().get(i).getTableName().equalsIgnoreCase(datasetTableDTOS.get(i1).getTableName())) {
|
||||
@@ -1124,7 +1194,7 @@ public class DatasourceServer implements DatasourceApi {
|
||||
DatasourceDTO datasourceDTO = new DatasourceDTO();
|
||||
BeanUtils.copyBean(datasourceDTO, datasource);
|
||||
|
||||
if (datasourceDTO.getType().equalsIgnoreCase(DatasourceConfiguration.DatasourceType.API.toString())) {
|
||||
if (datasourceDTO.getType().contains(DatasourceConfiguration.DatasourceType.API.toString())) {
|
||||
List<ApiDefinition> apiDefinitionList = JsonUtil.parseList(datasourceDTO.getConfiguration(), listTypeReference);
|
||||
List<ApiDefinition> apiDefinitionListWithStatus = new ArrayList<>();
|
||||
List<ApiDefinition> params = new ArrayList<>();
|
||||
@@ -1203,7 +1273,7 @@ public class DatasourceServer implements DatasourceApi {
|
||||
BeanUtils.copyBean(datasourceDTO, coreDatasource);
|
||||
try {
|
||||
checkDatasourceStatus(datasourceDTO);
|
||||
if (!Arrays.asList("API", "Excel", "folder").contains(coreDatasource.getType())) {
|
||||
if (!Arrays.asList("API", "Excel", "folder").contains(coreDatasource.getType()) && !coreDatasource.getType().contains(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
calciteProvider.updateDsPoolAfterCheckStatus(datasourceDTO);
|
||||
}
|
||||
} catch (DEException e) {
|
||||
@@ -1241,4 +1311,35 @@ public class DatasourceServer implements DatasourceApi {
|
||||
vo.setHost(host);
|
||||
return vo;
|
||||
}
|
||||
|
||||
private Method getMethod(String dsType, String methodName, Class<?> classes) {
|
||||
Method method = null;
|
||||
try {
|
||||
String ClassName = "io.dataease.datasource.provider.ApiUtils";
|
||||
if (!dsType.equals(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
ClassName = "io.dataease.datasource.provider.LarkUtils";
|
||||
}
|
||||
Class<?> clazz = Class.forName(ClassName);
|
||||
method = clazz.getMethod(methodName, classes);
|
||||
} catch (Exception e) {
|
||||
DEException.throwException("Cant find method: " + e.getMessage());
|
||||
}
|
||||
return method;
|
||||
}
|
||||
|
||||
public Object invokeMethod(String dsType, String methodName, Class<?> classes, Object object) {
|
||||
Object resObj = null;
|
||||
try {
|
||||
Method method = getMethod(dsType, methodName, classes);
|
||||
if (object instanceof DatasourceRequest) {
|
||||
Class<?> clazz = Class.forName(DatasourceRequest.class.getName());
|
||||
Method setToken = clazz.getMethod("setToken", String.class);
|
||||
setToken.invoke(object, getTenantAccessToken());
|
||||
}
|
||||
resObj = method.invoke(null, object);
|
||||
} catch (Exception e) {
|
||||
DEException.throwException(e);
|
||||
}
|
||||
return resObj;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,8 +30,8 @@ import io.dataease.dataset.manage.DatasetDataManage;
|
||||
import io.dataease.dataset.manage.DatasetGroupManage;
|
||||
import io.dataease.datasource.dao.auto.entity.CoreDatasource;
|
||||
import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper;
|
||||
import io.dataease.datasource.provider.ApiUtils;
|
||||
import io.dataease.datasource.provider.ExcelUtils;
|
||||
import io.dataease.datasource.server.DatasourceServer;
|
||||
import io.dataease.exception.DEException;
|
||||
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
|
||||
import io.dataease.extensions.view.dto.ChartViewDTO;
|
||||
@@ -141,6 +141,8 @@ public class DataVisualizationServer implements DataVisualizationApi {
|
||||
|
||||
@Resource
|
||||
private CoreUserManage coreUserManage;
|
||||
@Resource
|
||||
private DatasourceServer datasourceServer;
|
||||
|
||||
@Override
|
||||
public DataVisualizationVO findCopyResource(Long dvId, String busiFlag) {
|
||||
@@ -232,8 +234,8 @@ public class DataVisualizationServer implements DataVisualizationApi {
|
||||
if (StringUtils.isNotEmpty(datasourceOld.getConfiguration())) {
|
||||
if (datasourceOld.getType().equals(DatasourceConfiguration.DatasourceType.Excel.name())) {
|
||||
dsTableNamesMap.put(datasourceOld.getId(), ExcelUtils.getTableNamesMap(datasourceOld.getConfiguration()));
|
||||
} else if (datasourceOld.getType().equals(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
dsTableNamesMap.put(datasourceOld.getId(), ApiUtils.getTableNamesMap(datasourceOld.getConfiguration()));
|
||||
} else if (datasourceOld.getType().contains(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
dsTableNamesMap.put(datasourceOld.getId(), (Map<String, String>) datasourceServer.invokeMethod(datasourceOld.getType(), "getTableNamesMap", String.class, datasourceOld.getConfiguration()));
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -244,8 +246,8 @@ public class DataVisualizationServer implements DataVisualizationApi {
|
||||
if (StringUtils.isNotEmpty(datasourceNew.getConfiguration())) {
|
||||
if (datasourceNew.getType().equals(DatasourceConfiguration.DatasourceType.Excel.name())) {
|
||||
dsTableNamesMap.put(datasourceNew.getId(), ExcelUtils.getTableNamesMap(datasourceNew.getConfiguration()));
|
||||
} else if (datasourceNew.getType().equals(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
dsTableNamesMap.put(datasourceNew.getId(), ApiUtils.getTableNamesMap(datasourceNew.getConfiguration()));
|
||||
} else if (datasourceNew.getType().contains(DatasourceConfiguration.DatasourceType.API.name())) {
|
||||
dsTableNamesMap.put(datasourceNew.getId(), (Map<String, String>) datasourceServer.invokeMethod(datasourceNew.getType(), "getTableNamesMap", String.class, datasourceNew.getConfiguration()));
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -516,11 +518,11 @@ public class DataVisualizationServer implements DataVisualizationApi {
|
||||
coreVisualizationManage.delete(dvId);
|
||||
}
|
||||
|
||||
private void resourceTreeTypeAdaptor(List<BusiNodeVO> tree,String type){
|
||||
if(!CollectionUtils.isEmpty(tree)){
|
||||
private void resourceTreeTypeAdaptor(List<BusiNodeVO> tree, String type) {
|
||||
if (!CollectionUtils.isEmpty(tree)) {
|
||||
tree.forEach(busiNodeVO -> {
|
||||
busiNodeVO.setType(type);
|
||||
resourceTreeTypeAdaptor(busiNodeVO.getChildren(),type);
|
||||
resourceTreeTypeAdaptor(busiNodeVO.getChildren(), type);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -537,7 +539,7 @@ public class DataVisualizationServer implements DataVisualizationApi {
|
||||
List<BusiNodeVO> dataVResult = coreVisualizationManage.tree(requestDv);
|
||||
List<BusiNodeVO> result = new ArrayList<>();
|
||||
if (!CollectionUtils.isEmpty(dashboardResult)) {
|
||||
resourceTreeTypeAdaptor(dashboardResult,"dashboard");
|
||||
resourceTreeTypeAdaptor(dashboardResult, "dashboard");
|
||||
BusiNodeVO dashboardResultParent = new BusiNodeVO();
|
||||
dashboardResultParent.setName(Translator.get("i18n_menu.panel"));
|
||||
dashboardResultParent.setId(-101L);
|
||||
@@ -549,7 +551,7 @@ public class DataVisualizationServer implements DataVisualizationApi {
|
||||
result.add(dashboardResultParent);
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(dataVResult)) {
|
||||
resourceTreeTypeAdaptor(dataVResult,"dataV");
|
||||
resourceTreeTypeAdaptor(dataVResult, "dataV");
|
||||
BusiNodeVO dataVResultParent = new BusiNodeVO();
|
||||
dataVResultParent.setName(Translator.get("i18n_menu.screen"));
|
||||
dataVResultParent.setId(-102L);
|
||||
|
||||
@@ -1,30 +1,25 @@
|
||||
package io.dataease.visualization.utils;
|
||||
|
||||
|
||||
import io.dataease.datasource.provider.ApiUtils;
|
||||
import io.dataease.datasource.provider.ExcelUtils;
|
||||
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
|
||||
import io.dataease.extensions.view.dto.ChartViewDTO;
|
||||
import io.dataease.utils.JsonUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class VisualizationUtils {
|
||||
|
||||
public static Map<Long,String> viewTransToStr(Map<Long, ChartViewDTO> source ){
|
||||
Map<Long,String> result = new HashMap<>();
|
||||
source.forEach((key,value) ->{
|
||||
result.put(key, (String)JsonUtil.toJSONString(value));
|
||||
});
|
||||
return result;
|
||||
public static Map<Long, String> viewTransToStr(Map<Long, ChartViewDTO> source) {
|
||||
Map<Long, String> result = new HashMap<>();
|
||||
source.forEach((key, value) -> {
|
||||
result.put(key, (String) JsonUtil.toJSONString(value));
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Map<Long,ChartViewDTO> viewTransToObj (Map<Long, String> source ){
|
||||
Map<Long,ChartViewDTO> result = new HashMap<>();
|
||||
source.forEach((key,value) ->{
|
||||
result.put(key, JsonUtil.parseObject(value,ChartViewDTO.class));
|
||||
public static Map<Long, ChartViewDTO> viewTransToObj(Map<Long, String> source) {
|
||||
Map<Long, ChartViewDTO> result = new HashMap<>();
|
||||
source.forEach((key, value) -> {
|
||||
result.put(key, JsonUtil.parseObject(value, ChartViewDTO.class));
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1098,7 +1098,15 @@ export default {
|
||||
sync_table: '同步指定表',
|
||||
req_completed: '请求成功',
|
||||
sync_rate: '更新频率',
|
||||
has_same_ds: '存在相同配置数据源,确认保存?'
|
||||
has_same_ds: '存在相同配置数据源,确认保存?',
|
||||
table_addr: '表格地址',
|
||||
input_addr: '请输入表格地址',
|
||||
app_token: 'app_token',
|
||||
input_app_token: '请输入app_token',
|
||||
table_id: 'table_id',
|
||||
input_table_id: '请输入table_id',
|
||||
view_id: 'view_id',
|
||||
input_view_id: '请输入view_id'
|
||||
},
|
||||
chart: {
|
||||
align: '对齐方式',
|
||||
|
||||
@@ -291,7 +291,7 @@ const saveDataset = () => {
|
||||
request.apiConfiguration = ''
|
||||
checkRepeat(request).then(res => {
|
||||
let method = request.id === '' ? save : update
|
||||
if (request.type !== 'API') {
|
||||
if (!request.type.startsWith('API')) {
|
||||
request.syncSetting = null
|
||||
}
|
||||
if (res) {
|
||||
|
||||
@@ -24,9 +24,10 @@ import { CustomPassword } from '@/components/custom-password'
|
||||
import { ElForm, ElMessage, ElMessageBox } from 'element-plus-secondary'
|
||||
import Cron from '@/components/cron/src/Cron.vue'
|
||||
import { ComponentPublicInstance } from 'vue'
|
||||
import { XpackComponent } from '@/components/plugin'
|
||||
import {PluginComponent, XpackComponent} from '@/components/plugin'
|
||||
import { iconFieldMap } from '@/components/icon-group/field-list'
|
||||
import { boolean } from 'mathjs'
|
||||
import LarkItemDraw from '@/views/visualized/data/datasource/form/LarkItemDraw_bak.vue'
|
||||
const { t } = useI18n()
|
||||
const prop = defineProps({
|
||||
form: {
|
||||
@@ -95,6 +96,7 @@ const defaultRule = {
|
||||
const rule = ref<FormRules>(cloneDeep(defaultRule))
|
||||
const api_table_title = ref('')
|
||||
const editApiItem = ref()
|
||||
const editLarkItem = ref()
|
||||
const defaultApiItem = {
|
||||
name: '',
|
||||
deTableName: '',
|
||||
@@ -127,7 +129,7 @@ const defaultApiItem = {
|
||||
}
|
||||
|
||||
const initForm = type => {
|
||||
if (type !== 'API') {
|
||||
if (!type.startsWith('API')) {
|
||||
form.value.configuration = {
|
||||
dataBase: '',
|
||||
jdbcUrl: '',
|
||||
@@ -148,7 +150,7 @@ const initForm = type => {
|
||||
rule.value = cloneDeep(defaultRule)
|
||||
setRules()
|
||||
}
|
||||
if (type === 'API') {
|
||||
if (type.startsWith('API')) {
|
||||
form.value.syncSetting = {
|
||||
updateType: 'all_scope',
|
||||
syncRate: 'SIMPLE_CRON',
|
||||
@@ -170,7 +172,7 @@ const initForm = type => {
|
||||
}, 0)
|
||||
}
|
||||
|
||||
const notapiexcelconfig = computed(() => form.value.type !== 'API')
|
||||
const notapiexcelconfig = computed(() => !form.value.type.startsWith('API'))
|
||||
|
||||
const authMethodList = [
|
||||
{
|
||||
@@ -353,7 +355,7 @@ const setRules = () => {
|
||||
watch(
|
||||
() => form.value.type,
|
||||
val => {
|
||||
if (val !== 'API') {
|
||||
if (!val.startsWith('API')) {
|
||||
rule.value = cloneDeep(defaultRule)
|
||||
setRules()
|
||||
}
|
||||
@@ -431,6 +433,37 @@ const addApiItem = item => {
|
||||
})
|
||||
}
|
||||
|
||||
const addLarkItem = item => {
|
||||
let apiItem = null
|
||||
let editItem = false
|
||||
api_table_title.value = t('datasource.data_table')
|
||||
if (item) {
|
||||
apiItem = cloneDeep(item)
|
||||
editItem = true
|
||||
} else {
|
||||
apiItem = cloneDeep(defaultApiItem)
|
||||
apiItem.type = activeName.value
|
||||
let serialNumber1 =
|
||||
form.value.apiConfiguration.length > 0
|
||||
? form.value.apiConfiguration[form.value.apiConfiguration.length - 1].serialNumber + 1
|
||||
: 0
|
||||
let serialNumber2 =
|
||||
form.value.paramsConfiguration && form.value.paramsConfiguration.length > 0
|
||||
? form.value.paramsConfiguration[form.value.paramsConfiguration.length - 1].serialNumber + 1
|
||||
: 0
|
||||
apiItem.serialNumber = serialNumber1 + serialNumber2
|
||||
}
|
||||
nextTick(() => {
|
||||
editLarkItem.value.initApiItem(
|
||||
apiItem,
|
||||
form.value,
|
||||
activeName.value,
|
||||
editItem,
|
||||
isSupportSetKey.value
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
const activeName = ref('table')
|
||||
const showPriority = ref(false)
|
||||
const showSSH = ref(false)
|
||||
@@ -604,6 +637,7 @@ const apiRule = {
|
||||
}
|
||||
const dialogEditParams = ref(false)
|
||||
const dialogRenameApi = ref(false)
|
||||
const dialogAddLarkItem = ref(false)
|
||||
const activeParamsName = ref('')
|
||||
const activeParamsID = ref(0)
|
||||
const paramsObj = ref({
|
||||
@@ -757,7 +791,7 @@ defineExpose({
|
||||
<template>
|
||||
<div class="editor-detail">
|
||||
<div class="detail-inner create-dialog">
|
||||
<div v-show="form.type === 'API'" class="info-update">
|
||||
<div v-show="form.type.startsWith('API')" class="info-update">
|
||||
<div :class="activeStep === 1 && 'active'" class="info-text">
|
||||
{{ t('data_source.source_configuration_information') }}
|
||||
</div>
|
||||
@@ -766,7 +800,10 @@ defineExpose({
|
||||
{{ t('data_source.data_update_settings') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="title-form_primary base-info" v-show="activeStep !== 2 && form.type === 'API'">
|
||||
<div
|
||||
class="title-form_primary base-info"
|
||||
v-show="activeStep !== 2 && form.type.startsWith('API')"
|
||||
>
|
||||
{{ t('datasource.basic_info') }}
|
||||
</div>
|
||||
<el-form
|
||||
@@ -969,6 +1006,90 @@ defineExpose({
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="form.type === 'APILark'">
|
||||
<div class="title-form_primary flex-space table-info-mr" v-show="activeStep !== 2">
|
||||
<el-tabs v-model="activeName" class="api-tabs">
|
||||
<el-tab-pane :label="t('datasource.data_table')" name="table"></el-tab-pane>
|
||||
</el-tabs>
|
||||
<el-button type="primary" style="margin-left: auto" @click="() => addLarkItem(null)">
|
||||
<template #icon>
|
||||
<Icon name="icon_add_outlined"><icon_add_outlined class="svg-icon" /></Icon>
|
||||
</template>
|
||||
{{ t('common.add') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<empty-background
|
||||
v-show="activeStep !== 2"
|
||||
v-if="!form.apiConfiguration.length && activeName === 'table'"
|
||||
:description="t('datasource.no_data_table')"
|
||||
img-type="noneWhite"
|
||||
/>
|
||||
<template v-if="form.type === 'APILark' && activeStep === 1 && activeName === 'table'">
|
||||
<div class="api-card-content">
|
||||
<div
|
||||
v-for="(api, idx) in form.apiConfiguration"
|
||||
:key="api.id"
|
||||
class="api-card"
|
||||
@click="addLarkItem(api)"
|
||||
>
|
||||
<el-row>
|
||||
<el-col style="display: flex" :span="19">
|
||||
<span class="name ellipsis">{{ api.name }}</span>
|
||||
<span v-if="api.status === 'Error'" class="de-tag invalid">{{
|
||||
t('datasource.invalid')
|
||||
}}</span>
|
||||
<span v-if="api.status === 'Success'" class="de-tag valid">{{
|
||||
t('datasource.valid')
|
||||
}}</span>
|
||||
</el-col>
|
||||
<el-col style="text-align: right" :span="5">
|
||||
<el-icon class="de-copy-icon hover-icon" @click.stop="copyItem(api)">
|
||||
<Icon name="de-copy"><deCopy class="svg-icon" /></Icon>
|
||||
</el-icon>
|
||||
|
||||
<span @click.stop>
|
||||
<el-popover
|
||||
placement="top"
|
||||
width="200"
|
||||
:ref="setItemRef"
|
||||
show-arrow
|
||||
popper-class="api-table-delete"
|
||||
trigger="click"
|
||||
>
|
||||
<template #reference>
|
||||
<el-icon class="de-delete-icon hover-icon">
|
||||
<Icon name="de-delete"><deDelete class="svg-icon" /></Icon>
|
||||
</el-icon>
|
||||
</template>
|
||||
<template #default>
|
||||
<el-icon class="de-copy-icon icon-warning">
|
||||
<Icon name="icon_warning_filled"
|
||||
><icon_warning_filled class="svg-icon"
|
||||
/></Icon>
|
||||
</el-icon>
|
||||
<div class="tips">
|
||||
{{ t('datasource.delete_this_item') }}
|
||||
</div>
|
||||
<div class="foot">
|
||||
<el-button style="min-width: 48px" secondary @click="cancelItem(idx)">{{
|
||||
t('common.cancel')
|
||||
}}</el-button>
|
||||
<el-button
|
||||
style="min-width: 48px"
|
||||
type="primary"
|
||||
@click="deleteItem(api, idx)"
|
||||
>{{ t('common.sure') }}</el-button
|
||||
>
|
||||
</div>
|
||||
</template>
|
||||
</el-popover>
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
<template v-if="notapiexcelconfig">
|
||||
<el-form-item
|
||||
:label="t('data_source.connection_method')"
|
||||
@@ -1344,7 +1465,7 @@ defineExpose({
|
||||
<el-form-item
|
||||
:label="t('datasource.update_type')"
|
||||
prop="syncSetting.updateType"
|
||||
v-if="activeStep === 2 && form.type === 'API'"
|
||||
v-if="activeStep === 2 && form.type.startsWith('API')"
|
||||
>
|
||||
<el-radio-group v-model="form.syncSetting.updateType">
|
||||
<el-radio label="all_scope">{{ t('datasource.all_scope') }}</el-radio>
|
||||
@@ -1354,7 +1475,7 @@ defineExpose({
|
||||
<el-form-item
|
||||
:label="t('datasource.sync_rate')"
|
||||
prop="syncSetting.syncRate"
|
||||
v-if="activeStep === 2 && form.type === 'API'"
|
||||
v-if="activeStep === 2 && form.type.startsWith('API')"
|
||||
>
|
||||
<el-radio-group v-model="form.syncSetting.syncRate" @change="onRateChange">
|
||||
<el-radio label="RIGHTNOW">{{ t('data_source.update_now') }}</el-radio>
|
||||
@@ -1363,7 +1484,11 @@ defineExpose({
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<div
|
||||
v-if="activeStep === 2 && form.type === 'API' && form.syncSetting.syncRate !== 'RIGHTNOW'"
|
||||
v-if="
|
||||
activeStep === 2 &&
|
||||
form.type.startsWith('API') &&
|
||||
form.syncSetting.syncRate !== 'RIGHTNOW'
|
||||
"
|
||||
class="execute-rate-cont"
|
||||
>
|
||||
<el-form-item
|
||||
@@ -1496,8 +1621,20 @@ defineExpose({
|
||||
<el-button type="primary" @click="saveApiObj">{{ t('dataset.confirm') }} </el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<api-http-request-draw @return-item="returnItem" ref="editApiItem"></api-http-request-draw>
|
||||
<plugin-component
|
||||
:jsname="getPluginStatic(currentDsType)"
|
||||
ref="xpack"
|
||||
:form="form"
|
||||
:editDs="editDs"
|
||||
:active-step="activeApiStep"
|
||||
@submitForm="handleSubmit"
|
||||
v-if="
|
||||
activeStep !== 0 && currentDsType && currentDsType !== 'Excel' && visible && isPlugin
|
||||
"
|
||||
>
|
||||
</plugin-component>
|
||||
<!-- <lark-item-draw @return-item="returnItem" ref="editLarkItem"></lark-item-draw>-->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -196,7 +196,7 @@ const activeApiStep = ref(0)
|
||||
|
||||
const setNextStep = () => {
|
||||
activeApiStep.value = activeStep.value + 1
|
||||
if (currentDsType.value === 'API' && activeStep.value === 1) return
|
||||
if (currentDsType.value.includes('API') && activeStep.value === 1) return
|
||||
activeStep.value = activeStep.value + 1
|
||||
}
|
||||
|
||||
@@ -208,14 +208,14 @@ const next = () => {
|
||||
|
||||
if (
|
||||
form.apiConfiguration?.length === 0 &&
|
||||
currentDsType.value === 'API' &&
|
||||
currentDsType.value.includes('API') &&
|
||||
activeStep.value !== 2
|
||||
) {
|
||||
ElMessage.error(t('data_source.cannot_be_empty_table'))
|
||||
return
|
||||
}
|
||||
|
||||
if (currentDsType.value === 'API' && activeStep.value !== 2) {
|
||||
if (currentDsType.value.includes('API') && activeStep.value !== 2) {
|
||||
const validateFrom = detail.value.submitForm()
|
||||
validateFrom(val => {
|
||||
if (val) {
|
||||
@@ -284,7 +284,10 @@ const handleShowFinishPage = ({ id, name, pid }) => {
|
||||
emitter.on('showFinishPage', handleShowFinishPage)
|
||||
|
||||
const prev = () => {
|
||||
if ((currentDsType.value === 'API' && activeApiStep.value === 1) || activeStep.value === 1) {
|
||||
if (
|
||||
(currentDsType.value.includes('API') && activeApiStep.value === 1) ||
|
||||
activeStep.value === 1
|
||||
) {
|
||||
ElMessageBox.confirm(t('data_source.the_previous_step'), {
|
||||
confirmButtonType: 'primary',
|
||||
type: 'warning',
|
||||
@@ -299,7 +302,7 @@ const prev = () => {
|
||||
}
|
||||
|
||||
const prevConfirm = () => {
|
||||
if (currentDsType.value === 'API' && activeApiStep.value === 2) {
|
||||
if (currentDsType.value.includes('API') && activeApiStep.value === 2) {
|
||||
activeApiStep.value = 1
|
||||
activeStep.value = 1
|
||||
return
|
||||
@@ -336,7 +339,8 @@ const validateDS = () => {
|
||||
configuration: string
|
||||
apiConfiguration: string
|
||||
}
|
||||
if (currentDsType.value === 'API') {
|
||||
console.log(form)
|
||||
if (currentDsType.value.includes('API')) {
|
||||
if (form.apiConfiguration.length === 0) {
|
||||
ElMessage.error(t('data_source.add_data_table'))
|
||||
return
|
||||
@@ -417,6 +421,7 @@ const typeTitle = computed(() => {
|
||||
|
||||
const saveDS = () => {
|
||||
isUpdate = false
|
||||
console.log('1')
|
||||
const request = JSON.parse(JSON.stringify(form)) as unknown as Omit<
|
||||
Form,
|
||||
'configuration' | 'apiConfiguration'
|
||||
@@ -424,6 +429,7 @@ const saveDS = () => {
|
||||
configuration: string
|
||||
apiConfiguration: string
|
||||
}
|
||||
console.log('1')
|
||||
if (currentDsType.value === 'Excel') {
|
||||
excel.value.uploadStatus(false)
|
||||
if (!excel.value.sheetFile?.name) {
|
||||
@@ -443,7 +449,7 @@ const saveDS = () => {
|
||||
})
|
||||
|
||||
return
|
||||
} else if (currentDsType.value === 'API') {
|
||||
} else if (currentDsType.value.includes('API')) {
|
||||
for (let i = 0; i < request.apiConfiguration.length; i++) {
|
||||
if (
|
||||
request.apiConfiguration[i].deTableName === '' ||
|
||||
@@ -461,6 +467,7 @@ const saveDS = () => {
|
||||
request.apiConfiguration[i].fields[j].value = []
|
||||
}
|
||||
}
|
||||
console.log('3')
|
||||
let apiItems = []
|
||||
apiItems = apiItems.concat(request.apiConfiguration)
|
||||
if (request.paramsConfiguration) {
|
||||
@@ -472,7 +479,7 @@ const saveDS = () => {
|
||||
} else {
|
||||
request.configuration = Base64.encode(JSON.stringify(request.configuration))
|
||||
}
|
||||
|
||||
console.log('4')
|
||||
if (isPlugin.value) {
|
||||
xpack?.value?.invokeMethod({
|
||||
methodName: 'submitForm',
|
||||
@@ -483,6 +490,7 @@ const saveDS = () => {
|
||||
request.apiConfiguration = ''
|
||||
validate(val => {
|
||||
if (val) {
|
||||
console.log('5')
|
||||
doSaveDs(request)
|
||||
}
|
||||
})
|
||||
@@ -498,6 +506,7 @@ const doSaveDs = request => {
|
||||
showClose: false,
|
||||
tip: ''
|
||||
}
|
||||
console.log('6')
|
||||
checkRepeat(request).then(res => {
|
||||
let method = request.id === '' ? save : update
|
||||
if (res) {
|
||||
@@ -846,8 +855,8 @@ defineExpose({
|
||||
>
|
||||
<el-button
|
||||
v-show="
|
||||
(activeStep === 0 && currentDsType !== 'API') ||
|
||||
(activeApiStep !== 2 && currentDsType === 'API')
|
||||
(activeStep === 0 && !currentDsType.startsWith('API')) ||
|
||||
(activeApiStep !== 2 && currentDsType.startsWith('API'))
|
||||
"
|
||||
type="primary"
|
||||
@click="next"
|
||||
@@ -856,8 +865,8 @@ defineExpose({
|
||||
>
|
||||
<el-button
|
||||
v-show="
|
||||
(activeStep === 1 && currentDsType !== 'API') ||
|
||||
(activeApiStep === 2 && currentDsType === 'API')
|
||||
(activeStep === 1 && !currentDsType.startsWith('API')) ||
|
||||
(activeApiStep === 2 && currentDsType.startsWith('API'))
|
||||
"
|
||||
type="primary"
|
||||
@click="saveDS"
|
||||
|
||||
@@ -292,7 +292,7 @@ const validateDS = () => {
|
||||
Object.assign(nodeTmpInfo, cloneDeep(nodeInfo))
|
||||
validateById(nodeTmpInfo.id as number)
|
||||
.then(res => {
|
||||
if (res.data.type === 'API') {
|
||||
if (res.data.type.startsWith('API')) {
|
||||
let error = 0
|
||||
const dsStatus = JSON.parse(res.data.status)
|
||||
for (let i = 0; i < dsStatus.length; i++) {
|
||||
@@ -828,7 +828,7 @@ const handleCopy = async data => {
|
||||
datasource.id = ''
|
||||
datasource.copy = true
|
||||
datasource.name = t('datasource.copy')
|
||||
if (datasource.type === 'API') {
|
||||
if (datasource.type.startsWith('API')) {
|
||||
for (let i = 0; i < datasource.apiConfiguration.length; i++) {
|
||||
datasource.apiConfiguration[i].deTableName = ''
|
||||
}
|
||||
@@ -1390,7 +1390,7 @@ const getMenuList = (val: boolean) => {
|
||||
<el-table-column
|
||||
key="status"
|
||||
prop="status"
|
||||
v-if="['api'].includes(nodeInfo.type.toLowerCase())"
|
||||
v-if="nodeInfo.type.startsWith('API')"
|
||||
:label="t('data_source.latest_update_status')"
|
||||
>
|
||||
<template #default="scope">
|
||||
@@ -1420,7 +1420,10 @@ const getMenuList = (val: boolean) => {
|
||||
<el-table-column
|
||||
key="lastUpdateTime"
|
||||
prop="lastUpdateTime"
|
||||
v-if="['excel', 'api'].includes(nodeInfo.type.toLowerCase())"
|
||||
v-if="
|
||||
['excel', 'api'].includes(nodeInfo.type.toLowerCase()) ||
|
||||
nodeInfo.type.startsWith('API')
|
||||
"
|
||||
:label="t('data_source.latest_update_time')"
|
||||
>
|
||||
<template v-slot:default="scope">
|
||||
@@ -1489,7 +1492,11 @@ const getMenuList = (val: boolean) => {
|
||||
</el-col>
|
||||
</el-row>
|
||||
<template
|
||||
v-if="!['Excel', 'API', 'es'].includes(nodeInfo.type) && nodeInfo.weight >= 7"
|
||||
v-if="
|
||||
!['Excel', 'es'].includes(nodeInfo.type) &&
|
||||
!nodeInfo.type.startsWith('API') &&
|
||||
nodeInfo.weight >= 7
|
||||
"
|
||||
>
|
||||
<el-row :gutter="24" v-show="nodeInfo.configuration.urlType !== 'jdbcUrl'">
|
||||
<el-col :span="12">
|
||||
@@ -1639,7 +1646,7 @@ const getMenuList = (val: boolean) => {
|
||||
</template>
|
||||
</BaseInfoContent>
|
||||
<BaseInfoContent
|
||||
v-if="nodeInfo.type === 'API' && nodeInfo.weight >= 7"
|
||||
v-if="nodeInfo.type.startsWith('API') && nodeInfo.weight >= 7"
|
||||
v-slot="slotProps"
|
||||
:name="t('datasource.data_table')"
|
||||
>
|
||||
@@ -1691,7 +1698,7 @@ const getMenuList = (val: boolean) => {
|
||||
</el-button>
|
||||
</BaseInfoContent>
|
||||
<BaseInfoContent
|
||||
v-if="nodeInfo.type === 'API' && nodeInfo.weight >= 7"
|
||||
v-if="nodeInfo.type.startsWith('API') && nodeInfo.weight >= 7"
|
||||
v-slot="slotProps"
|
||||
:name="t('dataset.update_setting')"
|
||||
:time="(nodeInfo.lastSyncTime as string)"
|
||||
|
||||
@@ -6,6 +6,7 @@ import io.dataease.api.ds.vo.*;
|
||||
import io.dataease.auth.DeApiPath;
|
||||
import io.dataease.auth.DePermit;
|
||||
import io.dataease.exception.DEException;
|
||||
import io.dataease.extensions.datasource.dto.ApiDefinition;
|
||||
import io.dataease.extensions.datasource.dto.DatasetTableDTO;
|
||||
import io.dataease.extensions.datasource.dto.DatasourceDTO;
|
||||
import io.dataease.extensions.datasource.dto.TableField;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package io.dataease.api.ds.vo;
|
||||
package io.dataease.extensions.datasource.dto;
|
||||
|
||||
|
||||
import io.dataease.extensions.datasource.dto.TableField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -30,4 +29,8 @@ public class ApiDefinition {
|
||||
private boolean showApiStructure;
|
||||
private Long updateTime;
|
||||
private String type = "table";
|
||||
private String token;
|
||||
private String appToken;
|
||||
private String tableId;
|
||||
private String viewId;
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.dataease.api.ds.vo;
|
||||
package io.dataease.extensions.datasource.dto;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
@@ -26,6 +26,7 @@ public class DatasourceRequest implements Serializable {
|
||||
private boolean totalPageFlag;
|
||||
private Map<Long, DatasourceSchemaDTO> dsList;
|
||||
private List<TableFieldWithValue> tableFieldWithValues;
|
||||
private String token;
|
||||
|
||||
public DatasourceRequest() {
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package io.dataease.extensions.datasource.plugin;
|
||||
|
||||
import io.dataease.exception.DEException;
|
||||
import io.dataease.extensions.datasource.dto.DatasourceRequest;
|
||||
import io.dataease.extensions.datasource.factory.ProviderFactory;
|
||||
import io.dataease.extensions.datasource.provider.Provider;
|
||||
import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO;
|
||||
@@ -15,7 +16,9 @@ import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
import java.nio.file.Paths;
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
|
||||
@@ -25,6 +28,13 @@ import java.util.jar.JarFile;
|
||||
public abstract class DataEaseDatasourcePlugin extends Provider implements DataEasePlugin {
|
||||
private final String DEFAULT_FILE_PATH = "/opt/dataease2.0/drivers/plugin";
|
||||
|
||||
|
||||
@Override
|
||||
public List<String> getSchema(DatasourceRequest datasourceRequest) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void loadPlugin() {
|
||||
XpackPluginsDatasourceVO datasourceConfig = getConfig();
|
||||
@@ -41,7 +51,7 @@ public abstract class DataEaseDatasourcePlugin extends Provider implements DataE
|
||||
String localPath = StringUtils.isEmpty(config.getDriverPath()) ? DEFAULT_FILE_PATH : config.getDriverPath();
|
||||
ProtectionDomain protectionDomain = this.getClass().getProtectionDomain();
|
||||
URI uri = protectionDomain.getCodeSource().getLocation().toURI();
|
||||
try(JarFile jarFile = new JarFile(new File(uri))) {
|
||||
try (JarFile jarFile = new JarFile(new File(uri))) {
|
||||
Enumeration<JarEntry> entries = jarFile.entries();
|
||||
while (entries.hasMoreElements()) {
|
||||
JarEntry entry = entries.nextElement();
|
||||
@@ -52,8 +62,8 @@ public abstract class DataEaseDatasourcePlugin extends Provider implements DataE
|
||||
file.getParentFile().mkdirs();
|
||||
}
|
||||
|
||||
try(InputStream inputStream = jarFile.getInputStream(entry);
|
||||
FileOutputStream outputStream = new FileOutputStream(file)){
|
||||
try (InputStream inputStream = jarFile.getInputStream(entry);
|
||||
FileOutputStream outputStream = new FileOutputStream(file)) {
|
||||
byte[] bytes = new byte[1024];
|
||||
int length;
|
||||
while ((length = inputStream.read(bytes)) >= 0) {
|
||||
@@ -83,7 +93,7 @@ public abstract class DataEaseDatasourcePlugin extends Provider implements DataE
|
||||
try {
|
||||
ProtectionDomain protectionDomain = this.getClass().getProtectionDomain();
|
||||
URI uri = protectionDomain.getCodeSource().getLocation().toURI();
|
||||
try(JarFile jarFile = new JarFile(new File(uri))) {
|
||||
try (JarFile jarFile = new JarFile(new File(uri))) {
|
||||
Enumeration<JarEntry> entries = jarFile.entries();
|
||||
while (entries.hasMoreElements()) {
|
||||
JarEntry entry = entries.nextElement();
|
||||
|
||||
Reference in New Issue
Block a user