Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
zhu
dataease
Commits
734aa62a
提交
734aa62a
authored
2月 24, 2022
作者:
wangjiahao
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/dev' into dev
# Conflicts: # backend/src/main/resources/db/migration/V32__1.8.sql
上级
c4dfd975
527f5daa
隐藏空白字符变更
内嵌
并排
正在显示
28 个修改的文件
包含
244 行增加
和
91 行删除
+244
-91
Knife4jConfiguration.java
...rc/main/java/io/dataease/config/Knife4jConfiguration.java
+32
-4
IndexController.java
...src/main/java/io/dataease/controller/IndexController.java
+2
-1
DataSetTableFieldController.java
...aease/controller/dataset/DataSetTableFieldController.java
+4
-0
DataSetTableTaskController.java
...taease/controller/dataset/DataSetTableTaskController.java
+5
-0
DataSetTableTaskLogController.java
...ase/controller/dataset/DataSetTableTaskLogController.java
+4
-0
DatasourceController.java
.../dataease/controller/datasource/DatasourceController.java
+1
-1
ApiDefinition.java
...dataease/controller/request/datasource/ApiDefinition.java
+1
-0
ColumnPermissionsController.java
.../dataease/plugins/server/ColumnPermissionsController.java
+2
-1
RowPermissionsController.java
.../io/dataease/plugins/server/RowPermissionsController.java
+2
-1
SSOServer.java
...d/src/main/java/io/dataease/plugins/server/SSOServer.java
+2
-0
ThemeServer.java
...src/main/java/io/dataease/plugins/server/ThemeServer.java
+2
-0
XAuthServer.java
...src/main/java/io/dataease/plugins/server/XAuthServer.java
+2
-1
XDeptServer.java
...src/main/java/io/dataease/plugins/server/XDeptServer.java
+2
-2
XDisplayServer.java
.../main/java/io/dataease/plugins/server/XDisplayServer.java
+3
-1
XEmailTaskServer.java
...ain/java/io/dataease/plugins/server/XEmailTaskServer.java
+2
-1
XLdapServer.java
...src/main/java/io/dataease/plugins/server/XLdapServer.java
+2
-1
XOidcServer.java
...src/main/java/io/dataease/plugins/server/XOidcServer.java
+3
-1
XUserKeysServer.java
...main/java/io/dataease/plugins/server/XUserKeysServer.java
+2
-0
PluginViewServer.java
...ava/io/dataease/plugins/server/view/PluginViewServer.java
+2
-0
ApiProvider.java
...ain/java/io/dataease/provider/datasource/ApiProvider.java
+11
-17
DataSetTableService.java
...java/io/dataease/service/dataset/DataSetTableService.java
+10
-10
DatasourceService.java
...ava/io/dataease/service/datasource/DatasourceService.java
+85
-26
V32__1.8.sql
backend/src/main/resources/db/migration/V32__1.8.sql
+3
-0
en.js
frontend/src/lang/en.js
+5
-1
tw.js
frontend/src/lang/tw.js
+5
-1
zh.js
frontend/src/lang/zh.js
+5
-1
ChartEdit.vue
frontend/src/views/chart/view/ChartEdit.vue
+1
-1
form.vue
frontend/src/views/system/datasource/form.vue
+44
-19
没有找到文件。
backend/src/main/java/io/dataease/config/Knife4jConfiguration.java
浏览文件 @
734aa62a
package
io
.
dataease
.
config
;
import
com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver
;
import
com.google.common.base.Function
;
import
com.google.common.base.Optional
;
import
com.google.common.base.Predicate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.config.BeanPostProcessor
;
import
org.springframework.context.annotation.*
;
import
springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration
;
import
springfox.documentation.RequestHandler
;
import
springfox.documentation.builders.*
;
import
springfox.documentation.oas.annotations.EnableOpenApi
;
import
springfox.documentation.service.*
;
...
...
@@ -15,11 +19,14 @@ import springfox.documentation.spring.web.plugins.Docket;
import
java.util.ArrayList
;
import
java.util.List
;
@EnableOpenApi
@Configuration
@Import
(
BeanValidatorPluginsConfiguration
.
class
)
public
class
Knife4jConfiguration
implements
BeanPostProcessor
{
private
static
final
String
splitor
=
","
;
private
final
OpenApiExtensionResolver
openApiExtensionResolver
;
@Value
(
"${version}"
)
...
...
@@ -54,12 +61,12 @@ public class Knife4jConfiguration implements BeanPostProcessor{
@Bean
(
value
=
"datasourceApi"
)
public
Docket
datasourceApi
()
{
return
defaultApi
(
"数据源管理"
,
"io.dataease.datasource"
);
return
defaultApi
(
"数据源管理"
,
"io.dataease.
controller.
datasource"
);
}
@Bean
(
value
=
"sysApi"
)
public
Docket
sysApi
()
{
return
defaultApi
(
"系统管理"
,
"io.dataease.controller.sys"
);
return
defaultApi
(
"系统管理"
,
"io.dataease.controller.sys
,io.dataease.plugins.server
"
);
}
private
ApiInfo
apiInfo
(){
...
...
@@ -79,12 +86,12 @@ public class Knife4jConfiguration implements BeanPostProcessor{
List
<
SecurityContext
>
securityContexts
=
new
ArrayList
<>();
securityContexts
.
add
(
securityContext
());
Docket
docket
=
new
Docket
(
DocumentationType
.
OAS_30
)
.
apiInfo
(
apiInfo
())
.
groupName
(
groupName
)
.
select
()
.
apis
(
RequestHandlerSelectors
.
basePackage
(
packageName
))
/*.apis(RequestHandlerSelectors.basePackage(packageName))*/
.
apis
(
basePackage
(
packageName
))
.
paths
(
PathSelectors
.
any
())
.
build
()
.
securityContexts
(
securityContexts
).
securitySchemes
(
securitySchemes
)
...
...
@@ -120,4 +127,25 @@ public class Knife4jConfiguration implements BeanPostProcessor{
return
results
;
}
public
static
Predicate
<
RequestHandler
>
basePackage
(
final
String
basePackage
)
{
return
input
->
declaringClass
(
input
).
transform
(
handlerPackage
(
basePackage
)).
or
(
true
);
}
private
static
Function
<
Class
<?>,
Boolean
>
handlerPackage
(
final
String
basePackage
)
{
return
input
->
{
// 循环判断匹配
for
(
String
strPackage
:
basePackage
.
split
(
splitor
))
{
boolean
isMatch
=
input
.
getPackage
().
getName
().
startsWith
(
strPackage
);
if
(
isMatch
)
{
return
true
;
}
}
return
false
;
};
}
private
static
Optional
<?
extends
Class
<?>>
declaringClass
(
RequestHandler
input
)
{
return
Optional
.
fromNullable
(
input
.
declaringClass
());
}
}
backend/src/main/java/io/dataease/controller/IndexController.java
浏览文件 @
734aa62a
...
...
@@ -44,7 +44,8 @@ public class IndexController {
case
valid:
return
"doc.html"
;
default
:
return
"nolic.html"
;
// return "nolic.html";
return
"doc.html"
;
}
}
...
...
backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java
浏览文件 @
734aa62a
...
...
@@ -3,9 +3,12 @@ package io.dataease.controller.dataset;
import
com.auth0.jwt.JWT
;
import
com.auth0.jwt.interfaces.DecodedJWT
;
import
com.github.xiaoymin.knife4j.annotations.ApiSupport
;
import
io.dataease.auth.annotation.DePermission
;
import
io.dataease.auth.filter.F2CLinkFilter
;
import
io.dataease.base.domain.DatasetTable
;
import
io.dataease.base.domain.DatasetTableField
;
import
io.dataease.commons.constants.DePermissionType
;
import
io.dataease.commons.constants.ResourceAuthLevel
;
import
io.dataease.commons.exception.DEException
;
import
io.dataease.controller.request.dataset.DataSetTableRequest
;
import
io.dataease.controller.request.dataset.MultFieldValuesRequest
;
...
...
@@ -106,6 +109,7 @@ public class DataSetTableFieldController {
dataSetTableFieldsService
.
batchEdit
(
list
);
}
@DePermission
(
type
=
DePermissionType
.
DATASET
,
value
=
"tableId"
,
level
=
ResourceAuthLevel
.
DATASET_LEVEL_MANAGE
)
@ApiOperation
(
"保存"
)
@PostMapping
(
"save"
)
public
DatasetTableField
save
(
@RequestBody
DatasetTableField
datasetTableField
)
{
...
...
backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java
浏览文件 @
734aa62a
...
...
@@ -3,7 +3,10 @@ package io.dataease.controller.dataset;
import
com.github.pagehelper.Page
;
import
com.github.pagehelper.PageHelper
;
import
com.github.xiaoymin.knife4j.annotations.ApiSupport
;
import
io.dataease.auth.annotation.DePermission
;
import
io.dataease.base.domain.DatasetTableTask
;
import
io.dataease.commons.constants.DePermissionType
;
import
io.dataease.commons.constants.ResourceAuthLevel
;
import
io.dataease.commons.utils.PageUtils
;
import
io.dataease.commons.utils.Pager
;
import
io.dataease.controller.request.dataset.DataSetTaskRequest
;
...
...
@@ -32,6 +35,7 @@ public class DataSetTableTaskController {
@Resource
private
DataSetTableTaskLogService
dataSetTableTaskLogService
;
@DePermission
(
type
=
DePermissionType
.
DATASET
,
value
=
"datasetTableTask.tableId"
,
level
=
ResourceAuthLevel
.
DATASET_LEVEL_MANAGE
)
@ApiOperation
(
"保存"
)
@PostMapping
(
"save"
)
public
DatasetTableTask
save
(
@RequestBody
DataSetTaskRequest
dataSetTaskRequest
)
throws
Exception
{
...
...
@@ -70,6 +74,7 @@ public class DataSetTableTaskController {
dataSetTableTaskService
.
updateDatasetTableTaskStatus
(
datasetTableTask
);
}
@DePermission
(
type
=
DePermissionType
.
DATASET
,
value
=
"tableId"
,
level
=
ResourceAuthLevel
.
DATASET_LEVEL_MANAGE
)
@ApiOperation
(
"执行任务"
)
@PostMapping
(
"/execTask"
)
public
void
execTask
(
@RequestBody
DatasetTableTask
datasetTableTask
)
throws
Exception
{
...
...
backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskLogController.java
浏览文件 @
734aa62a
...
...
@@ -3,7 +3,10 @@ package io.dataease.controller.dataset;
import
com.github.pagehelper.Page
;
import
com.github.pagehelper.PageHelper
;
import
com.github.xiaoymin.knife4j.annotations.ApiSupport
;
import
io.dataease.auth.annotation.DePermission
;
import
io.dataease.base.domain.DatasetTableTaskLog
;
import
io.dataease.commons.constants.DePermissionType
;
import
io.dataease.commons.constants.ResourceAuthLevel
;
import
io.dataease.commons.utils.PageUtils
;
import
io.dataease.commons.utils.Pager
;
import
io.dataease.controller.sys.base.BaseGridRequest
;
...
...
@@ -28,6 +31,7 @@ public class DataSetTableTaskLogController {
@Resource
private
DataSetTableTaskLogService
dataSetTableTaskLogService
;
@DePermission
(
type
=
DePermissionType
.
DATASET
,
value
=
"tableId"
,
level
=
ResourceAuthLevel
.
DATASET_LEVEL_MANAGE
)
@ApiOperation
(
"保存"
)
@PostMapping
(
"save"
)
public
DatasetTableTaskLog
save
(
@RequestBody
DatasetTableTaskLog
datasetTableTaskLog
)
{
...
...
backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java
浏览文件 @
734aa62a
...
...
@@ -50,7 +50,7 @@ public class DatasourceController {
@DePermission
(
type
=
DePermissionType
.
DATASOURCE
,
value
=
"id"
)
@ApiOperation
(
"验证数据源"
)
@PostMapping
(
"/validate"
)
public
ResultHolder
validate
(
@RequestBody
Datasource
datasource
)
throws
Exception
{
public
ResultHolder
validate
(
@RequestBody
Datasource
DTO
datasource
)
throws
Exception
{
return
datasourceService
.
validate
(
datasource
);
}
...
...
backend/src/main/java/io/dataease/controller/request/datasource/ApiDefinition.java
浏览文件 @
734aa62a
...
...
@@ -16,5 +16,6 @@ public class ApiDefinition {
private
List
<
DatasetTableField
>
fields
;
private
String
request
;
private
String
dataPath
;
private
String
status
;
private
List
<
JSONObject
>
datas
=
new
ArrayList
<>();
}
backend/src/main/java/io/dataease/plugins/server/ColumnPermissionsController.java
浏览文件 @
734aa62a
...
...
@@ -18,10 +18,11 @@ import io.swagger.annotations.ApiOperation;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.web.bind.annotation.*
;
import
springfox.documentation.annotations.ApiIgnore
;
import
java.util.ArrayList
;
import
java.util.List
;
@ApiIgnore
@RestController
@RequestMapping
(
"plugin/dataset/columnPermissions"
)
public
class
ColumnPermissionsController
{
...
...
backend/src/main/java/io/dataease/plugins/server/RowPermissionsController.java
浏览文件 @
734aa62a
...
...
@@ -15,10 +15,11 @@ import io.swagger.annotations.ApiOperation;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.web.bind.annotation.*
;
import
springfox.documentation.annotations.ApiIgnore
;
import
java.util.ArrayList
;
import
java.util.List
;
@ApiIgnore
@RestController
@RequestMapping
(
"plugin/dataset/rowPermissions"
)
public
class
RowPermissionsController
{
...
...
backend/src/main/java/io/dataease/plugins/server/SSOServer.java
浏览文件 @
734aa62a
...
...
@@ -30,7 +30,9 @@ import io.dataease.plugins.xpack.oidc.dto.SSOToken;
import
io.dataease.plugins.xpack.oidc.dto.SSOUserInfo
;
import
io.dataease.plugins.xpack.oidc.service.OidcXpackService
;
import
io.dataease.service.sys.SysUserService
;
import
springfox.documentation.annotations.ApiIgnore
;
@ApiIgnore
@RequestMapping
(
"/sso"
)
@Controller
public
class
SSOServer
{
...
...
backend/src/main/java/io/dataease/plugins/server/ThemeServer.java
浏览文件 @
734aa62a
...
...
@@ -19,7 +19,9 @@ import io.dataease.plugins.xpack.theme.dto.ThemeDto;
import
io.dataease.plugins.xpack.theme.dto.ThemeItem
;
import
io.dataease.plugins.xpack.theme.dto.ThemeRequest
;
import
io.dataease.plugins.xpack.theme.service.ThemeXpackService
;
import
springfox.documentation.annotations.ApiIgnore
;
@ApiIgnore
@RequestMapping
(
"/plugin/theme"
)
@RestController
public
class
ThemeServer
{
...
...
backend/src/main/java/io/dataease/plugins/server/XAuthServer.java
浏览文件 @
734aa62a
...
...
@@ -17,9 +17,10 @@ import org.apache.commons.lang3.StringUtils;
import
org.apache.shiro.authz.annotation.RequiresPermissions
;
import
org.springframework.web.bind.annotation.*
;
import
io.dataease.plugins.xpack.auth.service.AuthXpackService
;
import
springfox.documentation.annotations.ApiIgnore
;
import
java.util.*
;
@ApiIgnore
@RequestMapping
(
"/plugin/auth"
)
@RestController
public
class
XAuthServer
{
...
...
backend/src/main/java/io/dataease/plugins/server/XDeptServer.java
浏览文件 @
734aa62a
...
...
@@ -95,15 +95,15 @@ public class XDeptServer {
}
@RequiresPermissions
(
"dept:del"
)
@ApiIgnore
@ApiOperation
(
"删除"
)
@PostMapping
(
"/nodesByDeptId/{deptId}"
)
public
List
<
XpackDeptTreeNode
>
nodesByDeptId
(
@PathVariable
(
"deptId"
)
Long
deptId
){
DeptXpackService
deptService
=
SpringContextUtil
.
getBean
(
DeptXpackService
.
class
);
return
deptService
.
searchTree
(
deptId
);
}
@RequiresPermissions
(
"dept:edit"
)
@ApiOperation
(
"移动"
)
@PostMapping
(
"/move"
)
public
void
move
(
@RequestBody
XpackMoveDept
xpackMoveDept
){
...
...
backend/src/main/java/io/dataease/plugins/server/XDisplayServer.java
浏览文件 @
734aa62a
...
...
@@ -7,9 +7,11 @@ import io.dataease.plugins.xpack.display.service.DisplayXpackService;
import
org.apache.shiro.authz.annotation.RequiresPermissions
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
springfox.documentation.annotations.ApiIgnore
;
import
java.util.List
;
import
java.util.Map
;
@ApiIgnore
@RequestMapping
(
"/api/display"
)
@RestController
public
class
XDisplayServer
{
...
...
backend/src/main/java/io/dataease/plugins/server/XEmailTaskServer.java
浏览文件 @
734aa62a
...
...
@@ -23,13 +23,14 @@ import org.apache.commons.lang3.StringUtils;
import
org.apache.shiro.authz.annotation.RequiresPermissions
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
springfox.documentation.annotations.ApiIgnore
;
import
java.util.List
;
import
java.util.concurrent.Future
;
import
javax.annotation.Resource
;
@ApiIgnore
@RequestMapping
(
"/plugin/task"
)
@RestController
public
class
XEmailTaskServer
{
...
...
backend/src/main/java/io/dataease/plugins/server/XLdapServer.java
浏览文件 @
734aa62a
...
...
@@ -8,9 +8,10 @@ import io.dataease.plugins.xpack.ldap.dto.response.LdapInfo;
import
io.dataease.plugins.xpack.ldap.service.LdapXpackService
;
import
org.apache.shiro.authz.annotation.RequiresPermissions
;
import
org.springframework.web.bind.annotation.*
;
import
springfox.documentation.annotations.ApiIgnore
;
import
java.util.List
;
@ApiIgnore
@RequestMapping
(
"/plugin/ldap"
)
@RestController
public
class
XLdapServer
{
...
...
backend/src/main/java/io/dataease/plugins/server/XOidcServer.java
浏览文件 @
734aa62a
...
...
@@ -7,10 +7,12 @@ import io.dataease.plugins.xpack.oidc.service.OidcXpackService;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.shiro.authz.annotation.RequiresPermissions
;
import
org.springframework.web.bind.annotation.*
;
import
springfox.documentation.annotations.ApiIgnore
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@ApiIgnore
@RequestMapping
(
"/plugin/oidc"
)
@RestController
public
class
XOidcServer
{
...
...
backend/src/main/java/io/dataease/plugins/server/XUserKeysServer.java
浏览文件 @
734aa62a
...
...
@@ -5,10 +5,12 @@ import io.dataease.plugins.config.SpringContextUtil;
import
io.dataease.plugins.xpack.ukey.dto.request.XpackUkeyDto
;
import
io.dataease.plugins.xpack.ukey.service.UkeyXpackService
;
import
org.springframework.web.bind.annotation.*
;
import
springfox.documentation.annotations.ApiIgnore
;
import
javax.servlet.ServletRequest
;
import
java.util.List
;
@ApiIgnore
@RequestMapping
(
"/plugin/ukey"
)
@RestController
public
class
XUserKeysServer
{
...
...
backend/src/main/java/io/dataease/plugins/server/view/PluginViewServer.java
浏览文件 @
734aa62a
...
...
@@ -12,7 +12,9 @@ import org.springframework.web.bind.annotation.RestController;
import
io.dataease.plugins.config.SpringContextUtil
;
import
io.dataease.plugins.view.entity.PluginViewType
;
import
io.dataease.plugins.view.service.ViewPluginService
;
import
springfox.documentation.annotations.ApiIgnore
;
@ApiIgnore
@RequestMapping
(
"/plugin/view"
)
@RestController
public
class
PluginViewServer
{
...
...
backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java
浏览文件 @
734aa62a
...
...
@@ -12,15 +12,13 @@ import io.dataease.controller.request.datasource.ApiDefinitionRequest;
import
io.dataease.controller.request.datasource.DatasourceRequest
;
import
io.dataease.dto.datasource.TableDesc
;
import
io.dataease.dto.datasource.TableField
;
import
io.dataease.exception.DataEaseException
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.http.HttpHeaders
;
import
org.springframework.stereotype.Service
;
import
java.sql.Connection
;
import
java.sql.ResultSet
;
import
java.sql.Statement
;
import
java.util.*
;
import
java.util.stream.Collectors
;
...
...
@@ -102,22 +100,18 @@ public class ApiProvider extends DatasourceProvider{
@Override
public
String
checkStatus
(
DatasourceRequest
datasourceRequest
)
throws
Exception
{
List
<
ApiDefinition
>
apiDefinitionList
=
JSONObject
.
parseArray
(
datasourceRequest
.
getDatasource
().
getConfiguration
(),
ApiDefinition
.
class
)
.
stream
().
filter
(
item
->
item
.
getName
().
equalsIgnoreCase
(
datasourceRequest
.
getTable
())).
collect
(
Collectors
.
toList
())
;
int
success
=
0
;
List
<
ApiDefinition
>
apiDefinitionList
=
JSONObject
.
parseArray
(
datasourceRequest
.
getDatasource
().
getConfiguration
(),
ApiDefinition
.
class
);
JSONObject
apiItemStatuses
=
new
JSONObject
()
;
for
(
ApiDefinition
apiDefinition
:
apiDefinitionList
)
{
datasourceRequest
.
setTable
(
apiDefinition
.
getName
());
try
{
getData
(
datasourceRequest
);
success
++;
}
catch
(
Exception
ignore
){}
}
if
(
success
==
apiDefinitionList
.
size
()){
return
"Success"
;
}
if
(
success
>
0
&&
success
<
apiDefinitionList
.
size
()
){
return
"Warning"
;
getData
(
datasourceRequest
);
apiItemStatuses
.
put
(
apiDefinition
.
getName
(),
"Success"
);
}
catch
(
Exception
ignore
){
apiItemStatuses
.
put
(
apiDefinition
.
getName
(),
"Error"
);
}
}
return
"Error"
;
return
JSONObject
.
toJSONString
(
apiItemStatuses
)
;
}
static
public
String
execHttpRequest
(
ApiDefinition
apiDefinition
)
throws
Exception
{
...
...
backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java
浏览文件 @
734aa62a
...
...
@@ -405,7 +405,7 @@ public class DataSetTableService {
public
DataSetTableDTO
getWithPermission
(
String
id
,
Long
user
)
{
CurrentUserDto
currentUserDto
=
AuthUtils
.
getUser
();
Long
userId
=
user
!=
null
?
currentUserDto
.
getUserId
()
:
user
;
Long
userId
=
currentUserDto
!=
null
?
currentUserDto
.
getUserId
()
:
user
;
DataSetTableRequest
dataSetTableRequest
=
new
DataSetTableRequest
();
dataSetTableRequest
.
setId
(
id
);
...
...
@@ -464,7 +464,7 @@ public class DataSetTableService {
}
public
Map
<
String
,
Object
>
getPreviewData
(
DataSetTableRequest
dataSetTableRequest
,
Integer
page
,
Integer
pageSize
,
List
<
DatasetTableField
>
extFields
)
throws
Exception
{
List
<
DatasetTableField
>
extFields
)
throws
Exception
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
DatasetTableField
datasetTableField
=
DatasetTableField
.
builder
().
tableId
(
dataSetTableRequest
.
getId
())
.
checked
(
Boolean
.
TRUE
).
build
();
...
...
@@ -926,8 +926,8 @@ public class DataSetTableService {
DorisTableUtils
.
dorisFieldName
(
datasetTableField
.
getTableId
()
+
"_"
+
datasetTableField
.
getDataeaseName
()))
||
StringUtils
.
equalsIgnoreCase
(
tableField
.
getFieldName
(),
DorisTableUtils
.
dorisFieldNameShort
(
datasetTableField
.
getTableId
()
+
"_"
+
datasetTableField
.
getOriginName
())))
{
DorisTableUtils
.
dorisFieldNameShort
(
datasetTableField
.
getTableId
()
+
"_"
+
datasetTableField
.
getOriginName
())))
{
tableField
.
setRemarks
(
datasetTableField
.
getName
());
break
;
}
...
...
@@ -990,7 +990,7 @@ public class DataSetTableService {
DorisTableUtils
.
dorisFieldName
(
datasetTableField
.
getTableId
()
+
"_"
+
datasetTableField
.
getDataeaseName
()))
||
StringUtils
.
equalsIgnoreCase
(
tableField
.
getFieldName
(),
DorisTableUtils
.
dorisFieldName
(
datasetTableField
.
getTableId
()
+
"_"
+
datasetTableField
.
getOriginName
())))
{
datasetTableField
.
getTableId
()
+
"_"
+
datasetTableField
.
getOriginName
())))
{
tableField
.
setRemarks
(
datasetTableField
.
getName
());
break
;
}
...
...
@@ -1073,7 +1073,7 @@ public class DataSetTableService {
}
public
String
getCustomSQLDatasource
(
DataTableInfoDTO
dataTableInfoDTO
,
List
<
DataSetTableUnionDTO
>
list
,
Datasource
ds
)
{
Datasource
ds
)
{
DatasourceTypes
datasourceTypes
=
DatasourceTypes
.
valueOf
(
ds
.
getType
());
String
keyword
=
datasourceTypes
.
getKeywordPrefix
()
+
"%s"
+
datasourceTypes
.
getKeywordSuffix
();
Map
<
String
,
String
[]>
customInfo
=
new
TreeMap
<>();
...
...
@@ -1260,7 +1260,7 @@ public class DataSetTableService {
// 递归计算出所有子级的checkedFields和unionParam
private
void
getUnionSQLDorisJoin
(
List
<
UnionDTO
>
childrenDs
,
Map
<
String
,
String
[]>
checkedInfo
,
List
<
UnionParamDTO
>
unionList
,
List
<
DatasetTableField
>
checkedFields
)
{
List
<
UnionParamDTO
>
unionList
,
List
<
DatasetTableField
>
checkedFields
)
{
for
(
int
i
=
0
;
i
<
childrenDs
.
size
();
i
++)
{
UnionDTO
unionDTO
=
childrenDs
.
get
(
i
);
String
tableId
=
unionDTO
.
getCurrentDs
().
getId
();
...
...
@@ -1398,7 +1398,7 @@ public class DataSetTableService {
// 递归计算出所有子级的checkedFields和unionParam
private
void
getUnionSQLDatasourceJoin
(
List
<
UnionDTO
>
childrenDs
,
Map
<
String
,
String
[]>
checkedInfo
,
List
<
UnionParamDTO
>
unionList
,
String
keyword
,
List
<
DatasetTableField
>
checkedFields
)
{
List
<
UnionParamDTO
>
unionList
,
String
keyword
,
List
<
DatasetTableField
>
checkedFields
)
{
for
(
int
i
=
0
;
i
<
childrenDs
.
size
();
i
++)
{
UnionDTO
unionDTO
=
childrenDs
.
get
(
i
);
...
...
@@ -1703,10 +1703,10 @@ public class DataSetTableService {
if
(
datasetTableIncrementalConfig
==
null
||
StringUtils
.
isEmpty
(
datasetTableIncrementalConfig
.
getTableId
()))
{
return
;
}
if
(
StringUtils
.
isNotEmpty
(
datasetTableIncrementalConfig
.
getIncrementalAdd
()))
{
if
(
StringUtils
.
isNotEmpty
(
datasetTableIncrementalConfig
.
getIncrementalAdd
()))
{
datasetTableIncrementalConfig
.
setIncrementalAdd
(
datasetTableIncrementalConfig
.
getIncrementalAdd
().
trim
());
}
if
(
StringUtils
.
isNotEmpty
(
datasetTableIncrementalConfig
.
getIncrementalDelete
()))
{
if
(
StringUtils
.
isNotEmpty
(
datasetTableIncrementalConfig
.
getIncrementalDelete
()))
{
datasetTableIncrementalConfig
.
setIncrementalDelete
(
datasetTableIncrementalConfig
.
getIncrementalDelete
().
trim
());
}
if
(
StringUtils
.
isEmpty
(
datasetTableIncrementalConfig
.
getId
()))
{
...
...
backend/src/main/java/io/dataease/service/datasource/DatasourceService.java
浏览文件 @
734aa62a
package
io
.
dataease
.
service
.
datasource
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.google.gson.Gson
;
import
com.jayway.jsonpath.JsonPath
;
...
...
@@ -110,12 +111,38 @@ public class DatasourceService {
datasourceDTO
.
setConfiguration
(
JSONObject
.
toJSONString
(
new
Gson
().
fromJson
(
datasourceDTO
.
getConfiguration
(),
CHConfiguration
.
class
))
);
break
;
case
api:
datasourceDTO
.
setApiConfiguration
(
JSONObject
.
parseArray
(
datasourceDTO
.
getConfiguration
()));
JSONArray
apiDefinitionList
=
JSONObject
.
parseArray
(
datasourceDTO
.
getConfiguration
());
JSONArray
apiDefinitionListWithStatus
=
new
JSONArray
();
int
success
=
0
;
if
(
StringUtils
.
isNotEmpty
(
datasourceDTO
.
getStatus
())){
JSONObject
apiItemStatuses
=
JSONObject
.
parseObject
(
datasourceDTO
.
getStatus
());
for
(
Object
apiDefinition
:
apiDefinitionList
)
{
String
status
=
apiItemStatuses
.
getString
(
JSONObject
.
parseObject
(
apiDefinition
.
toString
()).
getString
(
"name"
)
);
JSONObject
object
=
JSONObject
.
parseObject
(
apiDefinition
.
toString
());
object
.
put
(
"status"
,
status
);
apiDefinitionListWithStatus
.
add
(
object
);
if
(
StringUtils
.
isNotEmpty
(
status
)
&&
status
.
equalsIgnoreCase
(
"Success"
)){
success
++;
}
}
}
datasourceDTO
.
setApiConfiguration
(
apiDefinitionListWithStatus
);
if
(
success
==
apiDefinitionList
.
size
()){
datasourceDTO
.
setStatus
(
"Success"
);
break
;
}
if
(
success
>
0
&&
success
<
apiDefinitionList
.
size
()
){
datasourceDTO
.
setStatus
(
"Warning"
);
break
;
}
datasourceDTO
.
setStatus
(
"Error"
);
break
;
default
:
break
;
}
}
catch
(
Exception
ignore
){}
}
catch
(
Exception
ignore
){
ignore
.
printStackTrace
();
}
});
return
datasourceDTOS
;
...
...
@@ -135,6 +162,7 @@ public class DatasourceService {
return
extDataSourceMapper
.
query
(
gridExample
);
}
@DeCleaner
(
DePermissionType
.
DATASOURCE
)
public
void
deleteDatasource
(
String
datasourceId
)
throws
Exception
{
DatasetTableExample
example
=
new
DatasetTableExample
();
example
.
createCriteria
().
andDataSourceIdEqualTo
(
datasourceId
);
...
...
@@ -156,22 +184,39 @@ public class DatasourceService {
handleConnectionPool
(
datasource
,
"edit"
);
}
public
ResultHolder
validate
(
Datasource
datasource
)
throws
Exception
{
public
ResultHolder
validate
(
Datasource
DTO
datasource
)
throws
Exception
{
try
{
DatasourceProvider
datasourceProvider
=
ProviderFactory
.
getProvider
(
datasource
.
getType
());
DatasourceRequest
datasourceRequest
=
new
DatasourceRequest
();
datasourceRequest
.
setDatasource
(
datasource
);
String
status
=
datasourceProvider
.
checkStatus
(
datasourceRequest
);
if
(
status
.
equalsIgnoreCase
(
"Success"
))
{
return
ResultHolder
.
success
(
"Success"
);
}
if
(
status
.
equalsIgnoreCase
(
"Warning"
))
{
return
ResultHolder
.
error
(
"Datasource has invalid items"
);
}
if
(
status
.
equalsIgnoreCase
(
"Error"
))
{
return
ResultHolder
.
error
(
"Datasource is invalid"
);
String
datasourceStatus
=
datasourceProvider
.
checkStatus
(
datasourceRequest
);
if
(
datasource
.
getType
().
equalsIgnoreCase
(
"api"
)){
int
success
=
0
;
JSONArray
apiDefinitionList
=
JSONObject
.
parseArray
(
datasource
.
getConfiguration
());
JSONArray
apiDefinitionListWithStatus
=
new
JSONArray
();
if
(
StringUtils
.
isNotEmpty
(
datasourceStatus
)){
JSONObject
apiItemStatuses
=
JSONObject
.
parseObject
(
datasourceStatus
);
for
(
Object
apiDefinition
:
apiDefinitionList
)
{
String
status
=
apiItemStatuses
.
getString
(
JSONObject
.
parseObject
(
apiDefinition
.
toString
()).
getString
(
"name"
)
);
JSONObject
object
=
JSONObject
.
parseObject
(
apiDefinition
.
toString
());
object
.
put
(
"status"
,
status
);
apiDefinitionListWithStatus
.
add
(
object
);
if
(
StringUtils
.
isNotEmpty
(
status
)
&&
status
.
equalsIgnoreCase
(
"Success"
)){
success
++;
}
}
}
datasource
.
setApiConfiguration
(
apiDefinitionListWithStatus
);
if
(
success
==
apiDefinitionList
.
size
()){
return
ResultHolder
.
success
(
datasource
);
}
if
(
success
>
0
&&
success
<
apiDefinitionList
.
size
()
){
return
ResultHolder
.
error
(
"Datasource has invalid tables"
,
datasource
);
}
return
ResultHolder
.
error
(
"Datasource is invalid."
,
datasource
);
}
return
ResultHolder
.
success
(
"Success"
);
return
ResultHolder
.
success
(
datasource
);
}
catch
(
Exception
e
){
return
ResultHolder
.
error
(
"Datasource is invalid: "
+
e
.
getMessage
());
}
...
...
@@ -187,17 +232,29 @@ public class DatasourceService {
DatasourceProvider
datasourceProvider
=
ProviderFactory
.
getProvider
(
datasource
.
getType
());
DatasourceRequest
datasourceRequest
=
new
DatasourceRequest
();
datasourceRequest
.
setDatasource
(
datasource
);
String
status
=
datasourceProvider
.
checkStatus
(
datasourceRequest
);
datasource
.
setStatus
(
status
);
if
(
status
.
equalsIgnoreCase
(
"Success"
))
{
return
ResultHolder
.
success
(
"Success"
);
}
if
(
status
.
equalsIgnoreCase
(
"Warning"
))
{
return
ResultHolder
.
error
(
"Datasource has invalid items"
);
}
if
(
status
.
equalsIgnoreCase
(
"Error"
))
{
return
ResultHolder
.
error
(
"Datasource is invalid"
);
String
datasourceStatus
=
datasourceProvider
.
checkStatus
(
datasourceRequest
);
datasource
.
setStatus
(
datasourceStatus
);
if
(
datasource
.
getType
().
equalsIgnoreCase
(
"api"
)){
List
<
ApiDefinition
>
apiDefinitionList
=
JSONObject
.
parseArray
(
datasource
.
getConfiguration
(),
ApiDefinition
.
class
);
JSONObject
apiItemStatuses
=
JSONObject
.
parseObject
(
datasourceStatus
);
int
success
=
0
;
for
(
ApiDefinition
apiDefinition
:
apiDefinitionList
)
{
String
status
=
apiItemStatuses
.
getString
(
apiDefinition
.
getName
());
apiDefinition
.
setStatus
(
status
);
if
(
status
.
equalsIgnoreCase
(
"Success"
)){
success
++;
}
}
if
(
success
==
apiDefinitionList
.
size
()){
return
ResultHolder
.
success
(
datasource
);
}
if
(
success
>
0
&&
success
<
apiDefinitionList
.
size
()
){
return
ResultHolder
.
error
(
"Datasource has invalid tables"
,
datasource
);
}
return
ResultHolder
.
error
(
"Datasource is invalid."
,
datasource
);
}
return
ResultHolder
.
success
(
"Success"
);
}
catch
(
Exception
e
){
datasource
.
setStatus
(
"Error"
);
...
...
@@ -219,12 +276,14 @@ public class DatasourceService {
DatasourceProvider
datasourceProvider
=
ProviderFactory
.
getProvider
(
ds
.
getType
());
DatasourceRequest
datasourceRequest
=
new
DatasourceRequest
();
datasourceRequest
.
setDatasource
(
ds
);
datasourceProvider
.
checkStatus
(
datasourceRequest
);
if
(!
datasource
.
getType
().
equalsIgnoreCase
(
"api"
)){
datasourceProvider
.
checkStatus
(
datasourceRequest
);
}
List
<
TableDesc
>
tables
=
datasourceProvider
.
getTables
(
datasourceRequest
);
// 获取当前数据源下的db类型数据集
// 获取当前数据源下的db
、api
类型数据集
DatasetTableExample
datasetTableExample
=
new
DatasetTableExample
();
datasetTableExample
.
createCriteria
().
andTypeIn
(
Arrays
.
asList
(
"db"
,
"api"
)).
andDataSourceIdEqualTo
(
datasource
.
getId
());
List
<
DatasetTable
>
datasetTables
=
datasetTableMapper
.
selectByExampleWithBLOBs
(
datasetTableExample
);
List
<
DBTableDTO
>
list
=
new
ArrayList
<>();
...
...
backend/src/main/resources/db/migration/V32__1.8.sql
浏览文件 @
734aa62a
...
...
@@ -354,6 +354,9 @@ SET FOREIGN_KEY_CHECKS = 1;
ALTER
TABLE
`panel_view`
ADD
COLUMN
`position`
varchar
(
255
)
NULL
DEFAULT
'panel'
COMMENT
'视图位置 panel 仪表板中,tab Tab页中'
AFTER
`update_time`
;
ALTER
TABLE
`datasource`
CHANGE
COLUMN
`status`
`status`
LONGTEXT
NULL
DEFAULT
NULL
COMMENT
'状态'
;
ALTER
TABLE
`panel_view`
ADD
COLUMN
`copy_from_panel`
varchar
(
255
)
NULL
AFTER
`position`
,
ADD
COLUMN
`copy_from_view`
varchar
(
255
)
NULL
AFTER
`copy_from_panel`
,
...
...
frontend/src/lang/en.js
浏览文件 @
734aa62a
...
...
@@ -1337,7 +1337,11 @@ export default {
auth_config_info
:
'Permission verification is required for the request'
,
verified
:
'Verified'
,
verification_method
:
'Verification Method'
,
username
:
'Username'
username
:
'Username'
,
api_table_not_empty
:
'API data table cannot be empty'
,
has_repeat_name
:
'Duplicate API data table name'
,
valid
:
'Valid'
,
invalid
:
'Invalid'
},
pblink
:
{
key_pwd
:
'Please enter the password to open the link'
,
...
...
frontend/src/lang/tw.js
浏览文件 @
734aa62a
...
...
@@ -1338,7 +1338,11 @@ export default {
auth_config_info
:
'請求需要進行權限校驗'
,
verified
:
'認證'
,
verification_method
:
'認證方式'
,
username
:
'用戶名'
username
:
'用戶名'
,
api_table_not_empty
:
'API 數據表不能為空'
,
has_repeat_name
:
'API 數據表名稱重複'
,
valid
:
'有效'
,
invalid
:
'無效'
},
pblink
:
{
key_pwd
:
'請輸入密碼打開鏈接'
,
...
...
frontend/src/lang/zh.js
浏览文件 @
734aa62a
...
...
@@ -1346,7 +1346,11 @@ export default {
auth_config_info
:
'请求需要进行权限校验'
,
verified
:
'认证'
,
verification_method
:
'认证方式'
,
username
:
'用户名'
username
:
'用户名'
,
api_table_not_empty
:
'API 数据表不能为空'
,
has_repeat_name
:
'API 数据表名称重复'
,
valid
:
'有效'
,
invalid
:
'无效'
},
pblink
:
{
key_pwd
:
'请输入密码打开链接'
,
...
...
frontend/src/views/chart/view/ChartEdit.vue
浏览文件 @
734aa62a
...
...
@@ -622,7 +622,7 @@
/>
</el-collapse-item>
<el-collapse-item
v-show=
"view.render && view.render === 'antv' && chart.type !== 'map' && chart.type !== 'waterfall' && chart.type !== 'word-cloud' && chart.type !== 'treemap'"
v-show=
"view.render && view.render === 'antv' && chart.type !== 'map' && chart.type !== 'waterfall' && chart.type !== 'word-cloud' && chart.type !== 'treemap'
&& chart.type !== 'funnel'
"
name=
"size"
:title=
"(chart.type && chart.type.includes('table')) ? $t('chart.table_config') : $t('chart.size')"
>
...
...
frontend/src/views/system/datasource/form.vue
浏览文件 @
734aa62a
...
...
@@ -48,6 +48,18 @@
<el-table-column
prop=
"name"
:label=
"$t('datasource.data_table_name')"
width=
"150"
show-overflow-tooltip
></el-table-column>
<el-table-column
prop=
"method"
:label=
"$t('datasource.method')"
width=
"150"
show-overflow-tooltip
></el-table-column>
<el-table-column
prop=
"url"
:label=
"$t('datasource.url')"
width=
"150"
show-overflow-tooltip
></el-table-column>
<el-table-column
prop=
"status"
:label=
"$t('commons.status')"
width=
"150"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.status === 'Success'"
style=
"color: green"
>
{{
$t
(
'datasource.valid'
)
}}
</span>
<span
v-if=
"scope.row.status === 'Error'"
style=
"color: red"
>
{{
$t
(
'datasource.invalid'
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
:label=
"$t('dataset.operate')"
>
<
template
slot-scope=
"scope"
style=
"float: right"
>
<el-button
size=
"mini"
type=
"primary"
icon=
"el-icon-edit"
circle
@
click=
"addApiItem(scope.row)"
/>
...
...
@@ -409,7 +421,7 @@ export default {
canEdit
:
false
,
originConfiguration
:
{},
edit_api_item
:
false
,
add_api_item
:
fals
e
,
add_api_item
:
tru
e
,
active
:
0
,
defaultApiItem
:
{
name
:
''
,
...
...
@@ -426,6 +438,7 @@ export default {
fields
:
[]
},
apiItem
:
{
status
:
''
,
name
:
''
,
url
:
''
,
method
:
'GET'
,
...
...
@@ -571,6 +584,10 @@ export default {
const
method
=
this
.
formType
===
'add'
?
addDs
:
editDs
const
form
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
form
))
if
(
form
.
type
===
'api'
){
if
(
this
.
form
.
apiConfiguration
.
length
<
1
){
this
.
$message
.
error
(
i18n
.
t
(
'datasource.api_table_not_empty'
))
return
}
form
.
configuration
=
JSON
.
stringify
(
form
.
apiConfiguration
)
}
else
{
form
.
configuration
=
JSON
.
stringify
(
form
.
configuration
)
...
...
@@ -655,6 +672,9 @@ export default {
if
(
res
.
success
)
{
this
.
$success
(
i18n
.
t
(
'datasource.validate_success'
))
}
else
{
if
(
data
.
type
===
'api'
)
{
this
.
form
.
apiConfiguration
=
res
.
data
.
apiConfiguration
}
if
(
res
.
message
.
length
<
2500
)
{
this
.
$error
(
res
.
message
)
}
else
{
...
...
@@ -686,6 +706,25 @@ export default {
},
next
()
{
if
(
this
.
active
===
1
){
let
hasRepeatName
=
false
if
(
this
.
add_api_item
){
this
.
form
.
apiConfiguration
.
forEach
(
item
=>
{
if
(
item
.
name
===
this
.
apiItem
.
name
){
hasRepeatName
=
true
}
})
}
else
{
let
index
=
this
.
form
.
apiConfiguration
.
indexOf
(
this
.
apiItem
)
for
(
let
i
=
0
;
i
<
this
.
form
.
apiConfiguration
.
length
;
i
++
){
if
(
i
!==
index
&&
this
.
form
.
apiConfiguration
[
i
].
name
===
this
.
apiItem
.
name
){
hasRepeatName
=
true
}
}
}
if
(
hasRepeatName
){
this
.
$message
.
error
(
i18n
.
t
(
'datasource.has_repeat_name'
))
return
}
this
.
$refs
.
apiItem
.
validate
(
valid
=>
{
if
(
valid
)
{
const
data
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
apiItem
))
...
...
@@ -693,6 +732,7 @@ export default {
this
.
loading
=
true
checkApiDatasource
(
data
).
then
(
res
=>
{
this
.
loading
=
false
this
.
apiItem
.
status
=
'Success'
this
.
$success
(
i18n
.
t
(
'commons.success'
))
this
.
active
++
this
.
apiItem
.
fields
=
res
.
data
.
fields
...
...
@@ -718,17 +758,17 @@ export default {
saveItem
()
{
this
.
active
=
0
this
.
edit_api_item
=
false
if
(
!
this
.
add_api_item
){
if
(
this
.
add_api_item
){
this
.
form
.
apiConfiguration
.
push
(
this
.
apiItem
)
}
},
addApiItem
(
item
)
{
if
(
item
)
{
this
.
add_api_item
=
tru
e
this
.
add_api_item
=
fals
e
this
.
api_table_title
=
this
.
$t
(
'datasource.edit_api_table'
)
this
.
apiItem
=
item
}
else
{
this
.
add_api_item
=
fals
e
this
.
add_api_item
=
tru
e
this
.
apiItem
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
defaultApiItem
))
this
.
api_table_title
=
this
.
$t
(
'datasource.add_api_table'
)
}
...
...
@@ -738,21 +778,6 @@ export default {
deleteItem
(
item
)
{
this
.
form
.
apiConfiguration
.
splice
(
this
.
form
.
apiConfiguration
.
indexOf
(
item
),
1
)
},
runDebug
()
{
this
.
$refs
[
'debugForm'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
this
.
loading
=
true
;
this
.
isStop
=
true
;
this
.
request
.
url
=
this
.
debugForm
.
url
;
this
.
request
.
method
=
this
.
debugForm
.
method
;
this
.
request
.
name
=
getUUID
().
substring
(
0
,
8
);
this
.
runData
=
[];
this
.
runData
.
push
(
this
.
request
);
/*触发执行操作*/
this
.
reportId
=
getUUID
().
substring
(
0
,
8
);
}
})
},
validateApi
(
item
)
{
if
(
undefined
){
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论