Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
njgzx
dataease
Commits
dcbea29b
提交
dcbea29b
authored
8月 09, 2021
作者:
taojinlong
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'dev' into pr@dev@sqlserver
上级
a5dd1e36
f87ac3ca
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
36 个修改的文件
包含
996 行增加
和
148 行删除
+996
-148
.gitattributes
.gitattributes
+1
-0
ChartViewWithBLOBs.java
...main/java/io/dataease/base/domain/ChartViewWithBLOBs.java
+2
-0
DatasetTableField.java
.../main/java/io/dataease/base/domain/DatasetTableField.java
+5
-2
PanelViewLinkageField.java
...n/java/io/dataease/base/domain/PanelViewLinkageField.java
+2
-2
PanelViewLinkageFieldExample.java
...io/dataease/base/domain/PanelViewLinkageFieldExample.java
+56
-56
ChartViewMapper.xml
...src/main/java/io/dataease/base/mapper/ChartViewMapper.xml
+23
-8
PanelViewLinkageFieldMapper.xml
...a/io/dataease/base/mapper/PanelViewLinkageFieldMapper.xml
+27
-27
ExtPanelViewLinkageMapper.java
...o/dataease/base/mapper/ext/ExtPanelViewLinkageMapper.java
+6
-1
ExtPanelViewLinkageMapper.xml
...io/dataease/base/mapper/ext/ExtPanelViewLinkageMapper.xml
+36
-12
PanelViewLinkageController.java
...dataease/controller/panel/PanelViewLinkageController.java
+10
-0
PanelLinkageRequest.java
...ataease/controller/request/panel/PanelLinkageRequest.java
+13
-0
PanelViewLinkageDTO.java
...nd/src/main/java/io/dataease/dto/PanelViewLinkageDTO.java
+4
-3
Series.java
backend/src/main/java/io/dataease/dto/chart/Series.java
+1
-1
QueryProvider.java
...end/src/main/java/io/dataease/provider/QueryProvider.java
+4
-0
DorisQueryProvider.java
...n/java/io/dataease/provider/doris/DorisQueryProvider.java
+114
-0
MysqlQueryProvider.java
...n/java/io/dataease/provider/mysql/MysqlQueryProvider.java
+103
-16
OracleQueryProvider.java
...java/io/dataease/provider/oracle/OracleQueryProvider.java
+114
-0
ChartViewService.java
...main/java/io/dataease/service/chart/ChartViewService.java
+69
-1
PanelViewLinkageService.java
...va/io/dataease/service/panel/PanelViewLinkageService.java
+67
-3
V19__area_mapping.sql
...end/src/main/resources/db/migration/V19__area_mapping.sql
+2
-0
V20__linkage_table.sql
...nd/src/main/resources/db/migration/V20__linkage_table.sql
+33
-0
generatorConfig.xml
backend/src/main/resources/generatorConfig.xml
+1
-1
linkage.js
frontend/src/api/panel/linkage.js
+9
-0
LinkageField.vue
.../src/components/canvas/components/Editor/LinkageField.vue
+80
-6
SettingMenu.vue
...d/src/components/canvas/components/Editor/SettingMenu.vue
+2
-1
Toolbar.vue
frontend/src/components/canvas/components/Toolbar.vue
+12
-2
en.js
frontend/src/lang/en.js
+4
-1
tw.js
frontend/src/lang/tw.js
+4
-1
zh.js
frontend/src/lang/zh.js
+4
-1
chart.js
frontend/src/views/chart/chart/chart.js
+60
-1
scatter.js
frontend/src/views/chart/chart/scatter/scatter.js
+57
-0
ChartComponent.vue
frontend/src/views/chart/components/ChartComponent.vue
+4
-1
ChartDragItem.vue
...nd/src/views/chart/components/drag-item/ChartDragItem.vue
+50
-1
SizeSelector.vue
...nd/src/views/chart/components/shape-attr/SizeSelector.vue
+16
-0
Group.vue
frontend/src/views/chart/group/Group.vue
+1
-0
ChartEdit.vue
frontend/src/views/chart/view/ChartEdit.vue
+0
-0
没有找到文件。
.gitattributes
0 → 100644
浏览文件 @
dcbea29b
*.sql linguist-language=java
backend/src/main/java/io/dataease/base/domain/ChartViewWithBLOBs.java
浏览文件 @
dcbea29b
...
...
@@ -15,6 +15,8 @@ public class ChartViewWithBLOBs extends ChartView implements Serializable {
private
String
extStack
;
private
String
extBubble
;
private
String
customAttr
;
private
String
customStyle
;
...
...
backend/src/main/java/io/dataease/base/domain/DatasetTableField.java
浏览文件 @
dcbea29b
...
...
@@ -2,11 +2,15 @@ package io.dataease.base.domain;
import
java.io.Serializable
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@Builder
@AllArgsConstructor
//全参构造函数
@NoArgsConstructor
//无参构造函数
public
class
DatasetTableField
implements
Serializable
{
private
String
id
;
...
...
@@ -39,4 +43,4 @@ public class DatasetTableField implements Serializable {
private
Long
lastSyncTime
;
private
static
final
long
serialVersionUID
=
1L
;
}
\ No newline at end of file
}
backend/src/main/java/io/dataease/base/domain/PanelViewLinkageField.java
浏览文件 @
dcbea29b
...
...
@@ -9,9 +9,9 @@ public class PanelViewLinkageField implements Serializable {
private
String
linkageId
;
private
String
sourceFi
le
d
;
private
String
sourceFi
el
d
;
private
String
targetFi
le
d
;
private
String
targetFi
el
d
;
private
Long
updateTime
;
...
...
backend/src/main/java/io/dataease/base/domain/PanelViewLinkageFieldExample.java
浏览文件 @
dcbea29b
...
...
@@ -244,143 +244,143 @@ public class PanelViewLinkageFieldExample {
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dIsNull
()
{
addCriterion
(
"source_fi
le
d is null"
);
public
Criteria
andSourceFi
el
dIsNull
()
{
addCriterion
(
"source_fi
el
d is null"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dIsNotNull
()
{
addCriterion
(
"source_fi
le
d is not null"
);
public
Criteria
andSourceFi
el
dIsNotNull
()
{
addCriterion
(
"source_fi
el
d is not null"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dEqualTo
(
String
value
)
{
addCriterion
(
"source_fi
led ="
,
value
,
"sourceFile
d"
);
public
Criteria
andSourceFi
el
dEqualTo
(
String
value
)
{
addCriterion
(
"source_fi
eld ="
,
value
,
"sourceFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dNotEqualTo
(
String
value
)
{
addCriterion
(
"source_fi
led <>"
,
value
,
"sourceFile
d"
);
public
Criteria
andSourceFi
el
dNotEqualTo
(
String
value
)
{
addCriterion
(
"source_fi
eld <>"
,
value
,
"sourceFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dGreaterThan
(
String
value
)
{
addCriterion
(
"source_fi
led >"
,
value
,
"sourceFile
d"
);
public
Criteria
andSourceFi
el
dGreaterThan
(
String
value
)
{
addCriterion
(
"source_fi
eld >"
,
value
,
"sourceFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dGreaterThanOrEqualTo
(
String
value
)
{
addCriterion
(
"source_fi
led >="
,
value
,
"sourceFile
d"
);
public
Criteria
andSourceFi
el
dGreaterThanOrEqualTo
(
String
value
)
{
addCriterion
(
"source_fi
eld >="
,
value
,
"sourceFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dLessThan
(
String
value
)
{
addCriterion
(
"source_fi
led <"
,
value
,
"sourceFile
d"
);
public
Criteria
andSourceFi
el
dLessThan
(
String
value
)
{
addCriterion
(
"source_fi
eld <"
,
value
,
"sourceFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dLessThanOrEqualTo
(
String
value
)
{
addCriterion
(
"source_fi
led <="
,
value
,
"sourceFile
d"
);
public
Criteria
andSourceFi
el
dLessThanOrEqualTo
(
String
value
)
{
addCriterion
(
"source_fi
eld <="
,
value
,
"sourceFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dLike
(
String
value
)
{
addCriterion
(
"source_fi
led like"
,
value
,
"sourceFile
d"
);
public
Criteria
andSourceFi
el
dLike
(
String
value
)
{
addCriterion
(
"source_fi
eld like"
,
value
,
"sourceFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dNotLike
(
String
value
)
{
addCriterion
(
"source_fi
led not like"
,
value
,
"sourceFile
d"
);
public
Criteria
andSourceFi
el
dNotLike
(
String
value
)
{
addCriterion
(
"source_fi
eld not like"
,
value
,
"sourceFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dIn
(
List
<
String
>
values
)
{
addCriterion
(
"source_fi
led in"
,
values
,
"sourceFile
d"
);
public
Criteria
andSourceFi
el
dIn
(
List
<
String
>
values
)
{
addCriterion
(
"source_fi
eld in"
,
values
,
"sourceFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dNotIn
(
List
<
String
>
values
)
{
addCriterion
(
"source_fi
led not in"
,
values
,
"sourceFile
d"
);
public
Criteria
andSourceFi
el
dNotIn
(
List
<
String
>
values
)
{
addCriterion
(
"source_fi
eld not in"
,
values
,
"sourceFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dBetween
(
String
value1
,
String
value2
)
{
addCriterion
(
"source_fi
led between"
,
value1
,
value2
,
"sourceFile
d"
);
public
Criteria
andSourceFi
el
dBetween
(
String
value1
,
String
value2
)
{
addCriterion
(
"source_fi
eld between"
,
value1
,
value2
,
"sourceFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andSourceFi
le
dNotBetween
(
String
value1
,
String
value2
)
{
addCriterion
(
"source_fi
led not between"
,
value1
,
value2
,
"sourceFile
d"
);
public
Criteria
andSourceFi
el
dNotBetween
(
String
value1
,
String
value2
)
{
addCriterion
(
"source_fi
eld not between"
,
value1
,
value2
,
"sourceFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dIsNull
()
{
addCriterion
(
"target_fi
le
d is null"
);
public
Criteria
andTargetFi
el
dIsNull
()
{
addCriterion
(
"target_fi
el
d is null"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dIsNotNull
()
{
addCriterion
(
"target_fi
le
d is not null"
);
public
Criteria
andTargetFi
el
dIsNotNull
()
{
addCriterion
(
"target_fi
el
d is not null"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dEqualTo
(
String
value
)
{
addCriterion
(
"target_fi
led ="
,
value
,
"targetFile
d"
);
public
Criteria
andTargetFi
el
dEqualTo
(
String
value
)
{
addCriterion
(
"target_fi
eld ="
,
value
,
"targetFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dNotEqualTo
(
String
value
)
{
addCriterion
(
"target_fi
led <>"
,
value
,
"targetFile
d"
);
public
Criteria
andTargetFi
el
dNotEqualTo
(
String
value
)
{
addCriterion
(
"target_fi
eld <>"
,
value
,
"targetFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dGreaterThan
(
String
value
)
{
addCriterion
(
"target_fi
led >"
,
value
,
"targetFile
d"
);
public
Criteria
andTargetFi
el
dGreaterThan
(
String
value
)
{
addCriterion
(
"target_fi
eld >"
,
value
,
"targetFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dGreaterThanOrEqualTo
(
String
value
)
{
addCriterion
(
"target_fi
led >="
,
value
,
"targetFile
d"
);
public
Criteria
andTargetFi
el
dGreaterThanOrEqualTo
(
String
value
)
{
addCriterion
(
"target_fi
eld >="
,
value
,
"targetFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dLessThan
(
String
value
)
{
addCriterion
(
"target_fi
led <"
,
value
,
"targetFile
d"
);
public
Criteria
andTargetFi
el
dLessThan
(
String
value
)
{
addCriterion
(
"target_fi
eld <"
,
value
,
"targetFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dLessThanOrEqualTo
(
String
value
)
{
addCriterion
(
"target_fi
led <="
,
value
,
"targetFile
d"
);
public
Criteria
andTargetFi
el
dLessThanOrEqualTo
(
String
value
)
{
addCriterion
(
"target_fi
eld <="
,
value
,
"targetFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dLike
(
String
value
)
{
addCriterion
(
"target_fi
led like"
,
value
,
"targetFile
d"
);
public
Criteria
andTargetFi
el
dLike
(
String
value
)
{
addCriterion
(
"target_fi
eld like"
,
value
,
"targetFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dNotLike
(
String
value
)
{
addCriterion
(
"target_fi
led not like"
,
value
,
"targetFile
d"
);
public
Criteria
andTargetFi
el
dNotLike
(
String
value
)
{
addCriterion
(
"target_fi
eld not like"
,
value
,
"targetFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dIn
(
List
<
String
>
values
)
{
addCriterion
(
"target_fi
led in"
,
values
,
"targetFile
d"
);
public
Criteria
andTargetFi
el
dIn
(
List
<
String
>
values
)
{
addCriterion
(
"target_fi
eld in"
,
values
,
"targetFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dNotIn
(
List
<
String
>
values
)
{
addCriterion
(
"target_fi
led not in"
,
values
,
"targetFile
d"
);
public
Criteria
andTargetFi
el
dNotIn
(
List
<
String
>
values
)
{
addCriterion
(
"target_fi
eld not in"
,
values
,
"targetFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dBetween
(
String
value1
,
String
value2
)
{
addCriterion
(
"target_fi
led between"
,
value1
,
value2
,
"targetFile
d"
);
public
Criteria
andTargetFi
el
dBetween
(
String
value1
,
String
value2
)
{
addCriterion
(
"target_fi
eld between"
,
value1
,
value2
,
"targetFiel
d"
);
return
(
Criteria
)
this
;
}
public
Criteria
andTargetFi
le
dNotBetween
(
String
value1
,
String
value2
)
{
addCriterion
(
"target_fi
led not between"
,
value1
,
value2
,
"targetFile
d"
);
public
Criteria
andTargetFi
el
dNotBetween
(
String
value1
,
String
value2
)
{
addCriterion
(
"target_fi
eld not between"
,
value1
,
value2
,
"targetFiel
d"
);
return
(
Criteria
)
this
;
}
...
...
backend/src/main/java/io/dataease/base/mapper/ChartViewMapper.xml
浏览文件 @
dcbea29b
...
...
@@ -17,6 +17,7 @@
<result
column=
"x_axis"
jdbcType=
"LONGVARCHAR"
property=
"xAxis"
/>
<result
column=
"y_axis"
jdbcType=
"LONGVARCHAR"
property=
"yAxis"
/>
<result
column=
"ext_stack"
jdbcType=
"LONGVARCHAR"
property=
"extStack"
/>
<result
column=
"ext_bubble"
jdbcType=
"LONGVARCHAR"
property=
"extBubble"
/>
<result
column=
"custom_attr"
jdbcType=
"LONGVARCHAR"
property=
"customAttr"
/>
<result
column=
"custom_style"
jdbcType=
"LONGVARCHAR"
property=
"customStyle"
/>
<result
column=
"custom_filter"
jdbcType=
"LONGVARCHAR"
property=
"customFilter"
/>
...
...
@@ -86,8 +87,8 @@
style_priority
</sql>
<sql
id=
"Blob_Column_List"
>
x_axis, y_axis, ext_stack,
custom_attr, custom_style, custom_filter, drill_fields
,
snapshot
x_axis, y_axis, ext_stack,
ext_bubble, custom_attr, custom_style, custom_filter
,
drill_fields,
snapshot
</sql>
<select
id=
"selectByExampleWithBLOBs"
parameterType=
"io.dataease.base.domain.ChartViewExample"
resultMap=
"ResultMapWithBLOBs"
>
select
...
...
@@ -142,16 +143,16 @@
table_id, `type`, title,
create_by, create_time, update_time,
style_priority, x_axis, y_axis,
ext_stack,
custom_attr, custom_style
,
custom_
filter, drill_fields, snapshot
)
ext_stack,
ext_bubble, custom_attr
,
custom_
style, custom_filter, drill_fields,
snapshot
)
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{sceneId,jdbcType=VARCHAR},
#{tableId,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{title,jdbcType=VARCHAR},
#{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
#{stylePriority,jdbcType=VARCHAR}, #{xAxis,jdbcType=LONGVARCHAR}, #{yAxis,jdbcType=LONGVARCHAR},
#{extStack,jdbcType=LONGVARCHAR}, #{
customAttr,jdbcType=LONGVARCHAR}, #{customStyle
,jdbcType=LONGVARCHAR},
#{custom
Filter,jdbcType=LONGVARCHAR}, #{drillFields,jdbcType=LONGVARCHAR}, #{snapshot,jdbcType=LONGVARCHAR}
)
#{extStack,jdbcType=LONGVARCHAR}, #{
extBubble,jdbcType=LONGVARCHAR}, #{customAttr
,jdbcType=LONGVARCHAR},
#{custom
Style,jdbcType=LONGVARCHAR}, #{customFilter,jdbcType=LONGVARCHAR}, #{drillFields,jdbcType=LONGVARCHAR},
#{snapshot,jdbcType=LONGVARCHAR}
)
</insert>
<insert
id=
"insertSelective"
parameterType=
"io.dataease.base.domain.ChartViewWithBLOBs"
>
insert into chart_view
...
...
@@ -195,6 +196,9 @@
<if
test=
"extStack != null"
>
ext_stack,
</if>
<if
test=
"extBubble != null"
>
ext_bubble,
</if>
<if
test=
"customAttr != null"
>
custom_attr,
</if>
...
...
@@ -251,6 +255,9 @@
<if
test=
"extStack != null"
>
#{extStack,jdbcType=LONGVARCHAR},
</if>
<if
test=
"extBubble != null"
>
#{extBubble,jdbcType=LONGVARCHAR},
</if>
<if
test=
"customAttr != null"
>
#{customAttr,jdbcType=LONGVARCHAR},
</if>
...
...
@@ -316,6 +323,9 @@
<if
test=
"record.extStack != null"
>
ext_stack = #{record.extStack,jdbcType=LONGVARCHAR},
</if>
<if
test=
"record.extBubble != null"
>
ext_bubble = #{record.extBubble,jdbcType=LONGVARCHAR},
</if>
<if
test=
"record.customAttr != null"
>
custom_attr = #{record.customAttr,jdbcType=LONGVARCHAR},
</if>
...
...
@@ -351,6 +361,7 @@
x_axis = #{record.xAxis,jdbcType=LONGVARCHAR},
y_axis = #{record.yAxis,jdbcType=LONGVARCHAR},
ext_stack = #{record.extStack,jdbcType=LONGVARCHAR},
ext_bubble = #{record.extBubble,jdbcType=LONGVARCHAR},
custom_attr = #{record.customAttr,jdbcType=LONGVARCHAR},
custom_style = #{record.customStyle,jdbcType=LONGVARCHAR},
custom_filter = #{record.customFilter,jdbcType=LONGVARCHAR},
...
...
@@ -415,6 +426,9 @@
<if
test=
"extStack != null"
>
ext_stack = #{extStack,jdbcType=LONGVARCHAR},
</if>
<if
test=
"extBubble != null"
>
ext_bubble = #{extBubble,jdbcType=LONGVARCHAR},
</if>
<if
test=
"customAttr != null"
>
custom_attr = #{customAttr,jdbcType=LONGVARCHAR},
</if>
...
...
@@ -447,6 +461,7 @@
x_axis = #{xAxis,jdbcType=LONGVARCHAR},
y_axis = #{yAxis,jdbcType=LONGVARCHAR},
ext_stack = #{extStack,jdbcType=LONGVARCHAR},
ext_bubble = #{extBubble,jdbcType=LONGVARCHAR},
custom_attr = #{customAttr,jdbcType=LONGVARCHAR},
custom_style = #{customStyle,jdbcType=LONGVARCHAR},
custom_filter = #{customFilter,jdbcType=LONGVARCHAR},
...
...
backend/src/main/java/io/dataease/base/mapper/PanelViewLinkageFieldMapper.xml
浏览文件 @
dcbea29b
...
...
@@ -4,8 +4,8 @@
<resultMap
id=
"BaseResultMap"
type=
"io.dataease.base.domain.PanelViewLinkageField"
>
<id
column=
"id"
jdbcType=
"VARCHAR"
property=
"id"
/>
<result
column=
"linkage_id"
jdbcType=
"VARCHAR"
property=
"linkageId"
/>
<result
column=
"source_fi
led"
jdbcType=
"VARCHAR"
property=
"sourceFile
d"
/>
<result
column=
"target_fi
led"
jdbcType=
"VARCHAR"
property=
"targetFile
d"
/>
<result
column=
"source_fi
eld"
jdbcType=
"VARCHAR"
property=
"sourceFiel
d"
/>
<result
column=
"target_fi
eld"
jdbcType=
"VARCHAR"
property=
"targetFiel
d"
/>
<result
column=
"update_time"
jdbcType=
"BIGINT"
property=
"updateTime"
/>
</resultMap>
<sql
id=
"Example_Where_Clause"
>
...
...
@@ -67,7 +67,7 @@
</where>
</sql>
<sql
id=
"Base_Column_List"
>
id, linkage_id, source_fi
led, target_file
d, update_time
id, linkage_id, source_fi
eld, target_fiel
d, update_time
</sql>
<select
id=
"selectByExample"
parameterType=
"io.dataease.base.domain.PanelViewLinkageFieldExample"
resultMap=
"BaseResultMap"
>
select
...
...
@@ -100,10 +100,10 @@
</if>
</delete>
<insert
id=
"insert"
parameterType=
"io.dataease.base.domain.PanelViewLinkageField"
>
insert into panel_view_linkage_field (id, linkage_id, source_fi
le
d,
target_fi
le
d, update_time)
values (#{id,jdbcType=VARCHAR}, #{linkageId,jdbcType=VARCHAR}, #{sourceFi
le
d,jdbcType=VARCHAR},
#{targetFi
le
d,jdbcType=VARCHAR}, #{updateTime,jdbcType=BIGINT})
insert into panel_view_linkage_field (id, linkage_id, source_fi
el
d,
target_fi
el
d, update_time)
values (#{id,jdbcType=VARCHAR}, #{linkageId,jdbcType=VARCHAR}, #{sourceFi
el
d,jdbcType=VARCHAR},
#{targetFi
el
d,jdbcType=VARCHAR}, #{updateTime,jdbcType=BIGINT})
</insert>
<insert
id=
"insertSelective"
parameterType=
"io.dataease.base.domain.PanelViewLinkageField"
>
insert into panel_view_linkage_field
...
...
@@ -114,11 +114,11 @@
<if
test=
"linkageId != null"
>
linkage_id,
</if>
<if
test=
"sourceFi
le
d != null"
>
source_fi
le
d,
<if
test=
"sourceFi
el
d != null"
>
source_fi
el
d,
</if>
<if
test=
"targetFi
le
d != null"
>
target_fi
le
d,
<if
test=
"targetFi
el
d != null"
>
target_fi
el
d,
</if>
<if
test=
"updateTime != null"
>
update_time,
...
...
@@ -131,11 +131,11 @@
<if
test=
"linkageId != null"
>
#{linkageId,jdbcType=VARCHAR},
</if>
<if
test=
"sourceFi
le
d != null"
>
#{sourceFi
le
d,jdbcType=VARCHAR},
<if
test=
"sourceFi
el
d != null"
>
#{sourceFi
el
d,jdbcType=VARCHAR},
</if>
<if
test=
"targetFi
le
d != null"
>
#{targetFi
le
d,jdbcType=VARCHAR},
<if
test=
"targetFi
el
d != null"
>
#{targetFi
el
d,jdbcType=VARCHAR},
</if>
<if
test=
"updateTime != null"
>
#{updateTime,jdbcType=BIGINT},
...
...
@@ -157,11 +157,11 @@
<if
test=
"record.linkageId != null"
>
linkage_id = #{record.linkageId,jdbcType=VARCHAR},
</if>
<if
test=
"record.sourceFi
le
d != null"
>
source_fi
led = #{record.sourceFile
d,jdbcType=VARCHAR},
<if
test=
"record.sourceFi
el
d != null"
>
source_fi
eld = #{record.sourceFiel
d,jdbcType=VARCHAR},
</if>
<if
test=
"record.targetFi
le
d != null"
>
target_fi
led = #{record.targetFile
d,jdbcType=VARCHAR},
<if
test=
"record.targetFi
el
d != null"
>
target_fi
eld = #{record.targetFiel
d,jdbcType=VARCHAR},
</if>
<if
test=
"record.updateTime != null"
>
update_time = #{record.updateTime,jdbcType=BIGINT},
...
...
@@ -175,8 +175,8 @@
update panel_view_linkage_field
set id = #{record.id,jdbcType=VARCHAR},
linkage_id = #{record.linkageId,jdbcType=VARCHAR},
source_fi
led = #{record.sourceFile
d,jdbcType=VARCHAR},
target_fi
led = #{record.targetFile
d,jdbcType=VARCHAR},
source_fi
eld = #{record.sourceFiel
d,jdbcType=VARCHAR},
target_fi
eld = #{record.targetFiel
d,jdbcType=VARCHAR},
update_time = #{record.updateTime,jdbcType=BIGINT}
<if
test=
"_parameter != null"
>
<include
refid=
"Update_By_Example_Where_Clause"
/>
...
...
@@ -188,11 +188,11 @@
<if
test=
"linkageId != null"
>
linkage_id = #{linkageId,jdbcType=VARCHAR},
</if>
<if
test=
"sourceFi
le
d != null"
>
source_fi
led = #{sourceFile
d,jdbcType=VARCHAR},
<if
test=
"sourceFi
el
d != null"
>
source_fi
eld = #{sourceFiel
d,jdbcType=VARCHAR},
</if>
<if
test=
"targetFi
le
d != null"
>
target_fi
led = #{targetFile
d,jdbcType=VARCHAR},
<if
test=
"targetFi
el
d != null"
>
target_fi
eld = #{targetFiel
d,jdbcType=VARCHAR},
</if>
<if
test=
"updateTime != null"
>
update_time = #{updateTime,jdbcType=BIGINT},
...
...
@@ -203,8 +203,8 @@
<update
id=
"updateByPrimaryKey"
parameterType=
"io.dataease.base.domain.PanelViewLinkageField"
>
update panel_view_linkage_field
set linkage_id = #{linkageId,jdbcType=VARCHAR},
source_fi
led = #{sourceFile
d,jdbcType=VARCHAR},
target_fi
led = #{targetFile
d,jdbcType=VARCHAR},
source_fi
eld = #{sourceFiel
d,jdbcType=VARCHAR},
target_fi
eld = #{targetFiel
d,jdbcType=VARCHAR},
update_time = #{updateTime,jdbcType=BIGINT}
where id = #{id,jdbcType=VARCHAR}
</update>
...
...
backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewLinkageMapper.java
浏览文件 @
dcbea29b
...
...
@@ -9,6 +9,11 @@ import java.util.List;
public
interface
ExtPanelViewLinkageMapper
{
List
<
PanelViewLinkageDTO
>
getViewLinkageGather
(
@Param
(
"panelId"
)
String
panelId
,
@Param
(
"sourceViewId"
)
String
sourceViewId
,
@Param
(
"targetViewIds"
)
List
<
String
>
targetViewIds
);
List
<
DatasetTableField
>
queryTableField
(
@Param
(
"tableId"
)
String
tableId
);
List
<
DatasetTableField
>
queryTableField
(
@Param
(
"table_id"
)
String
tableId
);
void
deleteViewLinkage
(
@Param
(
"panelId"
)
String
panelId
,
@Param
(
"sourceViewId"
)
String
sourceViewId
);
void
deleteViewLinkageField
(
@Param
(
"panelId"
)
String
panelId
,
@Param
(
"sourceViewId"
)
String
sourceViewId
);
}
backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewLinkageMapper.xml
浏览文件 @
dcbea29b
...
...
@@ -3,7 +3,7 @@
<mapper
namespace=
"io.dataease.base.mapper.ext.ExtPanelViewLinkageMapper"
>
<resultMap
id=
"TableFieldMap"
type=
"io.dataease.base.domain.DatasetTableField"
>
<
id
column=
"id"
jdbcType=
"VARCHAR"
property=
"id"
/>
<
result
column=
"id"
jdbcType=
"VARCHAR"
property=
"id"
/>
<result
column=
"table_id"
jdbcType=
"VARCHAR"
property=
"tableId"
/>
<result
column=
"origin_name"
jdbcType=
"VARCHAR"
property=
"originName"
/>
<result
column=
"name"
jdbcType=
"VARCHAR"
property=
"name"
/>
...
...
@@ -15,12 +15,12 @@
<result
column=
"table_id"
jdbcType=
"VARCHAR"
property=
"tableId"
/>
<result
column=
"targetViewName"
jdbcType=
"VARCHAR"
property=
"targetViewName"
/>
<result
column=
"linkageActive"
property=
"linkageActive"
/>
<!-- <collection property="targetViewFields" ofType="io.dataease.base.domain.DatasetTableField" column="table_id"-->
<!-- select="queryTableField">--
>
<!-- </collection>--
>
<collection
property=
"linkageFields"
ofType=
"io.dataease.
dto.PanelViewLinkageFieldDTO
"
>
<result
column=
"source_fi
led"
jdbcType=
"VARCHAR"
property=
"sourceFile
d"
/>
<result
column=
"target_fi
led"
jdbcType=
"VARCHAR"
property=
"targetFile
d"
/>
<collection
property=
"targetViewFields"
ofType=
"io.dataease.base.domain.DatasetTableField"
column=
"table_id"
select=
"queryTableField"
>
</collection
>
<collection
property=
"linkageFields"
ofType=
"io.dataease.
base.domain.PanelViewLinkageField
"
>
<result
column=
"source_fi
eld"
jdbcType=
"VARCHAR"
property=
"sourceFiel
d"
/>
<result
column=
"target_fi
eld"
jdbcType=
"VARCHAR"
property=
"targetFiel
d"
/>
</collection>
</resultMap>
...
...
@@ -30,14 +30,14 @@
chart_view.id as 'target_view_id',
chart_view.table_id,
(case when panel_view_linkage.target_view_id is null then 0 else 1 end) as 'linkageActive',
panel_view_linkage_field.source_fi
le
d,
panel_view_linkage_field.target_fi
le
d
panel_view_linkage_field.source_fi
el
d,
panel_view_linkage_field.target_fi
el
d
FROM
chart_view
LEFT JOIN panel_view_linkage ON chart_view.id = panel_view_linkage.target_view_id
LEFT JOIN panel_view_linkage_field ON panel_view_linkage.id = panel_view_linkage_field.linkage_id
AND panel_view_linkage.panel_id = #{panelId}
AND panel_view_linkage.source_view_id = #{sourceViewId}
LEFT JOIN panel_view_linkage_field ON panel_view_linkage.id = panel_view_linkage_field.linkage_id
where chart_view.id in
<foreach
collection=
"targetViewIds"
item=
"targetViewId"
index=
"index"
open=
"("
close=
")"
separator=
","
>
#{targetViewId}
...
...
@@ -49,9 +49,33 @@
dataset_table_field.id,
dataset_table_field.table_id,
dataset_table_field.origin_name,
dataset_table_field.
name
,
dataset_table_field.
`name`
,
dataset_table_field.de_type
from dataset_table_field where table_id = #{tableI
d}
from dataset_table_field where table_id = #{table_i
d}
</select>
<delete
id=
"deleteViewLinkage"
>
delete from panel_view_linkage where panel_view_linkage.panel_id = #{panelId}
AND panel_view_linkage.source_view_id = #{sourceViewId}
</delete>
<delete
id=
"deleteViewLinkageField"
>
DELETE pvl
FROM
panel_view_linkage pvl,
panel_view_linkage_field pvlf
WHERE
pvl.id = pvlf.linkage_id
AND pvl.source_view_id = #{panelId}
AND pvl.panel_id = #{panelId}
</delete>
<insert
id=
"savePluginMenu"
>
INSERT INTO `panel_view_linkage` ( menu_id, title, pid, sub_count, permission, hidden,i_frame ) VALUES
<foreach
collection=
"menuList"
item=
"menu"
index=
"index"
separator=
","
>
(#{menu.menuId},#{menu.title},#{menu.pid},#{menu.subCount},#{menu.permission},#{menu.hidden},ifnull(#{menu.hidden},0))
</foreach>
</insert>
</mapper>
backend/src/main/java/io/dataease/controller/panel/PanelViewLinkageController.java
浏览文件 @
dcbea29b
...
...
@@ -2,6 +2,7 @@ package io.dataease.controller.panel;
import
com.github.xiaoymin.knife4j.annotations.ApiSupport
;
import
io.dataease.controller.request.panel.PanelLinkageRequest
;
import
io.dataease.dto.PanelViewLinkageDTO
;
import
io.dataease.service.panel.PanelViewLinkageService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
...
...
@@ -30,4 +31,13 @@ public class PanelViewLinkageController {
return
panelViewLinkageService
.
getViewLinkageGather
(
request
);
}
@ApiOperation
(
"获取仪表板视图联动信息"
)
@PostMapping
(
"/saveLinkage"
)
public
void
saveLinkage
(
@RequestBody
PanelLinkageRequest
request
){
panelViewLinkageService
.
saveLinkage
(
request
);
}
}
backend/src/main/java/io/dataease/controller/request/panel/PanelLinkageRequest.java
浏览文件 @
dcbea29b
package
io
.
dataease
.
controller
.
request
.
panel
;
import
io.dataease.dto.PanelViewLinkageDTO
;
import
java.util.List
;
import
java.util.Map
;
/**
* Author: wangjiahao
...
...
@@ -15,6 +18,16 @@ public class PanelLinkageRequest {
private
List
<
String
>
targetViewIds
;
private
Map
<
String
,
PanelViewLinkageDTO
>
linkageInfo
;
public
Map
<
String
,
PanelViewLinkageDTO
>
getLinkageInfo
()
{
return
linkageInfo
;
}
public
void
setLinkageInfo
(
Map
<
String
,
PanelViewLinkageDTO
>
linkageInfo
)
{
this
.
linkageInfo
=
linkageInfo
;
}
public
String
getPanelId
()
{
return
panelId
;
}
...
...
backend/src/main/java/io/dataease/dto/PanelViewLinkageDTO.java
浏览文件 @
dcbea29b
...
...
@@ -2,6 +2,7 @@ package io.dataease.dto;
import
io.dataease.base.domain.DatasetTableField
;
import
io.dataease.base.domain.PanelViewLinkage
;
import
io.dataease.base.domain.PanelViewLinkageField
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -19,7 +20,7 @@ public class PanelViewLinkageDTO extends PanelViewLinkage {
//关联状态
private
boolean
linkageActive
=
false
;
private
List
<
PanelViewLinkageField
DTO
>
linkageFields
=
new
ArrayList
<>();
private
List
<
PanelViewLinkageField
>
linkageFields
=
new
ArrayList
<>();
private
List
<
DatasetTableField
>
targetViewFields
=
new
ArrayList
<>();
...
...
@@ -68,11 +69,11 @@ public class PanelViewLinkageDTO extends PanelViewLinkage {
this
.
linkageActive
=
linkageActive
;
}
public
List
<
PanelViewLinkageField
DTO
>
getLinkageFields
()
{
public
List
<
PanelViewLinkageField
>
getLinkageFields
()
{
return
linkageFields
;
}
public
void
setLinkageFields
(
List
<
PanelViewLinkageField
DTO
>
linkageFields
)
{
public
void
setLinkageFields
(
List
<
PanelViewLinkageField
>
linkageFields
)
{
this
.
linkageFields
=
linkageFields
;
}
}
backend/src/main/java/io/dataease/dto/chart/Series.java
浏览文件 @
dcbea29b
...
...
@@ -15,5 +15,5 @@ import java.util.List;
public
class
Series
{
private
String
name
;
private
String
type
;
private
List
<
BigDecimal
>
data
;
private
List
<
Object
>
data
;
}
backend/src/main/java/io/dataease/provider/QueryProvider.java
浏览文件 @
dcbea29b
...
...
@@ -38,6 +38,10 @@ public abstract class QueryProvider {
public
abstract
String
getSQLAsTmpStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
);
public
abstract
String
getSQLScatter
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extBubble
);
public
abstract
String
getSQLAsTmpScatter
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extBubble
);
public
abstract
String
searchTable
(
String
table
);
public
abstract
String
getSQLSummary
(
String
table
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
);
...
...
backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java
浏览文件 @
dcbea29b
...
...
@@ -398,6 +398,120 @@ public class DorisQueryProvider extends QueryProvider {
return
getSQLStack
(
"("
+
table
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
,
extStack
);
}
@Override
public
String
getSQLScatter
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extBubble
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
DorisConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
.
build
();
List
<
SQLObj
>
xFields
=
new
ArrayList
<>();
List
<
SQLObj
>
xWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
xAxis
))
{
for
(
int
i
=
0
;
i
<
xAxis
.
size
();
i
++)
{
ChartViewFieldDTO
x
=
xAxis
.
get
(
i
);
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
x
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
DorisConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getDataeaseName
());
}
else
{
originField
=
String
.
format
(
DorisConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getDataeaseName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
);
// 处理横轴字段
xFields
.
add
(
getXFields
(
x
,
originField
,
fieldAlias
));
// 处理横轴过滤
// xWheres.addAll(getXWheres(x, originField, fieldAlias));
// 处理横轴排序
if
(
StringUtils
.
isNotEmpty
(
x
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
x
.
getSort
(),
"none"
))
{
xOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
x
.
getSort
())
.
build
());
}
}
}
List
<
SQLObj
>
yFields
=
new
ArrayList
<>();
List
<
SQLObj
>
yWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
yOrders
=
new
ArrayList
<>();
List
<
ChartViewFieldDTO
>
yList
=
new
ArrayList
<>();
yList
.
addAll
(
yAxis
);
yList
.
addAll
(
extBubble
);
if
(
CollectionUtils
.
isNotEmpty
(
yList
))
{
for
(
int
i
=
0
;
i
<
yList
.
size
();
i
++)
{
ChartViewFieldDTO
y
=
yList
.
get
(
i
);
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
y
.
getExtField
())
&&
y
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
y
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
y
.
getExtField
())
&&
y
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
DorisConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
y
.
getDataeaseName
());
}
else
{
originField
=
String
.
format
(
DorisConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
y
.
getDataeaseName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_Y_PREFIX
,
i
);
// 处理纵轴字段
yFields
.
add
(
getYFields
(
y
,
originField
,
fieldAlias
));
// 处理纵轴过滤
yWheres
.
addAll
(
getYWheres
(
y
,
originField
,
fieldAlias
));
// 处理纵轴排序
if
(
StringUtils
.
isNotEmpty
(
y
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
y
.
getSort
(),
"none"
))
{
yOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
y
.
getSort
())
.
build
());
}
}
}
// 处理视图中字段过滤
List
<
SQLObj
>
customWheres
=
transCustomFilterList
(
tableObj
,
customFilter
);
// 处理仪表板字段过滤
List
<
SQLObj
>
extWheres
=
transExtFilterList
(
tableObj
,
extFilterRequestList
);
// 构建sql所有参数
List
<
SQLObj
>
fields
=
new
ArrayList
<>();
fields
.
addAll
(
xFields
);
fields
.
addAll
(
yFields
);
List
<
SQLObj
>
wheres
=
new
ArrayList
<>();
wheres
.
addAll
(
xWheres
);
if
(
customWheres
!=
null
)
wheres
.
addAll
(
customWheres
);
if
(
extWheres
!=
null
)
wheres
.
addAll
(
extWheres
);
List
<
SQLObj
>
groups
=
new
ArrayList
<>();
groups
.
addAll
(
xFields
);
// 外层再次套sql
List
<
SQLObj
>
orders
=
new
ArrayList
<>();
orders
.
addAll
(
xOrders
);
orders
.
addAll
(
yOrders
);
List
<
SQLObj
>
aggWheres
=
new
ArrayList
<>();
aggWheres
.
addAll
(
yWheres
);
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"querySql"
);
if
(
CollectionUtils
.
isNotEmpty
(
xFields
))
st_sql
.
add
(
"groups"
,
xFields
);
if
(
CollectionUtils
.
isNotEmpty
(
yFields
))
st_sql
.
add
(
"aggregators"
,
yFields
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
if
(
ObjectUtils
.
isNotEmpty
(
tableObj
))
st_sql
.
add
(
"table"
,
tableObj
);
String
sql
=
st_sql
.
render
();
ST
st
=
stg
.
getInstanceOf
(
"querySql"
);
SQLObj
tableSQL
=
SQLObj
.
builder
()
.
tableName
(
String
.
format
(
DorisConstants
.
BRACKETS
,
sql
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
1
))
.
build
();
if
(
CollectionUtils
.
isNotEmpty
(
aggWheres
))
st
.
add
(
"filters"
,
aggWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
orders
))
st
.
add
(
"orders"
,
orders
);
if
(
ObjectUtils
.
isNotEmpty
(
tableSQL
))
st
.
add
(
"table"
,
tableSQL
);
return
st
.
render
();
}
@Override
public
String
getSQLAsTmpScatter
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extBubble
)
{
return
getSQLScatter
(
"("
+
table
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
,
extBubble
);
}
@Override
public
String
searchTable
(
String
table
)
{
return
"SELECT table_name FROM information_schema.TABLES WHERE table_name ='"
+
table
+
"'"
;
...
...
backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java
浏览文件 @
dcbea29b
...
...
@@ -345,29 +345,116 @@ public class MysqlQueryProvider extends QueryProvider {
}
}
}
List
<
SQLObj
>
stackFields
=
new
ArrayList
<>();
List
<
SQLObj
>
stackOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
extStack
))
{
for
(
int
i
=
0
;
i
<
extStack
.
size
();
i
++)
{
ChartViewFieldDTO
stack
=
extStack
.
get
(
i
);
// 处理视图中字段过滤
List
<
SQLObj
>
customWheres
=
transCustomFilterList
(
tableObj
,
customFilter
);
// 处理仪表板字段过滤
List
<
SQLObj
>
extWheres
=
transExtFilterList
(
tableObj
,
extFilterRequestList
);
// 构建sql所有参数
List
<
SQLObj
>
fields
=
new
ArrayList
<>();
fields
.
addAll
(
xFields
);
fields
.
addAll
(
yFields
);
List
<
SQLObj
>
wheres
=
new
ArrayList
<>();
wheres
.
addAll
(
xWheres
);
if
(
customWheres
!=
null
)
wheres
.
addAll
(
customWheres
);
if
(
extWheres
!=
null
)
wheres
.
addAll
(
extWheres
);
List
<
SQLObj
>
groups
=
new
ArrayList
<>();
groups
.
addAll
(
xFields
);
// 外层再次套sql
List
<
SQLObj
>
orders
=
new
ArrayList
<>();
orders
.
addAll
(
xOrders
);
orders
.
addAll
(
yOrders
);
List
<
SQLObj
>
aggWheres
=
new
ArrayList
<>();
aggWheres
.
addAll
(
yWheres
);
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"querySql"
);
if
(
CollectionUtils
.
isNotEmpty
(
xFields
))
st_sql
.
add
(
"groups"
,
xFields
);
if
(
CollectionUtils
.
isNotEmpty
(
yFields
))
st_sql
.
add
(
"aggregators"
,
yFields
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
if
(
ObjectUtils
.
isNotEmpty
(
tableObj
))
st_sql
.
add
(
"table"
,
tableObj
);
String
sql
=
st_sql
.
render
();
ST
st
=
stg
.
getInstanceOf
(
"querySql"
);
SQLObj
tableSQL
=
SQLObj
.
builder
()
.
tableName
(
String
.
format
(
MySQLConstants
.
BRACKETS
,
sql
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
1
))
.
build
();
if
(
CollectionUtils
.
isNotEmpty
(
aggWheres
))
st
.
add
(
"filters"
,
aggWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
orders
))
st
.
add
(
"orders"
,
orders
);
if
(
ObjectUtils
.
isNotEmpty
(
tableSQL
))
st
.
add
(
"table"
,
tableSQL
);
return
st
.
render
();
}
@Override
public
String
getSQLAsTmpStack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
)
{
return
getSQLStack
(
"("
+
sqlFix
(
table
)
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
,
extStack
);
}
@Override
public
String
getSQLScatter
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extBubble
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
MySQLConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
.
build
();
List
<
SQLObj
>
xFields
=
new
ArrayList
<>();
List
<
SQLObj
>
xWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
xAxis
))
{
for
(
int
i
=
0
;
i
<
xAxis
.
size
();
i
++)
{
ChartViewFieldDTO
x
=
xAxis
.
get
(
i
);
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
stack
.
getExtField
())
&&
stack
.
getExtField
()
==
2
)
{
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
stack
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
stack
.
getExtField
())
&&
stack
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
stack
.
getOriginName
());
originField
=
calcFieldRegex
(
x
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
stack
.
getOriginName
());
originField
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
);
// 处理横轴字段
stackFields
.
add
(
getXFields
(
stack
,
originField
,
fieldAlias
));
xFields
.
add
(
getXFields
(
x
,
originField
,
fieldAlias
));
// 处理横轴过滤
// xWheres.addAll(getXWheres(x, originField, fieldAlias));
// 处理横轴排序
if
(
StringUtils
.
isNotEmpty
(
stack
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
stack
.
getSort
(),
"none"
))
{
stackOrders
.
add
(
SQLObj
.
builder
()
if
(
StringUtils
.
isNotEmpty
(
x
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
x
.
getSort
(),
"none"
))
{
xOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
x
.
getSort
())
.
build
());
}
}
}
List
<
SQLObj
>
yFields
=
new
ArrayList
<>();
List
<
SQLObj
>
yWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
yOrders
=
new
ArrayList
<>();
List
<
ChartViewFieldDTO
>
yList
=
new
ArrayList
<>();
yList
.
addAll
(
yAxis
);
yList
.
addAll
(
extBubble
);
if
(
CollectionUtils
.
isNotEmpty
(
yList
))
{
for
(
int
i
=
0
;
i
<
yList
.
size
();
i
++)
{
ChartViewFieldDTO
y
=
yList
.
get
(
i
);
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
y
.
getExtField
())
&&
y
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
y
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
y
.
getExtField
())
&&
y
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
y
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
y
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_Y_PREFIX
,
i
);
// 处理纵轴字段
yFields
.
add
(
getYFields
(
y
,
originField
,
fieldAlias
));
// 处理纵轴过滤
yWheres
.
addAll
(
getYWheres
(
y
,
originField
,
fieldAlias
));
// 处理纵轴排序
if
(
StringUtils
.
isNotEmpty
(
y
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
y
.
getSort
(),
"none"
))
{
yOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
stack
.
getSort
())
.
orderDirection
(
y
.
getSort
())
.
build
());
}
}
...
...
@@ -413,8 +500,8 @@ public class MysqlQueryProvider extends QueryProvider {
}
@Override
public
String
getSQLAsTmpS
tack
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extStack
)
{
return
getSQLS
tack
(
"("
+
sqlFix
(
table
)
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
,
extStack
);
public
String
getSQLAsTmpS
catter
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extBubble
)
{
return
getSQLS
catter
(
"("
+
sqlFix
(
table
)
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
,
extBubble
);
}
@Override
...
...
backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java
浏览文件 @
dcbea29b
...
...
@@ -423,6 +423,120 @@ public class OracleQueryProvider extends QueryProvider {
return
getSQLStack
(
"("
+
sqlFix
(
table
)
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
,
extStack
);
}
@Override
public
String
getSQLScatter
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extBubble
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
OracleConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
OracleConstants
.
ALIAS_FIX
,
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
)))
.
build
();
List
<
SQLObj
>
xFields
=
new
ArrayList
<>();
List
<
SQLObj
>
xWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
xAxis
))
{
for
(
int
i
=
0
;
i
<
xAxis
.
size
();
i
++)
{
ChartViewFieldDTO
x
=
xAxis
.
get
(
i
);
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
x
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
x
.
getExtField
())
&&
x
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
OracleConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
OracleConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
x
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
OracleConstants
.
ALIAS_FIX
,
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
));
// 处理横轴字段
xFields
.
add
(
getXFields
(
x
,
originField
,
fieldAlias
));
// 处理横轴过滤
// xWheres.addAll(getXWheres(x, originField, fieldAlias));
// 处理横轴排序
if
(
StringUtils
.
isNotEmpty
(
x
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
x
.
getSort
(),
"none"
))
{
xOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
x
.
getSort
())
.
build
());
}
}
}
List
<
SQLObj
>
yFields
=
new
ArrayList
<>();
List
<
SQLObj
>
yWheres
=
new
ArrayList
<>();
List
<
SQLObj
>
yOrders
=
new
ArrayList
<>();
List
<
ChartViewFieldDTO
>
yList
=
new
ArrayList
<>();
yList
.
addAll
(
yAxis
);
yList
.
addAll
(
extBubble
);
if
(
CollectionUtils
.
isNotEmpty
(
yList
))
{
for
(
int
i
=
0
;
i
<
yList
.
size
();
i
++)
{
ChartViewFieldDTO
y
=
yList
.
get
(
i
);
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
y
.
getExtField
())
&&
y
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
y
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
y
.
getExtField
())
&&
y
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
OracleConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
y
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
OracleConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
y
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
OracleConstants
.
ALIAS_FIX
,
String
.
format
(
SQLConstants
.
FIELD_ALIAS_Y_PREFIX
,
i
));
// 处理纵轴字段
yFields
.
add
(
getYFields
(
y
,
originField
,
fieldAlias
));
// 处理纵轴过滤
yWheres
.
addAll
(
getYWheres
(
y
,
originField
,
fieldAlias
));
// 处理纵轴排序
if
(
StringUtils
.
isNotEmpty
(
y
.
getSort
())
&&
!
StringUtils
.
equalsIgnoreCase
(
y
.
getSort
(),
"none"
))
{
yOrders
.
add
(
SQLObj
.
builder
()
.
orderField
(
originField
)
.
orderAlias
(
fieldAlias
)
.
orderDirection
(
y
.
getSort
())
.
build
());
}
}
}
// 处理视图中字段过滤
List
<
SQLObj
>
customWheres
=
transCustomFilterList
(
tableObj
,
customFilter
);
// 处理仪表板字段过滤
List
<
SQLObj
>
extWheres
=
transExtFilterList
(
tableObj
,
extFilterRequestList
);
// 构建sql所有参数
List
<
SQLObj
>
fields
=
new
ArrayList
<>();
fields
.
addAll
(
xFields
);
fields
.
addAll
(
yFields
);
List
<
SQLObj
>
wheres
=
new
ArrayList
<>();
wheres
.
addAll
(
xWheres
);
if
(
customWheres
!=
null
)
wheres
.
addAll
(
customWheres
);
if
(
extWheres
!=
null
)
wheres
.
addAll
(
extWheres
);
List
<
SQLObj
>
groups
=
new
ArrayList
<>();
groups
.
addAll
(
xFields
);
// 外层再次套sql
List
<
SQLObj
>
orders
=
new
ArrayList
<>();
orders
.
addAll
(
xOrders
);
orders
.
addAll
(
yOrders
);
List
<
SQLObj
>
aggWheres
=
new
ArrayList
<>();
aggWheres
.
addAll
(
yWheres
);
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"querySql"
);
if
(
CollectionUtils
.
isNotEmpty
(
xFields
))
st_sql
.
add
(
"groups"
,
xFields
);
if
(
CollectionUtils
.
isNotEmpty
(
yFields
))
st_sql
.
add
(
"aggregators"
,
yFields
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
if
(
ObjectUtils
.
isNotEmpty
(
tableObj
))
st_sql
.
add
(
"table"
,
tableObj
);
String
sql
=
st_sql
.
render
();
ST
st
=
stg
.
getInstanceOf
(
"querySql"
);
SQLObj
tableSQL
=
SQLObj
.
builder
()
.
tableName
(
String
.
format
(
OracleConstants
.
BRACKETS
,
sql
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
1
))
.
build
();
if
(
CollectionUtils
.
isNotEmpty
(
aggWheres
))
st
.
add
(
"filters"
,
aggWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
orders
))
st
.
add
(
"orders"
,
orders
);
if
(
ObjectUtils
.
isNotEmpty
(
tableSQL
))
st
.
add
(
"table"
,
tableSQL
);
return
st
.
render
();
}
@Override
public
String
getSQLAsTmpScatter
(
String
table
,
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
List
<
ChartCustomFilterDTO
>
customFilter
,
List
<
ChartExtFilterRequest
>
extFilterRequestList
,
List
<
ChartViewFieldDTO
>
extBubble
)
{
return
getSQLScatter
(
"("
+
sqlFix
(
table
)
+
")"
,
xAxis
,
yAxis
,
customFilter
,
extFilterRequestList
,
extBubble
);
}
@Override
public
String
searchTable
(
String
table
)
{
return
"SELECT table_name FROM information_schema.TABLES WHERE table_name ='"
+
table
+
"'"
;
...
...
backend/src/main/java/io/dataease/service/chart/ChartViewService.java
浏览文件 @
dcbea29b
...
...
@@ -193,6 +193,8 @@ public class ChartViewService {
}.
getType
());
List
<
ChartViewFieldDTO
>
extStack
=
new
Gson
().
fromJson
(
view
.
getExtStack
(),
new
TypeToken
<
List
<
ChartViewFieldDTO
>>()
{
}.
getType
());
List
<
ChartViewFieldDTO
>
extBubble
=
new
Gson
().
fromJson
(
view
.
getExtBubble
(),
new
TypeToken
<
List
<
ChartViewFieldDTO
>>()
{
}.
getType
());
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
=
new
Gson
().
fromJson
(
view
.
getCustomFilter
(),
new
TypeToken
<
List
<
ChartFieldCustomFilterDTO
>>()
{
}.
getType
());
List
<
ChartCustomFilterDTO
>
customFilter
=
new
ArrayList
<>();
...
...
@@ -262,6 +264,8 @@ public class ChartViewService {
datasourceRequest
.
setQuery
(
qp
.
getSQLSummary
(
dataTableInfoDTO
.
getTable
(),
yAxis
,
customFilter
,
extFilterList
));
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"stack"
))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLStack
(
dataTableInfoDTO
.
getTable
(),
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extStack
));
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"scatter"
))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLScatter
(
dataTableInfoDTO
.
getTable
(),
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extBubble
));
}
else
{
datasourceRequest
.
setQuery
(
qp
.
getSQL
(
dataTableInfoDTO
.
getTable
(),
xAxis
,
yAxis
,
customFilter
,
extFilterList
));
}
...
...
@@ -270,6 +274,8 @@ public class ChartViewService {
datasourceRequest
.
setQuery
(
qp
.
getSQLSummaryAsTmp
(
dataTableInfoDTO
.
getSql
(),
yAxis
,
customFilter
,
extFilterList
));
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"stack"
))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmpStack
(
dataTableInfoDTO
.
getSql
(),
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extStack
));
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"scatter"
))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmpScatter
(
dataTableInfoDTO
.
getSql
(),
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extBubble
));
}
else
{
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmp
(
dataTableInfoDTO
.
getSql
(),
xAxis
,
yAxis
,
customFilter
,
extFilterList
));
}
...
...
@@ -281,6 +287,8 @@ public class ChartViewService {
datasourceRequest
.
setQuery
(
qp
.
getSQLSummaryAsTmp
(
sql
,
yAxis
,
customFilter
,
extFilterList
));
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"stack"
))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmpStack
(
sql
,
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extStack
));
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"scatter"
))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmpScatter
(
sql
,
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extBubble
));
}
else
{
datasourceRequest
.
setQuery
(
qp
.
getSQLAsTmp
(
sql
,
xAxis
,
yAxis
,
customFilter
,
extFilterList
));
}
...
...
@@ -309,6 +317,8 @@ public class ChartViewService {
datasourceRequest
.
setQuery
(
qp
.
getSQLSummary
(
tableName
,
yAxis
,
customFilter
,
extFilterList
));
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"stack"
))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLStack
(
tableName
,
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extStack
));
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"scatter"
))
{
datasourceRequest
.
setQuery
(
qp
.
getSQLScatter
(
tableName
,
xAxis
,
yAxis
,
customFilter
,
extFilterList
,
extBubble
));
}
else
{
datasourceRequest
.
setQuery
(
qp
.
getSQL
(
tableName
,
xAxis
,
yAxis
,
customFilter
,
extFilterList
));
}
...
...
@@ -353,6 +363,8 @@ public class ChartViewService {
Map
<
String
,
Object
>
mapChart
;
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"stack"
))
{
mapChart
=
transStackChartData
(
xAxis
,
yAxis
,
view
,
data
,
extStack
);
}
else
if
(
StringUtils
.
containsIgnoreCase
(
view
.
getType
(),
"scatter"
))
{
mapChart
=
transScatterData
(
xAxis
,
yAxis
,
view
,
data
,
extBubble
);
}
else
{
mapChart
=
transChartData
(
xAxis
,
yAxis
,
view
,
data
);
}
...
...
@@ -405,6 +417,7 @@ public class ChartViewService {
return
result
;
}
// 基础图形
private
Map
<
String
,
Object
>
transChartData
(
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
ChartViewWithBLOBs
view
,
List
<
String
[]>
data
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
...
...
@@ -442,6 +455,7 @@ public class ChartViewService {
return
map
;
}
// 堆叠图
private
Map
<
String
,
Object
>
transStackChartData
(
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
ChartViewWithBLOBs
view
,
List
<
String
[]>
data
,
List
<
ChartViewFieldDTO
>
extStack
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
...
...
@@ -473,7 +487,7 @@ public class ChartViewService {
Series
series1
=
new
Series
();
series1
.
setName
(
s
);
series1
.
setType
(
view
.
getType
());
List
<
BigDecimal
>
list
=
new
ArrayList
<>();
List
<
Object
>
list
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
x
.
size
();
i
++)
{
list
.
add
(
defaultValue
);
}
...
...
@@ -540,6 +554,60 @@ public class ChartViewService {
return
map
;
}
// 散点图
private
Map
<
String
,
Object
>
transScatterData
(
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
ChartViewWithBLOBs
view
,
List
<
String
[]>
data
,
List
<
ChartViewFieldDTO
>
extBubble
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
List
<
String
>
x
=
new
ArrayList
<>();
List
<
Series
>
series
=
new
ArrayList
<>();
for
(
ChartViewFieldDTO
y
:
yAxis
)
{
Series
series1
=
new
Series
();
series1
.
setName
(
y
.
getName
());
series1
.
setType
(
view
.
getType
());
series1
.
setData
(
new
ArrayList
<>());
series
.
add
(
series1
);
}
for
(
String
[]
d
:
data
)
{
StringBuilder
a
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
xAxis
.
size
();
i
++)
{
if
(
i
==
xAxis
.
size
()
-
1
)
{
a
.
append
(
d
[
i
]);
}
else
{
a
.
append
(
d
[
i
]).
append
(
"\n"
);
}
}
x
.
add
(
a
.
toString
());
for
(
int
i
=
xAxis
.
size
();
i
<
xAxis
.
size
()
+
yAxis
.
size
();
i
++)
{
int
j
=
i
-
xAxis
.
size
();
if
(
CollectionUtils
.
isNotEmpty
(
extBubble
)
&&
extBubble
.
size
()
>
0
)
{
try
{
series
.
get
(
j
).
getData
().
add
(
new
Object
[]{
a
.
toString
(),
new
BigDecimal
(
StringUtils
.
isEmpty
(
d
[
i
])
?
"0"
:
d
[
i
]),
new
BigDecimal
(
StringUtils
.
isEmpty
(
d
[
xAxis
.
size
()
+
yAxis
.
size
()])
?
"0"
:
d
[
xAxis
.
size
()
+
yAxis
.
size
()])
});
}
catch
(
Exception
e
)
{
series
.
get
(
j
).
getData
().
add
(
new
Object
[]{
a
.
toString
(),
new
BigDecimal
(
0
),
new
BigDecimal
(
0
)});
}
}
else
{
try
{
series
.
get
(
j
).
getData
().
add
(
new
Object
[]{
a
.
toString
(),
new
BigDecimal
(
StringUtils
.
isEmpty
(
d
[
i
])
?
"0"
:
d
[
i
])
});
}
catch
(
Exception
e
)
{
series
.
get
(
j
).
getData
().
add
(
new
Object
[]{
a
.
toString
(),
new
BigDecimal
(
0
)});
}
}
}
}
map
.
put
(
"x"
,
x
);
map
.
put
(
"series"
,
series
);
return
map
;
}
// 表格
private
Map
<
String
,
Object
>
transTableNormal
(
List
<
ChartViewFieldDTO
>
xAxis
,
List
<
ChartViewFieldDTO
>
yAxis
,
ChartViewWithBLOBs
view
,
List
<
String
[]>
data
,
List
<
ChartViewFieldDTO
>
extStack
)
{
Map
<
String
,
Object
>
map
=
new
TreeMap
<>();
List
<
ChartViewFieldDTO
>
fields
=
new
ArrayList
<>();
...
...
backend/src/main/java/io/dataease/service/panel/PanelViewLinkageService.java
浏览文件 @
dcbea29b
package
io
.
dataease
.
service
.
panel
;
import
io.dataease.base.domain.PanelViewLinkage
;
import
io.dataease.base.domain.PanelViewLinkageExample
;
import
io.dataease.base.domain.PanelViewLinkageField
;
import
io.dataease.base.mapper.PanelViewLinkageFieldMapper
;
import
io.dataease.base.mapper.PanelViewLinkageMapper
;
import
io.dataease.base.mapper.ext.ExtPanelViewLinkageMapper
;
import
io.dataease.commons.utils.AuthUtils
;
import
io.dataease.controller.request.panel.PanelLinkageRequest
;
import
io.dataease.dto.PanelViewLinkageDTO
;
import
io.dataease.dto.PanelViewLinkageFieldDTO
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.Assert
;
import
javax.annotation.Resource
;
import
java.util.*
;
...
...
@@ -22,6 +30,9 @@ public class PanelViewLinkageService {
@Resource
private
PanelViewLinkageMapper
panelViewLinkageMapper
;
@Resource
private
PanelViewLinkageFieldMapper
panelViewLinkageFieldMapper
;
@Resource
private
ExtPanelViewLinkageMapper
extPanelViewLinkageMapper
;
...
...
@@ -29,9 +40,6 @@ public class PanelViewLinkageService {
public
Map
<
String
,
PanelViewLinkageDTO
>
getViewLinkageGather
(
PanelLinkageRequest
request
)
{
if
(
CollectionUtils
.
isNotEmpty
(
request
.
getTargetViewIds
())){
List
<
PanelViewLinkageDTO
>
linkageDTOList
=
extPanelViewLinkageMapper
.
getViewLinkageGather
(
request
.
getPanelId
(),
request
.
getSourceViewId
(),
request
.
getTargetViewIds
());
linkageDTOList
.
stream
().
forEach
(
linkage
->{
linkage
.
setTargetViewFields
(
extPanelViewLinkageMapper
.
queryTableField
(
linkage
.
getTableId
()));
});
Map
<
String
,
PanelViewLinkageDTO
>
result
=
linkageDTOList
.
stream
()
.
collect
(
Collectors
.
toMap
(
PanelViewLinkageDTO:
:
getTargetViewId
,
PanelViewLinkageDTO
->
PanelViewLinkageDTO
));
return
result
;
...
...
@@ -39,5 +47,61 @@ public class PanelViewLinkageService {
return
new
HashMap
<>();
}
@Transactional
public
void
saveLinkage
(
PanelLinkageRequest
request
){
Long
updateTime
=
System
.
currentTimeMillis
();
Map
<
String
,
PanelViewLinkageDTO
>
linkageInfo
=
request
.
getLinkageInfo
();
String
sourceViewId
=
request
.
getSourceViewId
();
String
panelId
=
request
.
getPanelId
();
Assert
.
notNull
(
sourceViewId
,
"source View ID can not be null"
);
Assert
.
notNull
(
panelId
,
"panelId can not be null"
);
//去掉source view 的信息
linkageInfo
.
remove
(
sourceViewId
);
// 清理原有关系
extPanelViewLinkageMapper
.
deleteViewLinkageField
(
panelId
,
sourceViewId
);
extPanelViewLinkageMapper
.
deleteViewLinkage
(
panelId
,
sourceViewId
);
//重新建立关系
for
(
Map
.
Entry
<
String
,
PanelViewLinkageDTO
>
entry
:
linkageInfo
.
entrySet
()){
String
targetViewId
=
entry
.
getKey
();
PanelViewLinkageDTO
linkageDTO
=
entry
.
getValue
();
List
<
PanelViewLinkageField
>
linkageFields
=
linkageDTO
.
getLinkageFields
();
if
(
CollectionUtils
.
isNotEmpty
(
linkageFields
)&&
linkageDTO
.
isLinkageActive
()){
String
linkageId
=
UUID
.
randomUUID
().
toString
();
PanelViewLinkage
linkage
=
new
PanelViewLinkage
();
linkage
.
setId
(
linkageId
);
linkage
.
setPanelId
(
panelId
);
linkage
.
setSourceViewId
(
sourceViewId
);
linkage
.
setTargetViewId
(
targetViewId
);
linkage
.
setUpdatePeople
(
AuthUtils
.
getUser
().
getUsername
());
linkage
.
setUpdateTime
(
updateTime
);
panelViewLinkageMapper
.
insert
(
linkage
);
linkageFields
.
stream
().
forEach
(
linkageField
->{
linkageField
.
setId
(
UUID
.
randomUUID
().
toString
());
linkageField
.
setLinkageId
(
linkageId
);
linkageField
.
setUpdateTime
(
updateTime
);
panelViewLinkageFieldMapper
.
insert
(
linkageField
);
});
}
}
}
}
backend/src/main/resources/db/migration/V19__area_mapping.sql
浏览文件 @
dcbea29b
ALTER
TABLE
`chart_view`
ADD
COLUMN
`ext_stack`
LONGTEXT
COMMENT
'堆叠项'
AFTER
`y_axis`
;
UPDATE
`chart_view`
SET
`ext_stack`
=
'[]'
;
ALTER
TABLE
`chart_view`
ADD
COLUMN
`ext_bubble`
LONGTEXT
COMMENT
'气泡大小'
AFTER
`ext_stack`
;
UPDATE
`chart_view`
SET
`ext_bubble`
=
'[]'
;
ALTER
TABLE
`dataset_table_field`
MODIFY
COLUMN
`origin_name`
LONGTEXT
;
...
...
backend/src/main/resources/db/migration/V20__linkage_table.sql
0 → 100644
浏览文件 @
dcbea29b
SET
NAMES
utf8mb4
;
SET
FOREIGN_KEY_CHECKS
=
0
;
-- ----------------------------
-- Table structure for panel_view_linkage
-- ----------------------------
DROP
TABLE
IF
EXISTS
`panel_view_linkage`
;
CREATE
TABLE
`panel_view_linkage`
(
`id`
varchar
(
50
)
NOT
NULL
,
`panel_id`
varchar
(
50
)
DEFAULT
NULL
,
`source_view_id`
varchar
(
50
)
DEFAULT
NULL
COMMENT
'源视图id'
,
`target_view_id`
varchar
(
50
)
DEFAULT
NULL
COMMENT
'联动视图id'
,
`update_time`
bigint
(
13
)
DEFAULT
NULL
COMMENT
'更新时间'
,
`update_people`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'更新人'
,
`ext1`
varchar
(
2000
)
DEFAULT
NULL
,
`ext2`
varchar
(
2000
)
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
-- ----------------------------
-- Table structure for panel_view_linkage_field
-- ----------------------------
DROP
TABLE
IF
EXISTS
`panel_view_linkage_field`
;
CREATE
TABLE
`panel_view_linkage_field`
(
`id`
varchar
(
50
)
NOT
NULL
,
`linkage_id`
varchar
(
50
)
DEFAULT
NULL
COMMENT
'联动ID'
,
`source_field`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'源视图字段'
,
`target_field`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'目标视图字段'
,
`update_time`
bigint
(
13
)
DEFAULT
NULL
COMMENT
'更新时间'
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
SET
FOREIGN_KEY_CHECKS
=
1
;
backend/src/main/resources/generatorConfig.xml
浏览文件 @
dcbea29b
...
...
@@ -64,7 +64,7 @@
<!--要生成的数据库表 -->
<!-- <table tableName="sys_dict"/>--
>
<table
tableName=
"chart_view"
/
>
<!-- <table tableName="sys_dict_item"/>-->
<!-- <table tableName="dataset_table_field"/>-->
<!-- <table tableName="v_chart">-->
...
...
frontend/src/api/panel/linkage.js
浏览文件 @
dcbea29b
...
...
@@ -9,3 +9,12 @@ export function getViewLinkageGather(requestInfo) {
})
}
export
function
saveLinkage
(
requestInfo
)
{
return
request
({
url
:
'/linkage/saveLinkage'
,
method
:
'post'
,
data
:
requestInfo
,
loading
:
true
})
}
frontend/src/components/canvas/components/Editor/LinkageField.vue
浏览文件 @
dcbea29b
<
template
>
<el-popover
width=
"
3
00"
width=
"
4
00"
trigger=
"click"
>
<el-row>
<el-col
:span=
"1
0
"
>
<div
class=
"ellip"
>
联动视图
</div>
<el-col
:span=
"1
1
"
>
<div
class=
"ellip"
>
{{
sourceLinkageInfo
.
targetViewName
}}
</div>
</el-col>
<el-col
:span=
"1
0
"
>
<el-col
:span=
"1
1
"
>
<div
class=
"ellip"
>
{{
linkageInfo
.
targetViewName
}}
</div>
</el-col>
</el-row>
linkageInfo
{{
linkageInfo
}}
<el-row
v-for=
"(item, index) in linkageInfo.linkageFields"
:key=
"index"
>
<el-col
:span=
"11"
>
<div
class=
"select-filed"
>
<el-select
v-model=
"item.sourceField"
size=
"mini"
placeholder=
"请选择"
>
<el-option
v-for=
"item in sourceLinkageInfo.targetViewFields"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
<span
style=
"float: left"
>
<svg-icon
v-if=
"item.deType === 0"
icon-class=
"field_text"
class=
"field-icon-text"
/>
<svg-icon
v-if=
"item.deType === 1"
icon-class=
"field_time"
class=
"field-icon-time"
/>
<svg-icon
v-if=
"item.deType === 2 || item.value === 3"
icon-class=
"field_value"
class=
"field-icon-value"
/>
<svg-icon
v-if=
"item.deType === 5"
icon-class=
"field_location"
class=
"field-icon-location"
/>
</span>
<span
style=
"float: left; color: #8492a6; font-size: 12px"
>
{{
item
.
name
}}
</span>
</el-option>
</el-select>
</div>
</el-col>
<el-col
:span=
"11"
>
<div
class=
"select-filed"
>
<el-select
v-model=
"item.targetField"
size=
"mini"
placeholder=
"请选择"
>
<el-option
v-for=
"item in linkageInfo.targetViewFields"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
<span
style=
"float: left"
>
<svg-icon
v-if=
"item.deType === 0"
icon-class=
"field_text"
class=
"field-icon-text"
/>
<svg-icon
v-if=
"item.deType === 1"
icon-class=
"field_time"
class=
"field-icon-time"
/>
<svg-icon
v-if=
"item.deType === 2 || item.value === 3"
icon-class=
"field_value"
class=
"field-icon-value"
/>
<svg-icon
v-if=
"item.deType === 5"
icon-class=
"field_location"
class=
"field-icon-location"
/>
</span>
<span
style=
"float: left; color: #8492a6; font-size: 12px"
>
{{
item
.
name
}}
</span>
</el-option>
</el-select>
</div>
</el-col>
<el-col
:span=
"2"
>
<div>
<el-button
icon=
"el-icon-delete"
type=
"text"
size=
"small"
style=
"float: left"
@
click=
"deleteLinkageField(index)"
/>
</div>
</el-col>
</el-row>
<el-row
class=
"bottom"
>
<el-button
size=
"mini"
type=
"success"
icon=
"el-icon-plus"
round
>
追加联动依赖字段
</el-button>
<el-button
size=
"mini"
type=
"success"
icon=
"el-icon-plus"
round
@
click=
"addLinkageField"
>
追加联动依赖字段
</el-button>
</el-row>
<!--
<el-button
slot=
"reference"
>
T
</el-button>
-->
...
...
@@ -60,6 +106,9 @@ export default {
linkageInfo
()
{
return
this
.
targetLinkageInfo
[
this
.
element
.
propValue
.
viewId
]
},
sourceLinkageInfo
()
{
return
this
.
targetLinkageInfo
[
this
.
curLinkageView
.
propValue
.
viewId
]
},
...
mapState
([
'menuTop'
,
'menuLeft'
,
...
...
@@ -81,6 +130,16 @@ export default {
},
linkageEdit
()
{
},
deleteLinkageField
(
index
)
{
this
.
linkageInfo
.
linkageFields
.
splice
(
index
,
1
)
},
addLinkageField
()
{
const
linkageFieldItem
=
{
sourceViewId
:
null
,
targetViewId
:
null
}
this
.
linkageInfo
.
linkageFields
.
push
(
linkageFieldItem
)
}
}
}
...
...
@@ -92,6 +151,7 @@ export default {
}
.bottom
{
margin-top
:
20px
;
text-align
:
center
;
}
...
...
@@ -110,4 +170,18 @@ export default {
border-radius
:
3px
;
}
.select-filed
{
/*width: 100%;*/
margin-left
:
10px
;
margin-right
:
10px
;
overflow
:
hidden
;
/*超出部分隐藏*/
white-space
:
nowrap
;
/*不换行*/
text-overflow
:ellipsis
;
/*超出部分文字以...显示*/
color
:
#3d4d66
;
font-size
:
12px
;
line-height
:
35px
;
height
:
35px
;
border-radius
:
3px
;
}
</
style
>
frontend/src/components/canvas/components/Editor/SettingMenu.vue
浏览文件 @
dcbea29b
...
...
@@ -124,7 +124,8 @@ export default {
},
linkageSetting
()
{
debugger
const
targetViewIds
=
this
.
componentData
.
filter
(
item
=>
item
.
type
===
'view'
&&
item
.
propValue
&&
item
.
propValue
.
viewId
&&
item
!==
this
.
curComponent
)
// sourceViewId 也加入查询
const
targetViewIds
=
this
.
componentData
.
filter
(
item
=>
item
.
type
===
'view'
&&
item
.
propValue
&&
item
.
propValue
.
viewId
)
.
map
(
item
=>
item
.
propValue
.
viewId
)
// 获取当前仪表板当前视图联动信息
...
...
frontend/src/components/canvas/components/Toolbar.vue
浏览文件 @
dcbea29b
...
...
@@ -101,6 +101,7 @@ import { commonStyle, commonAttr } from '@/components/canvas/custom-component/co
import
eventBus
from
'@/components/canvas/utils/eventBus'
import
{
deepCopy
}
from
'@/components/canvas/utils/utils'
import
{
panelSave
}
from
'@/api/panel/panel'
import
{
saveLinkage
}
from
'@/api/panel/linkage'
import
bus
from
'@/utils/bus'
import
{
DEFAULT_COMMON_CANVAS_STYLE_STRING
...
...
@@ -137,7 +138,9 @@ export default {
'changeTimes'
,
'snapshotIndex'
,
'lastSaveSnapshotIndex'
,
'linkageSettingStatus'
'linkageSettingStatus'
,
'curLinkageView'
,
'targetLinkageInfo'
]),
created
()
{
...
...
@@ -316,7 +319,14 @@ export default {
this
.
close
()
},
saveLinkage
()
{
this
.
cancelLinkageSettingStatus
()
const
request
=
{
panelId
:
this
.
$store
.
state
.
panel
.
panelInfo
.
id
,
sourceViewId
:
this
.
curLinkageView
.
propValue
.
viewId
,
linkageInfo
:
this
.
targetLinkageInfo
}
saveLinkage
(
request
).
then
(
rsp
=>
{
this
.
cancelLinkageSettingStatus
()
})
},
cancelLinkage
()
{
this
.
cancelLinkageSettingStatus
()
...
...
frontend/src/lang/en.js
浏览文件 @
dcbea29b
...
...
@@ -828,7 +828,10 @@ export default {
select_map_range
:
'Please select map range'
,
area
:
'Area'
,
placeholder_field
:
'Drag Field To Here'
,
axis_label_rotate
:
'Label Rotate'
axis_label_rotate
:
'Label Rotate'
,
chart_scatter_bubble
:
'Bubble'
,
chart_scatter
:
'Scatter'
,
bubble_size
:
'Bubble Size'
},
dataset
:
{
sheet_warn
:
'There are multiple sheet pages, and the first one is extracted by default'
,
...
...
frontend/src/lang/tw.js
浏览文件 @
dcbea29b
...
...
@@ -828,7 +828,10 @@ export default {
area
:
'地區'
,
stack_item
:
'堆疊項'
,
placeholder_field
:
'拖動字段至此處'
,
axis_label_rotate
:
'標簽角度'
axis_label_rotate
:
'標簽角度'
,
chart_scatter_bubble
:
'氣泡圖'
,
chart_scatter
:
'散點圖'
,
bubble_size
:
'氣泡大小'
},
dataset
:
{
sheet_warn
:
'有多個sheet頁面,默認抽取第一個'
,
...
...
frontend/src/lang/zh.js
浏览文件 @
dcbea29b
...
...
@@ -828,7 +828,10 @@ export default {
area
:
'地区'
,
stack_item
:
'堆叠项'
,
placeholder_field
:
'拖动字段至此处'
,
axis_label_rotate
:
'标签角度'
axis_label_rotate
:
'标签角度'
,
chart_scatter_bubble
:
'气泡图'
,
chart_scatter
:
'散点图'
,
bubble_size
:
'气泡大小'
},
dataset
:
{
sheet_warn
:
'有多个 Sheet 页,默认抽取第一个'
,
...
...
frontend/src/views/chart/chart/chart.js
浏览文件 @
dcbea29b
...
...
@@ -37,7 +37,9 @@ export const DEFAULT_SIZE = {
quotaFontSize
:
18
,
spaceSplit
:
10
,
dimensionShow
:
true
,
quotaShow
:
true
quotaShow
:
true
,
scatterSymbol
:
'circle'
,
scatterSymbolSize
:
20
}
export
const
DEFAULT_LABEL
=
{
show
:
false
,
...
...
@@ -630,3 +632,60 @@ export const BASE_MAP = {
}
]
}
export
const
BASE_SCATTER
=
{
title
:
{
text
:
''
,
textStyle
:
{
fontWeight
:
'normal'
}
},
grid
:
{
containLabel
:
true
},
tooltip
:
{},
legend
:
{
show
:
true
,
type
:
'scroll'
,
itemWidth
:
10
,
itemHeight
:
10
,
icon
:
'rect'
,
data
:
[]
},
xAxis
:
{
data
:
[]
},
yAxis
:
{
type
:
'value'
},
series
:
[],
dataZoom
:
[
{
type
:
'slider'
,
show
:
false
,
xAxisIndex
:
[
0
],
start
:
0
,
end
:
100
},
{
type
:
'slider'
,
show
:
false
,
yAxisIndex
:
[
0
],
left
:
'93%'
,
start
:
0
,
end
:
100
},
{
type
:
'inside'
,
xAxisIndex
:
[
0
],
start
:
0
,
end
:
100
},
{
type
:
'inside'
,
yAxisIndex
:
[
0
],
start
:
0
,
end
:
100
}
]
}
frontend/src/views/chart/chart/scatter/scatter.js
0 → 100644
浏览文件 @
dcbea29b
import
{
hexColorToRGBA
}
from
'@/views/chart/chart/util'
import
{
componentStyle
}
from
'../common/common'
export
function
baseScatterOption
(
chart_option
,
chart
)
{
// 处理shape attr
let
customAttr
=
{}
if
(
chart
.
customAttr
)
{
customAttr
=
JSON
.
parse
(
chart
.
customAttr
)
if
(
customAttr
.
color
)
{
chart_option
.
color
=
customAttr
.
color
.
colors
}
// tooltip
if
(
customAttr
.
tooltip
)
{
const
tooltip
=
JSON
.
parse
(
JSON
.
stringify
(
customAttr
.
tooltip
))
const
reg
=
new
RegExp
(
'
\
n'
,
'g'
)
tooltip
.
formatter
=
tooltip
.
formatter
.
replace
(
reg
,
'<br/>'
)
chart_option
.
tooltip
=
tooltip
}
}
// 处理data
if
(
chart
.
data
)
{
chart_option
.
title
.
text
=
chart
.
title
chart_option
.
xAxis
.
data
=
chart
.
data
.
x
for
(
let
i
=
0
;
i
<
chart
.
data
.
series
.
length
;
i
++
)
{
const
y
=
chart
.
data
.
series
[
i
]
// color
y
.
itemStyle
=
{
color
:
hexColorToRGBA
(
customAttr
.
color
.
colors
[
i
%
9
],
customAttr
.
color
.
alpha
)
}
// size
if
(
customAttr
.
size
)
{
y
.
symbol
=
customAttr
.
size
.
scatterSymbol
?
customAttr
.
size
.
scatterSymbol
:
'circle'
const
extBubble
=
JSON
.
parse
(
chart
.
extBubble
)
if
(
extBubble
&&
extBubble
.
length
>
0
)
{
y
.
symbolSize
=
funcSize
}
else
{
y
.
symbolSize
=
customAttr
.
size
.
scatterSymbolSize
?
customAttr
.
size
.
scatterSymbolSize
:
20
}
}
// label
if
(
customAttr
.
label
)
{
y
.
label
=
customAttr
.
label
}
y
.
type
=
'scatter'
chart_option
.
legend
.
data
.
push
(
y
.
name
)
chart_option
.
series
.
push
(
y
)
}
}
// console.log(chart_option);
componentStyle
(
chart_option
,
chart
)
return
chart_option
}
const
funcSize
=
function
(
data
)
{
return
data
[
2
]
}
frontend/src/views/chart/components/ChartComponent.vue
浏览文件 @
dcbea29b
...
...
@@ -5,7 +5,7 @@
</
template
>
<
script
>
import
{
BASE_BAR
,
BASE_LINE
,
HORIZONTAL_BAR
,
BASE_PIE
,
BASE_FUNNEL
,
BASE_RADAR
,
BASE_GAUGE
,
BASE_MAP
}
from
'../chart/chart'
import
{
BASE_BAR
,
BASE_LINE
,
HORIZONTAL_BAR
,
BASE_PIE
,
BASE_FUNNEL
,
BASE_RADAR
,
BASE_GAUGE
,
BASE_MAP
,
BASE_SCATTER
}
from
'../chart/chart'
import
{
baseBarOption
,
stackBarOption
,
horizontalBarOption
,
horizontalStackBarOption
}
from
'../chart/bar/bar'
import
{
baseLineOption
,
stackLineOption
}
from
'../chart/line/line'
import
{
basePieOption
,
rosePieOption
}
from
'../chart/pie/pie'
...
...
@@ -13,6 +13,7 @@ import { baseMapOption } from '../chart/map/map'
import
{
baseFunnelOption
}
from
'../chart/funnel/funnel'
import
{
baseRadarOption
}
from
'../chart/radar/radar'
import
{
baseGaugeOption
}
from
'../chart/gauge/gauge'
import
{
baseScatterOption
}
from
'../chart/scatter/scatter'
// import eventBus from '@/components/canvas/utils/eventBus'
import
{
uuid
}
from
'vue-uuid'
import
{
geoJson
}
from
'@/api/map/map'
...
...
@@ -95,6 +96,8 @@ export default {
chart_option
=
baseRadarOption
(
JSON
.
parse
(
JSON
.
stringify
(
BASE_RADAR
)),
chart
)
}
else
if
(
chart
.
type
===
'gauge'
)
{
chart_option
=
baseGaugeOption
(
JSON
.
parse
(
JSON
.
stringify
(
BASE_GAUGE
)),
chart
)
}
else
if
(
chart
.
type
===
'scatter'
)
{
chart_option
=
baseScatterOption
(
JSON
.
parse
(
JSON
.
stringify
(
BASE_SCATTER
)),
chart
)
}
if
(
chart
.
type
===
'map'
)
{
...
...
frontend/src/views/chart/components/drag-item/ChartDragItem.vue
浏览文件 @
dcbea29b
...
...
@@ -10,6 +10,7 @@
<svg-icon
v-if=
"item.sort === 'desc'"
icon-class=
"sort-desc"
class-name=
"field-icon-sort"
/>
</span>
<span
class=
"item-span-style"
:title=
"item.name"
>
{{
item
.
name
}}
</span>
<span
v-if=
"item.summary"
class=
"summary-span"
>
{{
$t
(
'chart.'
+
item
.
summary
)
}}
</span>
</el-tag>
<el-dropdown
v-else
trigger=
"click"
size=
"mini"
@
command=
"clickItem"
>
<span
class=
"el-dropdown-link"
>
...
...
@@ -23,10 +24,32 @@
<svg-icon
v-if=
"item.sort === 'desc'"
icon-class=
"sort-desc"
class-name=
"field-icon-sort"
/>
</span>
<span
class=
"item-span-style"
:title=
"item.name"
>
{{
item
.
name
}}
</span>
<span
v-if=
"item.summary"
class=
"summary-span"
>
{{
$t
(
'chart.'
+
item
.
summary
)
}}
</span>
<i
class=
"el-icon-arrow-down el-icon--right"
style=
"position: absolute;top: 6px;right: 10px;"
/>
</el-tag>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item>
<el-dropdown-item
v-show=
"conf && conf.includes('summary')"
>
<el-dropdown
placement=
"right-start"
size=
"mini"
style=
"width: 100%"
@
command=
"summary"
>
<span
class=
"el-dropdown-link inner-dropdown-menu"
>
<span>
<i
class=
"el-icon-notebook-2"
/>
<span>
{{
$t
(
'chart.summary'
)
}}
</span>
<span
class=
"summary-span-item"
>
(
{{
$t
(
'chart.'
+
item
.
summary
)
}}
)
</span>
</span>
<i
class=
"el-icon-arrow-right el-icon--right"
/>
</span>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
v-if=
"item.id === 'count' || item.deType === 0 || item.deType === 1"
:command=
"beforeSummary('count')"
>
{{
$t
(
'chart.count'
)
}}
</el-dropdown-item>
<el-dropdown-item
v-if=
"item.id !== 'count' && item.deType !== 0 && item.deType !== 1"
:command=
"beforeSummary('sum')"
>
{{
$t
(
'chart.sum'
)
}}
</el-dropdown-item>
<el-dropdown-item
v-if=
"item.id !== 'count' && item.deType !== 0 && item.deType !== 1"
:command=
"beforeSummary('avg')"
>
{{
$t
(
'chart.avg'
)
}}
</el-dropdown-item>
<el-dropdown-item
v-if=
"item.id !== 'count' && item.deType !== 0 && item.deType !== 1"
:command=
"beforeSummary('max')"
>
{{
$t
(
'chart.max'
)
}}
</el-dropdown-item>
<el-dropdown-item
v-if=
"item.id !== 'count' && item.deType !== 0 && item.deType !== 1"
:command=
"beforeSummary('min')"
>
{{
$t
(
'chart.min'
)
}}
</el-dropdown-item>
<el-dropdown-item
v-if=
"item.id !== 'count' && item.deType !== 0 && item.deType !== 1"
:command=
"beforeSummary('stddev_pop')"
>
{{
$t
(
'chart.stddev_pop'
)
}}
</el-dropdown-item>
<el-dropdown-item
v-if=
"item.id !== 'count' && item.deType !== 0 && item.deType !== 1"
:command=
"beforeSummary('var_pop')"
>
{{
$t
(
'chart.var_pop'
)
}}
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-dropdown-item>
<el-dropdown-item
v-show=
"conf && conf.includes('sort')"
>
<el-dropdown
placement=
"right-start"
size=
"mini"
style=
"width: 100%"
@
command=
"sort"
>
<span
class=
"el-dropdown-link inner-dropdown-menu"
>
<span>
...
...
@@ -67,6 +90,10 @@ export default {
index
:
{
type
:
Number
,
required
:
true
},
conf
:
{
type
:
String
,
required
:
true
}
},
data
()
{
...
...
@@ -103,6 +130,16 @@ export default {
type
:
type
}
},
summary
(
param
)
{
// console.log(param)
this
.
item
.
summary
=
param
.
type
this
.
$emit
(
'onItemChange'
,
this
.
item
)
},
beforeSummary
(
type
)
{
return
{
type
:
type
}
},
removeItem
()
{
this
.
item
.
index
=
this
.
index
this
.
$emit
(
'onItemRemove'
,
this
.
item
)
...
...
@@ -153,4 +190,16 @@ export default {
text-overflow
:
ellipsis
;
overflow
:
hidden
;
}
.summary-span-item
{
margin-left
:
4px
;
color
:
#878d9f
;
}
.summary-span
{
margin-left
:
4px
;
color
:
#878d9f
;
position
:
absolute
;
right
:
30px
;
}
</
style
>
frontend/src/views/chart/components/shape-attr/SizeSelector.vue
浏览文件 @
dcbea29b
...
...
@@ -135,6 +135,22 @@
<el-input-number
v-model=
"sizeForm.spaceSplit"
size=
"mini"
@
change=
"changeBarSizeCase"
/>
</el-form-item>
</el-form>
<el-form
v-show=
"chart.type && chart.type.includes('scatter')"
ref=
"sizeFormLine"
:disabled=
"param && !hasDataPermission('manage',param.privileges)"
:model=
"sizeForm"
label-width=
"80px"
size=
"mini"
>
<el-form-item
:label=
"$t('chart.line_symbol')"
class=
"form-item"
>
<el-select
v-model=
"sizeForm.scatterSymbol"
:placeholder=
"$t('chart.line_symbol')"
@
change=
"changeBarSizeCase"
>
<el-option
v-for=
"item in lineSymbolOptions"
:key=
"item.value"
:label=
"item.name"
:value=
"item.value"
/>
</el-select>
</el-form-item>
<el-form-item
:label=
"$t('chart.line_symbol_size')"
class=
"form-item form-item-slider"
>
<el-slider
v-model=
"sizeForm.scatterSymbolSize"
show-input
:show-input-controls=
"false"
input-size=
"mini"
:min=
"0"
:max=
"20"
@
change=
"changeBarSizeCase"
/>
</el-form-item>
</el-form>
</el-col>
<!--
<el-popover-->
<!-- placement="right"-->
...
...
frontend/src/views/chart/group/Group.vue
浏览文件 @
dcbea29b
...
...
@@ -747,6 +747,7 @@ export default {
view
.
extStack
=
JSON
.
stringify
([])
view
.
customFilter
=
JSON
.
stringify
([])
view
.
drillFields
=
JSON
.
stringify
([])
view
.
extBubble
=
JSON
.
stringify
([])
post
(
'/chart/view/save'
,
view
).
then
(
response
=>
{
this
.
closeCreateChart
()
this
.
$store
.
dispatch
(
'chart/setTableId'
,
null
)
...
...
frontend/src/views/chart/view/ChartEdit.vue
浏览文件 @
dcbea29b
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论