From 61b2ab254391003413ba6b5e3ce4b2f85cd2de9b Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Tue, 31 Aug 2021 15:57:14 +0800 Subject: [PATCH 01/30] =?UTF-8?q?feat:=20=E4=BB=AA=E8=A1=A8=E6=9D=BF?= =?UTF-8?q?=E6=96=B0=E5=A2=9Etabs=E9=80=89=E9=A1=B9=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../canvas/custom-component/component-list.js | 25 ++++++ .../src/components/widget/DeWidget/DeTabs.vue | 76 +++++++++++++++++++ .../src/views/panel/AssistComponent/index.vue | 2 +- 3 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 frontend/src/components/widget/DeWidget/DeTabs.vue diff --git a/frontend/src/components/canvas/custom-component/component-list.js b/frontend/src/components/canvas/custom-component/component-list.js index 0e1d8d6a0b..4b7903ce00 100644 --- a/frontend/src/components/canvas/custom-component/component-list.js +++ b/frontend/src/components/canvas/custom-component/component-list.js @@ -27,6 +27,14 @@ export const assistList = [ label: '矩形', icon: 'iconfont icon-juxing', defaultClass: 'text-filter' + }, + { + id: '10006', + component: 'de-tabs', + type: 'de-tabs', + label: '选项卡', + icon: 'iconfont icon-juxing', + defaultClass: 'text-filter' } ] @@ -139,6 +147,23 @@ const list = [ borderRadius: '' } }, + { + id: '10006', + component: 'de-tabs', + label: '选项卡', + propValue: '', + icon: 'juxing', + type: 'de-tabs', + style: { + width: 200, + height: 200, + borderStyle: 'solid', + borderWidth: 1, + borderColor: '#000000', + backgroundColor: '#ffffff', + borderRadius: 0 + } + }, { id: '20001', component: 'picture-add', diff --git a/frontend/src/components/widget/DeWidget/DeTabs.vue b/frontend/src/components/widget/DeWidget/DeTabs.vue new file mode 100644 index 0000000000..0fb6a815eb --- /dev/null +++ b/frontend/src/components/widget/DeWidget/DeTabs.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/frontend/src/views/panel/AssistComponent/index.vue b/frontend/src/views/panel/AssistComponent/index.vue index 01866467c1..9a5b4a3ade 100644 --- a/frontend/src/views/panel/AssistComponent/index.vue +++ b/frontend/src/views/panel/AssistComponent/index.vue @@ -61,7 +61,7 @@ import { commonStyle, commonAttr } from '@/components/canvas/custom-component/co import generateID from '@/components/canvas/utils/generateID' export default { - name: 'FilterGroup', + name: 'AssisComponent', data() { return { assistList, From a559cab9fbb071113af631b2955b4902a8afd776 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 22 Sep 2021 11:03:25 +0800 Subject: [PATCH 02/30] =?UTF-8?q?feat:=20=E5=85=A8=E9=83=A8=E5=B7=B2?= =?UTF-8?q?=E8=AF=BB=E6=88=96=E6=A0=87=E8=AE=B0=E5=B7=B2=E8=AF=BB=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E6=9B=B4=E6=96=B0=E9=A1=B6=E9=83=A8=E6=9C=AA=E8=AF=BB?= =?UTF-8?q?=E6=95=B0=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/msg/unread.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/src/views/msg/unread.vue b/frontend/src/views/msg/unread.vue index c5500bc8b2..c322b7eb63 100644 --- a/frontend/src/views/msg/unread.vue +++ b/frontend/src/views/msg/unread.vue @@ -169,6 +169,7 @@ export default { allMarkReaded() { allRead().then(res => { this.$success(this.$t('webmsg.mark_success')) + bus.$emit('refresh-top-notification') this.search() }) }, @@ -180,6 +181,7 @@ export default { const param = this.multipleSelection.map(item => item.msgId) batchRead(param).then(res => { this.$success(this.$t('webmsg.mark_success')) + bus.$emit('refresh-top-notification') this.search() }) }, From d1e56b578455b3beeda7ec3215942e6fdf613a30 Mon Sep 17 00:00:00 2001 From: junjie Date: Wed, 22 Sep 2021 15:40:12 +0800 Subject: [PATCH 03/30] =?UTF-8?q?fix:=20Doris=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/provider/doris/DorisConstants.java | 2 ++ .../dataease/provider/doris/DorisQueryProvider.java | 12 ++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/io/dataease/provider/doris/DorisConstants.java b/backend/src/main/java/io/dataease/provider/doris/DorisConstants.java index 22792a429e..6f9a65f1c8 100644 --- a/backend/src/main/java/io/dataease/provider/doris/DorisConstants.java +++ b/backend/src/main/java/io/dataease/provider/doris/DorisConstants.java @@ -33,6 +33,8 @@ public class DorisConstants extends SQLConstants { public static final String WHERE_VALUE_VALUE = "'%s'"; + public static final String WHERE_NUMBER_VALUE = "%s"; + public static final String AGG_COUNT = "COUNT(*)"; public static final String AGG_FIELD = "%s(%s)"; diff --git a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java index 4e2edef89b..ce05913ede 100644 --- a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java @@ -785,7 +785,11 @@ public class DorisQueryProvider extends QueryProvider { } else if (StringUtils.containsIgnoreCase(request.getTerm(), "like")) { whereValue = "'%" + value + "%'"; } else { - whereValue = String.format(DorisConstants.WHERE_VALUE_VALUE, value); + if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + whereValue = String.format(DorisConstants.WHERE_NUMBER_VALUE, value); + } else { + whereValue = String.format(DorisConstants.WHERE_VALUE_VALUE, value); + } } list.add(SQLObj.builder() .whereField(whereName) @@ -849,7 +853,11 @@ public class DorisQueryProvider extends QueryProvider { whereValue = String.format(DorisConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - whereValue = String.format(DorisConstants.WHERE_VALUE_VALUE, value.get(0)); + if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + whereValue = String.format(DorisConstants.WHERE_NUMBER_VALUE, value.get(0)); + } else { + whereValue = String.format(DorisConstants.WHERE_VALUE_VALUE, value.get(0)); + } } list.add(SQLObj.builder() .whereField(whereName) From 1b2115273ddbed01cb4b607f8b6e933021d3b9f4 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Wed, 22 Sep 2021 16:51:41 +0800 Subject: [PATCH 04/30] =?UTF-8?q?feat:=E7=BC=96=E8=BE=91=E4=BB=AA=E8=A1=A8?= =?UTF-8?q?=E6=9D=BF=E6=97=B6=EF=BC=8C=E5=A4=96=E9=83=A8=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E6=8B=96=E6=8B=BD=E8=BF=9B=E4=BB=AA=E8=A1=A8=E6=9D=BF=E6=97=B6?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E9=80=9A=E8=BF=87=E9=99=84=E5=8A=A0=E6=8B=96?= =?UTF-8?q?=E6=8B=BD=E9=98=B4=E5=BD=B1=E5=8C=BA=E8=BF=9B=E8=A1=8C=E9=A2=84?= =?UTF-8?q?=E5=AE=9A=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/DeDrag/shadow.vue | 50 ++++++++++++++++--- .../canvas/components/Editor/index.vue | 32 +++++++++++- .../canvas/custom-component/component-list.js | 9 +++- frontend/src/store/index.js | 6 +++ .../src/views/panel/AssistComponent/index.vue | 16 +++++- frontend/src/views/panel/ViewSelect/index.vue | 23 +++++++-- frontend/src/views/panel/edit/index.vue | 29 ++++++----- frontend/src/views/panel/filter/index.vue | 9 +++- 8 files changed, 142 insertions(+), 32 deletions(-) diff --git a/frontend/src/components/DeDrag/shadow.vue b/frontend/src/components/DeDrag/shadow.vue index f4c7796496..53794f8950 100644 --- a/frontend/src/components/DeDrag/shadow.vue +++ b/frontend/src/components/DeDrag/shadow.vue @@ -1,5 +1,5 @@ diff --git a/frontend/src/views/panel/ViewSelect/index.vue b/frontend/src/views/panel/ViewSelect/index.vue index 696f36b242..8afb58649e 100644 --- a/frontend/src/views/panel/ViewSelect/index.vue +++ b/frontend/src/views/panel/ViewSelect/index.vue @@ -2,7 +2,7 @@ - + - + 新建 @@ -20,6 +20,7 @@ @@ -64,6 +66,12 @@ import { tree, findOne } from '@/api/panel/view' export default { name: 'ViewSelect', + props: { + selectModel: { + type: Boolean, + default: false + } + }, data() { return { templateFilterText: '', @@ -126,6 +134,16 @@ export default { }, newChart() { this.$emit('newChart') + }, + checkChanged(node, status) { + this.$refs.templateTree.setCheckedNodes([]) + if (status.checkedKeys && status.checkedKeys.length > 0) { + this.$refs.templateTree.setCheckedNodes([node]) + } + }, + getCurrentSelected() { + const nodes = this.$refs.templateTree.getCheckedNodes(true, false) + return nodes } } From 3ca7a5e02989688453d399f89ef77dbb70b357f0 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Wed, 22 Sep 2021 18:34:02 +0800 Subject: [PATCH 07/30] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=87=BA=E7=8E=B0?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E6=9D=A1=EF=BC=8C=E6=A0=B7=E5=BC=8F=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E4=BD=8D=E7=BD=AE=E5=AE=9A=E4=BD=8D=E4=B8=8D=E5=87=86?= =?UTF-8?q?=E7=A1=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/canvas/components/Editor/index.vue | 4 ++++ frontend/src/views/panel/edit/index.vue | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/canvas/components/Editor/index.vue b/frontend/src/components/canvas/components/Editor/index.vue index 7ca32d959e..1b307388dd 100644 --- a/frontend/src/components/canvas/components/Editor/index.vue +++ b/frontend/src/components/canvas/components/Editor/index.vue @@ -11,6 +11,7 @@ :style="customStyle" @dragover="handleDragOver" @mousedown="handleMouseDown" + @scroll="canvasScroll" > @@ -666,6 +667,9 @@ export default { } else { return y } + }, + canvasScroll(event) { + this.$emit('canvasScroll', event) } } } diff --git a/frontend/src/views/panel/edit/index.vue b/frontend/src/views/panel/edit/index.vue index b88cbec477..5315426aa3 100644 --- a/frontend/src/views/panel/edit/index.vue +++ b/frontend/src/views/panel/edit/index.vue @@ -100,9 +100,8 @@ @drop="handleDrop" @mousedown="handleMouseDown" @mouseup="deselectCurComponent" - @scroll="canvasScroll" > - + @@ -696,6 +695,7 @@ export default { } }, canvasScroll(event) { + console.log('testTop' + event.target.scrollTop) this.scrollLeft = event.target.scrollLeft this.scrollTop = event.target.scrollTop }, From 08dcd230c69aae42284a68177b4cb0b4c105c573 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Wed, 22 Sep 2021 18:44:30 +0800 Subject: [PATCH 08/30] =?UTF-8?q?refactor:=E4=BC=98=E5=8C=96=E5=A4=96?= =?UTF-8?q?=E9=83=A8=E7=BB=84=E4=BB=B6=E9=A2=84=E5=AE=9A=E4=BD=8D=E9=98=B4?= =?UTF-8?q?=E5=BD=B1=E5=8C=BA=EF=BC=8C=E9=98=B2=E6=AD=A2=E9=98=B4=E5=BD=B1?= =?UTF-8?q?=E5=8C=BA=E6=8B=96=E6=8B=BD=E6=98=AF=E8=B6=85=E5=87=BA=E8=BE=B9?= =?UTF-8?q?=E7=95=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/DeDrag/shadow.vue | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/frontend/src/components/DeDrag/shadow.vue b/frontend/src/components/DeDrag/shadow.vue index 53794f8950..1277038296 100644 --- a/frontend/src/components/DeDrag/shadow.vue +++ b/frontend/src/components/DeDrag/shadow.vue @@ -37,6 +37,13 @@ export default { top = Math.round(top / this.curCanvasScale.matrixStyleHeight) * this.curCanvasScale.matrixStyleHeight height = Math.round(height / this.curCanvasScale.matrixStyleHeight) * this.curCanvasScale.matrixStyleHeight } + + // 防止阴影区超出边界 + const xGap = left + width - this.canvasWidth + // console.log('canvasWidth:' + this.canvasWidth + ';xGap:' + xGap) + if (xGap > 0) { + left = left - xGap + } const style = { transform: `translate(${left}px, ${top}px) rotate(0deg)`, width: width + 'px', @@ -55,6 +62,10 @@ export default { dragComponentInfo() { return this.$store.state.dragComponentInfo }, + canvasWidth() { + const scaleWidth = this.curCanvasScale.scaleWidth / 100 + return this.canvasStyleData.width * scaleWidth + }, ...mapState([ 'curComponent', 'editor', From c19f63590bb07efcff38c98aca39adde0810d696 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Wed, 22 Sep 2021 18:46:29 +0800 Subject: [PATCH 09/30] =?UTF-8?q?feat:=20ck=20=E6=94=AF=E6=8C=81=E7=9B=B4?= =?UTF-8?q?=E8=BF=9E=E6=A8=A1=E5=BC=8F=EF=BC=9Bes=E6=94=AF=E6=8C=81=206.*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/pom.xml | 6 + .../io/dataease/base/domain/Datasource.java | 2 - .../base/domain/DatasourceExample.java | 70 -------- .../dataease/base/mapper/DatasourceMapper.xml | 31 +--- .../java/io/dataease/config/CommonConfig.java | 3 + .../datasource/constants/DatasourceTypes.java | 2 +- .../dataease/datasource/dto/EsConfigDTO.java | 2 + .../dataease/datasource/dto/es/EsReponse.java | 1 + .../datasource/provider/EsProvider.java | 57 +++++-- .../datasource/provider/JdbcProvider.java | 37 ++-- .../datasource/provider/ProviderFactory.java | 4 +- .../datasource/service/DatasourceService.java | 7 +- .../io/dataease/provider/QueryProvider.java | 3 + .../CHConstants.java => ck/CKConstants.java} | 10 +- .../CKQueryProvider.java} | 159 ++++++++++-------- .../service/dataset/DataSetTableService.java | 13 ++ .../service/dataset/ExtractDataService.java | 26 ++- .../resources/i18n/messages_en_US.properties | 1 + .../resources/i18n/messages_zh_CN.properties | 2 +- .../resources/i18n/messages_zh_TW.properties | 1 + frontend/src/views/dataset/add/AddDB.vue | 4 +- frontend/src/views/dataset/add/AddSQL.vue | 4 +- frontend/src/views/system/datasource/form.vue | 39 ++--- 23 files changed, 243 insertions(+), 241 deletions(-) rename backend/src/main/java/io/dataease/provider/{ch/CHConstants.java => ck/CKConstants.java} (76%) rename backend/src/main/java/io/dataease/provider/{ch/CHQueryProvider.java => ck/CKQueryProvider.java} (90%) diff --git a/backend/pom.xml b/backend/pom.xml index 908d3ba808..d30a28ec21 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -342,6 +342,12 @@ spring-boot-starter-data-ldap --> + + + + + + ru.yandex.clickhouse clickhouse-jdbc diff --git a/backend/src/main/java/io/dataease/base/domain/Datasource.java b/backend/src/main/java/io/dataease/base/domain/Datasource.java index d8a2f6c4ac..37dfeefa85 100644 --- a/backend/src/main/java/io/dataease/base/domain/Datasource.java +++ b/backend/src/main/java/io/dataease/base/domain/Datasource.java @@ -21,8 +21,6 @@ public class Datasource implements Serializable { private String status; - private String computeType; - private String configuration; private static final long serialVersionUID = 1L; diff --git a/backend/src/main/java/io/dataease/base/domain/DatasourceExample.java b/backend/src/main/java/io/dataease/base/domain/DatasourceExample.java index c0fe88e1a8..c59e358431 100644 --- a/backend/src/main/java/io/dataease/base/domain/DatasourceExample.java +++ b/backend/src/main/java/io/dataease/base/domain/DatasourceExample.java @@ -643,76 +643,6 @@ public class DatasourceExample { addCriterion("`status` not between", value1, value2, "status"); return (Criteria) this; } - - public Criteria andComputeTypeIsNull() { - addCriterion("compute_type is null"); - return (Criteria) this; - } - - public Criteria andComputeTypeIsNotNull() { - addCriterion("compute_type is not null"); - return (Criteria) this; - } - - public Criteria andComputeTypeEqualTo(String value) { - addCriterion("compute_type =", value, "computeType"); - return (Criteria) this; - } - - public Criteria andComputeTypeNotEqualTo(String value) { - addCriterion("compute_type <>", value, "computeType"); - return (Criteria) this; - } - - public Criteria andComputeTypeGreaterThan(String value) { - addCriterion("compute_type >", value, "computeType"); - return (Criteria) this; - } - - public Criteria andComputeTypeGreaterThanOrEqualTo(String value) { - addCriterion("compute_type >=", value, "computeType"); - return (Criteria) this; - } - - public Criteria andComputeTypeLessThan(String value) { - addCriterion("compute_type <", value, "computeType"); - return (Criteria) this; - } - - public Criteria andComputeTypeLessThanOrEqualTo(String value) { - addCriterion("compute_type <=", value, "computeType"); - return (Criteria) this; - } - - public Criteria andComputeTypeLike(String value) { - addCriterion("compute_type like", value, "computeType"); - return (Criteria) this; - } - - public Criteria andComputeTypeNotLike(String value) { - addCriterion("compute_type not like", value, "computeType"); - return (Criteria) this; - } - - public Criteria andComputeTypeIn(List values) { - addCriterion("compute_type in", values, "computeType"); - return (Criteria) this; - } - - public Criteria andComputeTypeNotIn(List values) { - addCriterion("compute_type not in", values, "computeType"); - return (Criteria) this; - } - - public Criteria andComputeTypeBetween(String value1, String value2) { - addCriterion("compute_type between", value1, value2, "computeType"); - return (Criteria) this; - } - - public Criteria andComputeTypeNotBetween(String value1, String value2) { - addCriterion("compute_type not between", value1, value2, "computeType"); - return (Criteria) this; - } } public static class Criteria extends GeneratedCriteria { diff --git a/backend/src/main/java/io/dataease/base/mapper/DatasourceMapper.xml b/backend/src/main/java/io/dataease/base/mapper/DatasourceMapper.xml index 29abb1dcfb..67713c420f 100644 --- a/backend/src/main/java/io/dataease/base/mapper/DatasourceMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/DatasourceMapper.xml @@ -10,7 +10,6 @@ - @@ -74,7 +73,7 @@ - id, `name`, `desc`, `type`, create_time, update_time, create_by, `status`, compute_type + id, `name`, `desc`, `type`, create_time, update_time, create_by, `status` configuration @@ -130,12 +129,12 @@ insert into datasource (id, `name`, `desc`, `type`, create_time, update_time, - create_by, `status`, compute_type, - configuration) + create_by, `status`, configuration + ) 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}, #{computeType,jdbcType=VARCHAR}, - #{configuration,jdbcType=LONGVARCHAR}) + #{createBy,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, #{configuration,jdbcType=LONGVARCHAR} + ) insert into datasource @@ -164,9 +163,6 @@ `status`, - - compute_type, - configuration, @@ -196,9 +192,6 @@ #{status,jdbcType=VARCHAR}, - - #{computeType,jdbcType=VARCHAR}, - #{configuration,jdbcType=LONGVARCHAR}, @@ -237,9 +230,6 @@ `status` = #{record.status,jdbcType=VARCHAR}, - - compute_type = #{record.computeType,jdbcType=VARCHAR}, - configuration = #{record.configuration,jdbcType=LONGVARCHAR}, @@ -258,7 +248,6 @@ update_time = #{record.updateTime,jdbcType=BIGINT}, create_by = #{record.createBy,jdbcType=VARCHAR}, `status` = #{record.status,jdbcType=VARCHAR}, - compute_type = #{record.computeType,jdbcType=VARCHAR}, configuration = #{record.configuration,jdbcType=LONGVARCHAR} @@ -273,8 +262,7 @@ create_time = #{record.createTime,jdbcType=BIGINT}, update_time = #{record.updateTime,jdbcType=BIGINT}, create_by = #{record.createBy,jdbcType=VARCHAR}, - `status` = #{record.status,jdbcType=VARCHAR}, - compute_type = #{record.computeType,jdbcType=VARCHAR} + `status` = #{record.status,jdbcType=VARCHAR} @@ -303,9 +291,6 @@ `status` = #{status,jdbcType=VARCHAR}, - - compute_type = #{computeType,jdbcType=VARCHAR}, - configuration = #{configuration,jdbcType=LONGVARCHAR}, @@ -321,7 +306,6 @@ update_time = #{updateTime,jdbcType=BIGINT}, create_by = #{createBy,jdbcType=VARCHAR}, `status` = #{status,jdbcType=VARCHAR}, - compute_type = #{computeType,jdbcType=VARCHAR}, configuration = #{configuration,jdbcType=LONGVARCHAR} where id = #{id,jdbcType=VARCHAR} @@ -333,8 +317,7 @@ create_time = #{createTime,jdbcType=BIGINT}, update_time = #{updateTime,jdbcType=BIGINT}, create_by = #{createBy,jdbcType=VARCHAR}, - `status` = #{status,jdbcType=VARCHAR}, - compute_type = #{computeType,jdbcType=VARCHAR} + `status` = #{status,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/config/CommonConfig.java b/backend/src/main/java/io/dataease/config/CommonConfig.java index 3ba2f02ef0..d9043cb32f 100644 --- a/backend/src/main/java/io/dataease/config/CommonConfig.java +++ b/backend/src/main/java/io/dataease/config/CommonConfig.java @@ -4,7 +4,10 @@ import com.alibaba.fastjson.JSONObject; import com.fit2cloud.autoconfigure.QuartzAutoConfiguration; import io.dataease.base.domain.Datasource; import io.dataease.commons.utils.CommonThreadPool; +import io.dataease.kettle.databaseplugin.ClickhouseDatabaseMeta; import org.pentaho.di.core.KettleEnvironment; +import org.pentaho.di.core.plugins.DatabasePluginType; +import org.pentaho.di.core.plugins.PluginRegistry; import org.pentaho.di.repository.filerep.KettleFileRepository; import org.pentaho.di.repository.filerep.KettleFileRepositoryMeta; import org.springframework.boot.autoconfigure.AutoConfigureBefore; diff --git a/backend/src/main/java/io/dataease/datasource/constants/DatasourceTypes.java b/backend/src/main/java/io/dataease/datasource/constants/DatasourceTypes.java index dd701674fb..c9da730433 100644 --- a/backend/src/main/java/io/dataease/datasource/constants/DatasourceTypes.java +++ b/backend/src/main/java/io/dataease/datasource/constants/DatasourceTypes.java @@ -7,7 +7,7 @@ public enum DatasourceTypes { sqlServer("sqlServer", "sqlServer", "com.microsoft.sqlserver.jdbc.SQLServerDriver", "\"", "\"", "\"", "\""), doris("doris", "doris", "com.mysql.jdbc.Driver", "`", "`", "", ""), oracle("oracle", "oracle", "oracle.jdbc.driver.OracleDriver", "\"", "\"", "\"", "\""), - ch("ch", "ch", "ru.yandex.clickhouse.ClickHouseDriver", "`", "`", "'", "'"), + ck("ch", "ch", "ru.yandex.clickhouse.ClickHouseDriver", "`", "`", "'", "'"), es("es", "es", "", "\"", "\"", "\"", "\""); private String feature; diff --git a/backend/src/main/java/io/dataease/datasource/dto/EsConfigDTO.java b/backend/src/main/java/io/dataease/datasource/dto/EsConfigDTO.java index 4fb9c2295b..b879eeb309 100644 --- a/backend/src/main/java/io/dataease/datasource/dto/EsConfigDTO.java +++ b/backend/src/main/java/io/dataease/datasource/dto/EsConfigDTO.java @@ -10,5 +10,7 @@ public class EsConfigDTO { private String url; private String username; private String password; + private String version; + private String uri; private String dataSourceType = "es"; } diff --git a/backend/src/main/java/io/dataease/datasource/dto/es/EsReponse.java b/backend/src/main/java/io/dataease/datasource/dto/es/EsReponse.java index cea73d9792..d40f214d53 100644 --- a/backend/src/main/java/io/dataease/datasource/dto/es/EsReponse.java +++ b/backend/src/main/java/io/dataease/datasource/dto/es/EsReponse.java @@ -12,6 +12,7 @@ public class EsReponse { private String cursor; private Integer status; private Error error; + private String version; @Data public class Error{ diff --git a/backend/src/main/java/io/dataease/datasource/provider/EsProvider.java b/backend/src/main/java/io/dataease/datasource/provider/EsProvider.java index 72c46eb0bc..4e0bf23afb 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/EsProvider.java +++ b/backend/src/main/java/io/dataease/datasource/provider/EsProvider.java @@ -1,5 +1,7 @@ package io.dataease.datasource.provider; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.mchange.v2.c3p0.ComboPooledDataSource; import io.dataease.commons.utils.HttpClientConfig; @@ -10,6 +12,7 @@ import io.dataease.datasource.dto.es.Requst; import io.dataease.datasource.dto.es.RequstWithCursor; import io.dataease.datasource.request.DatasourceRequest; import io.dataease.exception.DataEaseException; +import io.dataease.i18n.Translator; import io.dataease.provider.es.EsQueryProvider; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.StringUtils; @@ -54,7 +57,7 @@ public class EsProvider extends DatasourceProvider { Requst requst = new Requst(); requst.setQuery(dsr.getQuery()); requst.setFetch_size(dsr.getFetchSize()); - String url = esConfigDTO.getUrl().endsWith("/") ? esConfigDTO.getUrl() + "_sql?format=json" : esConfigDTO.getUrl() + "/" + "_sql?format=json"; + String url = esConfigDTO.getUrl().endsWith("/") ? esConfigDTO.getUrl() + esConfigDTO.getUri() + "?format=json" : esConfigDTO.getUrl() + "/" + esConfigDTO.getUri() + "?format=json"; String response = HttpClientUtil.post(url, new Gson().toJson(requst), httpClientConfig); EsReponse esReponse = new Gson().fromJson(response, EsReponse.class); @@ -84,7 +87,7 @@ public class EsProvider extends DatasourceProvider { public List fetchResult(DatasourceRequest datasourceRequest) throws Exception { List list = new LinkedList<>(); try { - String response = exexQuery(datasourceRequest, datasourceRequest.getQuery(), "_sql?format=json"); + String response = exexQuery(datasourceRequest, datasourceRequest.getQuery(), "?format=json"); list = fetchResult(response); } catch (Exception e) { DataEaseException.throwException(e); @@ -110,7 +113,7 @@ public class EsProvider extends DatasourceProvider { public List fetchResultField(DatasourceRequest datasourceRequest) throws Exception { List tableFileds = new ArrayList<>(); try { - String response = exexQuery(datasourceRequest, datasourceRequest.getQuery(), "_sql?format=json"); + String response = exexQuery(datasourceRequest, datasourceRequest.getQuery(), "?format=json"); tableFileds = fetchResultField(response); } catch (Exception e) { DataEaseException.throwException(e); @@ -140,7 +143,7 @@ public class EsProvider extends DatasourceProvider { public Map fetchResultAndField(DatasourceRequest datasourceRequest) throws Exception { Map result = new HashMap<>(); try { - String response = exexQuery(datasourceRequest, datasourceRequest.getQuery(), "_sql?format=json"); + String response = exexQuery(datasourceRequest, datasourceRequest.getQuery(), "?format=json"); result.put("dataList", fetchResult(response)); result.put("fieldList", fetchResultField(response)); } catch (Exception e) { @@ -157,7 +160,7 @@ public class EsProvider extends DatasourceProvider { public List getTables(DatasourceRequest datasourceRequest) throws Exception { List tables = new ArrayList<>(); try { - String response = exexQuery(datasourceRequest, "show tables", "_sql?format=json"); + String response = exexQuery(datasourceRequest, "show tables", "?format=json"); tables = fetchTables(response); } catch (Exception e) { DataEaseException.throwException(e); @@ -176,6 +179,9 @@ public class EsProvider extends DatasourceProvider { if(row.length == 3 && row[1].equalsIgnoreCase("TABLE") && row[2].equalsIgnoreCase("INDEX")){ tables.add(row[0]); } + if(row.length == 2 && row[1].equalsIgnoreCase("BASE TABLE")){ + tables.add(row[0]); + } } return tables; } @@ -189,7 +195,7 @@ public class EsProvider extends DatasourceProvider { public List getTableFileds(DatasourceRequest datasourceRequest) throws Exception { List tableFileds = new ArrayList<>(); try { - String response = exexQuery(datasourceRequest, "desc " + datasourceRequest.getTable(), "_sql?format=json"); + String response = exexQuery(datasourceRequest, "desc " + datasourceRequest.getTable(), "?format=json"); tableFileds = fetchResultField(response); } catch (Exception e) { DataEaseException.throwException(e); @@ -199,16 +205,34 @@ public class EsProvider extends DatasourceProvider { @Override public void checkStatus(DatasourceRequest datasourceRequest) throws Exception { + EsConfigDTO esConfigDTO = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), EsConfigDTO.class); + String response = exexGetQuery(datasourceRequest); + String version = JSONObject.parseObject(response).getJSONObject("version").getString("number"); + if(Integer.valueOf(version.substring(0,1)) < 6 ){ + throw new Exception(Translator.get("i18n_es_limit")); + } + if(Integer.valueOf(version.substring(2,3)) < 3 ){ + throw new Exception(Translator.get("i18n_es_limit")); + } + if(Integer.valueOf(version.substring(0,1)) == 6 ) { + esConfigDTO.setUri("_xpack/sql"); + } + if(Integer.valueOf(version.substring(0,1)) == 7 ) { + esConfigDTO.setUri("_sql"); + } + datasourceRequest.getDatasource().setConfiguration(new Gson().toJson(esConfigDTO)); getTables(datasourceRequest); } private String exexQuery(DatasourceRequest datasourceRequest, String sql, String uri){ EsConfigDTO esConfigDTO = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), EsConfigDTO.class); - + uri = esConfigDTO.getUri()+uri; HttpClientConfig httpClientConfig = new HttpClientConfig(); - String auth = esConfigDTO.getUsername() + ":" + esConfigDTO.getPassword(); - byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.UTF_8)); - httpClientConfig.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + new String(encodedAuth)); + if(StringUtils.isNotEmpty(esConfigDTO.getUsername()) && StringUtils.isNotEmpty(esConfigDTO.getPassword())){ + String auth = esConfigDTO.getUsername() + ":" + esConfigDTO.getPassword(); + byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.UTF_8)); + httpClientConfig.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + new String(encodedAuth)); + } Requst requst = new Requst(); requst.setQuery(sql); @@ -218,4 +242,17 @@ public class EsProvider extends DatasourceProvider { return response; } + private String exexGetQuery(DatasourceRequest datasourceRequest){ + EsConfigDTO esConfigDTO = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), EsConfigDTO.class); + HttpClientConfig httpClientConfig = new HttpClientConfig(); + if(StringUtils.isNotEmpty(esConfigDTO.getUsername()) && StringUtils.isNotEmpty(esConfigDTO.getPassword())){ + String auth = esConfigDTO.getUsername() + ":" + esConfigDTO.getPassword(); + byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.UTF_8)); + httpClientConfig.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + new String(encodedAuth)); + } + + String response = HttpClientUtil.get(esConfigDTO.getUrl(), httpClientConfig); + return response; + } + } diff --git a/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java b/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java index 8372d7b73a..9ccda9d154 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java @@ -7,6 +7,7 @@ import io.dataease.datasource.dto.*; import io.dataease.datasource.request.DatasourceRequest; import io.dataease.exception.DataEaseException; import io.dataease.i18n.Translator; +import io.dataease.provider.QueryProvider; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.beans.PropertyVetoException; @@ -127,7 +128,7 @@ public class JdbcProvider extends DatasourceProvider { connection = getConnectionFromPool(datasourceRequest); Statement stat = connection.createStatement(); rs = stat.executeQuery(datasourceRequest.getQuery()); - return fetchResultField(rs); + return fetchResultField(rs, datasourceRequest); } catch (SQLException e) { DataEaseException.throwException(e); } catch (Exception e) { @@ -152,7 +153,7 @@ public class JdbcProvider extends DatasourceProvider { Statement stat = connection.createStatement(); rs = stat.executeQuery(datasourceRequest.getQuery()); dataList = fetchResult(rs); - fieldList = fetchResultField(rs); + fieldList = fetchResultField(rs, datasourceRequest); result.put("dataList", dataList); result.put("fieldList", fieldList); return result; @@ -168,10 +169,11 @@ public class JdbcProvider extends DatasourceProvider { return new HashMap<>(); } - private List fetchResultField(ResultSet rs) throws Exception { + private List fetchResultField(ResultSet rs, DatasourceRequest datasourceRequest) throws Exception { List fieldList = new ArrayList<>(); ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); + QueryProvider qp = ProviderFactory.getQueryProvider(datasourceRequest.getDatasource().getType()); for (int j = 0; j < columnCount; j++) { String f = metaData.getColumnName(j + 1); String l = StringUtils.isNotEmpty(metaData.getColumnLabel(j + 1)) ? metaData.getColumnLabel(j + 1) : f; @@ -180,7 +182,12 @@ public class JdbcProvider extends DatasourceProvider { field.setFieldName(l); field.setRemarks(l); field.setFieldType(t); - field.setFieldSize(metaData.getColumnDisplaySize(j + 1)); + + if(datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.ck.name())){ + field.setFieldSize(qp.transFieldSize(t)); + }else { + field.setFieldSize(metaData.getColumnDisplaySize(j + 1)); + } if(t.equalsIgnoreCase("LONG")){field.setFieldSize(65533);} //oracle LONG if(StringUtils.isNotEmpty(t) && t.toLowerCase().contains("date") && field.getFieldSize() < 50 ){ field.setFieldSize(50); @@ -251,19 +258,19 @@ public class JdbcProvider extends DatasourceProvider { while (resultSet.next()) { String tableName = resultSet.getString("TABLE_NAME"); String database = null; - if(datasourceRequest.getDatasource().getType().equalsIgnoreCase("ch")){ + if(datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.ck.name())){ database = resultSet.getString("TABLE_SCHEM"); }else { database = resultSet.getString("TABLE_CAT"); } if(database != null){ if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDatabase(datasourceRequest))) { - TableFiled tableFiled = getTableFiled(resultSet); + TableFiled tableFiled = getTableFiled(resultSet, datasourceRequest); list.add(tableFiled); } }else { if (tableName.equals(datasourceRequest.getTable())) { - TableFiled tableFiled = getTableFiled(resultSet); + TableFiled tableFiled = getTableFiled(resultSet, datasourceRequest); list.add(tableFiled); } } @@ -281,7 +288,7 @@ public class JdbcProvider extends DatasourceProvider { return list; } - private TableFiled getTableFiled(ResultSet resultSet) throws SQLException { + private TableFiled getTableFiled(ResultSet resultSet, DatasourceRequest datasourceRequest) throws SQLException { TableFiled tableFiled = new TableFiled(); String colName = resultSet.getString("COLUMN_NAME"); tableFiled.setFieldName(colName); @@ -290,13 +297,19 @@ public class JdbcProvider extends DatasourceProvider { remarks = colName; } tableFiled.setRemarks(remarks); - tableFiled.setFieldSize(Integer.valueOf(resultSet.getString("COLUMN_SIZE"))); String dbType = resultSet.getString("TYPE_NAME").toUpperCase(); tableFiled.setFieldType(dbType); if(dbType.equalsIgnoreCase("LONG")){tableFiled.setFieldSize(65533);} if(StringUtils.isNotEmpty(dbType) && dbType.toLowerCase().contains("date") && tableFiled.getFieldSize() < 50 ){ tableFiled.setFieldSize(50); } + + if(datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.ck.name())){ + QueryProvider qp = ProviderFactory.getQueryProvider(datasourceRequest.getDatasource().getType()); + tableFiled.setFieldSize(qp.transFieldSize(dbType)); + }else { + tableFiled.setFieldSize(Integer.valueOf(resultSet.getString("COLUMN_SIZE"))); + } return tableFiled; } @@ -442,7 +455,7 @@ public class JdbcProvider extends DatasourceProvider { driver = pgConfigration.getDriver(); jdbcurl = pgConfigration.getJdbc(); break; - case ch: + case ck: CHConfigration chConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), CHConfigration.class); username = chConfigration.getUsername(); password = chConfigration.getPassword(); @@ -506,7 +519,7 @@ public class JdbcProvider extends DatasourceProvider { dataSource.setJdbcUrl(pgConfigration.getJdbc()); jdbcDTO = pgConfigration; break; - case ch: + case ck: CHConfigration chConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), CHConfigration.class); dataSource.setUser(chConfigration.getUsername()); dataSource.setDriverClass(chConfigration.getDriver()); @@ -568,7 +581,7 @@ public class JdbcProvider extends DatasourceProvider { throw new Exception(Translator.get("i18n_schema_is_empty")); } return "SELECT tablename FROM pg_tables WHERE tablename NOT LIKE 'pg%' AND tablename NOT LIKE 'sql_%' AND schemaname='SCHEMA' ;".replace("SCHEMA", pgConfigration.getSchema()); - case ch: + case ck: CHConfigration chConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), CHConfigration.class); return "SELECT name FROM system.tables where database='DATABASE';".replace("DATABASE", chConfigration.getDataBase()); default: diff --git a/backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java b/backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java index c64a44a150..b05acd9d44 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java +++ b/backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java @@ -52,8 +52,8 @@ public class ProviderFactory implements ApplicationContextAware { return context.getBean("oracleQuery", QueryProvider.class); case es: return context.getBean("esQuery", QueryProvider.class); - case ch: - return context.getBean("chQuery", QueryProvider.class); + case ck: + return context.getBean("ckQuery", QueryProvider.class); default: return context.getBean("mysqlQuery", QueryProvider.class); } diff --git a/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java b/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java index 0687144638..ab02e97586 100644 --- a/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java +++ b/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java @@ -65,9 +65,10 @@ public class DatasourceService { datasource.setUpdateTime(currentTimeMillis); datasource.setCreateTime(currentTimeMillis); datasource.setCreateBy(String.valueOf(AuthUtils.getUser().getUsername())); + checkAndUpdateDatasourceStatus(datasource); datasourceMapper.insertSelective(datasource); handleConnectionPool(datasource, "add"); - checkAndUpdateDatasourceStatus(datasource); + return datasource; } @@ -129,9 +130,9 @@ public class DatasourceService { checkName(datasource); datasource.setCreateTime(null); datasource.setUpdateTime(System.currentTimeMillis()); + checkAndUpdateDatasourceStatus(datasource); datasourceMapper.updateByPrimaryKeySelective(datasource); handleConnectionPool(datasource, "edit"); - checkAndUpdateDatasourceStatus(datasource); } public ResultHolder validate(Datasource datasource) throws Exception { @@ -256,10 +257,8 @@ public class DatasourceService { datasourceRequest.setDatasource(datasource); datasourceProvider.checkStatus(datasourceRequest); datasource.setStatus("Success"); - datasourceMapper.updateByPrimaryKeySelective(datasource); } catch (Exception e) { datasource.setStatus("Error"); - datasourceMapper.updateByPrimaryKeySelective(datasource); } } diff --git a/backend/src/main/java/io/dataease/provider/QueryProvider.java b/backend/src/main/java/io/dataease/provider/QueryProvider.java index 1ed0c90774..6894222ce6 100644 --- a/backend/src/main/java/io/dataease/provider/QueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/QueryProvider.java @@ -54,6 +54,9 @@ public abstract class QueryProvider { public abstract String getSQLSummary(String table, List yAxis, List customFilter, List extFilterRequestList); + public Integer transFieldSize(String type){ + return 50; + }; /** * 单指标汇总 * diff --git a/backend/src/main/java/io/dataease/provider/ch/CHConstants.java b/backend/src/main/java/io/dataease/provider/ck/CKConstants.java similarity index 76% rename from backend/src/main/java/io/dataease/provider/ch/CHConstants.java rename to backend/src/main/java/io/dataease/provider/ck/CKConstants.java index 66afa7c2b5..362477e27c 100644 --- a/backend/src/main/java/io/dataease/provider/ch/CHConstants.java +++ b/backend/src/main/java/io/dataease/provider/ck/CKConstants.java @@ -1,17 +1,17 @@ -package io.dataease.provider.ch; +package io.dataease.provider.ck; import io.dataease.provider.SQLConstants; -import static io.dataease.datasource.constants.DatasourceTypes.ch; +import static io.dataease.datasource.constants.DatasourceTypes.ck; /** * @Author gin * @Date 2021/7/8 7:22 下午 */ -public class CHConstants extends SQLConstants { - public static final String KEYWORD_TABLE = ch.getKeywordPrefix() + "%s" + ch.getKeywordSuffix(); +public class CKConstants extends SQLConstants { + public static final String KEYWORD_TABLE = ck.getKeywordPrefix() + "%s" + ck.getKeywordSuffix(); - public static final String KEYWORD_FIX = "%s." + ch.getKeywordPrefix() + "%s" + ch.getKeywordSuffix(); + public static final String KEYWORD_FIX = "%s." + ck.getKeywordPrefix() + "%s" + ck.getKeywordSuffix(); public static final String toInt32 = "toInt32(%s)"; diff --git a/backend/src/main/java/io/dataease/provider/ch/CHQueryProvider.java b/backend/src/main/java/io/dataease/provider/ck/CKQueryProvider.java similarity index 90% rename from backend/src/main/java/io/dataease/provider/ch/CHQueryProvider.java rename to backend/src/main/java/io/dataease/provider/ck/CKQueryProvider.java index fd34f5ebc6..64d2e7e3b6 100644 --- a/backend/src/main/java/io/dataease/provider/ch/CHQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/ck/CKQueryProvider.java @@ -1,4 +1,4 @@ -package io.dataease.provider.ch; +package io.dataease.provider.ck; import io.dataease.base.domain.DatasetTableField; import io.dataease.base.domain.DatasetTableFieldExample; @@ -32,8 +32,8 @@ import static io.dataease.provider.SQLConstants.TABLE_ALIAS_PREFIX; * @Author gin * @Date 2021/5/17 2:43 下午 */ -@Service("chQuery") -public class CHQueryProvider extends QueryProvider { +@Service("ckQuery") +public class CKQueryProvider extends QueryProvider { @Resource private DatasetTableFieldMapper datasetTableFieldMapper; @@ -80,6 +80,25 @@ public class CHQueryProvider extends QueryProvider { } } + @Override + public Integer transFieldSize(String field){ + Integer type = transFieldType(field); + switch (type) { + case 0: + return 65533; + case 1: + return 60; + case 2: + return 0; + case 3: + return 0; + case 4: + return 0; + default: + return 65533; + } + } + @Override public String createSQLPreview(String sql, String orderBy) { return "SELECT * FROM (" + sqlFix(sql) + ") AS tmp ORDER BY null " + " LIMIT 0,1000"; @@ -88,7 +107,7 @@ public class CHQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds) { SQLObj tableObj = SQLObj.builder() - .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CHConstants.KEYWORD_TABLE, table)) + .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CKConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); @@ -100,9 +119,9 @@ public class CHQueryProvider extends QueryProvider { // 解析origin name中有关联的字段生成sql表达式 originField = calcFieldRegex(f.getOriginName(), tableObj); } else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName()); } else { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName()); } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); String fieldName = ""; @@ -110,29 +129,29 @@ public class CHQueryProvider extends QueryProvider { if (f.getDeExtractType() == DeTypeConstants.DE_TIME) { if (f.getDeType() == DeTypeConstants.DE_INT || f.getDeType() == DeTypeConstants.DE_FLOAT) { if(f.getType().equalsIgnoreCase("DATE")){ - fieldName = String.format(CHConstants.toInt32, String.format(CHConstants.toDateTime, originField)) + "*1000"; + fieldName = String.format(CKConstants.toInt32, String.format(CKConstants.toDateTime, originField)) + "*1000"; }else { - fieldName = String.format(CHConstants.toInt32, originField) + "*1000"; + fieldName = String.format(CKConstants.toInt32, originField) + "*1000"; } } else { fieldName = originField; } } else if (f.getDeExtractType() == DeTypeConstants.DE_STRING) { if (f.getDeType() == DeTypeConstants.DE_INT) { - fieldName = String.format(CHConstants.toInt64, originField); + fieldName = String.format(CKConstants.toInt64, originField); } else if (f.getDeType() == DeTypeConstants.DE_FLOAT) { - fieldName = String.format(CHConstants.toFloat64, originField); + fieldName = String.format(CKConstants.toFloat64, originField); } else if (f.getDeType() == DeTypeConstants.DE_TIME) { - fieldName = String.format(CHConstants.toDateTime, originField); + fieldName = String.format(CKConstants.toDateTime, originField); } else { fieldName = originField; } } else { if (f.getDeType() == DeTypeConstants.DE_TIME) { - String cast = String.format(CHConstants.toFloat64, originField); - fieldName = String.format(CHConstants.toDateTime, cast); + String cast = String.format(CKConstants.toFloat64, originField); + fieldName = String.format(CKConstants.toDateTime, cast); } else if (f.getDeType() == DeTypeConstants.DE_INT) { - fieldName = String.format(CHConstants.toInt64, originField); + fieldName = String.format(CKConstants.toInt64, originField); } else { fieldName = originField; } @@ -180,7 +199,7 @@ public class CHQueryProvider extends QueryProvider { @Override public String getSQL(String table, List xAxis, List yAxis, List customFilter, List extFilterRequestList, Datasource ds) { SQLObj tableObj = SQLObj.builder() - .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CHConstants.KEYWORD_TABLE, table)) + .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CKConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); @@ -194,9 +213,9 @@ public class CHQueryProvider extends QueryProvider { // 解析origin name中有关联的字段生成sql表达式 originField = calcFieldRegex(x.getOriginName(), tableObj); } else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); } else { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); // 处理横轴字段 @@ -224,9 +243,9 @@ public class CHQueryProvider extends QueryProvider { // 解析origin name中有关联的字段生成sql表达式 originField = calcFieldRegex(y.getOriginName(), tableObj); } else if (ObjectUtils.isNotEmpty(y.getExtField()) && y.getExtField() == 1) { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); } else { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_Y_PREFIX, i); // 处理纵轴字段 @@ -274,7 +293,7 @@ public class CHQueryProvider extends QueryProvider { ST st = stg.getInstanceOf("querySql"); SQLObj tableSQL = SQLObj.builder() - .tableName(String.format(CHConstants.BRACKETS, sql)) + .tableName(String.format(CKConstants.BRACKETS, sql)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 1)) .build(); if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres); @@ -286,7 +305,7 @@ public class CHQueryProvider extends QueryProvider { @Override public String getSQLTableInfo(String table, List xAxis, List customFilter, List extFilterRequestList, Datasource ds) { SQLObj tableObj = SQLObj.builder() - .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CHConstants.KEYWORD_TABLE, table)) + .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CKConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); @@ -300,9 +319,9 @@ public class CHQueryProvider extends QueryProvider { // 解析origin name中有关联的字段生成sql表达式 originField = calcFieldRegex(x.getOriginName(), tableObj); } else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); } else { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); // 处理横轴字段 @@ -347,7 +366,7 @@ public class CHQueryProvider extends QueryProvider { ST st = stg.getInstanceOf("previewSql"); st.add("isGroup", false); SQLObj tableSQL = SQLObj.builder() - .tableName(String.format(CHConstants.BRACKETS, sql)) + .tableName(String.format(CKConstants.BRACKETS, sql)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 1)) .build(); if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders); @@ -369,7 +388,7 @@ public class CHQueryProvider extends QueryProvider { @Override public String getSQLStack(String table, List xAxis, List yAxis, List customFilter, List extFilterRequestList, List extStack, Datasource ds) { SQLObj tableObj = SQLObj.builder() - .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CHConstants.KEYWORD_TABLE, table)) + .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CKConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); @@ -386,9 +405,9 @@ public class CHQueryProvider extends QueryProvider { // 解析origin name中有关联的字段生成sql表达式 originField = calcFieldRegex(x.getOriginName(), tableObj); } else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); } else { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); // 处理横轴字段 @@ -416,9 +435,9 @@ public class CHQueryProvider extends QueryProvider { // 解析origin name中有关联的字段生成sql表达式 originField = calcFieldRegex(y.getOriginName(), tableObj); } else if (ObjectUtils.isNotEmpty(y.getExtField()) && y.getExtField() == 1) { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); } else { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_Y_PREFIX, i); // 处理纵轴字段 @@ -466,7 +485,7 @@ public class CHQueryProvider extends QueryProvider { ST st = stg.getInstanceOf("querySql"); SQLObj tableSQL = SQLObj.builder() - .tableName(String.format(CHConstants.BRACKETS, sql)) + .tableName(String.format(CKConstants.BRACKETS, sql)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 1)) .build(); if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres); @@ -483,7 +502,7 @@ public class CHQueryProvider extends QueryProvider { @Override public String getSQLScatter(String table, List xAxis, List yAxis, List customFilter, List extFilterRequestList, List extBubble, Datasource ds) { SQLObj tableObj = SQLObj.builder() - .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CHConstants.KEYWORD_TABLE, table)) + .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CKConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); @@ -497,9 +516,9 @@ public class CHQueryProvider extends QueryProvider { // 解析origin name中有关联的字段生成sql表达式 originField = calcFieldRegex(x.getOriginName(), tableObj); } else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); } else { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); // 处理横轴字段 @@ -530,9 +549,9 @@ public class CHQueryProvider extends QueryProvider { // 解析origin name中有关联的字段生成sql表达式 originField = calcFieldRegex(y.getOriginName(), tableObj); } else if (ObjectUtils.isNotEmpty(y.getExtField()) && y.getExtField() == 1) { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); } else { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_Y_PREFIX, i); // 处理纵轴字段 @@ -580,7 +599,7 @@ public class CHQueryProvider extends QueryProvider { ST st = stg.getInstanceOf("querySql"); SQLObj tableSQL = SQLObj.builder() - .tableName(String.format(CHConstants.BRACKETS, sql)) + .tableName(String.format(CKConstants.BRACKETS, sql)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 1)) .build(); if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres); @@ -603,7 +622,7 @@ public class CHQueryProvider extends QueryProvider { public String getSQLSummary(String table, List yAxis, List customFilter, List extFilterRequestList) { // 字段汇总 排序等 SQLObj tableObj = SQLObj.builder() - .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CHConstants.KEYWORD_TABLE, table)) + .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CKConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List yFields = new ArrayList<>(); @@ -617,9 +636,9 @@ public class CHQueryProvider extends QueryProvider { // 解析origin name中有关联的字段生成sql表达式 originField = calcFieldRegex(y.getOriginName(), tableObj); } else if (ObjectUtils.isNotEmpty(y.getExtField()) && y.getExtField() == 1) { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); } else { - originField = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); + originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName()); } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_Y_PREFIX, i); // 处理纵轴字段 @@ -662,7 +681,7 @@ public class CHQueryProvider extends QueryProvider { ST st = stg.getInstanceOf("querySql"); SQLObj tableSQL = SQLObj.builder() - .tableName(String.format(CHConstants.BRACKETS, sql)) + .tableName(String.format(CKConstants.BRACKETS, sql)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 1)) .build(); if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres); @@ -757,17 +776,17 @@ public class CHQueryProvider extends QueryProvider { // 解析origin name中有关联的字段生成sql表达式 originName = calcFieldRegex(field.getOriginName(), tableObj); } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { - originName = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + originName = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); } else { - originName = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + originName = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); } if (field.getDeType() == DeTypeConstants.DE_TIME) { if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { - whereName = String.format(CHConstants.toDateTime, originName); + whereName = String.format(CKConstants.toDateTime, originName); } if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == DeTypeConstants.DE_FLOAT || field.getDeExtractType() == 4) { - String cast = String.format(CHConstants.toFloat64, originName); - whereName = String.format(CHConstants.toDateTime, cast); + String cast = String.format(CKConstants.toFloat64, originName); + whereName = String.format(CKConstants.toDateTime, cast); } if (field.getDeExtractType() == 1) { whereName = originName; @@ -776,7 +795,7 @@ public class CHQueryProvider extends QueryProvider { whereName = originName; } if (StringUtils.equalsIgnoreCase(request.getTerm(), "null")) { - whereValue = CHConstants.WHERE_VALUE_NULL; + whereValue = CKConstants.WHERE_VALUE_NULL; } else if (StringUtils.equalsIgnoreCase(request.getTerm(), "not_null")) { whereTerm = String.format(whereTerm, originName); } else if (StringUtils.containsIgnoreCase(request.getTerm(), "in")) { @@ -784,7 +803,7 @@ public class CHQueryProvider extends QueryProvider { } else if (StringUtils.containsIgnoreCase(request.getTerm(), "like")) { whereValue = "'%" + value + "%'"; } else { - whereValue = String.format(CHConstants.WHERE_VALUE_VALUE, value); + whereValue = String.format(CKConstants.WHERE_VALUE_VALUE, value); } list.add(SQLObj.builder() .whereField(whereName) @@ -814,18 +833,18 @@ public class CHQueryProvider extends QueryProvider { // 解析origin name中有关联的字段生成sql表达式 originName = calcFieldRegex(field.getOriginName(), tableObj); } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { - originName = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + originName = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); } else { - originName = String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + originName = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); } if (field.getDeType() == DeTypeConstants.DE_TIME) { if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { - whereName = String.format(CHConstants.toDateTime, originName); + whereName = String.format(CKConstants.toDateTime, originName); } if (field.getDeExtractType() == DeTypeConstants.DE_FLOAT || field.getDeExtractType() == DeTypeConstants.DE_FLOAT || field.getDeExtractType() == 4) { - String cast = String.format(CHConstants.toFloat64, originName); - whereName = String.format(CHConstants.toDateTime, cast); + String cast = String.format(CKConstants.toFloat64, originName); + whereName = String.format(CKConstants.toDateTime, cast); } if (field.getDeExtractType() == 1) { whereName = originName; @@ -844,12 +863,12 @@ public class CHQueryProvider extends QueryProvider { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String startTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(0)))); String endTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(1)))); - whereValue = String.format(CHConstants.WHERE_BETWEEN, startTime, endTime); + whereValue = String.format(CKConstants.WHERE_BETWEEN, startTime, endTime); } else { - whereValue = String.format(CHConstants.WHERE_BETWEEN, value.get(0), value.get(1)); + whereValue = String.format(CKConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - whereValue = String.format(CHConstants.WHERE_VALUE_VALUE, value.get(0)); + whereValue = String.format(CKConstants.WHERE_VALUE_VALUE, value.get(0)); } list.add(SQLObj.builder() .whereField(whereName) @@ -897,13 +916,13 @@ public class CHQueryProvider extends QueryProvider { if (x.getDeExtractType() == DeTypeConstants.DE_TIME) { if (x.getDeType() == DeTypeConstants.DE_INT || x.getDeType() == DeTypeConstants.DE_FLOAT) { if(x.getType().equalsIgnoreCase("DATE")){ - fieldName = String.format(CHConstants.toInt32, String.format(CHConstants.toDateTime, originField)) + "*1000"; + fieldName = String.format(CKConstants.toInt32, String.format(CKConstants.toDateTime, originField)) + "*1000"; }else { - fieldName = String.format(CHConstants.toInt32, originField) + "*1000"; + fieldName = String.format(CKConstants.toInt32, originField) + "*1000"; } } else if (x.getDeType() == DeTypeConstants.DE_TIME) { String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); - fieldName = String.format(CHConstants.formatDateTime, originField, format); + fieldName = String.format(CKConstants.formatDateTime, originField, format); } else { fieldName = originField; } @@ -911,9 +930,9 @@ public class CHQueryProvider extends QueryProvider { if (x.getDeType() == DeTypeConstants.DE_TIME) { String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); if (x.getDeExtractType() == DeTypeConstants.DE_STRING) { - fieldName = String.format(CHConstants.formatDateTime, String.format(CHConstants.toDateTime, originField), format); + fieldName = String.format(CKConstants.formatDateTime, String.format(CKConstants.toDateTime, originField), format); } else { - fieldName = String.format(CHConstants.formatDateTime, String.format(CHConstants.toDateTime, String.format(CHConstants.toFloat64, originField)), format); + fieldName = String.format(CKConstants.formatDateTime, String.format(CKConstants.toDateTime, String.format(CKConstants.toFloat64, originField)), format); } } else { fieldName = originField; @@ -929,17 +948,17 @@ public class CHQueryProvider extends QueryProvider { private SQLObj getYFields(ChartViewFieldDTO y, String originField, String fieldAlias) { String fieldName = ""; if (StringUtils.equalsIgnoreCase(y.getOriginName(), "*")) { - fieldName = CHConstants.AGG_COUNT; + fieldName = CKConstants.AGG_COUNT; } else if (SQLConstants.DIMENSION_TYPE.contains(y.getDeType())) { - fieldName = String.format(CHConstants.AGG_FIELD, y.getSummary(), originField); + fieldName = String.format(CKConstants.AGG_FIELD, y.getSummary(), originField); } else { if (StringUtils.equalsIgnoreCase(y.getSummary(), "avg") || StringUtils.containsIgnoreCase(y.getSummary(), "pop")) { - String cast = y.getDeType() == 2? String.format(CHConstants.toInt64, originField) : String.format(CHConstants.toFloat64, originField); - String agg = String.format(CHConstants.AGG_FIELD, y.getSummary(), cast); - fieldName = String.format(CHConstants.toDecimal, agg); + String cast = y.getDeType() == 2? String.format(CKConstants.toInt64, originField) : String.format(CKConstants.toFloat64, originField); + String agg = String.format(CKConstants.AGG_FIELD, y.getSummary(), cast); + fieldName = String.format(CKConstants.toDecimal, agg); } else { - String cast = y.getDeType() == 2 ? String.format(CHConstants.toInt64, originField) : String.format(CHConstants.toFloat64, originField); - fieldName = String.format(CHConstants.AGG_FIELD, y.getSummary(), cast); + String cast = y.getDeType() == 2 ? String.format(CKConstants.toInt64, originField) : String.format(CKConstants.toFloat64, originField); + fieldName = String.format(CKConstants.AGG_FIELD, y.getSummary(), cast); } } return SQLObj.builder() @@ -956,7 +975,7 @@ public class CHQueryProvider extends QueryProvider { String whereValue = ""; // 原始类型不是时间,在de中被转成时间的字段做处理 if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { - whereValue = CHConstants.WHERE_VALUE_NULL; + whereValue = CKConstants.WHERE_VALUE_NULL; } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { whereTerm = String.format(whereTerm, originField); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { @@ -964,7 +983,7 @@ public class CHQueryProvider extends QueryProvider { } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { whereValue = "'%" + f.getValue() + "%'"; } else { - whereValue = String.format(CHConstants.WHERE_VALUE_VALUE, f.getValue()); + whereValue = String.format(CKConstants.WHERE_VALUE_VALUE, f.getValue()); } list.add(SQLObj.builder() .whereField(fieldAlias) @@ -995,7 +1014,7 @@ public class CHQueryProvider extends QueryProvider { List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample); for (DatasetTableField ele : calcFields) { originField = originField.replaceAll("\\[" + ele.getId() + "]", - String.format(CHConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName())); + String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName())); } return originField; } 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 ce1fab51d7..62ab5a1707 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -469,6 +469,7 @@ public class DataSetTableService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); map.put("sql", datasourceRequest.getQuery()); + System.out.println(datasourceRequest.getQuery()); datasourceRequest.setPage(page); datasourceRequest.setFetchSize(Integer.parseInt(dataSetTableRequest.getRow())); datasourceRequest.setPageSize(pageSize); @@ -503,8 +504,12 @@ public class DataSetTableService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); map.put("sql", datasourceRequest.getQuery()); + System.out.println(datasourceRequest.getQuery()); try { data.addAll(jdbcProvider.getData(datasourceRequest)); + for(int i=0;i< data.size(); i++){ + System.out.println(data.get(i)[2]); + } } catch (Exception e) { e.printStackTrace(); DEException.throwException(e.getMessage()); @@ -558,8 +563,12 @@ public class DataSetTableService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); map.put("sql", datasourceRequest.getQuery()); + System.out.println(datasourceRequest.getQuery()); try { data.addAll(jdbcProvider.getData(datasourceRequest)); + for(int i=0;i< data.size(); i++){ + System.out.println(data.get(i)[2]); + } } catch (Exception e) { e.printStackTrace(); DEException.throwException(e.getMessage()); @@ -585,8 +594,12 @@ public class DataSetTableService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); map.put("sql", datasourceRequest.getQuery()); + System.out.println(datasourceRequest.getQuery()); try { data.addAll(jdbcProvider.getData(datasourceRequest)); + for(int i=0;i< data.size(); i++){ + System.out.println(data.get(i)[2]); + } } catch (Exception e) { e.printStackTrace(); DEException.throwException(e.getMessage()); diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index 30fb81e8ef..ce724617eb 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -31,6 +31,9 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.pentaho.di.cluster.SlaveServer; import org.pentaho.di.core.database.DatabaseMeta; +import org.pentaho.di.core.plugins.DatabasePluginType; +import org.pentaho.di.core.plugins.PluginInterface; +import org.pentaho.di.core.plugins.PluginRegistry; import org.pentaho.di.core.row.ValueMetaInterface; import org.pentaho.di.core.util.HttpClientManager; import org.pentaho.di.job.Job; @@ -312,6 +315,7 @@ public class ExtractDataService { msg = true; lastExecStatus = JobStatus.Completed; } catch (Exception e) { + e.printStackTrace(); saveErrorLog(datasetTableId, taskId, e); msg = false; lastExecStatus = JobStatus.Error; @@ -456,7 +460,7 @@ public class ExtractDataService { for (DatasetTableField datasetTableField : datasetTableFields) { Column_Fields = Column_Fields + datasetTableField.getDataeaseName() + "` "; Integer size = datasetTableField.getSize() * 3; - if (datasetTableField.getSize() > 65533 || datasetTableField.getSize() * 3 > 65533) { + if (datasetTableField.getSize() == 0 || datasetTableField.getSize() > 65533 || datasetTableField.getSize() * 3 > 65533) { size = 65533; } switch (datasetTableField.getDeExtractType()) { @@ -468,7 +472,7 @@ public class ExtractDataService { Column_Fields = Column_Fields + "varchar(lenth)".replace("lenth", String.valueOf(size)) + ",`"; break; case 2: - Column_Fields = Column_Fields + "bigint(lenth)".replace("lenth", String.valueOf(size)) + ",`"; + Column_Fields = Column_Fields + "bigint" + ",`"; break; case 3: Column_Fields = Column_Fields + "DOUBLE" + ",`"; @@ -616,7 +620,8 @@ public class ExtractDataService { Thread.sleep(1000); } if (!transStatus.getStatusDescription().equals("Finished")) { - DataEaseException.throwException((transStatus.getLoggingString())); + DataEaseException.throwException(transStatus.getLoggingString()); + return; } executing = true; @@ -637,11 +642,6 @@ public class ExtractDataService { } } - private boolean isExitFile(String fileName) { - File file = new File(root_path + fileName); - return file.exists(); - } - private SlaveServer getSlaveServer() { SlaveServer remoteSlaveServer = new SlaveServer(); remoteSlaveServer.setHostname(carte);// 设置远程IP @@ -805,6 +805,16 @@ public class ExtractDataService { inputStep = inputStep(transMeta, selectSQL); udjcStep = udjc(datasetTableFields, DatasourceTypes.oracle); break; + case ck: + CHConfigration chConfigration = new Gson().fromJson(datasource.getConfiguration(), CHConfigration.class); + dataMeta = new DatabaseMeta("db", "ORACLE", "Native", chConfigration.getHost().trim(), chConfigration.getDataBase().trim(), chConfigration.getPort().toString(), chConfigration.getUsername(), chConfigration.getPassword()); +// dataMeta.addExtraOption("MYSQL", "characterEncoding", "UTF-8"); + dataMeta.setDatabaseType("Clickhouse"); + transMeta.addDatabase(dataMeta); + selectSQL = getSelectSQL(extractType, datasetTable, datasource, datasetTableFields, selectSQL); + inputStep = inputStep(transMeta, selectSQL); + udjcStep = udjc(datasetTableFields, DatasourceTypes.ck); + break; case excel: inputStep = excelInputStep(datasetTable.getInfo(), datasetTableFields); udjcStep = udjc(datasetTableFields, DatasourceTypes.excel); diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index 4d2c2bc99d..443db6a5d3 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -286,3 +286,4 @@ i18n_Stopped=END i18n_Exec=Running i18n_no_trigger=The current setting does not trigger task generation. i18n_dataset_field_delete=Union field deleted,please set again and redo. +i18n_es_limit=Elasticsearch version cannot be less than 6.3 \ No newline at end of file diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties index 2f6583122b..7d9b47b654 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -285,4 +285,4 @@ i18n_Stopped=执行结束 i18n_Exec=运行中 i18n_no_trigger=当前设置没有触发任务生成 i18n_dataset_field_delete=该自定义数据集有关联字段被删除,请重新确认关联关系并重做该数据集 - +i18n_es_limit=Elasticsearch 版本不能小于6.3 diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index 2449312ff4..cf99c59593 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -288,3 +288,4 @@ i18n_Stopped=執行結束 i18n_Exec=運行中 i18n_no_trigger=当前设置没有触发任务生成 當前設置沒有觸發任務生成. i18n_dataset_field_delete=該自定義數據集有關聯字段被刪除,請重新確認關聯關系並重做該數據集 +i18n_es_limit=Elasticsearch 版本不能小於6.3 \ No newline at end of file diff --git a/frontend/src/views/dataset/add/AddDB.vue b/frontend/src/views/dataset/add/AddDB.vue index 8ec4f651c0..39bcafa005 100644 --- a/frontend/src/views/dataset/add/AddDB.vue +++ b/frontend/src/views/dataset/add/AddDB.vue @@ -28,8 +28,8 @@ - - + + diff --git a/frontend/src/views/dataset/add/AddSQL.vue b/frontend/src/views/dataset/add/AddSQL.vue index dea8838916..4174ce8a45 100644 --- a/frontend/src/views/dataset/add/AddSQL.vue +++ b/frontend/src/views/dataset/add/AddSQL.vue @@ -32,8 +32,8 @@ - - + + diff --git a/frontend/src/views/system/datasource/form.vue b/frontend/src/views/system/datasource/form.vue index a135f68ed5..115bdb367e 100644 --- a/frontend/src/views/system/datasource/form.vue +++ b/frontend/src/views/system/datasource/form.vue @@ -24,17 +24,6 @@ - - - - - - @@ -50,10 +39,10 @@ {{ $t('datasource.oracle_service_name') }} - + - + @@ -164,14 +153,9 @@ export default { { name: 'sqlServer', label: 'SQL Server', type: 'jdbc' }, { name: 'pg', label: 'PostgreSQL', type: 'jdbc' }, { name: 'es', label: 'Elasticsearch', type: 'es' }, - { name: 'ch', label: 'ClickHouse', type: 'jdbc' } + { name: 'ck', label: 'ClickHouse', type: 'jdbc' } ], schemas: [], - compute_mode: [ - {type: "DIRECT", label: this.$t('datasource.direct')}, - {type: "EXTRACT", label: this.$t('datasource.extract')}, - {type: "ALL", label: this.$t('datasource.all_compute_mode')} - ], canEdit: false, originConfiguration: {} } @@ -222,6 +206,14 @@ export default { this.$refs.dsForm.resetFields() }, save() { + if(this.form.type !== 'es' && !this.form.configuration.username){ + this.$message.error(this.$t('datasource.please_input_user_name')) + return + } + if(this.form.type !== 'es' && !this.form.configuration.username){ + this.$message.error(this.$t('datasource.please_input_password')) + return + } if (!this.form.configuration.schema && (this.form.type === 'oracle' || this.form.type === 'sqlServer')) { this.$message.error(this.$t('datasource.please_choose_schema')) return @@ -312,15 +304,6 @@ export default { this.form.configuration.dataSourceType = this.allTypes[i].type } } - if(this.form.type === 'es'){ - this.compute_mode = [{type: "DIRECT", label: this.$t('datasource.direct')}]; - }else { - this.compute_mode = [ - {type: "DIRECT", label: this.$t('datasource.direct')}, - {type: "EXTRACT", label: this.$t('datasource.extract')}, - {type: "ALL", label: this.$t('datasource.all_compute_mode')} - ]; - } }, backToList() { this.$emit('switch-component', { }) From 10c8acf2fb5b4dca4b3b401e40203156c7a38696 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Wed, 22 Sep 2021 18:47:33 +0800 Subject: [PATCH 10/30] =?UTF-8?q?feat:=20ck=20=E6=94=AF=E6=8C=81=E7=9B=B4?= =?UTF-8?q?=E8=BF=9E=E6=A8=A1=E5=BC=8F=EF=BC=9Bes=E6=94=AF=E6=8C=81=206.*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/resources/db/migration/V26__de1.3.sql | 3 --- 1 file changed, 3 deletions(-) diff --git a/backend/src/main/resources/db/migration/V26__de1.3.sql b/backend/src/main/resources/db/migration/V26__de1.3.sql index 88d0df6a8c..8e464687b7 100644 --- a/backend/src/main/resources/db/migration/V26__de1.3.sql +++ b/backend/src/main/resources/db/migration/V26__de1.3.sql @@ -29,9 +29,6 @@ ALTER TABLE `sys_user` ADD COLUMN `from` int(4) NOT NULL COMMENT '来源' AFTER INSERT INTO `sys_menu` VALUES (60, 1, 0, 1, '导入LDAP用户', 'system-user-import', 'system/user/imp-ldap', 11, NULL, 'user-ldap', b'0', b'0', b'1', 'user:import', NULL, NULL, NULL, NULL); -ALTER TABLE `datasource` ADD COLUMN `compute_type` VARCHAR(45) NULL DEFAULT 'ALL' COMMENT '数据计算模式' AFTER `status`; -update datasource set compute_type='ALL'; - BEGIN; INSERT INTO `system_parameter` VALUES ('ldap.url', NULL, 'text', 1); INSERT INTO `system_parameter` VALUES ('ldap.dn', NULL, 'text', 2); From 5f826603af257721ba83690f2f6696ce8b1bbc21 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 23 Sep 2021 09:56:46 +0800 Subject: [PATCH 11/30] =?UTF-8?q?refactor:=20=E5=8E=BB=E6=8E=89=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/java/io/dataease/config/CommonConfig.java | 3 --- .../java/io/dataease/service/dataset/ExtractDataService.java | 3 --- 2 files changed, 6 deletions(-) diff --git a/backend/src/main/java/io/dataease/config/CommonConfig.java b/backend/src/main/java/io/dataease/config/CommonConfig.java index d9043cb32f..3ba2f02ef0 100644 --- a/backend/src/main/java/io/dataease/config/CommonConfig.java +++ b/backend/src/main/java/io/dataease/config/CommonConfig.java @@ -4,10 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.fit2cloud.autoconfigure.QuartzAutoConfiguration; import io.dataease.base.domain.Datasource; import io.dataease.commons.utils.CommonThreadPool; -import io.dataease.kettle.databaseplugin.ClickhouseDatabaseMeta; import org.pentaho.di.core.KettleEnvironment; -import org.pentaho.di.core.plugins.DatabasePluginType; -import org.pentaho.di.core.plugins.PluginRegistry; import org.pentaho.di.repository.filerep.KettleFileRepository; import org.pentaho.di.repository.filerep.KettleFileRepositoryMeta; import org.springframework.boot.autoconfigure.AutoConfigureBefore; diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index ce724617eb..e7dc2cf95c 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -31,9 +31,6 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.pentaho.di.cluster.SlaveServer; import org.pentaho.di.core.database.DatabaseMeta; -import org.pentaho.di.core.plugins.DatabasePluginType; -import org.pentaho.di.core.plugins.PluginInterface; -import org.pentaho.di.core.plugins.PluginRegistry; import org.pentaho.di.core.row.ValueMetaInterface; import org.pentaho.di.core.util.HttpClientManager; import org.pentaho.di.job.Job; From 7dac4702c868a2a83bb14af205b4beb706ebc59d Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 23 Sep 2021 15:30:11 +0800 Subject: [PATCH 12/30] =?UTF-8?q?feat:=20=E4=BB=AA=E8=A1=A8=E6=9D=BFtabs?= =?UTF-8?q?=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/Editor/ComponentWrapper.vue | 1 + .../canvas/components/Editor/SettingMenu.vue | 4 + .../canvas/components/Editor/index.vue | 2 +- .../canvas/custom-component/component-list.js | 7 + .../src/components/widget/DeWidget/DeTabs.vue | 164 +++++++++++------- 5 files changed, 112 insertions(+), 66 deletions(-) diff --git a/frontend/src/components/canvas/components/Editor/ComponentWrapper.vue b/frontend/src/components/canvas/components/Editor/ComponentWrapper.vue index b789d127d8..0652e2b47a 100644 --- a/frontend/src/components/canvas/components/Editor/ComponentWrapper.vue +++ b/frontend/src/components/canvas/components/Editor/ComponentWrapper.vue @@ -24,6 +24,7 @@ :out-style="config.style" :style="getComponentStyleDefault(config.style)" :prop-value="config.propValue" + :is-edit="false" :element="config" :search-count="searchCount" /> diff --git a/frontend/src/components/canvas/components/Editor/SettingMenu.vue b/frontend/src/components/canvas/components/Editor/SettingMenu.vue index a7c2c2a277..6972fcbb89 100644 --- a/frontend/src/components/canvas/components/Editor/SettingMenu.vue +++ b/frontend/src/components/canvas/components/Editor/SettingMenu.vue @@ -12,6 +12,7 @@ {{ $t('panel.upComponent') }} {{ $t('panel.downComponent') }} {{ $t('panel.linkage_setting') }} + 新增Tab @@ -137,6 +138,9 @@ export default { getViewLinkageGather(requestInfo).then(rsp => { this.$store.commit('setLinkageInfo', rsp.data) }) + }, + addTab() { + bus.$emit('add-new-tab') } } } diff --git a/frontend/src/components/canvas/components/Editor/index.vue b/frontend/src/components/canvas/components/Editor/index.vue index 0065e5f052..54b1489995 100644 --- a/frontend/src/components/canvas/components/Editor/index.vue +++ b/frontend/src/components/canvas/components/Editor/index.vue @@ -630,7 +630,7 @@ export default { this.$refs.wrapperChild[index].openChartDetailsDialog() }, resizestop(index, item) { - if (item.type === 'view') { + if (item.type === 'view' || item.type === 'de-tabs') { this.$refs.wrapperChild[index].chartResize() } } diff --git a/frontend/src/components/canvas/custom-component/component-list.js b/frontend/src/components/canvas/custom-component/component-list.js index 4b7903ce00..f000f45bf3 100644 --- a/frontend/src/components/canvas/custom-component/component-list.js +++ b/frontend/src/components/canvas/custom-component/component-list.js @@ -162,6 +162,13 @@ const list = [ borderColor: '#000000', backgroundColor: '#ffffff', borderRadius: 0 + }, + options: { + tabList: [{ + title: 'Tab1', + name: '1', + content: null + }] } }, { diff --git a/frontend/src/components/widget/DeWidget/DeTabs.vue b/frontend/src/components/widget/DeWidget/DeTabs.vue index 8e20216a3c..399b9a89b4 100644 --- a/frontend/src/components/widget/DeWidget/DeTabs.vue +++ b/frontend/src/components/widget/DeWidget/DeTabs.vue @@ -1,37 +1,41 @@ From 2e1ec00ad4357846551db3425543f443b269e293 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 23 Sep 2021 18:57:10 +0800 Subject: [PATCH 20/30] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=87=8D?= =?UTF-8?q?=E5=A4=8Dldap=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/auth/server/AuthServer.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/io/dataease/auth/server/AuthServer.java b/backend/src/main/java/io/dataease/auth/server/AuthServer.java index 35bd3ac867..b94eca461e 100644 --- a/backend/src/main/java/io/dataease/auth/server/AuthServer.java +++ b/backend/src/main/java/io/dataease/auth/server/AuthServer.java @@ -70,12 +70,16 @@ public class AuthServer implements AuthApi { DataEaseException.throwException(validateResult.getMsg()); } XpackLdapUserEntity ldapUserEntity = validateResult.getData(); - LdapAddRequest ldapAddRequest = new LdapAddRequest(); - ldapAddRequest.setUsers(new ArrayList(){{add(ldapUserEntity);}}); - ldapAddRequest.setEnabled(1L); - ldapAddRequest.setDeptId(1L); - ldapAddRequest.setRoleIds(new ArrayList(){{add(2L);}}); - sysUserService.saveLdapUsers(ldapAddRequest); + SysUserEntity user = authUserService.getUserByName(username); + if(ObjectUtils.isEmpty(user) || ObjectUtils.isEmpty(user.getUserId())) { + LdapAddRequest ldapAddRequest = new LdapAddRequest(); + ldapAddRequest.setUsers(new ArrayList(){{add(ldapUserEntity);}}); + ldapAddRequest.setEnabled(1L); + ldapAddRequest.setDeptId(1L); + ldapAddRequest.setRoleIds(new ArrayList(){{add(2L);}}); + sysUserService.saveLdapUsers(ldapAddRequest); + } + username = validateResult.getData().getUserName(); } // 增加ldap登录方式 From fe0071665ee1393200be1a8f846e48d13facefb9 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Fri, 24 Sep 2021 15:30:09 +0800 Subject: [PATCH 21/30] =?UTF-8?q?fix:=20=E8=AF=86=E5=88=ABes=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/pom.xml | 51 +++++++++---------- .../dataease/provider/es/EsQueryProvider.java | 2 + 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/backend/pom.xml b/backend/pom.xml index 3f1c27dc83..56c47df966 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -94,11 +94,6 @@ mysql-connector-java runtime - - com.microsoft.sqlserver - mssql-jdbc - runtime - com.github.pagehelper pagehelper @@ -141,16 +136,6 @@ java-jwt ${jwt.version} - - com.microsoft.sqlserver - mssql-jdbc - 7.4.1.jre8 - - - org.postgresql - postgresql - 42.2.14 - org.apache.curator curator-framework @@ -209,6 +194,20 @@ ehcache 2.9.1 + + + + io.dataease + dataease-plugin-interface + 1.3 + + + cn.hutool + hutool-all + 5.7.4 + + pentaho-kettle kettle-core @@ -234,28 +233,26 @@ c3p0 0.9.1.2 - - - io.dataease - dataease-plugin-interface - 1.3 - com.oracle.database.jdbc ojdbc8 12.2.0.1 - - cn.hutool - hutool-all - 5.7.4 - ru.yandex.clickhouse clickhouse-jdbc 0.3.1 + + com.microsoft.sqlserver + mssql-jdbc + 7.4.1.jre8 + + + org.postgresql + postgresql + 42.2.14 + diff --git a/backend/src/main/java/io/dataease/provider/es/EsQueryProvider.java b/backend/src/main/java/io/dataease/provider/es/EsQueryProvider.java index 9f8924c6eb..0c287565f5 100644 --- a/backend/src/main/java/io/dataease/provider/es/EsQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/es/EsQueryProvider.java @@ -35,6 +35,7 @@ public class EsQueryProvider extends QueryProvider { @Override public Integer transFieldType(String field) { + field = field.toLowerCase(); switch (field) { case "keyword": case "text": @@ -64,6 +65,7 @@ public class EsQueryProvider extends QueryProvider { } public static Integer transFieldTypeSize(String field) { + field = field.toLowerCase(); switch (field) { case "null": return 1; From fb9ccc05e170995f7e8fdd24276a061c171f7e56 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Fri, 24 Sep 2021 16:00:37 +0800 Subject: [PATCH 22/30] =?UTF-8?q?fix:=20=E8=AF=86=E5=88=ABes=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/io/dataease/provider/es/EsQueryProvider.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/src/main/java/io/dataease/provider/es/EsQueryProvider.java b/backend/src/main/java/io/dataease/provider/es/EsQueryProvider.java index 0c287565f5..b49ebbb7c8 100644 --- a/backend/src/main/java/io/dataease/provider/es/EsQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/es/EsQueryProvider.java @@ -36,6 +36,7 @@ public class EsQueryProvider extends QueryProvider { @Override public Integer transFieldType(String field) { field = field.toLowerCase(); + field = field.contains("date") ? "datetime" : field; switch (field) { case "keyword": case "text": @@ -66,6 +67,7 @@ public class EsQueryProvider extends QueryProvider { public static Integer transFieldTypeSize(String field) { field = field.toLowerCase(); + field = field.contains("date") ? "datetime" : field; switch (field) { case "null": return 1; From c74e3863e076c3e9b68c952a4c58bbcb72685915 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Fri, 24 Sep 2021 16:42:30 +0800 Subject: [PATCH 23/30] =?UTF-8?q?fix:=20=E8=AF=86=E5=88=ABes=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/datasource/provider/EsProvider.java | 9 +++++---- .../java/io/dataease/provider/es/EsQueryProvider.java | 2 +- .../io/dataease/service/dataset/DataSetTableService.java | 4 ---- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/backend/src/main/java/io/dataease/datasource/provider/EsProvider.java b/backend/src/main/java/io/dataease/datasource/provider/EsProvider.java index 4e0bf23afb..003957f3a7 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/EsProvider.java +++ b/backend/src/main/java/io/dataease/datasource/provider/EsProvider.java @@ -49,11 +49,12 @@ public class EsProvider extends DatasourceProvider { List list = new LinkedList<>(); try { EsConfigDTO esConfigDTO = new Gson().fromJson(dsr.getDatasource().getConfiguration(), EsConfigDTO.class); - HttpClientConfig httpClientConfig = new HttpClientConfig(); - String auth = esConfigDTO.getUsername() + ":" + esConfigDTO.getPassword(); - byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.UTF_8)); - httpClientConfig.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + new String(encodedAuth)); + if(StringUtils.isNotEmpty(esConfigDTO.getUsername())){ + String auth = esConfigDTO.getUsername() + ":" + esConfigDTO.getPassword(); + byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.UTF_8)); + httpClientConfig.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + new String(encodedAuth)); + } Requst requst = new Requst(); requst.setQuery(dsr.getQuery()); requst.setFetch_size(dsr.getFetchSize()); diff --git a/backend/src/main/java/io/dataease/provider/es/EsQueryProvider.java b/backend/src/main/java/io/dataease/provider/es/EsQueryProvider.java index b49ebbb7c8..bc4aebf0dd 100644 --- a/backend/src/main/java/io/dataease/provider/es/EsQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/es/EsQueryProvider.java @@ -151,7 +151,7 @@ public class EsQueryProvider extends QueryProvider { String cast = String.format(EsSqlLConstants.CAST, originField, "timestamp"); fieldName = String.format(EsSqlLConstants.DATETIME_FORMAT, cast, EsSqlLConstants.DEFAULT_DATE_FORMAT); } else if (f.getDeType() == DeTypeConstants.DE_INT) { - fieldName = String.format(EsSqlLConstants.CAST, originField, "timestamp"); + fieldName = String.format(EsSqlLConstants.CAST, originField, "bigint"); } else { fieldName = originField; } 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 e4050f543b..0e12bbf992 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -504,12 +504,8 @@ public class DataSetTableService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); map.put("sql", datasourceRequest.getQuery()); - System.out.println(datasourceRequest.getQuery()); try { data.addAll(jdbcProvider.getData(datasourceRequest)); - for(int i=0;i< data.size(); i++){ - System.out.println(data.get(i)[2]); - } } catch (Exception e) { e.printStackTrace(); DEException.throwException(e.getMessage()); From 2586a4b37dca2c3ed5bf31cfabfa71287678940a Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Fri, 24 Sep 2021 17:27:47 +0800 Subject: [PATCH 24/30] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BB=AA?= =?UTF-8?q?=E8=A1=A8=E6=9D=BFtab=E7=BB=84=E4=BB=B6=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/widget/DeWidget/DeTabs.vue | 22 +++++++++---------- frontend/src/lang/en.js | 4 ++++ frontend/src/lang/tw.js | 4 ++++ frontend/src/lang/zh.js | 4 ++++ 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/frontend/src/components/widget/DeWidget/DeTabs.vue b/frontend/src/components/widget/DeWidget/DeTabs.vue index 399b9a89b4..fb5adf25c0 100644 --- a/frontend/src/components/widget/DeWidget/DeTabs.vue +++ b/frontend/src/components/widget/DeWidget/DeTabs.vue @@ -19,15 +19,15 @@ - 编辑标题 + {{ $t('detabs.eidttitle') }} - 选择视图 + {{ $t('detabs.selectview') }} - 删除 + {{ $t('table.delete') }} @@ -42,7 +42,7 @@ - 取 消 - 确 定 + {{ $t('table.cancel') }} + {{ $t('table.confirm') }} -
+
- 取 消 - 确 定 + {{ $t('table.cancel') }} + {{ $t('table.confirm') }} diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index f9363502e7..5241f202bc 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -395,6 +395,10 @@ export default { cancel: 'Cancel', confirm: 'Confirm' }, + detabs: { + eidttitle: 'Edit Title', + selectview: 'Select View' + }, example: { warning: 'Creating and editing pages cannot be cached by keep-alive because keep-alive include does not currently support caching based on routes, so it is currently cached based on component name. If you want to achieve a similar caching effect, you can use a browser caching scheme such as localStorage. Or do not use keep-alive include to cache all pages directly. See details' }, diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index ec250734ff..eda115e0d0 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -395,6 +395,10 @@ export default { cancel: '取 消', confirm: '確 定' }, + detabs: { + eidttitle: '編輯標題', + selectview: '選擇視圖' + }, example: { warning: '創建和編輯頁面是不能被 keep-alive 緩存的,因爲keep-alive 的 include 目前不支持根據路由來緩存,所以目前都是基于 component name 來進行緩存的。如果你想類似的實現緩存效果,可以使用 localStorage 等浏覽器緩存方案。或者不要使用 keep-alive 的 include,直接緩存所有頁面。詳情見' }, diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 7afd884ebc..e8356d5761 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -395,6 +395,10 @@ export default { cancel: '取 消', confirm: '确 定' }, + detabs: { + eidttitle: '编辑标题', + selectview: '选择视图' + }, example: { warning: '创建和编辑页面是不能被 keep-alive 缓存的,因为keep-alive 的 include 目前不支持根据路由来缓存,所以目前都是基于 component name 来进行缓存的。如果你想类似的实现缓存效果,可以使用 localStorage 等浏览器缓存方案。或者不要使用 keep-alive 的 include,直接缓存所有页面。详情见' }, From 04416c2ca0d52caf52e9910254c186cf0e8f3d95 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Fri, 24 Sep 2021 18:18:36 +0800 Subject: [PATCH 25/30] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dsso=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BF=A1=E6=81=AF=E7=BC=BA=E5=A4=B1=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/auth/server/AuthServer.java | 1 + .../io/dataease/plugins/server/SSOServer.java | 1 + .../dataease/service/sys/SysUserService.java | 27 +++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/backend/src/main/java/io/dataease/auth/server/AuthServer.java b/backend/src/main/java/io/dataease/auth/server/AuthServer.java index b94eca461e..53dffa07f1 100644 --- a/backend/src/main/java/io/dataease/auth/server/AuthServer.java +++ b/backend/src/main/java/io/dataease/auth/server/AuthServer.java @@ -77,6 +77,7 @@ public class AuthServer implements AuthApi { ldapAddRequest.setEnabled(1L); ldapAddRequest.setDeptId(1L); ldapAddRequest.setRoleIds(new ArrayList(){{add(2L);}}); + sysUserService.validateExistUser(ldapUserEntity.getUserName(), ldapUserEntity.getEmail()); sysUserService.saveLdapUsers(ldapAddRequest); } diff --git a/backend/src/main/java/io/dataease/plugins/server/SSOServer.java b/backend/src/main/java/io/dataease/plugins/server/SSOServer.java index b50257be85..a102174941 100644 --- a/backend/src/main/java/io/dataease/plugins/server/SSOServer.java +++ b/backend/src/main/java/io/dataease/plugins/server/SSOServer.java @@ -54,6 +54,7 @@ public class SSOServer { SSOUserInfo ssoUserInfo = oidcXpackService.requestUserInfo(config, ssoToken.getAccessToken()); SysUserEntity sysUserEntity = authUserService.getUserBySub(ssoUserInfo.getSub()); if(null == sysUserEntity){ + sysUserService.validateExistUser(ssoUserInfo.getUsername(), ssoUserInfo.getEmail()); sysUserService.saveOIDCUser(ssoUserInfo); sysUserEntity = authUserService.getUserBySub(ssoUserInfo.getSub()); } diff --git a/backend/src/main/java/io/dataease/service/sys/SysUserService.java b/backend/src/main/java/io/dataease/service/sys/SysUserService.java index 9c704a4883..2a102f7d94 100644 --- a/backend/src/main/java/io/dataease/service/sys/SysUserService.java +++ b/backend/src/main/java/io/dataease/service/sys/SysUserService.java @@ -299,6 +299,33 @@ public class SysUserService { return null; } + public void validateExistUser(String userName, String email) { + SysUserExample example = new SysUserExample(); + if (StringUtils.isNotBlank(userName)) { + example.createCriteria().andUsernameEqualTo(userName); + List users = sysUserMapper.selectByExample(example); + if(CollectionUtils.isNotEmpty(users)) { + throw new RuntimeException("用户ID【"+userName+"】已存在,请联系管理员"); + } + } + + /* if (StringUtils.isNotBlank(nickName)) { + example.createCriteria().andNickNameEqualTo(nickName); + List users = sysUserMapper.selectByExample(example); + if(CollectionUtils.isNotEmpty(users)) { + throw new RuntimeException("用户姓名【"+nickName+"】已存在,请联系管理员"); + } + } */ + + if (StringUtils.isNotBlank(email)) { + example.createCriteria().andEmailEqualTo(email); + List users = sysUserMapper.selectByExample(example); + if(CollectionUtils.isNotEmpty(users)) { + throw new RuntimeException("用户邮箱【"+email+"】已存在,请联系管理员"); + } + } + } + public List users(List userIds) { return userIds.stream().map(sysUserMapper::selectByPrimaryKey).collect(Collectors.toList()); From bb1947630c062017806f256060709f1c9f0c468d Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Fri, 24 Sep 2021 18:28:11 +0800 Subject: [PATCH 26/30] =?UTF-8?q?refactor:=E4=BB=A3=E7=A0=81=E5=9B=9E?= =?UTF-8?q?=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/canvas/components/Editor/index.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/canvas/components/Editor/index.vue b/frontend/src/components/canvas/components/Editor/index.vue index e4d605547a..f39215d14a 100644 --- a/frontend/src/components/canvas/components/Editor/index.vue +++ b/frontend/src/components/canvas/components/Editor/index.vue @@ -680,7 +680,8 @@ export default { position: relative; /*background: #fff;*/ margin: auto; - overflow-x: hidden; + /*会影响设置组件不能出现在最高层*/ + /*overflow-x: hidden;*/ background-size:100% 100% !important; /*transform-style:preserve-3d;*/ .lock { From 78bbdc8aeae1d5c711b16f8b90cd26a18ba0c30e Mon Sep 17 00:00:00 2001 From: taojinlong Date: Sat, 25 Sep 2021 15:41:04 +0800 Subject: [PATCH 27/30] =?UTF-8?q?refactor:=20=E5=8E=BB=E6=8E=89=E5=BA=9F?= =?UTF-8?q?=E5=BC=83=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datasource/provider/ProviderFactory.java | 8 +----- .../provider/mysql/MysqlDDLProvider.java | 26 ------------------- .../provider/oracle/OracleDDLProvider.java | 26 ------------------- 3 files changed, 1 insertion(+), 59 deletions(-) delete mode 100644 backend/src/main/java/io/dataease/provider/mysql/MysqlDDLProvider.java delete mode 100644 backend/src/main/java/io/dataease/provider/oracle/OracleDDLProvider.java diff --git a/backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java b/backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java index b05acd9d44..7d9c0eb59d 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java +++ b/backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java @@ -62,16 +62,10 @@ public class ProviderFactory implements ApplicationContextAware { public static DDLProvider getDDLProvider(String type) { DatasourceTypes datasourceType = DatasourceTypes.valueOf(type); switch (datasourceType) { - case mysql: - return context.getBean("mysqlDDL", DDLProvider.class); case doris: return context.getBean("dorisDDL", DDLProvider.class); - case oracle: - return context.getBean("oracleDDL", DDLProvider.class); - case sqlServer: - return context.getBean("mysqlDDL", DDLProvider.class); default: - return context.getBean("mysqlDDL", DDLProvider.class); + return context.getBean("dorisDDL", DDLProvider.class); } } diff --git a/backend/src/main/java/io/dataease/provider/mysql/MysqlDDLProvider.java b/backend/src/main/java/io/dataease/provider/mysql/MysqlDDLProvider.java deleted file mode 100644 index 5e44c86662..0000000000 --- a/backend/src/main/java/io/dataease/provider/mysql/MysqlDDLProvider.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.dataease.provider.mysql; - -import io.dataease.provider.DDLProvider; -import org.springframework.stereotype.Service; - -/** - * @Author gin - * @Date 2021/5/17 4:27 下午 - */ -@Service("mysqlDDL") -public class MysqlDDLProvider extends DDLProvider { - @Override - public String createView(String name, String viewSQL) { - return "CREATE VIEW IF NOT EXISTS " + name + " AS (" + viewSQL + ")"; - } - - @Override - public String dropTable(String name) { - return "DROP TABLE IF EXISTS " + name; - } - - @Override - public String dropView(String name) { - return "DROP VIEW IF EXISTS " + name; - } -} diff --git a/backend/src/main/java/io/dataease/provider/oracle/OracleDDLProvider.java b/backend/src/main/java/io/dataease/provider/oracle/OracleDDLProvider.java deleted file mode 100644 index f6e1431801..0000000000 --- a/backend/src/main/java/io/dataease/provider/oracle/OracleDDLProvider.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.dataease.provider.oracle; - -import io.dataease.provider.DDLProvider; -import org.springframework.stereotype.Service; - -/** - * @Author gin - * @Date 2021/5/17 4:27 下午 - */ -@Service("oracleDDL") -public class OracleDDLProvider extends DDLProvider { - @Override - public String createView(String name, String viewSQL) { - return "CREATE VIEW IF NOT EXISTS " + name + " AS (" + viewSQL + ")"; - } - - @Override - public String dropTable(String name) { - return "DROP TABLE IF EXISTS " + name; - } - - @Override - public String dropView(String name) { - return "DROP VIEW IF EXISTS " + name; - } -} From 0335d2327b5f7bc9ac8fe4db1f90efb2be509884 Mon Sep 17 00:00:00 2001 From: junjie Date: Sun, 26 Sep 2021 11:28:45 +0800 Subject: [PATCH 28/30] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=98=8E=E7=BB=86=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/lang/en.js | 3 ++- frontend/src/lang/tw.js | 3 ++- frontend/src/lang/zh.js | 3 ++- frontend/src/views/chart/view/ChartEdit.vue | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 5241f202bc..cd37a4b8c3 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -927,7 +927,8 @@ export default { liquid_shape_diamond: 'Diamond', liquid_shape_triangle: 'Triangle', liquid_shape_pin: 'Pin', - liquid_shape_rect: 'Rect' + liquid_shape_rect: 'Rect', + dimension_or_quota: 'Dimension Or Quota' }, dataset: { sheet_warn: 'There are multiple sheet pages, and the first one is extracted by default', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index eda115e0d0..eb23430481 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -928,7 +928,8 @@ export default { liquid_shape_diamond: '菱形', liquid_shape_triangle: '三角形', liquid_shape_pin: '氣球', - liquid_shape_rect: '矩形' + liquid_shape_rect: '矩形', + dimension_or_quota: '維度或指標' }, dataset: { sheet_warn: '有多個 Sheet 頁,默認抽取第一個', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index e8356d5761..e9a66cf889 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -928,7 +928,8 @@ export default { liquid_shape_diamond: '菱形', liquid_shape_triangle: '三角形', liquid_shape_pin: '气球', - liquid_shape_rect: '矩形' + liquid_shape_rect: '矩形', + dimension_or_quota: '维度或指标' }, dataset: { sheet_warn: '有多个 Sheet 页,默认抽取第一个', diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index 37773650d7..e95665f5a9 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -275,7 +275,8 @@ {{ $t('chart.area') }} {{ $t('chart.drag_block_treemap_label') }} / - {{ $t('chart.dimension') }} + {{ $t('chart.dimension') }} + {{ $t('chart.dimension_or_quota') }} Date: Sun, 26 Sep 2021 13:15:22 +0800 Subject: [PATCH 29/30] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Doidc=E7=BC=BA?= =?UTF-8?q?=E5=A4=B1=E4=BF=A1=E6=81=AF=E6=8A=A5=E9=94=99=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/plugins/server/SSOServer.java | 84 ++++++++++++------- frontend/src/views/login/index.vue | 3 +- 2 files changed, 54 insertions(+), 33 deletions(-) diff --git a/backend/src/main/java/io/dataease/plugins/server/SSOServer.java b/backend/src/main/java/io/dataease/plugins/server/SSOServer.java index a102174941..9ca599e40b 100644 --- a/backend/src/main/java/io/dataease/plugins/server/SSOServer.java +++ b/backend/src/main/java/io/dataease/plugins/server/SSOServer.java @@ -1,5 +1,7 @@ package io.dataease.plugins.server; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -39,39 +41,57 @@ public class SSOServer { @GetMapping("/callBack") public ModelAndView callBack(@RequestParam("code") String code, @RequestParam("state") String state) { - Map beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((OidcXpackService.class)); - if(beansOfType.keySet().size() == 0) { - DEException.throwException("缺少oidc插件"); - } - OidcXpackService oidcXpackService = SpringContextUtil.getBean(OidcXpackService.class); - Boolean suuportOIDC = oidcXpackService.isSuuportOIDC(); - if (!suuportOIDC) { - DEException.throwException("未开启oidc"); - } - Map config = config(oidcXpackService); - SSOToken ssoToken = oidcXpackService.requestSsoToken(config, code, state); - - SSOUserInfo ssoUserInfo = oidcXpackService.requestUserInfo(config, ssoToken.getAccessToken()); - SysUserEntity sysUserEntity = authUserService.getUserBySub(ssoUserInfo.getSub()); - if(null == sysUserEntity){ - sysUserService.validateExistUser(ssoUserInfo.getUsername(), ssoUserInfo.getEmail()); - sysUserService.saveOIDCUser(ssoUserInfo); - sysUserEntity = authUserService.getUserBySub(ssoUserInfo.getSub()); - } - TokenInfo tokenInfo = TokenInfo.builder().userId(sysUserEntity.getUserId()).username(sysUserEntity.getUsername()).build(); - String realPwd = CodingUtil.md5(sysUserService.defaultPWD()); - String token = JWTUtils.sign(tokenInfo, realPwd); - ServletUtils.setToken(token); - HttpServletResponse response = ServletUtils.response(); - - Cookie cookie_token = new Cookie("Authorization", token);cookie_token.setPath("/"); - Cookie cookie_id_token = new Cookie("IdToken", ssoToken.getIdToken());cookie_id_token.setPath("/"); - Cookie cookie_ac_token = new Cookie("AccessToken", ssoToken.getAccessToken());cookie_ac_token.setPath("/"); + ModelAndView modelAndView = new ModelAndView("redirect:/"); + HttpServletResponse response = ServletUtils.response(); - response.addCookie(cookie_token); - response.addCookie(cookie_id_token); - response.addCookie(cookie_ac_token); - ModelAndView modelAndView = new ModelAndView("redirect:/"); + try { + Map beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((OidcXpackService.class)); + if(beansOfType.keySet().size() == 0) { + DEException.throwException("缺少oidc插件"); + } + OidcXpackService oidcXpackService = SpringContextUtil.getBean(OidcXpackService.class); + Boolean suuportOIDC = oidcXpackService.isSuuportOIDC(); + if (!suuportOIDC) { + DEException.throwException("未开启oidc"); + } + Map config = config(oidcXpackService); + SSOToken ssoToken = oidcXpackService.requestSsoToken(config, code, state); + + SSOUserInfo ssoUserInfo = oidcXpackService.requestUserInfo(config, ssoToken.getAccessToken()); + SysUserEntity sysUserEntity = authUserService.getUserBySub(ssoUserInfo.getSub()); + if(null == sysUserEntity){ + sysUserService.validateExistUser(ssoUserInfo.getUsername(), ssoUserInfo.getEmail()); + sysUserService.saveOIDCUser(ssoUserInfo); + sysUserEntity = authUserService.getUserBySub(ssoUserInfo.getSub()); + } + TokenInfo tokenInfo = TokenInfo.builder().userId(sysUserEntity.getUserId()).username(sysUserEntity.getUsername()).build(); + String realPwd = CodingUtil.md5(sysUserService.defaultPWD()); + String token = JWTUtils.sign(tokenInfo, realPwd); + ServletUtils.setToken(token); + + + Cookie cookie_token = new Cookie("Authorization", token);cookie_token.setPath("/"); + Cookie cookie_id_token = new Cookie("IdToken", ssoToken.getIdToken());cookie_id_token.setPath("/"); + Cookie cookie_ac_token = new Cookie("AccessToken", ssoToken.getAccessToken());cookie_ac_token.setPath("/"); + + response.addCookie(cookie_token); + response.addCookie(cookie_id_token); + response.addCookie(cookie_ac_token); + }catch(Exception e) { + String msg; + try { + msg = URLEncoder.encode(e.getMessage(), "UTF-8"); + Cookie cookie_error = new Cookie("OidcError", msg); + cookie_error.setPath("/"); + response.addCookie(cookie_error); + return modelAndView; + } catch (UnsupportedEncodingException e1) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + } return modelAndView; } private Map config(OidcXpackService oidcXpackService) { diff --git a/frontend/src/views/login/index.vue b/frontend/src/views/login/index.vue index 552452644a..2b9bb297e2 100644 --- a/frontend/src/views/login/index.vue +++ b/frontend/src/views/login/index.vue @@ -66,6 +66,7 @@ import { encrypt } from '@/utils/rsaEncrypt' import { ldapStatus, oidcStatus } from '@/api/user' import { getSysUI } from '@/utils/auth' import PluginCom from '@/views/system/plugin/PluginCom' +import Cookies from 'js-cookie' export default { name: 'Login', components: { PluginCom }, @@ -92,7 +93,7 @@ export default { }, computed: { msg() { - return this.$store.state.user.loginMsg + return this.$store.state.user.loginMsg || Cookies.get('OidcError') } }, watch: { From 75fc0f1cf0da8af4524ce311b0140a40199a57c4 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Sun, 26 Sep 2021 13:37:02 +0800 Subject: [PATCH 30/30] =?UTF-8?q?fix:=20=E5=8F=8A=E6=97=B6=E5=88=A0?= =?UTF-8?q?=E9=99=A4oidc=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AFcookie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/login/index.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/src/views/login/index.vue b/frontend/src/views/login/index.vue index 2b9bb297e2..9bc7ec3c83 100644 --- a/frontend/src/views/login/index.vue +++ b/frontend/src/views/login/index.vue @@ -138,6 +138,7 @@ export default { } }, handleLogin() { + Cookies.remove('OidcError') this.$refs.loginForm.validate(valid => { if (valid) { this.loading = true @@ -160,6 +161,7 @@ export default { }, changeLoginType(val) { if (val !== 2) return + Cookies.remove('OidcError') this.$nextTick(() => { })