Merge pull request #7573 from dataease/pr@dev@fixSql

Pr@dev@fix sql
This commit is contained in:
taojinlong 2024-01-10 17:16:47 +08:00 committed by GitHub
commit 89decbbbad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 296 additions and 148 deletions

View File

@ -11,11 +11,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import io.dataease.controller.sys.response.BasicInfo;
import io.dataease.dto.dataset.DatasetTableFieldDTO;
import io.dataease.plugins.common.dto.datasource.TableDesc;
import io.dataease.plugins.common.dto.datasource.TableField;
import io.dataease.plugins.common.request.datasource.DatasourceRequest;
import io.dataease.plugins.datasource.entity.Status;
import io.dataease.plugins.datasource.provider.Provider;
import com.jayway.jsonpath.JsonPath;
import io.dataease.commons.utils.HttpClientConfig;
@ -23,14 +23,9 @@ import io.dataease.commons.utils.HttpClientUtil;
import io.dataease.controller.request.datasource.ApiDefinition;
import io.dataease.controller.request.datasource.ApiDefinitionRequest;
import io.dataease.service.system.SystemParameterService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;
@ -106,6 +101,13 @@ public class ApiProvider extends Provider {
return tableFields;
}
@Override
public Status checkDsStatus(DatasourceRequest datasourceRequest) throws Exception {
Status status = new Status();
status.setStatus(checkStatus(datasourceRequest));
return status;
}
public String checkStatus(DatasourceRequest datasourceRequest) throws Exception {
Gson gson = new Gson();
List<ApiDefinition> apiDefinitionList = gson.fromJson(datasourceRequest.getDatasource().getConfiguration(), new TypeToken<List<ApiDefinition>>() {

View File

@ -14,6 +14,7 @@ import io.dataease.plugins.common.dto.datasource.TableDesc;
import io.dataease.plugins.common.dto.datasource.TableField;
import io.dataease.plugins.common.exception.DataEaseException;
import io.dataease.plugins.common.request.datasource.DatasourceRequest;
import io.dataease.plugins.datasource.entity.Status;
import io.dataease.plugins.datasource.provider.Provider;
import io.dataease.provider.query.es.EsQueryProvider;
import org.apache.commons.codec.binary.Base64;
@ -181,7 +182,7 @@ public class EsProvider extends Provider {
}
for (String[] row : esResponse.getRows()) {
if(!row[1].equalsIgnoreCase("STRUCT") && !row[2].equalsIgnoreCase("unsupported")){
if (!row[1].equalsIgnoreCase("STRUCT") && !row[2].equalsIgnoreCase("unsupported")) {
TableField field = new TableField();
field.setFieldName(row[0]);
field.setRemarks(row[0]);
@ -251,6 +252,13 @@ public class EsProvider extends Provider {
return new ArrayList<>();
}
@Override
public Status checkDsStatus(DatasourceRequest datasourceRequest) throws Exception {
Status status = new Status();
status.setStatus(checkStatus(datasourceRequest));
return status;
}
@Override
public String checkStatus(DatasourceRequest datasourceRequest) throws Exception {

View File

@ -18,6 +18,7 @@ import io.dataease.plugins.common.exception.DataEaseException;
import io.dataease.plugins.common.request.datasource.DatasourceRequest;
import io.dataease.plugins.common.util.SpringContextUtil;
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
import io.dataease.plugins.datasource.entity.Status;
import io.dataease.plugins.datasource.provider.DefaultJdbcProvider;
import io.dataease.plugins.datasource.provider.ExtendedJdbcClassLoader;
import io.dataease.plugins.datasource.query.QueryProvider;
@ -369,6 +370,22 @@ public class JdbcProvider extends DefaultJdbcProvider {
return list;
}
@Override
public Status checkDsStatus(DatasourceRequest datasourceRequest) throws Exception {
Status status = new Status();
String queryStr = getTablesSql(datasourceRequest);
JdbcConfiguration jdbcConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), JdbcConfiguration.class);
int queryTimeout = jdbcConfiguration.getQueryTimeout() > 0 ? jdbcConfiguration.getQueryTimeout() : 0;
try (Connection con = getConnection(datasourceRequest); Statement statement = getStatement(con, queryTimeout); ResultSet resultSet = statement.executeQuery(queryStr)) {
status.setVersion(String.valueOf(con.getMetaData().getDatabaseMajorVersion()));
} catch (Exception e) {
LogUtil.error("Datasource is invalid: " + datasourceRequest.getDatasource().getName(), e);
DataEaseException.throwException(e.getMessage());
}
status.setStatus("Success");
return status;
}
@Override
public String checkStatus(DatasourceRequest datasourceRequest) throws Exception {
String queryStr = getTablesSql(datasourceRequest);
@ -377,7 +394,7 @@ public class JdbcProvider extends DefaultJdbcProvider {
try (Connection con = getConnection(datasourceRequest); Statement statement = getStatement(con, queryTimeout); ResultSet resultSet = statement.executeQuery(queryStr)) {
} catch (Exception e) {
LogUtil.error("Datasource is invalid: " + datasourceRequest.getDatasource().getName(), e);
io.dataease.plugins.common.exception.DataEaseException.throwException(e.getMessage());
DataEaseException.throwException(e.getMessage());
}
return "Success";
}

View File

@ -1340,7 +1340,7 @@ public class DorisQueryProvider extends QueryProvider {
if (field.getDeType() == 1) {
String format = transDateFormat(request.getDateStyle(), request.getDatePattern());
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {
String date = String.format(MySQLConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MysqlConstants.DEFAULT_DATE_FORMAT);
if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) {
date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + date + ",'-01-01')", "%Y-01-01");
@ -1351,6 +1351,16 @@ public class DorisQueryProvider extends QueryProvider {
whereName = String.format(MySQLConstants.DATE_FORMAT, date, format);
}
}
if (field.getDeExtractType() == 1) {
String date = String.format(MySQLConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MysqlConstants.DEFAULT_DATE_FORMAT);
if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) {
date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + date + ",'-01-01')", "%Y-01-01");
whereName = String.format(MySQLConstants.DATE_FORMAT, date, format);
}else {
whereName = originName;
}
}
if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) {
if (request.getOperator().equals("between")) {
whereName = originName;

View File

@ -1300,7 +1300,7 @@ public class MysqlQueryProvider extends QueryProvider {
if (field.getDeType() == 1) {
String format = transDateFormat(request.getDateStyle(), request.getDatePattern());
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {
String date = String.format(MySQLConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MysqlConstants.DEFAULT_DATE_FORMAT);
if (request.getOperator().equals("between")) {
whereName = date;
@ -1308,6 +1308,9 @@ public class MysqlQueryProvider extends QueryProvider {
whereName = String.format(MySQLConstants.DATE_FORMAT, date, format);
}
}
if (field.getDeExtractType() == 1) {
whereName = originName;
}
if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) {
if (request.getOperator().equals("between")) {
whereName = originName;

View File

@ -1342,7 +1342,7 @@ public class EsQueryProvider extends QueryProvider {
whereName = String.format(EsSqlLConstants.DATETIME_FORMAT, cast, format);
}
if (field.getDeExtractType() == 1) {
whereName = String.format(EsSqlLConstants.DATETIME_FORMAT, originName, format);
whereName = originName;
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {

View File

@ -1299,12 +1299,7 @@ public class HiveQueryProvider extends QueryProvider {
whereName = String.format(HiveConstants.FROM_UNIXTIME, cast, format);
}
if (field.getDeExtractType() == DeTypeConstants.DE_TIME) {
if (request.getOperator().equals("between")) {
whereName = originName;
} else {
whereName = String.format(HiveConstants.DATE_FORMAT, originName, format);
}
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {

View File

@ -1314,11 +1314,7 @@ public class ImpalaQueryProvider extends QueryProvider {
}
}
if (field.getDeExtractType() == DeTypeConstants.DE_TIME) {
if (request.getOperator().equals("between")) {
whereName = originName;
} else {
whereName = String.format(ImpalaConstants.DATE_FORMAT, originName, format);
}
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {

View File

@ -1330,7 +1330,7 @@ public class MysqlQueryProvider extends QueryProvider {
if (field.getDeType() == 1) {
String format = transDateFormat(request.getDateStyle(), request.getDatePattern());
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {
String date;
if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) {
date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + originName + ",'-01-01')", StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MySQLConstants.DEFAULT_DATE_FORMAT);
@ -1350,6 +1350,21 @@ public class MysqlQueryProvider extends QueryProvider {
}
}
if (field.getDeExtractType() == 1) {
String date;
if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) {
date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + originName + ",'-01-01')", StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MySQLConstants.DEFAULT_DATE_FORMAT);
} else {
date = originName;
}
if (StringUtils.equalsIgnoreCase(request.getDateStyle(), "y_Q")) {
whereName = String.format(format,
String.format(MySQLConstants.DATE_FORMAT, originName, "%Y"),
String.format(MySQLConstants.QUARTER, String.format(MySQLConstants.DATE_FORMAT, originName, MySQLConstants.DEFAULT_DATE_FORMAT)));
} else {
whereName = date;
}
}
if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) {
if (request.getOperator().equals("between")) {
whereName = originName;

View File

@ -1487,12 +1487,8 @@ public class OracleQueryProvider extends QueryProvider {
}
}
if (field.getDeExtractType() == 1) {
if (!request.getOperator().equals("between")) {
whereName = String.format(OracleConstants.TO_CHAR, originName, format);
} else {
whereName = originName;
}
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {

View File

@ -1339,12 +1339,7 @@ public class PgQueryProvider extends QueryProvider {
}
}
if (field.getDeExtractType() == 1) {
if (request.getOperator().equals("between")) {
whereName = originName;
} else {
whereName = String.format(PgConstants.DATE_FORMAT, originName, format);
}
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {

View File

@ -1325,11 +1325,7 @@ public class RedshiftQueryProvider extends QueryProvider {
}
}
if (field.getDeExtractType() == 1) {
if (request.getOperator().equals("between")) {
whereName = originName;
} else {
whereName = String.format(PgConstants.DATE_FORMAT, originName, format);
}
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {

View File

@ -529,8 +529,14 @@ public class SqlserverQueryProvider extends QueryProvider {
return originTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, null, view, needOrder, true);
}
@Override
public String getSQLWithPage(boolean isTable, String sql, List<ChartViewFieldDTO> xAxis, FilterTreeObj fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) {
if (Integer.valueOf(ds.getVersion()) < 11) {
if (isTable) {
return getSQLTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view);
} else {
return getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view);
}
} else {
boolean isPage = (pageInfo.getGoPage() != null && pageInfo.getPageSize() != null);
String limit = (isPage ? " OFFSET " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + " ROW FETCH NEXT " + pageInfo.getPageSize() + " ROW ONLY " : "");
if (isTable) {
@ -539,6 +545,7 @@ public class SqlserverQueryProvider extends QueryProvider {
return originTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true, !isPage) + limit;
}
}
}
@Override
public String getSQLAsTmpTableInfo(String sql, List<ChartViewFieldDTO> xAxis, FilterTreeObj fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) {

View File

@ -639,8 +639,6 @@ public class ChartViewService {
}
Type tokenType = new TypeToken<List<ChartViewFieldDTO>>() {
}.getType();
// Type filterTokenType = new TypeToken<List<ChartFieldCustomFilterDTO>>() {
// }.getType();
List<ChartViewFieldDTO> viewFields = gson.fromJson(view.getViewFields(), tokenType);
final Map<String, List<ChartViewFieldDTO>> extFieldsMap = new LinkedHashMap<>();
@ -709,7 +707,6 @@ public class ChartViewService {
//将没有权限的列删掉
List<String> dataeaseNames = columnPermissionFields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList());
dataeaseNames.add("*");
// fieldCustomFilter = fieldCustomFilter.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
extStack = extStack.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
extBubble = extBubble.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
drill = drill.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
@ -717,9 +714,6 @@ public class ChartViewService {
//行权限
List<DataSetRowPermissionsTreeDTO> rowPermissionsTree = permissionsTreeService.getRowPermissionsTree(fields, table, chartExtRequest.getUser());
/*for (ChartFieldCustomFilterDTO ele : fieldCustomFilter) {
ele.setField(dataSetTableFieldsService.get(ele.getId()));
}*/
chartFilterTreeService.searchFieldAndSet(fieldCustomFilter);
if (CollectionUtils.isEmpty(xAxis) && CollectionUtils.isEmpty(yAxis)) {
@ -1043,17 +1037,6 @@ public class ChartViewService {
assistFields = getAssistFields(dynamicAssistFields, yAxis, xAxis);
}
// 处理过滤条件中的单引号
/*fieldCustomFilter = fieldCustomFilter.stream().peek(ele -> {
if (CollectionUtils.isNotEmpty(ele.getEnumCheckField())) {
List<String> collect = ele.getEnumCheckField().stream().map(SQLUtils::transKeyword).collect(Collectors.toList());
ele.setEnumCheckField(collect);
}
if (CollectionUtils.isNotEmpty(ele.getFilter())) {
List<ChartCustomFilterItemDTO> collect = ele.getFilter().stream().peek(f -> f.setValue(SQLUtils.transKeyword(f.getValue()))).collect(Collectors.toList());
ele.setFilter(collect);
}
}).collect(Collectors.toList());*/
fieldCustomFilter = chartFilterTreeService.charReplace(fieldCustomFilter);
extFilterList = extFilterList.stream().peek(ele -> {

View File

@ -42,6 +42,7 @@ import io.dataease.plugins.common.exception.DataEaseException;
import io.dataease.plugins.common.request.datasource.DatasourceRequest;
import io.dataease.plugins.common.util.SpringContextUtil;
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
import io.dataease.plugins.datasource.entity.Status;
import io.dataease.plugins.datasource.provider.Provider;
import io.dataease.provider.ProviderFactory;
import io.dataease.provider.datasource.ApiProvider;
@ -52,6 +53,8 @@ import io.dataease.service.sys.SysAuthService;
import io.dataease.service.system.SystemParameterService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.zookeeper.data.Stat;
import org.mozilla.javascript.EcmaError;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.core.RedisTemplate;
@ -115,7 +118,9 @@ public class DatasourceService {
datasource.setUpdateTime(currentTimeMillis);
datasource.setCreateTime(currentTimeMillis);
datasource.setCreateBy(String.valueOf(AuthUtils.getUser().getUsername()));
checkAndUpdateDatasourceStatus(datasource);
Status status = checkDatasourceStatus(datasource);
datasource.setStatus(status.getStatus());
datasource.setVersion(status.getVersion());
datasourceMapper.insertSelective(datasource);
handleConnectionPool(datasource, "add");
sysAuthService.copyAuth(datasource.getId(), SysAuthConstants.AUTH_SOURCE_TYPE_DATASOURCE);
@ -277,7 +282,9 @@ public class DatasourceService {
public void updateDatasource(String id, Datasource datasource) {
DatasourceExample example = new DatasourceExample();
example.createCriteria().andIdEqualTo(id);
checkAndUpdateDatasourceStatus(datasource);
Status status = checkDatasourceStatus(datasource);
datasource.setStatus(status.getStatus());
datasource.setVersion(status.getVersion());
datasourceMapper.updateByExampleSelective(datasource, example);
handleConnectionPool(id);
@ -327,15 +334,15 @@ public class DatasourceService {
datasourceProvider.checkConfiguration(datasource);
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(datasource);
String datasourceStatus = datasourceProvider.checkStatus(datasourceRequest);
Status datasourceStatus = datasourceProvider.checkDsStatus(datasourceRequest);
if (datasource.getType().equalsIgnoreCase("api")) {
int success = 0;
List<ApiDefinition> apiDefinitionList = new Gson().fromJson(datasource.getConfiguration(), new TypeToken<List<ApiDefinition>>() {
}.getType());
List<ApiDefinition> apiDefinitionListWithStatus = new ArrayList<>();
if (StringUtils.isNotEmpty(datasourceStatus)) {
JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus).getAsJsonObject();
if (StringUtils.isNotEmpty(datasourceStatus.getStatus())) {
JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus.getStatus()).getAsJsonObject();
for (ApiDefinition apiDefinition : apiDefinitionList) {
String status = apiItemStatuses.get(apiDefinition.getName()).getAsString();
apiDefinition.setStatus(status);
@ -348,7 +355,7 @@ public class DatasourceService {
datasourceDTO.setApiConfiguration(apiDefinitionListWithStatus);
if (success == apiDefinitionList.size()) {
datasource.setStatus(datasourceStatus);
datasource.setStatus(datasourceStatus.getStatus());
return ResultHolder.success(datasourceDTO);
}
if (success > 0 && success < apiDefinitionList.size()) {
@ -367,16 +374,16 @@ public class DatasourceService {
if (datasource == null) {
return ResultHolder.error("Can not find datasource: " + datasourceId);
}
String datasourceStatus = null;
Status datasourceStatus = new Status();
try {
Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(datasource);
datasourceStatus = datasourceProvider.checkStatus(datasourceRequest);
datasourceStatus = datasourceProvider.checkDsStatus(datasourceRequest);
if (datasource.getType().equalsIgnoreCase("api")) {
List<ApiDefinition> apiDefinitionList = new Gson().fromJson(datasource.getConfiguration(), new TypeToken<List<ApiDefinition>>() {
}.getType());
JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus).getAsJsonObject();
JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus.getStatus()).getAsJsonObject();
int success = 0;
for (ApiDefinition apiDefinition : apiDefinitionList) {
String status = apiItemStatuses.get(apiDefinition.getName()).getAsString();
@ -386,7 +393,7 @@ public class DatasourceService {
}
}
if (success == apiDefinitionList.size()) {
datasource.setStatus(datasourceStatus);
datasource.setStatus(datasourceStatus.getStatus());
return ResultHolder.success(datasource);
}
if (success > 0 && success < apiDefinitionList.size()) {
@ -398,14 +405,14 @@ public class DatasourceService {
return ResultHolder.success("Success");
} catch (Exception e) {
e.printStackTrace();
datasourceStatus = "Error";
datasourceStatus.setStatus("Error");
return ResultHolder.error(Translator.get("I18N_DS_INVALID") + ": " + e.getMessage());
} finally {
Datasource record = new Datasource();
record.setStatus(datasourceStatus);
record.setStatus(datasourceStatus.getStatus());
record.setVersion(datasourceStatus.getVersion());
DatasourceExample example = new DatasourceExample();
example.createCriteria().andIdEqualTo(datasource.getId());
System.out.println(new Gson().toJson(record));
datasourceMapper.updateByExampleSelective(record, example);
}
}
@ -426,7 +433,7 @@ public class DatasourceService {
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(ds);
if (!ds.getType().equalsIgnoreCase(DatasetType.API.name())) {
datasourceProvider.checkStatus(datasourceRequest);
datasourceProvider.checkDsStatus(datasourceRequest);
}
List<TableDesc> tables = datasourceProvider.getTables(datasourceRequest);
@ -458,6 +465,15 @@ public class DatasourceService {
List<Datasource> datasources = datasourceMapper.selectByExampleWithBLOBs(new DatasourceExample());
datasources.forEach(datasource -> {
commonThreadPool.addTask(() -> {
try {
DatasourceExample example = new DatasourceExample();
example.createCriteria().andIdEqualTo(datasource.getId());
Status status = checkDatasourceStatus(datasource);
Datasource record = new Datasource();
record.setVersion(status.getVersion());
record.setStatus(status.getStatus());
datasourceMapper.updateByExampleSelective(record, example);
}catch (Exception ignore){}
try {
handleConnectionPool(datasource, "add");
} catch (Exception e) {
@ -515,16 +531,17 @@ public class DatasourceService {
return datasourceMapper.selectByExampleWithBLOBs(example);
}
public void checkAndUpdateDatasourceStatus(Datasource datasource) {
public Status checkDatasourceStatus(Datasource datasource) {
Status status = new Status();
try {
Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(datasource);
String status = datasourceProvider.checkStatus(datasourceRequest);
datasource.setStatus(status);
status = datasourceProvider.checkDsStatus(datasourceRequest);
} catch (Exception e) {
datasource.setStatus("Error");
status.setStatus("Error");
}
return status;
}
private void checkAndUpdateDatasourceStatus(Datasource datasource, Boolean withMsg) {
@ -535,8 +552,9 @@ public class DatasourceService {
Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(datasource);
String status = datasourceProvider.checkStatus(datasourceRequest);
record.setStatus(status);
Status status = datasourceProvider.checkDsStatus(datasourceRequest);
datasource.setStatus(status.getStatus());
datasource.setVersion(status.getVersion());
datasourceMapper.updateByExampleSelective(record, example);
} catch (Exception e) {
Datasource temp = datasourceMapper.selectByPrimaryKey(datasource.getId());

View File

@ -0,0 +1,3 @@
ALTER TABLE `datasource`
ADD COLUMN `version` varchar(255) NULL COMMENT '版本' AFTER `status`;

View File

@ -368,7 +368,7 @@ export default {
this.showParams = true
this.isRangeParamWidget = this.widget.isRangeParamWidget && this.widget.isRangeParamWidget()
}
if ('textInputWidget,timeYearWidget,timeMonthWidget,timeDateWidget,textSelectWidget,numberSelectWidget'.indexOf(this.widget.name) !== -1) {
if ('textInputWidget,timeYearWidget,timeMonthWidget,timeDateWidget,textSelectWidget,numberSelectWidget,numberSelectGridWidget,textSelectGridWidget'.indexOf(this.widget.name) !== -1) {
this.showParams = true
}
},

View File

@ -1544,12 +1544,7 @@ public class KingbaseQueryProvider extends QueryProvider {
}
}
if (field.getDeExtractType() == 1) {
if (request.getOperator().equals("between")) {
whereName = originName;
} else {
whereName = String.format(KingbaseConstants.DATE_FORMAT, originName, format);
}
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {

View File

@ -23,6 +23,8 @@ public class Datasource implements Serializable {
private String createBy;
@ApiModelProperty("状态")
private String status;
@ApiModelProperty("版本")
private String version;
@ApiModelProperty(value = "配置详情", required = true)
private String configuration;

View File

@ -384,6 +384,76 @@ public class DatasourceExample {
return (Criteria) this;
}
public Criteria andConfigurationIsNull() {
addCriterion("configuration is null");
return (Criteria) this;
}
public Criteria andConfigurationIsNotNull() {
addCriterion("configuration is not null");
return (Criteria) this;
}
public Criteria andConfigurationEqualTo(String value) {
addCriterion("configuration =", value, "configuration");
return (Criteria) this;
}
public Criteria andConfigurationNotEqualTo(String value) {
addCriterion("configuration <>", value, "configuration");
return (Criteria) this;
}
public Criteria andConfigurationGreaterThan(String value) {
addCriterion("configuration >", value, "configuration");
return (Criteria) this;
}
public Criteria andConfigurationGreaterThanOrEqualTo(String value) {
addCriterion("configuration >=", value, "configuration");
return (Criteria) this;
}
public Criteria andConfigurationLessThan(String value) {
addCriterion("configuration <", value, "configuration");
return (Criteria) this;
}
public Criteria andConfigurationLessThanOrEqualTo(String value) {
addCriterion("configuration <=", value, "configuration");
return (Criteria) this;
}
public Criteria andConfigurationLike(String value) {
addCriterion("configuration like", value, "configuration");
return (Criteria) this;
}
public Criteria andConfigurationNotLike(String value) {
addCriterion("configuration not like", value, "configuration");
return (Criteria) this;
}
public Criteria andConfigurationIn(List<String> values) {
addCriterion("configuration in", values, "configuration");
return (Criteria) this;
}
public Criteria andConfigurationNotIn(List<String> values) {
addCriterion("configuration not in", values, "configuration");
return (Criteria) this;
}
public Criteria andConfigurationBetween(String value1, String value2) {
addCriterion("configuration between", value1, value2, "configuration");
return (Criteria) this;
}
public Criteria andConfigurationNotBetween(String value1, String value2) {
addCriterion("configuration not between", value1, value2, "configuration");
return (Criteria) this;
}
public Criteria andCreateTimeIsNull() {
addCriterion("create_time is null");
return (Criteria) this;
@ -574,73 +644,73 @@ public class DatasourceExample {
return (Criteria) this;
}
public Criteria andStatusIsNull() {
addCriterion("`status` is null");
public Criteria andVersionIsNull() {
addCriterion("version is null");
return (Criteria) this;
}
public Criteria andStatusIsNotNull() {
addCriterion("`status` is not null");
public Criteria andVersionIsNotNull() {
addCriterion("version is not null");
return (Criteria) this;
}
public Criteria andStatusEqualTo(String value) {
addCriterion("`status` =", value, "status");
public Criteria andVersionEqualTo(String value) {
addCriterion("version =", value, "version");
return (Criteria) this;
}
public Criteria andStatusNotEqualTo(String value) {
addCriterion("`status` <>", value, "status");
public Criteria andVersionNotEqualTo(String value) {
addCriterion("version <>", value, "version");
return (Criteria) this;
}
public Criteria andStatusGreaterThan(String value) {
addCriterion("`status` >", value, "status");
public Criteria andVersionGreaterThan(String value) {
addCriterion("version >", value, "version");
return (Criteria) this;
}
public Criteria andStatusGreaterThanOrEqualTo(String value) {
addCriterion("`status` >=", value, "status");
public Criteria andVersionGreaterThanOrEqualTo(String value) {
addCriterion("version >=", value, "version");
return (Criteria) this;
}
public Criteria andStatusLessThan(String value) {
addCriterion("`status` <", value, "status");
public Criteria andVersionLessThan(String value) {
addCriterion("version <", value, "version");
return (Criteria) this;
}
public Criteria andStatusLessThanOrEqualTo(String value) {
addCriterion("`status` <=", value, "status");
public Criteria andVersionLessThanOrEqualTo(String value) {
addCriterion("version <=", value, "version");
return (Criteria) this;
}
public Criteria andStatusLike(String value) {
addCriterion("`status` like", value, "status");
public Criteria andVersionLike(String value) {
addCriterion("version like", value, "version");
return (Criteria) this;
}
public Criteria andStatusNotLike(String value) {
addCriterion("`status` not like", value, "status");
public Criteria andVersionNotLike(String value) {
addCriterion("version not like", value, "version");
return (Criteria) this;
}
public Criteria andStatusIn(List<String> values) {
addCriterion("`status` in", values, "status");
public Criteria andVersionIn(List<String> values) {
addCriterion("version in", values, "version");
return (Criteria) this;
}
public Criteria andStatusNotIn(List<String> values) {
addCriterion("`status` not in", values, "status");
public Criteria andVersionNotIn(List<String> values) {
addCriterion("version not in", values, "version");
return (Criteria) this;
}
public Criteria andStatusBetween(String value1, String value2) {
addCriterion("`status` between", value1, value2, "status");
public Criteria andVersionBetween(String value1, String value2) {
addCriterion("version between", value1, value2, "version");
return (Criteria) this;
}
public Criteria andStatusNotBetween(String value1, String value2) {
addCriterion("`status` not between", value1, value2, "status");
public Criteria andVersionNotBetween(String value1, String value2) {
addCriterion("version not between", value1, value2, "version");
return (Criteria) this;
}
}

View File

@ -6,13 +6,14 @@
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="desc" jdbcType="VARCHAR" property="desc" />
<result column="type" jdbcType="VARCHAR" property="type" />
<result column="configuration" jdbcType="VARCHAR" property="configuration" />
<result column="create_time" jdbcType="BIGINT" property="createTime" />
<result column="update_time" jdbcType="BIGINT" property="updateTime" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="status" jdbcType="VARCHAR" property="status" />
<result column="version" jdbcType="VARCHAR" property="version" />
</resultMap>
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.dataease.plugins.common.base.domain.Datasource">
<result column="configuration" jdbcType="LONGVARCHAR" property="configuration" />
<result column="status" jdbcType="LONGVARCHAR" property="status" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
@ -73,10 +74,10 @@
</where>
</sql>
<sql id="Base_Column_List">
id, `name`, `desc`, `type`, create_time, update_time, create_by, `status`
id, `name`, `desc`, `type`, configuration, create_time, update_time, create_by, version
</sql>
<sql id="Blob_Column_List">
configuration
`status`
</sql>
<select id="selectByExampleWithBLOBs" parameterType="io.dataease.plugins.common.base.domain.DatasourceExample" resultMap="ResultMapWithBLOBs">
select
@ -128,13 +129,13 @@
</delete>
<insert id="insert" parameterType="io.dataease.plugins.common.base.domain.Datasource">
insert into datasource (id, `name`, `desc`,
`type`, create_time, update_time,
create_by, `status`, configuration
)
`type`, configuration, create_time,
update_time, create_by, version,
`status`)
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{desc,jdbcType=VARCHAR},
#{type,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
#{createBy,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, #{configuration,jdbcType=LONGVARCHAR}
)
#{type,jdbcType=VARCHAR}, #{configuration,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT},
#{updateTime,jdbcType=BIGINT}, #{createBy,jdbcType=VARCHAR}, #{version,jdbcType=VARCHAR},
#{status,jdbcType=LONGVARCHAR})
</insert>
<insert id="insertSelective" parameterType="io.dataease.plugins.common.base.domain.Datasource">
insert into datasource
@ -151,6 +152,9 @@
<if test="type != null">
`type`,
</if>
<if test="configuration != null">
configuration,
</if>
<if test="createTime != null">
create_time,
</if>
@ -160,12 +164,12 @@
<if test="createBy != null">
create_by,
</if>
<if test="version != null">
version,
</if>
<if test="status != null">
`status`,
</if>
<if test="configuration != null">
configuration,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
@ -180,6 +184,9 @@
<if test="type != null">
#{type,jdbcType=VARCHAR},
</if>
<if test="configuration != null">
#{configuration,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
#{createTime,jdbcType=BIGINT},
</if>
@ -189,11 +196,11 @@
<if test="createBy != null">
#{createBy,jdbcType=VARCHAR},
</if>
<if test="status != null">
#{status,jdbcType=VARCHAR},
<if test="version != null">
#{version,jdbcType=VARCHAR},
</if>
<if test="configuration != null">
#{configuration,jdbcType=LONGVARCHAR},
<if test="status != null">
#{status,jdbcType=LONGVARCHAR},
</if>
</trim>
</insert>
@ -218,6 +225,9 @@
<if test="record.type != null">
`type` = #{record.type,jdbcType=VARCHAR},
</if>
<if test="record.configuration != null">
configuration = #{record.configuration,jdbcType=VARCHAR},
</if>
<if test="record.createTime != null">
create_time = #{record.createTime,jdbcType=BIGINT},
</if>
@ -227,11 +237,11 @@
<if test="record.createBy != null">
create_by = #{record.createBy,jdbcType=VARCHAR},
</if>
<if test="record.status != null">
`status` = #{record.status,jdbcType=VARCHAR},
<if test="record.version != null">
version = #{record.version,jdbcType=VARCHAR},
</if>
<if test="record.configuration != null">
configuration = #{record.configuration,jdbcType=LONGVARCHAR},
<if test="record.status != null">
`status` = #{record.status,jdbcType=LONGVARCHAR},
</if>
</set>
<if test="_parameter != null">
@ -244,11 +254,12 @@
`name` = #{record.name,jdbcType=VARCHAR},
`desc` = #{record.desc,jdbcType=VARCHAR},
`type` = #{record.type,jdbcType=VARCHAR},
configuration = #{record.configuration,jdbcType=VARCHAR},
create_time = #{record.createTime,jdbcType=BIGINT},
update_time = #{record.updateTime,jdbcType=BIGINT},
create_by = #{record.createBy,jdbcType=VARCHAR},
`status` = #{record.status,jdbcType=VARCHAR},
configuration = #{record.configuration,jdbcType=LONGVARCHAR}
version = #{record.version,jdbcType=VARCHAR},
`status` = #{record.status,jdbcType=LONGVARCHAR}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
@ -259,10 +270,11 @@
`name` = #{record.name,jdbcType=VARCHAR},
`desc` = #{record.desc,jdbcType=VARCHAR},
`type` = #{record.type,jdbcType=VARCHAR},
configuration = #{record.configuration,jdbcType=VARCHAR},
create_time = #{record.createTime,jdbcType=BIGINT},
update_time = #{record.updateTime,jdbcType=BIGINT},
create_by = #{record.createBy,jdbcType=VARCHAR},
`status` = #{record.status,jdbcType=VARCHAR}
version = #{record.version,jdbcType=VARCHAR}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
@ -279,6 +291,9 @@
<if test="type != null">
`type` = #{type,jdbcType=VARCHAR},
</if>
<if test="configuration != null">
configuration = #{configuration,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=BIGINT},
</if>
@ -288,11 +303,11 @@
<if test="createBy != null">
create_by = #{createBy,jdbcType=VARCHAR},
</if>
<if test="status != null">
`status` = #{status,jdbcType=VARCHAR},
<if test="version != null">
version = #{version,jdbcType=VARCHAR},
</if>
<if test="configuration != null">
configuration = #{configuration,jdbcType=LONGVARCHAR},
<if test="status != null">
`status` = #{status,jdbcType=LONGVARCHAR},
</if>
</set>
where id = #{id,jdbcType=VARCHAR}
@ -302,11 +317,12 @@
set `name` = #{name,jdbcType=VARCHAR},
`desc` = #{desc,jdbcType=VARCHAR},
`type` = #{type,jdbcType=VARCHAR},
configuration = #{configuration,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT},
create_by = #{createBy,jdbcType=VARCHAR},
`status` = #{status,jdbcType=VARCHAR},
configuration = #{configuration,jdbcType=LONGVARCHAR}
version = #{version,jdbcType=VARCHAR},
`status` = #{status,jdbcType=LONGVARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
<update id="updateByPrimaryKey" parameterType="io.dataease.plugins.common.base.domain.Datasource">
@ -314,10 +330,11 @@
set `name` = #{name,jdbcType=VARCHAR},
`desc` = #{desc,jdbcType=VARCHAR},
`type` = #{type,jdbcType=VARCHAR},
configuration = #{configuration,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT},
create_by = #{createBy,jdbcType=VARCHAR},
`status` = #{status,jdbcType=VARCHAR}
version = #{version,jdbcType=VARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
</mapper>

View File

@ -0,0 +1,9 @@
package io.dataease.plugins.datasource.entity;
import lombok.Data;
@Data
public class Status {
private String status;
private String version;
}

View File

@ -12,6 +12,7 @@ import io.dataease.plugins.common.dto.datasource.TableField;
import io.dataease.plugins.common.exception.DataEaseException;
import io.dataease.plugins.common.request.datasource.DatasourceRequest;
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
import io.dataease.plugins.datasource.entity.Status;
import org.apache.commons.lang3.StringUtils;
import javax.annotation.PostConstruct;
@ -137,6 +138,13 @@ public abstract class DefaultJdbcProvider extends Provider {
return tables;
}
@Override
public Status checkDsStatus(DatasourceRequest datasourceRequest) throws Exception {
Status status = new Status();
status.setStatus(checkStatus(datasourceRequest));
return status;
}
@Override
public String checkStatus(DatasourceRequest datasourceRequest) throws Exception {
String queryStr = getTablesSql(datasourceRequest);

View File

@ -6,6 +6,7 @@ import io.dataease.plugins.common.dto.datasource.TableDesc;
import io.dataease.plugins.common.dto.datasource.TableField;
import io.dataease.plugins.common.request.datasource.DatasourceRequest;
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
import io.dataease.plugins.datasource.entity.Status;
import java.beans.PropertyVetoException;
import java.sql.Connection;
@ -21,6 +22,8 @@ public abstract class Provider {
abstract public String checkStatus(DatasourceRequest datasourceRequest) throws Exception ;
abstract public Status checkDsStatus(DatasourceRequest datasourceRequest) throws Exception ;
public List<String[]> fetchResult(DatasourceRequest datasourceRequest) throws Exception {
return null;
}