Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
njgzx
dataease
Commits
fbd0d390
提交
fbd0d390
authored
6月 07, 2022
作者:
fit2cloud-chenyw
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 过滤器枚举值排序
上级
54d8d59c
隐藏空白字符变更
内嵌
并排
正在显示
30 个修改的文件
包含
1269 行增加
和
60 行删除
+1269
-60
DataSetTableFieldController.java
...aease/controller/dataset/DataSetTableFieldController.java
+7
-5
MultFieldValuesRequest.java
...se/controller/request/dataset/MultFieldValuesRequest.java
+4
-0
DeSortDTO.java
backend/src/main/java/io/dataease/dto/dataset/DeSortDTO.java
+18
-0
DorisQueryProvider.java
...io/dataease/provider/engine/doris/DorisQueryProvider.java
+68
-0
MysqlQueryProvider.java
...io/dataease/provider/engine/mysql/MysqlQueryProvider.java
+68
-0
ApiProvider.java
...main/java/io/dataease/provider/query/api/ApiProvider.java
+11
-0
CKQueryProvider.java
...n/java/io/dataease/provider/query/ck/CKQueryProvider.java
+72
-0
Db2QueryProvider.java
...java/io/dataease/provider/query/db2/Db2QueryProvider.java
+71
-0
EsQueryProvider.java
...n/java/io/dataease/provider/query/es/EsQueryProvider.java
+68
-0
HiveQueryProvider.java
...va/io/dataease/provider/query/hive/HiveQueryProvider.java
+68
-0
ImpalaQueryProvider.java
...o/dataease/provider/query/impala/ImpalaQueryProvider.java
+68
-0
MongoQueryProvider.java
...o/dataease/provider/query/mongodb/MongoQueryProvider.java
+42
-0
MysqlQueryProvider.java
.../io/dataease/provider/query/mysql/MysqlQueryProvider.java
+72
-2
OracleQueryProvider.java
...o/dataease/provider/query/oracle/OracleQueryProvider.java
+72
-1
PgQueryProvider.java
...n/java/io/dataease/provider/query/pg/PgQueryProvider.java
+67
-0
RedshiftQueryProvider.java
...taease/provider/query/redshift/RedshiftQueryProvider.java
+68
-0
SqlserverQueryProvider.java
...ease/provider/query/sqlserver/SqlserverQueryProvider.java
+69
-3
DataSetFieldService.java
...java/io/dataease/service/dataset/DataSetFieldService.java
+7
-1
DirectFieldService.java
...aease/service/dataset/impl/direct/DirectFieldService.java
+31
-6
index.vue
frontend/src/components/DragItem/index.vue
+182
-10
DeSelect.vue
frontend/src/components/widget/DeWidget/DeSelect.vue
+25
-2
DeSelectGrid.vue
frontend/src/components/widget/DeWidget/DeSelectGrid.vue
+24
-2
DeSelectTree.vue
frontend/src/components/widget/DeWidget/DeSelectTree.vue
+29
-2
NumberSelectGridServiceImpl.js
...ponents/widget/serviceImpl/NumberSelectGridServiceImpl.js
+6
-1
NumberSelectServiceImpl.js
.../components/widget/serviceImpl/NumberSelectServiceImpl.js
+6
-1
TextSelectGridServiceImpl.js
...omponents/widget/serviceImpl/TextSelectGridServiceImpl.js
+6
-1
TextSelectServiceImpl.js
...rc/components/widget/serviceImpl/TextSelectServiceImpl.js
+5
-1
TextSelectTreeServiceImpl.js
...omponents/widget/serviceImpl/TextSelectTreeServiceImpl.js
+5
-1
filterDialog.vue
frontend/src/views/panel/filter/filterDialog.vue
+6
-2
FilterHead.vue
frontend/src/views/panel/filter/filterMain/FilterHead.vue
+24
-19
没有找到文件。
backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java
浏览文件 @
fbd0d390
...
...
@@ -34,6 +34,7 @@ import javax.annotation.Resource;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
/**
* @Author gin
...
...
@@ -159,13 +160,14 @@ public class DataSetTableFieldController {
public
List
<
Object
>
multFieldValues
(
@RequestBody
MultFieldValuesRequest
multFieldValuesRequest
)
throws
Exception
{
List
<
Object
>
results
=
new
ArrayList
<>();
for
(
String
fieldId
:
multFieldValuesRequest
.
getFieldIds
())
{
List
<
Object
>
fieldValues
=
dataSetFieldService
.
fieldValues
(
fieldId
,
multFieldValuesRequest
.
getUserId
(),
true
,
false
);
List
<
Object
>
fieldValues
=
dataSetFieldService
.
fieldValues
(
fieldId
,
multFieldValuesRequest
.
get
Sort
(),
multFieldValuesRequest
.
get
UserId
(),
true
,
false
);
if
(
CollectionUtil
.
isNotEmpty
(
fieldValues
))
{
results
.
addAll
(
fieldValues
);
}
}
ArrayList
<
Object
>
list
=
results
.
stream
().
collect
(
List
<
Object
>
list
=
results
.
stream
().
distinct
().
collect
(
Collectors
.
toList
());
/*ArrayList<Object> list = results.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(t -> {
...
...
@@ -173,7 +175,7 @@ public class DataSetTableFieldController {
return "";
return t.toString();
}))),
ArrayList:
:
new
));
ArrayList::new));
*/
return
list
;
}
...
...
@@ -185,13 +187,13 @@ public class DataSetTableFieldController {
DecodedJWT
jwt
=
JWT
.
decode
(
linkToken
);
Long
userId
=
jwt
.
getClaim
(
"userId"
).
asLong
();
multFieldValuesRequest
.
setUserId
(
userId
);
return
dataSetFieldService
.
fieldValues
(
multFieldValuesRequest
.
getFieldIds
(),
multFieldValuesRequest
.
getUserId
(),
true
,
true
,
false
);
return
dataSetFieldService
.
fieldValues
(
multFieldValuesRequest
.
getFieldIds
(),
multFieldValuesRequest
.
get
Sort
(),
multFieldValuesRequest
.
get
UserId
(),
true
,
true
,
false
);
}
@ApiIgnore
@PostMapping
(
"mappingFieldValues"
)
public
List
<
Object
>
mappingFieldValues
(
@RequestBody
MultFieldValuesRequest
multFieldValuesRequest
)
throws
Exception
{
return
dataSetFieldService
.
fieldValues
(
multFieldValuesRequest
.
getFieldIds
(),
multFieldValuesRequest
.
getUserId
(),
true
,
true
,
false
);
return
dataSetFieldService
.
fieldValues
(
multFieldValuesRequest
.
getFieldIds
(),
multFieldValuesRequest
.
get
Sort
(),
multFieldValuesRequest
.
get
UserId
(),
true
,
true
,
false
);
}
@ApiIgnore
...
...
backend/src/main/java/io/dataease/controller/request/dataset/MultFieldValuesRequest.java
浏览文件 @
fbd0d390
package
io
.
dataease
.
controller
.
request
.
dataset
;
import
io.dataease.dto.dataset.DeSortDTO
;
import
lombok.Data
;
import
java.util.ArrayList
;
...
...
@@ -9,4 +10,7 @@ import java.util.List;
public
class
MultFieldValuesRequest
{
List
<
String
>
fieldIds
=
new
ArrayList
<>();
Long
userId
=
null
;
private
DeSortDTO
sort
;
}
backend/src/main/java/io/dataease/dto/dataset/DeSortDTO.java
0 → 100644
浏览文件 @
fbd0d390
package
io
.
dataease
.
dto
.
dataset
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.List
;
@Data
public
class
DeSortDTO
implements
Serializable
{
private
String
id
;
private
String
name
;
private
String
sort
;
private
List
<
String
>
custom
;
}
backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -10,6 +10,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.query.QueryProvider
;
...
...
@@ -83,6 +84,11 @@ public class DorisQueryProvider extends QueryProvider {
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
DorisConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
...
...
@@ -149,9 +155,71 @@ public class DorisQueryProvider extends QueryProvider {
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
i
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
DorisConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getDataeaseName
());
}
else
{
originField
=
String
.
format
(
DorisConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getDataeaseName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
);
String
fieldName
=
""
;
// 处理横轴字段
if
(
f
.
getDeExtractType
()
==
1
)
{
if
(
f
.
getDeType
()
==
2
||
f
.
getDeType
()
==
3
)
{
fieldName
=
String
.
format
(
DorisConstants
.
UNIX_TIMESTAMP
,
originField
)
+
"*1000"
;
}
else
{
fieldName
=
originField
;
}
}
else
if
(
f
.
getDeExtractType
()
==
0
)
{
if
(
f
.
getDeType
()
==
2
)
{
fieldName
=
String
.
format
(
DorisConstants
.
CAST
,
originField
,
DorisConstants
.
DEFAULT_INT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
3
)
{
fieldName
=
String
.
format
(
DorisConstants
.
CAST
,
originField
,
DorisConstants
.
DEFAULT_FLOAT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
1
)
{
fieldName
=
String
.
format
(
DorisConstants
.
STR_TO_DATE
,
originField
,
DorisConstants
.
DEFAULT_DATE_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
else
{
if
(
f
.
getDeType
()
==
1
)
{
String
cast
=
String
.
format
(
DorisConstants
.
CAST
,
originField
,
DorisConstants
.
DEFAULT_INT_FORMAT
)
+
"/1000"
;
fieldName
=
String
.
format
(
DorisConstants
.
FROM_UNIXTIME
,
cast
,
DorisConstants
.
DEFAULT_DATE_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
2
)
{
fieldName
=
String
.
format
(
DorisConstants
.
CAST
,
originField
,
DorisConstants
.
DEFAULT_INT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
3
)
{
fieldName
=
String
.
format
(
DorisConstants
.
CAST
,
originField
,
DorisConstants
.
DEFAULT_FLOAT_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sql
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sql
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
...
...
backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -10,6 +10,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.query.QueryProvider
;
...
...
@@ -83,6 +84,11 @@ public class MysqlQueryProvider extends QueryProvider {
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
MysqlConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
...
...
@@ -149,9 +155,71 @@ public class MysqlQueryProvider extends QueryProvider {
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
i
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
MysqlConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getDataeaseName
());
}
else
{
originField
=
String
.
format
(
MysqlConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getDataeaseName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
);
String
fieldName
=
""
;
// 处理横轴字段
if
(
f
.
getDeExtractType
()
==
1
)
{
if
(
f
.
getDeType
()
==
2
||
f
.
getDeType
()
==
3
)
{
fieldName
=
String
.
format
(
MysqlConstants
.
UNIX_TIMESTAMP
,
originField
)
+
"*1000"
;
}
else
{
fieldName
=
originField
;
}
}
else
if
(
f
.
getDeExtractType
()
==
0
)
{
if
(
f
.
getDeType
()
==
2
)
{
fieldName
=
String
.
format
(
MysqlConstants
.
CAST
,
originField
,
MysqlConstants
.
DEFAULT_INT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
3
)
{
fieldName
=
String
.
format
(
MysqlConstants
.
CAST
,
originField
,
MysqlConstants
.
DEFAULT_FLOAT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
1
)
{
fieldName
=
String
.
format
(
MysqlConstants
.
STR_TO_DATE
,
originField
,
MysqlConstants
.
DEFAULT_DATE_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
else
{
if
(
f
.
getDeType
()
==
1
)
{
String
cast
=
String
.
format
(
MysqlConstants
.
CAST
,
originField
,
MysqlConstants
.
DEFAULT_INT_FORMAT
)
+
"/1000"
;
fieldName
=
String
.
format
(
MysqlConstants
.
FROM_UNIXTIME
,
cast
,
MysqlConstants
.
DEFAULT_DATE_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
2
)
{
fieldName
=
String
.
format
(
MysqlConstants
.
CAST
,
originField
,
MysqlConstants
.
DEFAULT_INT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
3
)
{
fieldName
=
String
.
format
(
MysqlConstants
.
CAST
,
originField
,
MysqlConstants
.
DEFAULT_FLOAT_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sql
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sql
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
...
...
backend/src/main/java/io/dataease/provider/query/api/ApiProvider.java
浏览文件 @
fbd0d390
...
...
@@ -5,6 +5,7 @@ import io.dataease.plugins.common.base.domain.DatasetTableField;
import
io.dataease.plugins.common.base.domain.Datasource
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.query.QueryProvider
;
import
org.springframework.stereotype.Service
;
...
...
@@ -71,6 +72,16 @@ public class ApiProvider extends QueryProvider {
return
null
;
}
@Override
public
String
createQuerySQL
(
String
s
,
List
<
DatasetTableField
>
list
,
boolean
b
,
Datasource
datasource
,
List
<
ChartFieldCustomFilterDTO
>
list1
,
List
<
DeSortField
>
list2
)
{
return
null
;
}
@Override
public
String
createQuerySQLAsTmp
(
String
s
,
List
<
DatasetTableField
>
list
,
boolean
b
,
List
<
ChartFieldCustomFilterDTO
>
list1
,
List
<
DeSortField
>
list2
)
{
return
null
;
}
@Override
public
String
getSQLAsTmp
(
String
s
,
List
<
ChartViewFieldDTO
>
list
,
List
<
ChartViewFieldDTO
>
list1
,
List
<
ChartFieldCustomFilterDTO
>
list2
,
List
<
ChartExtFilterRequest
>
list3
,
ChartViewWithBLOBs
chartViewWithBLOBs
)
{
return
null
;
...
...
backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -12,6 +12,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.query.QueryProvider
;
...
...
@@ -113,6 +114,11 @@ public class CKQueryProvider extends QueryProvider {
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
CKConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
...
...
@@ -179,9 +185,75 @@ public class CKQueryProvider extends QueryProvider {
List
<
String
>
wheres
=
new
ArrayList
<>();
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
i
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
CKConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
CKConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
);
String
fieldName
=
""
;
// 处理横轴字段
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
(
CKConstants
.
toInt32
,
String
.
format
(
CKConstants
.
toDateTime
,
originField
))
+
"*1000"
;
}
else
{
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
(
CKConstants
.
toInt64
,
originField
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
CKConstants
.
toFloat64
,
originField
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
fieldName
=
String
.
format
(
CKConstants
.
toDateTime
,
originField
);
}
else
{
fieldName
=
originField
;
}
}
else
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
String
cast
=
String
.
format
(
CKConstants
.
toFloat64
,
originField
);
fieldName
=
String
.
format
(
CKConstants
.
toDateTime
,
cast
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
)
{
fieldName
=
String
.
format
(
CKConstants
.
toInt64
,
originField
);
}
else
{
fieldName
=
originField
;
}
}
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
...
...
backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -14,6 +14,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.query.QueryProvider
;
...
...
@@ -84,6 +85,11 @@ public class Db2QueryProvider extends QueryProvider {
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
Db2Constants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
...
...
@@ -153,9 +159,74 @@ public class Db2QueryProvider extends QueryProvider {
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
i
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
Db2Constants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
Db2Constants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
);
String
fieldName
=
""
;
// 处理横轴字段
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_TIME
)
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
||
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
Db2Constants
.
UNIX_TIMESTAMP
,
originField
);
}
else
{
if
(
f
.
getType
().
equalsIgnoreCase
(
"TIME"
)){
fieldName
=
String
.
format
(
Db2Constants
.
FORMAT_TIME
,
originField
,
Db2Constants
.
DEFAULT_DATE_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
}
else
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_STRING
)
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
)
{
fieldName
=
String
.
format
(
Db2Constants
.
CAST
,
originField
,
Db2Constants
.
DEFAULT_INT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
Db2Constants
.
CAST
,
originField
,
Db2Constants
.
DEFAULT_FLOAT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
fieldName
=
String
.
format
(
Db2Constants
.
DATE_FORMAT
,
originField
,
Db2Constants
.
DEFAULT_DATE_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
else
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
String
cast
=
String
.
format
(
Db2Constants
.
CAST
,
originField
,
Db2Constants
.
DEFAULT_INT_FORMAT
);
fieldName
=
String
.
format
(
Db2Constants
.
FROM_UNIXTIME
,
cast
,
Db2Constants
.
DEFAULT_DATE_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
)
{
fieldName
=
String
.
format
(
Db2Constants
.
CAST
,
originField
,
Db2Constants
.
DEFAULT_INT_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
...
...
backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -12,6 +12,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.query.QueryProvider
;
...
...
@@ -116,6 +117,11 @@ public class EsQueryProvider extends QueryProvider {
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
EsSqlLConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
...
...
@@ -180,9 +186,71 @@ public class EsQueryProvider extends QueryProvider {
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
i
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
DeTypeConstants
.
DE_INT
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
DeTypeConstants
.
DE_TIME
)
{
originField
=
String
.
format
(
EsSqlLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
EsSqlLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
);
String
fieldName
=
""
;
// 处理横轴字段
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_TIME
)
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
||
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
EsSqlLConstants
.
CAST
,
originField
,
"bigint"
);
}
else
{
fieldName
=
originField
;
}
}
else
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_STRING
)
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
)
{
fieldName
=
String
.
format
(
EsSqlLConstants
.
CAST
,
originField
,
"bigint"
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
EsSqlLConstants
.
CAST
,
originField
,
"double"
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
fieldName
=
String
.
format
(
EsSqlLConstants
.
CAST
,
originField
,
"timestamp"
);
}
else
{
fieldName
=
originField
;
}
}
else
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
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
,
"bigint"
);
}
else
{
fieldName
=
originField
;
}
}
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
...
...
backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -12,6 +12,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.query.QueryProvider
;
...
...
@@ -77,6 +78,11 @@ public class HiveQueryProvider extends QueryProvider {
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
HiveConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
...
...
@@ -139,9 +145,71 @@ public class HiveQueryProvider extends QueryProvider {
List
<
String
>
wheres
=
new
ArrayList
<>();
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
i
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
HiveConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
HiveConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
i
);
String
fieldName
=
""
;
// 处理横轴字段
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_TIME
)
{
if
(
f
.
getDeType
()
==
2
||
f
.
getDeType
()
==
3
)
{
fieldName
=
String
.
format
(
HiveConstants
.
UNIX_TIMESTAMP
,
originField
)
+
"*1000"
;
}
else
{
fieldName
=
originField
;
}
}
else
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_STRING
)
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
)
{
fieldName
=
String
.
format
(
HiveConstants
.
CAST
,
originField
,
HiveConstants
.
DEFAULT_INT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
HiveConstants
.
CAST
,
originField
,
HiveConstants
.
DEFAULT_FLOAT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
fieldName
=
String
.
format
(
HiveConstants
.
STR_TO_DATE
,
originField
,
HiveConstants
.
DEFAULT_DATE_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
else
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
String
cast
=
String
.
format
(
HiveConstants
.
CAST
,
originField
,
HiveConstants
.
DEFAULT_INT_FORMAT
)
+
"/1000"
;
fieldName
=
String
.
format
(
HiveConstants
.
FROM_UNIXTIME
,
cast
,
HiveConstants
.
DEFAULT_DATE_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
2
)
{
fieldName
=
String
.
format
(
HiveConstants
.
CAST
,
originField
,
HiveConstants
.
DEFAULT_INT_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
...
...
backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -12,6 +12,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.query.QueryProvider
;
...
...
@@ -74,6 +75,11 @@ public class ImpalaQueryProvider extends QueryProvider {
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
ImpalaConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
...
...
@@ -136,14 +142,76 @@ public class ImpalaQueryProvider extends QueryProvider {
List
<
String
>
wheres
=
new
ArrayList
<>();
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
}
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
index
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
ImpalaConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
ImpalaConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
index
);
String
fieldName
=
""
;
// 处理横轴字段
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_TIME
)
{
//时间转数值
if
(
f
.
getDeType
()
==
2
||
f
.
getDeType
()
==
3
)
{
fieldName
=
String
.
format
(
ImpalaConstants
.
UNIX_TIMESTAMP
,
originField
)
+
"*1000"
;
}
else
{
fieldName
=
originField
;
}
}
else
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_STRING
)
{
//字符串转时间
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
)
{
fieldName
=
String
.
format
(
ImpalaConstants
.
CAST
,
originField
,
ImpalaConstants
.
DEFAULT_INT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
ImpalaConstants
.
CAST
,
originField
,
ImpalaConstants
.
DEFAULT_FLOAT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
fieldName
=
String
.
format
(
ImpalaConstants
.
DATE_FORMAT
,
originField
,
ImpalaConstants
.
DEFAULT_DATE_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
else
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
//数值转时间
String
cast
=
String
.
format
(
ImpalaConstants
.
CAST
,
originField
,
ImpalaConstants
.
DEFAULT_INT_FORMAT
)
+
"/1000"
;
fieldName
=
String
.
format
(
ImpalaConstants
.
FROM_UNIXTIME
,
cast
,
ImpalaConstants
.
DEFAULT_DATE_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
2
)
{
fieldName
=
String
.
format
(
ImpalaConstants
.
CAST
,
originField
,
ImpalaConstants
.
DEFAULT_INT_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
@Override
public
String
createQueryTableWithPage
(
String
table
,
List
<
DatasetTableField
>
fields
,
Integer
page
,
Integer
pageSize
,
Integer
realSize
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
null
,
fieldCustomFilter
)
+
" LIMIT "
+
realSize
;
...
...
backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -12,6 +12,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.query.QueryProvider
;
...
...
@@ -86,6 +87,11 @@ public class MongoQueryProvider extends QueryProvider {
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
MongoConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
...
...
@@ -125,14 +131,50 @@ public class MongoQueryProvider extends QueryProvider {
List
<
String
>
wheres
=
new
ArrayList
<>();
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
}
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
index
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
DeTypeConstants
.
DE_INT
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
DeTypeConstants
.
DE_TIME
)
{
originField
=
String
.
format
(
MongoConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
MongoConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
index
);
String
fieldName
=
""
;
fieldName
=
originField
;
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
@Override
public
String
createQueryTableWithPage
(
String
table
,
List
<
DatasetTableField
>
fields
,
Integer
page
,
Integer
pageSize
,
Integer
realSize
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
null
,
fieldCustomFilter
)
+
" LIMIT "
+
(
page
-
1
)
*
pageSize
+
","
+
realSize
;
...
...
backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -11,6 +11,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.query.QueryProvider
;
...
...
@@ -84,6 +85,60 @@ public class MysqlQueryProvider extends QueryProvider {
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
null
);
}
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
index
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
MySQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
index
);
String
fieldName
=
""
;
// 处理横轴字段
if
(
f
.
getDeExtractType
()
==
1
)
{
if
(
f
.
getDeType
()
==
2
||
f
.
getDeType
()
==
3
)
{
fieldName
=
String
.
format
(
MySQLConstants
.
UNIX_TIMESTAMP
,
originField
)
+
"*1000"
;
}
else
{
fieldName
=
String
.
format
(
MySQLConstants
.
DATE_FORMAT
,
originField
,
MySQLConstants
.
DEFAULT_DATE_FORMAT
);
}
}
else
if
(
f
.
getDeExtractType
()
==
0
)
{
if
(
f
.
getDeType
()
==
2
)
{
fieldName
=
String
.
format
(
MySQLConstants
.
CAST
,
originField
,
MySQLConstants
.
DEFAULT_INT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
3
)
{
fieldName
=
String
.
format
(
MySQLConstants
.
CAST
,
originField
,
MySQLConstants
.
DEFAULT_FLOAT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
1
)
{
fieldName
=
String
.
format
(
MySQLConstants
.
STR_TO_DATE
,
originField
,
MySQLConstants
.
DEFAULT_DATE_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
else
{
if
(
f
.
getDeType
()
==
1
)
{
String
cast
=
String
.
format
(
MySQLConstants
.
CAST
,
originField
,
MySQLConstants
.
DEFAULT_INT_FORMAT
)
+
"/1000"
;
fieldName
=
String
.
format
(
MySQLConstants
.
FROM_UNIXTIME
,
cast
,
MySQLConstants
.
DEFAULT_DATE_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
2
)
{
fieldName
=
String
.
format
(
MySQLConstants
.
CAST
,
originField
,
MySQLConstants
.
DEFAULT_INT_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
MySQLConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
...
...
@@ -137,6 +192,8 @@ public class MysqlQueryProvider extends QueryProvider {
}
}
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"previewSql"
);
st_sql
.
add
(
"isGroup"
,
isGroup
);
...
...
@@ -148,12 +205,25 @@ public class MysqlQueryProvider extends QueryProvider {
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
@Override
...
...
backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -13,6 +13,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.entity.JdbcConfiguration
;
...
...
@@ -98,7 +99,7 @@ public class OracleQueryProvider extends QueryProvider {
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
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
)))
...
...
@@ -107,6 +108,8 @@ public class OracleQueryProvider extends QueryProvider {
setSchema
(
tableObj
,
ds
);
List
<
SQLObj
>
xFields
=
xFields
(
table
,
fields
);
STGroup
stg
=
new
STGroupFile
(
SQLConstants
.
SQL_TEMPLATE
);
ST
st_sql
=
stg
.
getInstanceOf
(
"previewSql"
);
st_sql
.
add
(
"isGroup"
,
isGroup
);
...
...
@@ -116,9 +119,34 @@ public class OracleQueryProvider extends QueryProvider {
List
<
String
>
wheres
=
new
ArrayList
<>();
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
public
void
setSchema
(
SQLObj
tableObj
,
Datasource
ds
)
{
if
(
ds
!=
null
&&
!
tableObj
.
getTableName
().
startsWith
(
"("
)
&&
!
tableObj
.
getTableName
().
endsWith
(
")"
))
{
String
schema
=
new
Gson
().
fromJson
(
ds
.
getConfiguration
(),
JdbcConfiguration
.
class
).
getSchema
();
...
...
@@ -127,6 +155,49 @@ public class OracleQueryProvider extends QueryProvider {
}
}
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
index
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
OracleConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
OracleConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
OracleConstants
.
ALIAS_FIX
,
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
index
));
String
fieldName
=
""
;
// 处理横轴字段
if
(
f
.
getDeExtractType
()
==
1
)
{
if
(
f
.
getDeType
()
==
2
||
f
.
getDeType
()
==
3
)
{
fieldName
=
String
.
format
(
OracleConstants
.
UNIX_TIMESTAMP
,
originField
)
+
"*1000"
;
}
else
{
fieldName
=
originField
;
}
}
else
if
(
f
.
getDeExtractType
()
==
0
)
{
if
(
f
.
getDeType
()
==
2
)
{
fieldName
=
String
.
format
(
OracleConstants
.
CAST
,
originField
,
OracleConstants
.
DEFAULT_INT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
3
)
{
fieldName
=
String
.
format
(
OracleConstants
.
CAST
,
originField
,
OracleConstants
.
DEFAULT_FLOAT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
1
)
{
fieldName
=
String
.
format
(
OracleConstants
.
DATE_FORMAT
,
originField
,
OracleConstants
.
DEFAULT_DATE_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
else
{
if
(
f
.
getDeType
()
==
1
)
{
String
cast
=
String
.
format
(
OracleConstants
.
CAST
,
originField
,
OracleConstants
.
DEFAULT_INT_FORMAT
)
+
"/1000"
;
fieldName
=
String
.
format
(
OracleConstants
.
FROM_UNIXTIME
,
cast
,
OracleConstants
.
DEFAULT_DATE_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
2
)
{
fieldName
=
String
.
format
(
OracleConstants
.
CAST
,
originField
,
OracleConstants
.
DEFAULT_INT_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
private
List
<
SQLObj
>
xFields
(
String
table
,
List
<
DatasetTableField
>
fields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
OracleConstants
.
KEYWORD_TABLE
,
table
))
...
...
backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -10,6 +10,7 @@ import io.dataease.plugins.common.constants.*;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.entity.JdbcConfiguration
;
...
...
@@ -99,6 +100,11 @@ public class PgQueryProvider extends QueryProvider {
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
PgConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
...
...
@@ -163,9 +169,70 @@ public class PgQueryProvider extends QueryProvider {
List
<
String
>
wheres
=
new
ArrayList
<>();
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
index
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
PgConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
PgConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
index
);
String
fieldName
=
""
;
// 处理横轴字段
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_TIME
)
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
||
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
PgConstants
.
UNIX_TIMESTAMP
,
originField
);
}
else
{
fieldName
=
originField
;
}
}
else
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_STRING
)
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
)
{
fieldName
=
String
.
format
(
PgConstants
.
CAST
,
originField
,
PgConstants
.
DEFAULT_INT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
PgConstants
.
CAST
,
originField
,
PgConstants
.
DEFAULT_FLOAT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
fieldName
=
String
.
format
(
PgConstants
.
CAST
,
originField
,
"timestamp"
);
}
else
{
fieldName
=
originField
;
}
}
else
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
String
cast
=
String
.
format
(
PgConstants
.
CAST
,
originField
,
"bigint"
);
fieldName
=
String
.
format
(
PgConstants
.
FROM_UNIXTIME
,
cast
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
)
{
fieldName
=
String
.
format
(
PgConstants
.
CAST
,
originField
,
PgConstants
.
DEFAULT_INT_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
...
...
backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -10,6 +10,7 @@ import io.dataease.plugins.common.constants.*;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.entity.JdbcConfiguration
;
...
...
@@ -107,6 +108,11 @@ public class RedshiftQueryProvider extends QueryProvider {
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
PgConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
...
...
@@ -171,9 +177,71 @@ public class RedshiftQueryProvider extends QueryProvider {
List
<
String
>
wheres
=
new
ArrayList
<>();
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
index
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
PgConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
PgConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
index
);
String
fieldName
=
""
;
// 处理横轴字段
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_TIME
)
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
||
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
PgConstants
.
UNIX_TIMESTAMP
,
originField
);
}
else
{
fieldName
=
originField
;
}
}
else
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_STRING
)
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
)
{
fieldName
=
String
.
format
(
PgConstants
.
CAST
,
originField
,
PgConstants
.
DEFAULT_INT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
PgConstants
.
CAST
,
originField
,
PgConstants
.
DEFAULT_FLOAT_FORMAT
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
fieldName
=
String
.
format
(
PgConstants
.
CAST
,
originField
,
"timestamp"
);
}
else
{
fieldName
=
originField
;
}
}
else
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
String
cast
=
String
.
format
(
PgConstants
.
CAST
,
originField
,
"bigint"
);
fieldName
=
String
.
format
(
PgConstants
.
FROM_UNIXTIME
,
cast
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
)
{
fieldName
=
String
.
format
(
PgConstants
.
CAST
,
originField
,
PgConstants
.
DEFAULT_INT_FORMAT
);
}
else
{
fieldName
=
originField
;
}
}
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
...
...
backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java
浏览文件 @
fbd0d390
...
...
@@ -13,6 +13,7 @@ import io.dataease.plugins.common.constants.SqlServerSQLConstants;
import
io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.chart.ChartViewFieldDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.dto.sqlObj.SQLObj
;
import
io.dataease.plugins.common.request.chart.ChartExtFilterRequest
;
import
io.dataease.plugins.datasource.entity.JdbcConfiguration
;
...
...
@@ -93,6 +94,21 @@ public class SqlserverQueryProvider extends QueryProvider {
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
table
,
fields
,
isGroup
,
ds
,
fieldCustomFilter
,
null
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
,
sortFields
);
}
@Override
public
String
createQuerySQL
(
String
table
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
Datasource
ds
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
,
List
<
DeSortField
>
sortFields
)
{
SQLObj
tableObj
=
SQLObj
.
builder
()
.
tableName
((
table
.
startsWith
(
"("
)
&&
table
.
endsWith
(
")"
))
?
table
:
String
.
format
(
SqlServerSQLConstants
.
KEYWORD_TABLE
,
table
))
.
tableAlias
(
String
.
format
(
TABLE_ALIAS_PREFIX
,
0
))
...
...
@@ -157,12 +173,62 @@ public class SqlserverQueryProvider extends QueryProvider {
List
<
String
>
wheres
=
new
ArrayList
<>();
if
(
customWheres
!=
null
)
wheres
.
add
(
customWheres
);
if
(
CollectionUtils
.
isNotEmpty
(
wheres
))
st_sql
.
add
(
"filters"
,
wheres
);
List
<
SQLObj
>
xOrders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
sortFields
))
{
int
step
=
fields
.
size
();
for
(
int
i
=
step
;
i
<
(
step
+
sortFields
.
size
());
i
++)
{
DeSortField
deSortField
=
sortFields
.
get
(
i
-
step
);
SQLObj
order
=
buildSortField
(
deSortField
,
tableObj
,
i
);
xOrders
.
add
(
order
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
xOrders
))
{
st_sql
.
add
(
"orders"
,
xOrders
);
}
return
st_sql
.
render
();
}
@Override
public
String
createQuerySQLAsTmp
(
String
sql
,
List
<
DatasetTableField
>
fields
,
boolean
isGroup
,
List
<
ChartFieldCustomFilterDTO
>
fieldCustomFilter
)
{
return
createQuerySQL
(
"("
+
sqlFix
(
sql
)
+
")"
,
fields
,
isGroup
,
null
,
fieldCustomFilter
);
private
SQLObj
buildSortField
(
DeSortField
f
,
SQLObj
tableObj
,
int
index
)
{
String
originField
;
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
2
)
{
// 解析origin name中有关联的字段生成sql表达式
originField
=
calcFieldRegex
(
f
.
getOriginName
(),
tableObj
);
}
else
if
(
ObjectUtils
.
isNotEmpty
(
f
.
getExtField
())
&&
f
.
getExtField
()
==
1
)
{
originField
=
String
.
format
(
SqlServerSQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
else
{
originField
=
String
.
format
(
SqlServerSQLConstants
.
KEYWORD_FIX
,
tableObj
.
getTableAlias
(),
f
.
getOriginName
());
}
String
fieldAlias
=
String
.
format
(
SQLConstants
.
FIELD_ALIAS_X_PREFIX
,
index
);
String
fieldName
;
// 处理横轴字段
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_TIME
)
{
// 时间 转为 数值
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
||
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
SqlServerSQLConstants
.
UNIX_TIMESTAMP
,
originField
);
}
else
{
fieldName
=
originField
;
}
}
else
if
(
f
.
getDeExtractType
()
==
DeTypeConstants
.
DE_STRING
)
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
)
{
fieldName
=
String
.
format
(
SqlServerSQLConstants
.
CONVERT
,
SqlServerSQLConstants
.
DEFAULT_INT_FORMAT
,
originField
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_FLOAT
)
{
fieldName
=
String
.
format
(
SqlServerSQLConstants
.
CONVERT
,
SqlServerSQLConstants
.
DEFAULT_FLOAT_FORMAT
,
originField
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
//字符串转时间
fieldName
=
String
.
format
(
SqlServerSQLConstants
.
STRING_TO_DATE
,
originField
);
}
else
{
fieldName
=
originField
;
}
}
else
{
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_TIME
)
{
// 数值转时间
String
cast
=
String
.
format
(
SqlServerSQLConstants
.
LONG_TO_DATE
,
originField
+
"/1000"
);
fieldName
=
String
.
format
(
SqlServerSQLConstants
.
FROM_UNIXTIME
,
cast
);
}
else
if
(
f
.
getDeType
()
==
DeTypeConstants
.
DE_INT
)
{
fieldName
=
String
.
format
(
SqlServerSQLConstants
.
CONVERT
,
SqlServerSQLConstants
.
DEFAULT_INT_FORMAT
,
originField
);
}
else
{
fieldName
=
originField
;
}
}
SQLObj
result
=
SQLObj
.
builder
().
orderField
(
originField
).
orderAlias
(
originField
).
orderDirection
(
f
.
getOrderDirection
()).
build
();
return
result
;
}
@Override
...
...
backend/src/main/java/io/dataease/service/dataset/DataSetFieldService.java
浏览文件 @
fbd0d390
package
io
.
dataease
.
service
.
dataset
;
import
io.dataease.dto.dataset.DeSortDTO
;
import
java.util.List
;
public
interface
DataSetFieldService
{
List
<
Object
>
fieldValues
(
String
fieldId
,
Long
userId
,
Boolean
userPermissions
,
Boolean
rowAndColumnMgm
)
throws
Exception
;
List
<
Object
>
fieldValues
(
List
<
String
>
fieldIds
,
Long
userId
,
Boolean
userPermissions
,
Boolean
needMapping
,
Boolean
rowAndColumnMgm
)
throws
Exception
;
List
<
Object
>
fieldValues
(
String
fieldId
,
DeSortDTO
sortDTO
,
Long
userId
,
Boolean
userPermissions
,
Boolean
rowAndColumnMgm
)
throws
Exception
;
List
<
Object
>
fieldValues
(
List
<
String
>
fieldIds
,
DeSortDTO
sortDTO
,
Long
userId
,
Boolean
userPermissions
,
Boolean
needMapping
,
Boolean
rowAndColumnMgm
)
throws
Exception
;
}
backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java
浏览文件 @
fbd0d390
...
...
@@ -3,13 +3,16 @@ package io.dataease.service.dataset.impl.direct;
import
com.google.gson.Gson
;
import
io.dataease.commons.exception.DEException
;
import
io.dataease.commons.model.BaseTreeNode
;
import
io.dataease.commons.utils.BeanUtils
;
import
io.dataease.commons.utils.TreeUtils
;
import
io.dataease.dto.dataset.DeSortDTO
;
import
io.dataease.plugins.common.base.domain.DatasetTable
;
import
io.dataease.plugins.common.base.domain.DatasetTableField
;
import
io.dataease.plugins.common.base.domain.Datasource
;
import
io.dataease.commons.constants.ColumnPermissionConstants
;
import
io.dataease.i18n.Translator
;
import
io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO
;
import
io.dataease.plugins.common.dto.datasource.DeSortField
;
import
io.dataease.plugins.common.request.datasource.DatasourceRequest
;
import
io.dataease.plugins.datasource.provider.Provider
;
import
io.dataease.plugins.datasource.query.QueryProvider
;
...
...
@@ -48,11 +51,28 @@ public class DirectFieldService implements DataSetFieldService {
public
List
<
Object
>
fieldValues
(
String
fieldId
,
Long
userId
,
Boolean
userPermissions
,
Boolean
rowAndColumnMgm
)
throws
Exception
{
List
<
String
>
filedIds
=
new
ArrayList
<>();
filedIds
.
add
(
fieldId
);
return
fieldValues
(
filedIds
,
userId
,
userPermissions
,
false
,
rowAndColumnMgm
);
return
fieldValues
(
filedIds
,
null
,
userId
,
userPermissions
,
false
,
rowAndColumnMgm
);
}
@Override
public
List
<
Object
>
fieldValues
(
List
<
String
>
fieldIds
,
Long
userId
,
Boolean
userPermissions
,
Boolean
needMapping
,
Boolean
rowAndColumnMgm
)
throws
Exception
{
public
List
<
Object
>
fieldValues
(
String
fieldId
,
DeSortDTO
sortDTO
,
Long
userId
,
Boolean
userPermissions
,
Boolean
rowAndColumnMgm
)
throws
Exception
{
List
<
String
>
filedIds
=
new
ArrayList
<>();
filedIds
.
add
(
fieldId
);
return
fieldValues
(
filedIds
,
sortDTO
,
userId
,
userPermissions
,
false
,
rowAndColumnMgm
);
}
public
List
<
DeSortField
>
buildSorts
(
List
<
DatasetTableField
>
allFields
,
DeSortDTO
sortDTO
)
{
if
(
ObjectUtils
.
isEmpty
(
sortDTO
)
||
StringUtils
.
isBlank
(
sortDTO
.
getId
())
||
StringUtils
.
isBlank
(
sortDTO
.
getSort
()))
return
null
;
return
allFields
.
stream
().
filter
(
field
->
StringUtils
.
equals
(
sortDTO
.
getId
(),
field
.
getId
())).
map
(
field
->
{
DeSortField
deSortField
=
BeanUtils
.
copyBean
(
new
DeSortField
(),
field
);
deSortField
.
setOrderDirection
(
sortDTO
.
getSort
());
return
deSortField
;
}).
collect
(
Collectors
.
toList
());
}
@Override
public
List
<
Object
>
fieldValues
(
List
<
String
>
fieldIds
,
DeSortDTO
sortDTO
,
Long
userId
,
Boolean
userPermissions
,
Boolean
needMapping
,
Boolean
rowAndColumnMgm
)
throws
Exception
{
String
fieldId
=
fieldIds
.
get
(
0
);
DatasetTableField
field
=
dataSetTableFieldsService
.
selectByPrimaryKey
(
fieldId
);
if
(
field
==
null
||
StringUtils
.
isEmpty
(
field
.
getTableId
()))
return
null
;
...
...
@@ -62,6 +82,9 @@ public class DirectFieldService implements DataSetFieldService {
DatasetTableField
datasetTableField
=
DatasetTableField
.
builder
().
tableId
(
field
.
getTableId
()).
checked
(
Boolean
.
TRUE
).
build
();
List
<
DatasetTableField
>
fields
=
dataSetTableFieldsService
.
list
(
datasetTableField
);
List
<
DeSortField
>
deSortFields
=
buildSorts
(
fields
,
sortDTO
);
final
List
<
String
>
allTableFieldIds
=
fields
.
stream
().
map
(
DatasetTableField:
:
getId
).
collect
(
Collectors
.
toList
());
boolean
multi
=
fieldIds
.
stream
().
anyMatch
(
item
->
!
allTableFieldIds
.
contains
(
item
));
if
(
multi
&&
needMapping
)
{
...
...
@@ -95,6 +118,8 @@ public class DirectFieldService implements DataSetFieldService {
}
}
DatasourceRequest
datasourceRequest
=
new
DatasourceRequest
();
Provider
datasourceProvider
=
null
;
if
(
datasetTable
.
getMode
()
==
0
)
{
// 直连
...
...
@@ -110,18 +135,18 @@ public class DirectFieldService implements DataSetFieldService {
QueryProvider
qp
=
ProviderFactory
.
getQueryProvider
(
ds
.
getType
());
if
(
StringUtils
.
equalsIgnoreCase
(
datasetTable
.
getType
(),
"db"
))
{
datasourceRequest
.
setTable
(
dataTableInfoDTO
.
getTable
());
datasourceRequest
.
setQuery
(
qp
.
createQuerySQL
(
dataTableInfoDTO
.
getTable
(),
permissionFields
,
true
,
ds
,
customFilter
));
datasourceRequest
.
setQuery
(
qp
.
createQuerySQL
(
dataTableInfoDTO
.
getTable
(),
permissionFields
,
true
,
ds
,
customFilter
,
deSortFields
));
}
else
if
(
StringUtils
.
equalsIgnoreCase
(
datasetTable
.
getType
(),
"sql"
))
{
datasourceRequest
.
setQuery
(
qp
.
createQuerySQLAsTmp
(
dataTableInfoDTO
.
getSql
(),
permissionFields
,
true
,
customFilter
));
datasourceRequest
.
setQuery
(
qp
.
createQuerySQLAsTmp
(
dataTableInfoDTO
.
getSql
(),
permissionFields
,
true
,
customFilter
,
deSortFields
));
}
else
if
(
StringUtils
.
equalsIgnoreCase
(
datasetTable
.
getType
(),
"custom"
))
{
DataTableInfoDTO
dt
=
new
Gson
().
fromJson
(
datasetTable
.
getInfo
(),
DataTableInfoDTO
.
class
);
List
<
DataSetTableUnionDTO
>
listUnion
=
dataSetTableUnionService
.
listByTableId
(
dt
.
getList
().
get
(
0
).
getTableId
());
String
sql
=
dataSetTableService
.
getCustomSQLDatasource
(
dt
,
listUnion
,
ds
);
datasourceRequest
.
setQuery
(
qp
.
createQuerySQLAsTmp
(
sql
,
permissionFields
,
true
,
customFilter
));
datasourceRequest
.
setQuery
(
qp
.
createQuerySQLAsTmp
(
sql
,
permissionFields
,
true
,
customFilter
,
deSortFields
));
}
else
if
(
StringUtils
.
equalsIgnoreCase
(
datasetTable
.
getType
(),
"union"
))
{
DataTableInfoDTO
dt
=
new
Gson
().
fromJson
(
datasetTable
.
getInfo
(),
DataTableInfoDTO
.
class
);
String
sql
=
(
String
)
dataSetTableService
.
getUnionSQLDatasource
(
dt
,
ds
).
get
(
"sql"
);
datasourceRequest
.
setQuery
(
qp
.
createQuerySQLAsTmp
(
sql
,
permissionFields
,
true
,
customFilter
));
datasourceRequest
.
setQuery
(
qp
.
createQuerySQLAsTmp
(
sql
,
permissionFields
,
true
,
customFilter
,
deSortFields
));
}
}
else
if
(
datasetTable
.
getMode
()
==
1
)
{
// 抽取
// 连接doris,构建doris数据源查询
...
...
frontend/src/components/DragItem/index.vue
浏览文件 @
fbd0d390
...
...
@@ -6,8 +6,82 @@
{{
item
.
name
}}
<i
class=
"el-icon-arrow-down el-icon--right"
/>
</el-tag>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
icon=
"el-icon-delete"
:command=
"beforeClickItem('remove')"
>
<span>
{{
$t
(
'chart.delete'
)
}}
</span>
<el-dropdown-item
v-if=
"isSortWidget"
:disabled=
"disabledSort"
:command=
"beforeClickItem('none')"
>
<span
class=
"de-sort-menu"
:class=
"!disabledSort && (!sortNode || sortNode.sort === 'none') ? 'de-active-li': ''"
>
{{
$t
(
'chart.none'
)
}}
</span>
</el-dropdown-item>
<el-dropdown-item
v-if=
"isSortWidget"
:disabled=
"disabledSort"
:command=
"beforeClickItem('asc')"
>
<span
v-popover:popoverasc
class=
"el-dropdown-link inner-dropdown-menu de-sort-menu"
:class=
"!disabledSort && sortNode.sort === 'asc' ? 'de-active-li': ''"
>
<span>
<span>
{{
$t
(
'chart.asc'
)
}}
</span>
</span>
<i
class=
"el-icon-arrow-right el-icon--right"
/>
</span>
<el-popover
ref=
"popoverasc"
v-model=
"ascFieldsShow"
placement=
"right-start"
width=
"120"
:close-delay=
"500"
trigger=
"hover"
>
<ul
class=
"de-ul"
>
<li
v-for=
"(node, i) in allFields"
:key=
"node.id"
:index=
"i"
class=
"de-sort-field-span"
:class=
"sortNode.sort === 'asc' && sortNode.id === node.id ? 'de-active-li': ''"
@
click=
"saveAscField(node)"
>
<span>
{{
node
.
name
}}
</span>
</li>
</ul>
</el-popover>
</el-dropdown-item>
<el-dropdown-item
v-if=
"isSortWidget"
:disabled=
"disabledSort"
:command=
"beforeClickItem('desc')"
>
<span
v-popover:popoverdesc
class=
"el-dropdown-link inner-dropdown-menu de-sort-menu"
:class=
"!disabledSort && sortNode.sort === 'desc' ? 'de-active-li': ''"
>
<span>
<span>
{{
$t
(
'chart.desc'
)
}}
</span>
</span>
<i
class=
"el-icon-arrow-right el-icon--right"
/>
</span>
<el-popover
ref=
"popoverdesc"
v-model=
"descFieldsShow"
placement=
"right-start"
width=
"120"
:close-delay=
"500"
trigger=
"hover"
>
<ul
class=
"de-ul"
>
<li
v-for=
"(node, i) in allFields"
:key=
"node.id"
:index=
"i"
class=
"de-sort-field-span"
:class=
"sortNode.sort === 'desc' && sortNode.id === node.id ? 'de-active-li': ''"
@
click=
"saveDescField(node)"
>
<span>
{{
node
.
name
}}
</span>
</li>
</ul>
</el-popover>
</el-dropdown-item>
<!--
<el-dropdown-item
:disabled=
"index"
:command=
"beforeClickItem('customSort')"
>
<span
class=
"de-sort-menu"
:class=
"sortNode.sort === 'custom' ? 'de-active-li': ''"
>
{{
$t
(
'chart.custom_sort'
)
}}
</span>
</el-dropdown-item>
-->
<el-dropdown-item
:divided=
"isSortWidget"
icon=
"el-icon-delete"
:command=
"beforeClickItem('remove')"
>
<span
class=
"de-delete-field"
>
{{
$t
(
'chart.delete'
)
}}
</span>
</el-dropdown-item>
<slot
/>
</el-dropdown-menu>
...
...
@@ -27,22 +101,59 @@ export default {
index
:
{
type
:
Number
,
required
:
true
},
allFields
:
{
type
:
Array
,
default
:
()
=>
[]
},
sort
:
{
type
:
Object
,
default
:
()
=>
null
},
isSortWidget
:
{
type
:
Boolean
,
default
:
false
}
},
data
()
{
return
{
radio
:
0
,
ascFieldsShow
:
false
,
descFieldsShow
:
false
,
defaultSortProp
:
{
sort
:
'none'
},
sortNode
:
null
}
},
computed
:
{
disabledSort
()
{
return
this
.
index
>
0
}
},
mounted
()
{
},
created
()
{
if
(
!
this
.
sortNode
)
{
this
.
sortNode
=
this
.
sort
&&
this
.
sort
.
id
?
JSON
.
parse
(
JSON
.
stringify
(
this
.
sort
))
:
JSON
.
parse
(
JSON
.
stringify
(
this
.
defaultSortProp
))
// this.sortChange('none')
}
},
methods
:
{
clickItem
(
param
)
{
if
(
!
param
)
{
return
}
switch
(
param
.
type
)
{
case
'rename'
:
this
.
showRename
()
case
'none'
:
this
.
sortChange
(
'none'
)
break
case
'asc'
:
this
.
sortChange
(
'asc'
)
break
case
'desc'
:
this
.
sortChange
(
'desc'
)
break
case
'remove'
:
this
.
removeItem
()
...
...
@@ -56,20 +167,38 @@ export default {
type
:
type
}
},
showRename
()
{
this
.
item
.
index
=
this
.
index
this
.
item
.
renameType
=
'dimension'
this
.
$emit
(
'onNameEdit'
,
this
.
item
)
},
removeItem
()
{
this
.
item
.
index
=
this
.
index
this
.
$emit
(
'closeItem'
,
this
.
item
)
},
saveAscField
({
id
,
name
})
{
this
.
ascFieldsShow
=
false
const
sort
=
'asc'
this
.
sortNode
=
{
id
,
name
,
sort
}
this
.
$emit
(
'sort-change'
,
this
.
sortNode
)
},
saveDescField
({
id
,
name
})
{
this
.
descFieldsShow
=
false
const
sort
=
'desc'
this
.
sortNode
=
{
id
,
name
,
sort
}
this
.
$emit
(
'sort-change'
,
this
.
sortNode
)
},
sortChange
(
type
)
{
this
.
sortNode
.
sort
=
type
if
(
type
===
'none'
)
{
this
.
sortNode
=
{
sort
:
'none'
}
}
this
.
$emit
(
'sort-change'
,
this
.
sortNode
)
}
}
}
</
script
>
<
style
scoped
>
<
style
scoped
lang=
"scss"
>
.item-axis
{
padding
:
1px
6px
;
margin
:
0
3px
2px
3px
;
...
...
@@ -90,4 +219,47 @@ export default {
span
{
font-size
:
12px
;
}
.de-ul
li
{
margin
:
5px
2px
;
cursor
:
pointer
;
&
:hover
{
color
:
#409EFF
;
border-color
:
rgb
(
198
,
226
,
255
);
background-color
:
rgb
(
236
,
245
,
255
);
}
&
:before
{
content
:
""
;
width
:
6px
;
height
:
6px
;
display
:
inline-block
;
border-radius
:
50%
;
vertical-align
:
middle
;
margin-right
:
5px
;
}
}
.de-active-li
{
&
:before
{
background
:
#409EFF
;
}
}
.
de-sort-menu
:
:
before
{
content
:
""
;
width
:
6px
;
height
:
6px
;
display
:
inline-block
;
border-radius
:
50%
;
vertical-align
:
middle
;
margin-right
:
5px
;
}
.de-delete-field
{
margin-left
:
4px
;
}
.de-sort-field-span
{
/* width: 80px;
max-width: 80px; */
display
:
inline-flexbox
;
white-space
:
nowrap
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
</
style
>
frontend/src/components/widget/DeWidget/DeSelect.vue
浏览文件 @
fbd0d390
...
...
@@ -100,7 +100,7 @@ export default {
if
(
!
token
&&
linkToken
)
{
method
=
linkMultFieldValues
}
const
param
=
{
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
)
}
const
param
=
{
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
)
,
sort
:
this
.
element
.
options
.
attrs
.
sort
}
if
(
this
.
panelInfo
.
proxy
)
{
param
.
userId
=
this
.
panelInfo
.
proxy
}
...
...
@@ -121,10 +121,33 @@ export default {
this
.
$nextTick
(()
=>
{
this
.
show
=
true
})
},
'element.options.attrs.sort'
:
function
(
value
,
old
)
{
if
(
value
===
null
||
typeof
value
===
'undefined'
||
value
===
old
)
return
this
.
datas
=
[]
let
method
=
multFieldValues
const
token
=
this
.
$store
.
getters
.
token
||
getToken
()
const
linkToken
=
this
.
$store
.
getters
.
linkToken
||
getLinkToken
()
if
(
!
token
&&
linkToken
)
{
method
=
linkMultFieldValues
}
const
param
=
{
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
),
sort
:
this
.
element
.
options
.
attrs
.
sort
}
if
(
this
.
panelInfo
.
proxy
)
{
param
.
userId
=
this
.
panelInfo
.
proxy
}
this
.
element
.
options
.
attrs
.
fieldId
&&
this
.
element
.
options
.
attrs
.
fieldId
.
length
>
0
&&
method
(
param
).
then
(
res
=>
{
this
.
datas
=
this
.
optionDatas
(
res
.
data
)
})
||
(
this
.
element
.
options
.
value
=
''
)
}
},
created
()
{
if
(
!
this
.
element
.
options
.
attrs
.
sort
)
{
this
.
element
.
options
.
attrs
.
sort
=
{}
}
this
.
initLoad
()
},
mounted
()
{
...
...
@@ -155,7 +178,7 @@ export default {
if
(
!
token
&&
linkToken
)
{
method
=
linkMultFieldValues
}
method
({
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
)
}).
then
(
res
=>
{
method
({
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
)
,
sort
:
this
.
element
.
options
.
attrs
.
sort
}).
then
(
res
=>
{
this
.
datas
=
this
.
optionDatas
(
res
.
data
)
})
}
...
...
frontend/src/components/widget/DeWidget/DeSelectGrid.vue
浏览文件 @
fbd0d390
...
...
@@ -122,7 +122,7 @@ export default {
if
(
!
token
&&
linkToken
)
{
method
=
linkMultFieldValues
}
const
param
=
{
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
)
}
const
param
=
{
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
)
,
sort
:
this
.
element
.
options
.
attrs
.
sort
}
if
(
this
.
panelInfo
.
proxy
)
{
param
.
userId
=
this
.
panelInfo
.
proxy
}
...
...
@@ -149,9 +149,31 @@ export default {
this
.
isIndeterminate
=
this
.
value
.
length
>
0
&&
this
.
value
.
length
<
this
.
datas
.
length
}
})
},
'element.options.attrs.sort'
:
function
(
value
,
old
)
{
if
(
typeof
value
===
'undefined'
||
value
===
old
)
return
this
.
datas
=
[]
let
method
=
multFieldValues
const
token
=
this
.
$store
.
getters
.
token
||
getToken
()
const
linkToken
=
this
.
$store
.
getters
.
linkToken
||
getLinkToken
()
if
(
!
token
&&
linkToken
)
{
method
=
linkMultFieldValues
}
const
param
=
{
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
),
sort
:
this
.
element
.
options
.
attrs
.
sort
}
if
(
this
.
panelInfo
.
proxy
)
{
param
.
userId
=
this
.
panelInfo
.
proxy
}
this
.
element
.
options
.
attrs
.
fieldId
&&
this
.
element
.
options
.
attrs
.
fieldId
.
length
>
0
&&
method
(
param
).
then
(
res
=>
{
this
.
datas
=
this
.
optionDatas
(
res
.
data
)
})
||
(
this
.
element
.
options
.
value
=
''
)
}
},
created
()
{
if
(
!
this
.
element
.
options
.
attrs
.
sort
)
{
this
.
element
.
options
.
attrs
.
sort
=
{}
}
this
.
initLoad
()
},
mounted
()
{
...
...
@@ -178,7 +200,7 @@ export default {
if
(
!
token
&&
linkToken
)
{
method
=
linkMultFieldValues
}
method
({
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
)
}).
then
(
res
=>
{
method
({
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
)
,
sort
:
this
.
element
.
options
.
attrs
.
sort
}).
then
(
res
=>
{
this
.
datas
=
this
.
optionDatas
(
res
.
data
)
if
(
this
.
element
.
options
.
attrs
.
multiple
)
{
this
.
checkAll
=
this
.
value
.
length
===
this
.
datas
.
length
...
...
frontend/src/components/widget/DeWidget/DeSelectTree.vue
浏览文件 @
fbd0d390
...
...
@@ -118,7 +118,7 @@ export default {
if
(
!
token
&&
linkToken
)
{
method
=
linkMappingFieldValues
}
const
param
=
{
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
)
}
const
param
=
{
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
)
,
sort
:
this
.
element
.
options
.
attrs
.
sort
}
if
(
this
.
panelInfo
.
proxy
)
{
param
.
userId
=
this
.
panelInfo
.
proxy
}
...
...
@@ -162,10 +162,37 @@ export default {
this
.
$refs
.
deSelectTree
&&
this
.
$refs
.
deSelectTree
.
treeDataUpdateFun
(
this
.
datas
)
})
})
},
'element.options.attrs.sort'
:
function
(
value
,
old
)
{
if
(
value
===
null
||
typeof
value
===
'undefined'
||
value
===
old
)
return
this
.
datas
=
[]
let
method
=
mappingFieldValues
const
token
=
this
.
$store
.
getters
.
token
||
getToken
()
const
linkToken
=
this
.
$store
.
getters
.
linkToken
||
getLinkToken
()
if
(
!
token
&&
linkToken
)
{
method
=
linkMappingFieldValues
}
const
param
=
{
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
),
sort
:
this
.
element
.
options
.
attrs
.
sort
}
if
(
this
.
panelInfo
.
proxy
)
{
param
.
userId
=
this
.
panelInfo
.
proxy
}
this
.
element
.
options
.
attrs
.
fieldId
&&
this
.
element
.
options
.
attrs
.
fieldId
.
length
>
0
&&
method
(
param
).
then
(
res
=>
{
this
.
datas
=
this
.
optionDatas
(
res
.
data
)
this
.
$nextTick
(()
=>
{
this
.
$refs
.
deSelectTree
&&
this
.
$refs
.
deSelectTree
.
treeDataUpdateFun
(
this
.
datas
)
})
})
this
.
element
.
options
.
value
=
''
}
},
created
()
{
if
(
!
this
.
element
.
options
.
attrs
.
sort
)
{
this
.
element
.
options
.
attrs
.
sort
=
{}
}
this
.
initLoad
()
},
mounted
()
{
...
...
@@ -206,7 +233,7 @@ export default {
if
(
!
token
&&
linkToken
)
{
method
=
linkMappingFieldValues
}
method
({
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
)
}).
then
(
res
=>
{
method
({
fieldIds
:
this
.
element
.
options
.
attrs
.
fieldId
.
split
(
','
)
,
sort
:
this
.
element
.
options
.
attrs
.
sort
}).
then
(
res
=>
{
this
.
datas
=
this
.
optionDatas
(
res
.
data
)
this
.
$nextTick
(()
=>
{
this
.
$refs
.
deSelectTree
&&
this
.
$refs
.
deSelectTree
.
treeDataUpdateFun
(
this
.
datas
)
...
...
frontend/src/components/widget/serviceImpl/NumberSelectGridServiceImpl.js
浏览文件 @
fbd0d390
...
...
@@ -18,7 +18,8 @@ const dialogPanel = {
label
:
'text'
,
value
:
'id'
,
fieldId
:
''
,
dragItems
:
[]
dragItems
:
[],
sort
:
{}
},
value
:
''
,
manualModify
:
false
...
...
@@ -90,6 +91,10 @@ class NumberSelectGridServiceImpl extends WidgetService {
}
return
param
}
isSortWidget
()
{
return
true
}
fillValueDerfault
(
element
)
{
const
defaultV
=
element
.
options
.
value
===
null
?
''
:
element
.
options
.
value
.
toString
()
if
(
element
.
options
.
attrs
.
multiple
)
{
...
...
frontend/src/components/widget/serviceImpl/NumberSelectServiceImpl.js
浏览文件 @
fbd0d390
...
...
@@ -18,7 +18,8 @@ const dialogPanel = {
label
:
'text'
,
value
:
'id'
,
fieldId
:
''
,
dragItems
:
[]
dragItems
:
[],
sort
:
{}
},
value
:
''
,
manualModify
:
false
...
...
@@ -91,6 +92,10 @@ class NumberSelectServiceImpl extends WidgetService {
}
return
param
}
isSortWidget
()
{
return
true
}
fillValueDerfault
(
element
)
{
const
defaultV
=
element
.
options
.
value
===
null
?
''
:
element
.
options
.
value
.
toString
()
if
(
element
.
options
.
attrs
.
multiple
)
{
...
...
frontend/src/components/widget/serviceImpl/TextSelectGridServiceImpl.js
浏览文件 @
fbd0d390
...
...
@@ -18,7 +18,8 @@ const dialogPanel = {
label
:
'text'
,
value
:
'id'
,
fieldId
:
''
,
dragItems
:
[]
dragItems
:
[],
sort
:
{}
},
value
:
''
,
manualModify
:
false
...
...
@@ -90,6 +91,10 @@ class TextSelectGridServiceImpl extends WidgetService {
}
return
param
}
isSortWidget
()
{
return
true
}
fillValueDerfault
(
element
)
{
const
defaultV
=
element
.
options
.
value
===
null
?
''
:
element
.
options
.
value
.
toString
()
if
(
element
.
options
.
attrs
.
multiple
)
{
...
...
frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js
浏览文件 @
fbd0d390
...
...
@@ -17,7 +17,8 @@ const dialogPanel = {
label
:
'text'
,
value
:
'id'
,
fieldId
:
''
,
dragItems
:
[]
dragItems
:
[],
sort
:
{}
},
value
:
''
,
manualModify
:
false
...
...
@@ -92,6 +93,9 @@ class TextSelectServiceImpl extends WidgetService {
}
return
param
}
isSortWidget
()
{
return
true
}
fillValueDerfault
(
element
)
{
const
defaultV
=
element
.
options
.
value
===
null
?
''
:
element
.
options
.
value
.
toString
()
...
...
frontend/src/components/widget/serviceImpl/TextSelectTreeServiceImpl.js
浏览文件 @
fbd0d390
...
...
@@ -17,7 +17,8 @@ const dialogPanel = {
label
:
'text'
,
value
:
'id'
,
fieldId
:
''
,
dragItems
:
[]
dragItems
:
[],
sort
:
{}
},
value
:
''
,
manualModify
:
false
...
...
@@ -96,6 +97,9 @@ class TextSelectTreeServiceImpl extends WidgetService {
}
return
param
}
isSortWidget
()
{
return
true
}
fillValueDerfault
(
element
)
{
const
defaultV
=
element
.
options
.
value
===
null
?
''
:
element
.
options
.
value
.
toString
()
...
...
frontend/src/views/panel/filter/filterDialog.vue
浏览文件 @
fbd0d390
...
...
@@ -181,7 +181,7 @@
<de-main-container
class=
"ms-main-container"
>
<div
v-if=
"currentElement.options && currentElement.options.attrs"
>
<filter-head
:element=
"currentElement"
/>
<filter-head
:element=
"currentElement"
:all-fields=
"allFields"
:widget=
"widget"
/>
<filter-control
:element=
"currentElement"
:widget=
"widget"
:control-attrs=
"myAttrs"
:child-views=
"childViews"
/>
...
...
@@ -294,7 +294,8 @@ export default {
childViews
:
{
viewInfos
:
[]
},
currentElement
:
null
currentElement
:
null
,
allFields
:
[]
}
},
computed
:
{
...
...
@@ -318,6 +319,7 @@ export default {
}
this
.
enableSureButton
()
},
keyWord
(
val
)
{
this
.
expandedArray
=
[]
if
(
this
.
showDomType
===
'field'
)
{
...
...
@@ -546,6 +548,7 @@ export default {
loadField
(
tableId
)
{
fieldListWithPermission
(
tableId
).
then
(
res
=>
{
let
datas
=
res
.
data
this
.
allFields
=
JSON
.
parse
(
JSON
.
stringify
(
datas
))
if
(
this
.
widget
&&
this
.
widget
.
filterFieldMethod
)
{
datas
=
this
.
widget
.
filterFieldMethod
(
datas
)
}
...
...
@@ -556,6 +559,7 @@ export default {
comLoadField
(
tableId
)
{
fieldListWithPermission
(
tableId
).
then
(
res
=>
{
let
datas
=
res
.
data
this
.
allFields
=
JSON
.
parse
(
JSON
.
stringify
(
datas
))
if
(
this
.
widget
&&
this
.
widget
.
filterFieldMethod
)
{
datas
=
this
.
widget
.
filterFieldMethod
(
datas
)
}
...
...
frontend/src/views/panel/filter/filterMain/FilterHead.vue
浏览文件 @
fbd0d390
...
...
@@ -16,28 +16,12 @@
style=
"width:100%;height: 100%;margin:0 10px;border-radius: 4px;overflow-x: auto;display: flex;align-items: center;"
@
end=
"end2"
>
<!--
<div
class=
"list-group-container"
>
<drag-item
v-for=
"(item,index) in element.options.attrs.dragItems"
:key=
"item.id"
:item=
"item"
:index=
"index"
@
closeItem=
"closeItem"
/>
</div>
-->
<v-flex
v-for=
"(item,index) in element.options.attrs.dragItems"
:key=
"item.id"
>
<drag-item
:key=
"item.id"
:i
tem=
"item"
:index=
"index"
@
closeItem=
"closeItem
"
/>
<drag-item
:key=
"item.id"
:i
s-sort-widget=
"isSortWidget"
:item=
"item"
:index=
"index"
:sort=
"element.options.attrs.sort"
:all-fields=
"index ? [] : allFields"
@
closeItem=
"closeItem"
@
sort-change=
"sortChange
"
/>
</v-flex>
<!--
<transition-group
class=
"list-group"
:data-value=
"$t('panel.drag_here')"
>
<drag-item
v-for=
"(item,index) in element.options.attrs.dragItems"
:key=
"item.id"
:item=
"item"
:index=
"index"
@
closeItem=
"closeItem"
/>
</transition-group>
-->
<span
solt=
"footer"
>
{{
$t
(
'panel.drag_here'
)
}}
</span>
</draggable>
</el-row>
...
...
@@ -61,6 +45,14 @@ export default {
element
:
{
type
:
Object
,
default
:
()
=>
{}
},
allFields
:
{
type
:
Array
,
default
:
()
=>
[]
},
widget
:
{
type
:
Object
,
default
:
null
}
},
data
()
{
...
...
@@ -68,11 +60,17 @@ export default {
targets
:
[]
}
},
computed
:
{
isSortWidget
()
{
return
this
.
widget
&&
this
.
widget
.
isSortWidget
&&
this
.
widget
.
isSortWidget
()
}
},
watch
:
{
},
created
()
{
},
methods
:
{
onMove
(
e
,
originalEvent
)
{
...
...
@@ -84,6 +82,13 @@ export default {
closeItem
(
tag
)
{
const
index
=
tag
.
index
this
.
element
.
options
.
attrs
.
dragItems
.
splice
(
index
,
1
)
if
(
!
index
)
{
this
.
element
.
options
.
attrs
.
sort
=
null
}
},
sortChange
(
param
)
{
this
.
element
.
options
.
attrs
.
sort
=
param
// this.$emit('sort-change', param)
}
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论