Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
data-service
Project
Project
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
Graph
比较
统计图
议题
0
议题
0
列表
看板
标记
Milestones
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
songchuancai
data-service
Commits
5d11c0d7
提交
5d11c0d7
authored
3月 17, 2023
作者:
songchuancai
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化数据表和字段校验逻辑+服务详情
上级
ecf119a7
显示空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
133 行增加
和
17 行删除
+133
-17
DataServiceManagementController.java
...taservice/controller/DataServiceManagementController.java
+12
-0
DataApiColumnRepository.java
...sense/dataservice/repository/DataApiColumnRepository.java
+2
-0
DataApiServiceManagementService.java
.../dataservice/service/DataApiServiceManagementService.java
+3
-0
DataApiServiceManagementServiceImpl.java
...ice/service/impl/DataApiServiceManagementServiceImpl.java
+106
-17
DataApiModelDetailVo.java
...java/com/hisense/dataservice/vo/DataApiModelDetailVo.java
+3
-0
DataApiServiceManagementServiceTest.java
...aservice/service/DataApiServiceManagementServiceTest.java
+7
-0
没有找到文件。
src/main/java/com/hisense/dataservice/controller/DataServiceManagementController.java
浏览文件 @
5d11c0d7
...
...
@@ -7,6 +7,7 @@ import com.hisense.dataservice.library.model.page.PageLink;
import
com.hisense.dataservice.service.DataApiCommonService
;
import
com.hisense.dataservice.service.DataApiDataSourceManagementService
;
import
com.hisense.dataservice.service.DataApiServiceManagementService
;
import
com.hisense.dataservice.vo.DataApiModelDetailVo
;
import
com.hisense.dataservice.vo.DataApiModelItemVo
;
import
com.hisense.dataservice.vo.DataTableVo
;
import
io.swagger.annotations.Api
;
...
...
@@ -76,6 +77,17 @@ public class DataServiceManagementController extends BaseController {
return
dataApiServiceManagementService
.
queryDataApiList
(
environment
,
status
,
pageLink
);
}
@ApiOperation
(
value
=
"数据服务管理-服务详情"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"environment"
,
value
=
"环境"
,
required
=
true
),
@ApiImplicitParam
(
name
=
"modelId"
,
value
=
"数据服务ID"
,
required
=
true
)
})
@GetMapping
(
"/{environment}/{modelId}"
)
public
Result
<
DataApiModelDetailVo
>
getApiModelDetail
(
@PathVariable
String
environment
,
@PathVariable
Long
modelId
)
{
return
dataApiServiceManagementService
.
queryApiModelDetail
(
environment
,
modelId
);
}
@GetMapping
(
"/dataFileDownload/{environment}/{pattern}/{fileId}"
)
public
Object
dataFileDownload
(
@PathVariable
String
environment
,
@PathVariable
String
pattern
,
@PathVariable
String
fileId
)
{
...
...
src/main/java/com/hisense/dataservice/repository/DataApiColumnRepository.java
浏览文件 @
5d11c0d7
...
...
@@ -28,4 +28,6 @@ public interface DataApiColumnRepository extends JpaRepository<DataApiColumn,Lon
// 判断数据表中是否存在某个字段
boolean
existsByDataTableIdAndFieldName
(
Long
dataTableId
,
String
fileName
);
List
<
DataApiColumn
>
findAllByDataTableIdIn
(
Iterable
<
Long
>
tableIds
);
}
src/main/java/com/hisense/dataservice/service/DataApiServiceManagementService.java
浏览文件 @
5d11c0d7
...
...
@@ -5,6 +5,7 @@ import com.hisense.dataservice.dto.DataApiModelDto;
import
com.hisense.dataservice.library.model.Result
;
import
com.hisense.dataservice.library.model.page.PageData
;
import
com.hisense.dataservice.library.model.page.PageLink
;
import
com.hisense.dataservice.vo.DataApiModelDetailVo
;
import
com.hisense.dataservice.vo.DataApiModelItemVo
;
import
java.util.List
;
...
...
@@ -24,4 +25,6 @@ public interface DataApiServiceManagementService extends BaseService {
Result
<
JSONObject
>
debugDataApiService
(
String
environment
,
Long
dataModelId
);
Result
<
PageData
<
DataApiModelItemVo
>>
queryDataApiList
(
String
environment
,
Integer
status
,
PageLink
pageLink
);
Result
<
DataApiModelDetailVo
>
queryApiModelDetail
(
String
environment
,
Long
modelId
);
}
src/main/java/com/hisense/dataservice/service/impl/DataApiServiceManagementServiceImpl.java
浏览文件 @
5d11c0d7
...
...
@@ -11,9 +11,12 @@ import com.hisense.dataservice.library.model.page.PageLink;
import
com.hisense.dataservice.repository.*
;
import
com.hisense.dataservice.service.DataApiServiceManagementService
;
import
com.hisense.dataservice.util.ThreadPoolManagerUtil
;
import
com.hisense.dataservice.vo.DataApiModelDetailVo
;
import
com.hisense.dataservice.vo.DataApiModelItemVo
;
import
com.hisense.dataservice.vo.DataSourceVo
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.jpa.domain.Specification
;
...
...
@@ -207,10 +210,36 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
dataApiModel
.
setDataSourceId
(
dataSourceId
);
}
//
设置表之间关联关系
//
表关系、行列配置
List
<
TableJoinRelationConfig
>
tableJoinRelationConfig
=
dataApiModelDto
.
getTableJoinRelationConfig
();
List
<
ColumnDataRangeFilter
>
columnDataRangeConfigs
=
dataApiModelDto
.
getColumnDataRangeConfig
();
List
<
LineDataRangeFilter
>
lineDataRangeConfigs
=
dataApiModelDto
.
getLineDataRangeConfig
();
// 获取数据表和数据字段相关信息
Map
<
Long
,
DataApiTable
>
dataApiTableIdToSelfMap
=
null
;
Map
<
Long
,
Map
<
Long
,
DataApiColumn
>>
tableIdAndColumnIdToSelfMap
=
null
;
dataSourceId
=
dataApiModel
.
getDataSourceId
();
// 获取dataApiModel中最新的数据源ID
if
(
dataSourceId
!=
null
){
dataApiTableIdToSelfMap
=
queryDataApiTableByDataSourceId
(
dataSourceId
);
Set
<
Long
>
tableIds
=
new
HashSet
<>();
if
(!
CollectionUtils
.
isEmpty
(
tableJoinRelationConfig
)){
tableIds
.
addAll
(
tableJoinRelationConfig
.
stream
().
map
(
item
->
item
.
getTableId
()).
collect
(
Collectors
.
toList
()));
}
if
(!
CollectionUtils
.
isEmpty
(
columnDataRangeConfigs
)){
tableIds
.
addAll
(
columnDataRangeConfigs
.
stream
().
map
(
item
->
item
.
getTableId
()).
collect
(
Collectors
.
toList
()));
}
if
(!
CollectionUtils
.
isEmpty
(
lineDataRangeConfigs
)){
tableIds
.
addAll
(
lineDataRangeConfigs
.
stream
().
map
(
item
->
item
.
getTableId
()).
collect
(
Collectors
.
toList
()));
}
tableIdAndColumnIdToSelfMap
=
queryDataColumnByTableIds
(
tableIds
);
}
// 设置表之间关联关系
if
(!
CollectionUtils
.
isEmpty
(
tableJoinRelationConfig
))
{
if
(!
isRightTableRelationAndSetName
(
dataSourceId
,
tableJoinRelationConfig
)){
if
(
dataApiTableIdToSelfMap
==
null
||
tableIdAndColumnIdToSelfMap
==
null
){
return
failure
(
"多个数据表关系配置不正确,数据源相关配置未能正确加载"
,
modelId
);
}
if
(!
isRightTableRelationAndSetName
(
tableJoinRelationConfig
,
dataApiTableIdToSelfMap
,
tableIdAndColumnIdToSelfMap
)){
return
failure
(
"多个数据表关系配置不正确"
,
modelId
);
}
dataApiModel
.
setTableJoinRelationConfig
(
tableJoinRelationConfig
);
...
...
@@ -233,20 +262,23 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
}
Boolean
checkFilterResult
;
dataSourceId
=
dataApiModel
.
getDataSourceId
();
// 在次获取最新的数据源ID
// 保存列筛选条件
List
<
ColumnDataRangeFilter
>
columnDataRangeConfigs
=
dataApiModelDto
.
getColumnDataRangeConfig
();
if
(!
CollectionUtils
.
isEmpty
(
columnDataRangeConfigs
))
{
checkFilterResult
=
isRightColumnConfigAndSetNameField
(
dataSourceId
,
columnDataRangeConfigs
);
if
(
dataApiTableIdToSelfMap
==
null
||
tableIdAndColumnIdToSelfMap
==
null
){
return
failure
(
"数据列过滤配置不正确,数据源相关配置未能正确加载"
,
modelId
);
}
checkFilterResult
=
isRightColumnConfigAndSetNameField
(
columnDataRangeConfigs
,
dataApiTableIdToSelfMap
,
tableIdAndColumnIdToSelfMap
);
if
(!
checkFilterResult
){
return
failure
(
"数据列过滤配置不正确"
,
modelId
);
}
dataApiModelConfig
.
setColumnDataRangeConfig
(
columnDataRangeConfigs
);
}
// 保存行筛选条件
List
<
LineDataRangeFilter
>
lineDataRangeConfigs
=
dataApiModelDto
.
getLineDataRangeConfig
();
if
(!
CollectionUtils
.
isEmpty
(
lineDataRangeConfigs
))
{
checkFilterResult
=
isRightLineConfigAndSetNameField
(
dataSourceId
,
lineDataRangeConfigs
);
if
(
dataApiTableIdToSelfMap
==
null
||
tableIdAndColumnIdToSelfMap
==
null
){
return
failure
(
"数据行过滤配置不正确,数据源相关配置未能正确加载"
,
modelId
);
}
checkFilterResult
=
isRightLineConfigAndSetNameField
(
lineDataRangeConfigs
,
dataApiTableIdToSelfMap
,
tableIdAndColumnIdToSelfMap
);
if
(!
checkFilterResult
){
return
failure
(
"数据行过滤配置不正确"
,
modelId
);
}
...
...
@@ -258,7 +290,7 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
}
// 列配置检查
private
Boolean
isRightColumnConfigAndSetNameField
(
L
ong
dataSourceId
,
List
<
ColumnDataRangeFilter
>
columnDataRangeFilters
){
private
Boolean
isRightColumnConfigAndSetNameField
(
L
ist
<
ColumnDataRangeFilter
>
columnDataRangeFilters
,
Map
<
Long
,
DataApiTable
>
dataApiTableIdToSelfMap
,
Map
<
Long
,
Map
<
Long
,
DataApiColumn
>>
tableIdAndColumnIdToSelfMap
){
DataApiTable
dataApiTable
;
for
(
ColumnDataRangeFilter
columnDataRangeFilter
:
columnDataRangeFilters
)
{
List
<
DataColumn
>
fields
=
columnDataRangeFilter
.
getFields
();
...
...
@@ -267,15 +299,21 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
log
.
warn
(
"列过滤条件:{},数据表ID不存在"
,
columnDataRangeFilter
);
return
Boolean
.
FALSE
;
}
dataApiTable
=
queryDataApiTableByDataSourceIdAndTableId
(
dataSourceId
,
tableId
);
// dataApiTable = queryDataApiTableByDataSourceIdAndTableId(dataSourceId,tableId);
dataApiTable
=
dataApiTableIdToSelfMap
.
get
(
tableId
);
if
(
null
==
dataApiTable
){
log
.
warn
(
"数据表:【tableId:{}】不存在"
,
tableId
);
return
Boolean
.
FALSE
;
}
columnDataRangeFilter
.
setTableName
(
dataApiTable
.
getTableName
());
// 设置表名
List
<
DataApiColumn
>
dataApiColumns
=
dataApiColumnRepository
.
findAllByDataTableIdAndDeletedIsFalse
(
tableId
);
Map
<
Long
,
DataApiColumn
>
columnIdToNameMap
=
dataApiColumns
.
stream
().
collect
(
Collectors
.
toMap
(
DataApiColumn:
:
getId
,
Function
.
identity
()));
// List<DataApiColumn> dataApiColumns = dataApiColumnRepository.findAllByDataTableIdAndDeletedIsFalse(tableId);
// Map<Long, DataApiColumn> columnIdToNameMap = dataApiColumns.stream().collect(Collectors.toMap(DataApiColumn::getId, Function.identity()));
Map
<
Long
,
DataApiColumn
>
columnIdToNameMap
=
tableIdAndColumnIdToSelfMap
.
get
(
tableId
);
if
(
columnIdToNameMap
==
null
){
log
.
warn
(
"列过滤条件:【{}】中不存在该表:【{}】"
,
columnDataRangeFilter
,
tableId
);
return
Boolean
.
FALSE
;
}
for
(
DataColumn
field
:
fields
)
{
Long
id
=
field
.
getId
();
if
(
null
==
id
){
...
...
@@ -297,7 +335,7 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
}
// 行配置检查
private
Boolean
isRightLineConfigAndSetNameField
(
L
ong
dataSourceId
,
List
<
LineDataRangeFilter
>
lineDataRangeFilters
){
private
Boolean
isRightLineConfigAndSetNameField
(
L
ist
<
LineDataRangeFilter
>
lineDataRangeFilters
,
Map
<
Long
,
DataApiTable
>
dataApiTableIdToSelfMap
,
Map
<
Long
,
Map
<
Long
,
DataApiColumn
>>
tableIdAndColumnIdToSelfMap
){
DataApiTable
dataApiTable
;
DataApiColumn
dataApiColumn
;
for
(
LineDataRangeFilter
lineDataRangeFilter
:
lineDataRangeFilters
)
{
...
...
@@ -306,7 +344,8 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
log
.
warn
(
"行过滤条件:{},数据表ID不存在"
,
lineDataRangeFilter
);
return
Boolean
.
FALSE
;
}
dataApiTable
=
queryDataApiTableByDataSourceIdAndTableId
(
dataSourceId
,
tableId
);
// dataApiTable = queryDataApiTableByDataSourceIdAndTableId(dataSourceId,tableId);
dataApiTable
=
dataApiTableIdToSelfMap
.
get
(
tableId
);
if
(
null
==
dataApiTable
){
log
.
warn
(
"数据表:【tableId:{}】不存在"
,
tableId
);
return
Boolean
.
FALSE
;
...
...
@@ -320,7 +359,13 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
log
.
warn
(
"过滤条件:{},数据字段不存在"
,
filterCondition
);
return
Boolean
.
FALSE
;
}
dataApiColumn
=
queryDataApiColumnWithTableIdAndField
(
dataApiTable
.
getId
(),
field
.
getId
());
// dataApiColumn = queryDataApiColumnWithTableIdAndField(dataApiTable.getId(), field.getId());
Map
<
Long
,
DataApiColumn
>
dataApiColumnMap
=
tableIdAndColumnIdToSelfMap
.
get
(
dataApiTable
.
getId
());
if
(
dataApiColumnMap
==
null
){
log
.
warn
(
"数据表:【tableId:{}】不存在数据字段:【columnId: {}】"
,
tableId
,
field
.
getId
());
return
Boolean
.
FALSE
;
}
dataApiColumn
=
dataApiColumnMap
.
get
(
field
.
getId
());
if
(
null
==
dataApiColumn
){
log
.
warn
(
"数据表:【tableId:{}】不存在数据字段:【columnId: {}】"
,
tableId
,
field
.
getId
());
return
Boolean
.
FALSE
;
...
...
@@ -336,7 +381,7 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
// 表关系配置检查
private
Boolean
isRightTableRelationAndSetName
(
L
ong
dataSourceId
,
List
<
TableJoinRelationConfig
>
tableJoinRelationConfigs
){
private
Boolean
isRightTableRelationAndSetName
(
L
ist
<
TableJoinRelationConfig
>
tableJoinRelationConfigs
,
Map
<
Long
,
DataApiTable
>
dataApiTableIdToSelfMap
,
Map
<
Long
,
Map
<
Long
,
DataApiColumn
>>
tableIdAndColumnIdToSelfMap
){
DataApiTable
dataApiTable
;
DataApiColumn
dataApiColumn
;
Long
tableId
;
...
...
@@ -348,13 +393,20 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
log
.
warn
(
"配置关系:{}中数据表ID或者数据字段ID为空"
,
tableJoinRelationConfig
);
return
Boolean
.
FALSE
;
}
dataApiTable
=
queryDataApiTableByDataSourceIdAndTableId
(
dataSourceId
,
tableId
);
// dataApiTable = queryDataApiTableByDataSourceIdAndTableId(dataSourceId,tableId);
dataApiTable
=
dataApiTableIdToSelfMap
.
get
(
tableId
);
if
(
null
==
dataApiTable
){
log
.
warn
(
"数据表:【tableId:{}】不存在"
,
tableId
);
return
Boolean
.
FALSE
;
}
tableJoinRelationConfig
.
setTableName
(
dataApiTable
.
getTableName
());
dataApiColumn
=
queryDataApiColumnWithTableIdAndField
(
dataApiTable
.
getId
(),
columnId
);
// dataApiColumn = queryDataApiColumnWithTableIdAndField(dataApiTable.getId(), columnId);
Map
<
Long
,
DataApiColumn
>
dataApiColumnMap
=
tableIdAndColumnIdToSelfMap
.
get
(
dataApiTable
.
getId
());
if
(
dataApiColumnMap
==
null
){
log
.
warn
(
"数据表:【tableId:{}】不存在数据字段:【columnId: {}】"
,
tableId
,
columnId
);
return
Boolean
.
FALSE
;
}
dataApiColumn
=
dataApiColumnMap
.
get
(
columnId
);
if
(
null
==
dataApiColumn
){
log
.
warn
(
"数据表:【tableId:{}】不存在数据字段:【columnId: {}】"
,
tableId
,
columnId
);
return
Boolean
.
FALSE
;
...
...
@@ -381,6 +433,23 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
return
dataApiTableOptional
.
get
();
}
private
Map
<
Long
,
DataApiTable
>
queryDataApiTableByDataSourceId
(
Long
dataSourceId
){
List
<
DataApiTable
>
dataApiTableList
=
dataApiTableRepository
.
findAllByDataSourceIdAndDeletedIsFalse
(
dataSourceId
);
Map
<
Long
,
DataApiTable
>
tableIdToSelfMap
=
dataApiTableList
.
stream
().
collect
(
Collectors
.
toMap
(
DataApiTable:
:
getId
,
Function
.
identity
()));
return
tableIdToSelfMap
;
}
private
Map
<
Long
,
Map
<
Long
,
DataApiColumn
>>
queryDataColumnByTableIds
(
Set
<
Long
>
tableIds
){
List
<
DataApiColumn
>
columnList
=
dataApiColumnRepository
.
findAllByDataTableIdIn
(
tableIds
);
Map
<
Long
,
Map
<
Long
,
DataApiColumn
>>
tableIdAndColumnIdToSelfMap
=
new
HashMap
<>();
for
(
DataApiColumn
dataApiColumn
:
columnList
)
{
Long
dataTableId
=
dataApiColumn
.
getDataTableId
();
Long
columnId
=
dataApiColumn
.
getId
();
Map
<
Long
,
DataApiColumn
>
columnIdToSelfMap
=
tableIdAndColumnIdToSelfMap
.
getOrDefault
(
dataTableId
,
new
HashMap
<>());
columnIdToSelfMap
.
put
(
columnId
,
dataApiColumn
);
tableIdAndColumnIdToSelfMap
.
put
(
dataTableId
,
columnIdToSelfMap
);
}
return
tableIdAndColumnIdToSelfMap
;
}
public
Result
<
JSONObject
>
debugDataApiService
(
String
environment
,
Long
dataModelId
){
JSONObject
result
=
new
JSONObject
();
...
...
@@ -454,6 +523,26 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
return
success
(
result
);
}
@Override
public
Result
<
DataApiModelDetailVo
>
queryApiModelDetail
(
String
environment
,
Long
modelId
)
{
Optional
<
DataApiModel
>
dataApiModelOptional
=
dataApiModelRepository
.
findByIdAndSystemEnv
(
modelId
,
SystemEnv
.
valueOf
(
environment
));
DataApiModelDetailVo
dataApiModelDetailVo
=
new
DataApiModelDetailVo
();
if
(!
dataApiModelOptional
.
isPresent
()){
return
failure
(
"数据服务不存在"
);
}
DataApiModel
dataApiModel
=
dataApiModelOptional
.
get
();
BeanUtils
.
copyProperties
(
dataApiModel
,
dataApiModelDetailVo
);
Optional
<
DataApiModelConfig
>
dataApiModelConfig
=
dataApiModelConfigRepository
.
findByTypeIdAndType
(
dataApiModel
.
getId
(),
ModelConfigType
.
PUBLISH
);
dataApiModelConfig
.
ifPresent
((
item
)->{
dataApiModelDetailVo
.
setColumnDataRangeConfig
(
item
.
getColumnDataRangeConfig
());
dataApiModelDetailVo
.
setLineDataRangeConfig
(
item
.
getLineDataRangeConfig
());
});
// TODO 设置发布系统相关信息
// dataApiModelDetailVo.setPublishSystem();
// dataApiModelDetailVo.setSystemLeader();
return
success
(
dataApiModelDetailVo
);
}
private
List
<
List
<
Object
>>
executeDataQueryTask
(
String
dataSql
,
DataApiModelConfig
dataApiModelConfig
,
DataApiDataSource
dataSource
)
throws
Exception
{
// 获取sql的填充参数
List
<
Object
>
jdbcParamValues
=
new
ArrayList
<>();
...
...
src/main/java/com/hisense/dataservice/vo/DataApiModelDetailVo.java
浏览文件 @
5d11c0d7
...
...
@@ -29,6 +29,9 @@ public class DataApiModelDetailVo {
@ApiModelProperty
(
name
=
"数据服务描述"
)
private
String
description
;
@ApiModelProperty
(
name
=
"数据源类型"
)
private
String
dataSourceId
;
@ApiModelProperty
(
name
=
"发布/创建人"
)
private
String
creator
;
...
...
src/test/java/com/hisense/dataservice/service/DataApiServiceManagementServiceTest.java
浏览文件 @
5d11c0d7
...
...
@@ -91,6 +91,13 @@ public class DataApiServiceManagementServiceTest {
}
@Test
public
void
test
(){
Result
<
JSONObject
>
result5
=
dataApiServiceManagementService
.
debugDataApiService
(
"DEV"
,
541L
);
log
.
info
(
"执行调试;第五步结果,调试api:{}"
,
result5
);
Assert
.
assertEquals
(
null
,
result5
.
getData
());
}
private
DataApiModelDto
buildModelDtoForServiceCreate
(){
DataApiModelDto
dataApiModelDto
=
new
DataApiModelDto
();
dataApiModelDto
.
setModelName
(
"测试模式名称"
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论