diff --git a/backend/src/main/java/io/dataease/commons/utils/HttpClientUtil.java b/backend/src/main/java/io/dataease/commons/utils/HttpClientUtil.java index d0faaf8d2a..39a383a0ec 100755 --- a/backend/src/main/java/io/dataease/commons/utils/HttpClientUtil.java +++ b/backend/src/main/java/io/dataease/commons/utils/HttpClientUtil.java @@ -123,7 +123,6 @@ public class HttpClientUtil { EntityBuilder entityBuilder = EntityBuilder.create(); entityBuilder.setText(json); entityBuilder.setContentType(ContentType.APPLICATION_JSON); - entityBuilder.setContentEncoding(config.getCharset()); HttpEntity requestEntity = entityBuilder.build(); httpPost.setEntity(requestEntity); diff --git a/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java b/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java index 0103a5398c..281466dbbd 100644 --- a/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java +++ b/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java @@ -1,6 +1,8 @@ package io.dataease.controller.datasource; import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import com.google.common.reflect.TypeToken; +import com.google.gson.Gson; import io.dataease.auth.annotation.DeLog; import io.dataease.auth.annotation.DePermission; import io.dataease.commons.constants.DePermissionType; @@ -27,6 +29,7 @@ import springfox.documentation.annotations.ApiIgnore; import javax.annotation.Resource; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Api(tags = "数据源:数据源管理") @@ -135,7 +138,9 @@ public class DatasourceController { @ApiIgnore @PostMapping("/checkApiDatasource") - public ApiDefinition checkApiDatasource(@RequestBody ApiDefinition apiDefinition) throws Exception { + public ApiDefinition checkApiDatasource(@RequestBody Map data) throws Exception { + ApiDefinition apiDefinition = new Gson().fromJson(new String(java.util.Base64.getDecoder().decode(data.get("data"))), new TypeToken() { + }.getType()); return datasourceService.checkApiDatasource(apiDefinition); } diff --git a/backend/src/main/java/io/dataease/provider/query/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/doris/DorisQueryProvider.java index c051fbdda4..9ac6b663de 100644 --- a/backend/src/main/java/io/dataease/provider/query/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/doris/DorisQueryProvider.java @@ -1,11 +1,31 @@ package io.dataease.provider.query.doris; +import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs; +import io.dataease.plugins.common.base.domain.Datasource; +import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; +import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; +import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; +import io.dataease.plugins.common.request.permission.DataSetRowPermissionsTreeDTO; +import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.provider.query.mysql.MysqlQueryProvider; import org.springframework.stereotype.Service; +import java.util.List; @Service("dorisQueryProvider") public class DorisQueryProvider extends MysqlQueryProvider { + public String getSQLWithPage(boolean isTable, String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) { + if(isTable){ + return getSQLTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view); + }else { + return getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view); + } + } + + public String getResultCount(boolean isTable, String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { + return null; + } + } diff --git a/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java b/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java index 62522a193a..5273a13743 100644 --- a/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java +++ b/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java @@ -9,6 +9,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; @@ -27,7 +28,9 @@ public class VAuthModelService { public List queryAuthModel(VAuthModelRequest request) { request.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); List result = extVAuthModelMapper.queryAuthModel(request); - + if(CollectionUtils.isEmpty(result)){ + return new ArrayList<>(); + } if (request.getPrivileges() != null) { result = filterPrivileges(request, result); } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 30001e2f5b..006ec809a9 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -1116,6 +1116,9 @@ public class DataSetTableService { if (dsType.equals(DatasourceTypes.oracle.getType())) { subSelect.setAlias(new Alias(fromItem.getAlias().toString(), false)); } else { + if(fromItem.getAlias() == null){ + throw new Exception("Failed to parse sql, Every derived table must have its own alias!"); + } subSelect.setAlias(new Alias(fromItem.getAlias().toString())); } plainSelect.setFromItem(subSelect); @@ -2818,7 +2821,7 @@ public class DataSetTableService { boolean hasSubBinaryExpression = false; try { BinaryExpression leftBinaryExpression = (BinaryExpression) expr.getLeftExpression(); - hasSubBinaryExpression = leftBinaryExpression.getLeftExpression() instanceof BinaryExpression; + hasSubBinaryExpression = leftBinaryExpression.getLeftExpression() instanceof Expression; } catch (Exception e) { e.printStackTrace(); } diff --git a/frontend/src/assets/datasource/db2.jpg b/frontend/src/assets/datasource/db2.jpg index 691083d883..1eb9869bb5 100644 Binary files a/frontend/src/assets/datasource/db2.jpg and b/frontend/src/assets/datasource/db2.jpg differ diff --git a/frontend/src/assets/datasource/hive.jpg b/frontend/src/assets/datasource/hive.jpg index 8f1410ec90..60e5cfe130 100644 Binary files a/frontend/src/assets/datasource/hive.jpg and b/frontend/src/assets/datasource/hive.jpg differ diff --git a/frontend/src/assets/datasource/impala.jpg b/frontend/src/assets/datasource/impala.jpg index 0c4d5cee8c..170f258d45 100644 Binary files a/frontend/src/assets/datasource/impala.jpg and b/frontend/src/assets/datasource/impala.jpg differ diff --git a/frontend/src/views/panel/filter/FilterDialog.vue b/frontend/src/views/panel/filter/FilterDialog.vue index 4944e9e7ca..1e201bb583 100644 --- a/frontend/src/views/panel/filter/FilterDialog.vue +++ b/frontend/src/views/panel/filter/FilterDialog.vue @@ -275,6 +275,7 @@ :control-attrs="myAttrs" :child-views="childViews" :dataset-params="datasetParams" + :activeName="activeName" /> diff --git a/frontend/src/views/panel/filter/filterMain/FilterControl.vue b/frontend/src/views/panel/filter/filterMain/FilterControl.vue index 46d2117b18..352138253b 100644 --- a/frontend/src/views/panel/filter/filterMain/FilterControl.vue +++ b/frontend/src/views/panel/filter/filterMain/FilterControl.vue @@ -166,7 +166,7 @@
-
+
[] + }, + activeName:{ + } }, data() { @@ -327,16 +330,41 @@ export default { } this.attrs.parameters = parameters } - this.allParams = this.childViews.datasetParams + this.allParams = JSON.parse(JSON.stringify(this.childViews.datasetParams)) } }, 'datasetParams': { handler(newName, oldName) { + this.allParams = JSON.parse(JSON.stringify(this.childViews.datasetParams)) if (this.datasetParams.length > 0) { - this.allParams = this.childViews.datasetParams for (var j = 0; j < this.datasetParams.length; j++) { + var hasParam = false for (var i = 0; i < this.childViews.datasetParams.length; i++) { - if (this.childViews.datasetParams[i].id.split('|DE|')[0] !== this.datasetParams[j].id.split('|DE|')[0]) { + if (this.childViews.datasetParams[i].id === this.datasetParams[j].id) { + hasParam = true + } + } + if(!hasParam){ + this.allParams.push(this.datasetParams[j]) + } + } + } + } + }, + 'activeName':{ + handler(newName, oldName) { + if(this.activeName === 'assembly'){ + this.allParams = JSON.parse(JSON.stringify(this.childViews.datasetParams)) + }else { + if (this.datasetParams.length > 0) { + for (var j = 0; j < this.datasetParams.length; j++) { + var hasParam = false + for (var i = 0; i < this.childViews.datasetParams.length; i++) { + if (this.childViews.datasetParams[i].id === this.datasetParams[j].id) { + hasParam = true + } + } + if(!hasParam){ this.allParams.push(this.datasetParams[j]) } } @@ -475,6 +503,13 @@ export default { overflow: hidden; } +.span-div2 { + width: 350px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + .de-ul li { margin: 5px 2px; cursor: pointer; diff --git a/frontend/src/views/system/datasource/DsAppForm.vue b/frontend/src/views/system/datasource/DsAppForm.vue index 31202e98a1..581d5b5eac 100644 --- a/frontend/src/views/system/datasource/DsAppForm.vue +++ b/frontend/src/views/system/datasource/DsAppForm.vue @@ -800,7 +800,7 @@ export default { data.request = JSON.stringify(data.request) this.loading = true this.disabledNext = true - checkApiDatasource(data).then(res => { + checkApiDatasource({'data': Base64.encode(JSON.stringify(data))}).then(res => { this.loading = false this.disabledNext = false this.apiItem.status = 'Success' @@ -858,7 +858,7 @@ export default { const data = JSON.parse(JSON.stringify(this.apiItem)) data.request = JSON.stringify(data.request) this.loading = true - checkApiDatasource(data).then(res => { + checkApiDatasource({'data': Base64.encode(JSON.stringify(data))}).then(res => { this.loading = false this.$success(i18n.t('commons.success')) this.apiItem.fields = res.data.fields diff --git a/frontend/src/views/system/datasource/DsConfiguration.vue b/frontend/src/views/system/datasource/DsConfiguration.vue index 322f95911b..397bbffd7c 100644 --- a/frontend/src/views/system/datasource/DsConfiguration.vue +++ b/frontend/src/views/system/datasource/DsConfiguration.vue @@ -734,6 +734,7 @@ import { checkApiDatasource, getSchema } from '@/api/system/datasource' import ApiHttpRequestForm from '@/views/system/datasource/ApiHttpRequestForm' import dePwd from '@/components/deCustomCm/DePwd.vue' import msgCfm from '@/components/msgCfm' +import { Base64 } from 'js-base64' export default { name: 'DsConfiguration', components: { @@ -1069,10 +1070,10 @@ export default { } this.$refs.apiItemBasicInfo.validate((valid) => { if (valid) { - const data = JSON.parse(JSON.stringify(this.apiItem)) + const data = Base64.encode(JSON.stringify(this.apiItem)) this.loading = true this.disabledNext = true - checkApiDatasource(data) + checkApiDatasource({'data': data}) .then((res) => { this.loading = false this.disabledNext = false