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
c2502aff
提交
c2502aff
authored
3月 29, 2023
作者:
songchuancai
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化代码
上级
7cc43e06
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
719 行增加
和
192 行删除
+719
-192
SubscribeDataApiTask.java
...java/com/hisense/dataservice/bo/SubscribeDataApiTask.java
+49
-0
MyApplicationController.java
...sense/dataservice/controller/MyApplicationController.java
+6
-4
DataApiModelSubscribeDto.java
...com/hisense/dataservice/dto/DataApiModelSubscribeDto.java
+5
-2
SubscribeApiResultDto.java
...va/com/hisense/dataservice/dto/SubscribeApiResultDto.java
+16
-0
DataApiApplicationRepository.java
.../dataservice/repository/DataApiApplicationRepository.java
+4
-4
DataApiModelConfigRepository.java
.../dataservice/repository/DataApiModelConfigRepository.java
+3
-0
DataApiModelRepository.java
...isense/dataservice/repository/DataApiModelRepository.java
+1
-0
DataItemRepository.java
...om/hisense/dataservice/repository/DataItemRepository.java
+5
-0
MyApplicationService.java
...com/hisense/dataservice/service/MyApplicationService.java
+1
-1
DataApiCommonServiceImpl.java
...se/dataservice/service/impl/DataApiCommonServiceImpl.java
+580
-179
MyApplicationServiceImpl.java
...se/dataservice/service/impl/MyApplicationServiceImpl.java
+2
-2
SpringBeanUtil.java
...ain/java/com/hisense/dataservice/util/SpringBeanUtil.java
+47
-0
没有找到文件。
src/main/java/com/hisense/dataservice/bo/SubscribeDataApiTask.java
0 → 100644
浏览文件 @
c2502aff
package
com
.
hisense
.
dataservice
.
bo
;
import
com.hisense.dataservice.dto.DataApiModelSubscribeDto
;
import
com.hisense.dataservice.dto.SubscribeApiResultDto
;
import
com.hisense.dataservice.entity.DataApiModel
;
import
com.hisense.dataservice.library.model.Result
;
import
com.hisense.dataservice.service.impl.DataApiCommonServiceImpl
;
import
com.hisense.dataservice.util.SpringBeanUtil
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.concurrent.Callable
;
/**
* @author : scc
* @date : 2023/03/29
**/
@Data
@Slf4j
public
class
SubscribeDataApiTask
implements
Callable
<
Result
<
SubscribeApiResultDto
>>
{
private
DataApiModelSubscribeDto
application
;
private
DataApiModel
dataApiModel
;
private
String
environment
;
private
Integer
subscribeSystemId
;
private
String
subscribeSystemName
;
private
String
user
;
public
SubscribeDataApiTask
(
DataApiModelSubscribeDto
application
,
DataApiModel
dataApiModel
,
String
environment
,
Integer
subscribeSystemId
,
String
user
,
String
subscribeSystemName
)
{
this
.
application
=
application
;
this
.
dataApiModel
=
dataApiModel
;
this
.
environment
=
environment
;
this
.
subscribeSystemId
=
subscribeSystemId
;
this
.
subscribeSystemName
=
subscribeSystemName
;
this
.
user
=
user
;
}
@Override
public
Result
<
SubscribeApiResultDto
>
call
()
throws
Exception
{
Result
<
SubscribeApiResultDto
>
result
=
new
Result
<>(
Result
.
OK
,
""
,
null
);
long
time1
=
System
.
currentTimeMillis
();
DataApiCommonServiceImpl
applicationService
=
SpringBeanUtil
.
getBean
(
DataApiCommonServiceImpl
.
class
);
SubscribeApiResultDto
subscribeApiResultDto
=
applicationService
.
doSubscribe
(
environment
,
application
,
dataApiModel
,
subscribeSystemId
,
user
,
subscribeSystemName
);
result
.
setData
(
subscribeApiResultDto
);
long
time2
=
System
.
currentTimeMillis
();
log
.
info
(
String
.
format
(
"订阅完成,系统=%s,api=%s,订阅线程%S处理时间(ms)=%s"
,
subscribeSystemName
,
dataApiModel
.
getName
(),
Thread
.
currentThread
().
getName
(),(
time2
-
time1
)));
return
result
;
}
}
\ No newline at end of file
src/main/java/com/hisense/dataservice/controller/MyApplicationController.java
浏览文件 @
c2502aff
...
@@ -58,11 +58,13 @@ public class MyApplicationController extends BaseController{
...
@@ -58,11 +58,13 @@ public class MyApplicationController extends BaseController{
@ApiOperation
(
value
=
"数据服务管理-服务详情"
)
@ApiOperation
(
value
=
"数据服务管理-服务详情"
)
@ApiImplicitParams
({
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"environment"
,
value
=
"环境"
,
required
=
true
),
@ApiImplicitParam
(
name
=
"environment"
,
value
=
"环境"
,
required
=
true
),
@ApiImplicitParam
(
name
=
"subscribeId"
,
value
=
"订阅ID"
,
required
=
true
)
@ApiImplicitParam
(
name
=
"subscribeId"
,
value
=
"订阅ID"
,
required
=
true
),
@ApiImplicitParam
(
name
=
"systemId"
,
value
=
"系统ID"
,
required
=
true
)
})
})
@GetMapping
(
"/{environment}/{subscribeId}"
)
@GetMapping
(
"/{environment}/{subscribeId}
/{systemId}
"
)
public
Result
<
DataApiModelSubscribeDetailVo
>
getApiModelDetail
(
@PathVariable
String
environment
,
public
Result
<
DataApiModelSubscribeDetailVo
>
getApiModelDetail
(
@PathVariable
String
environment
,
@PathVariable
Long
subscribeId
)
{
@PathVariable
Long
subscribeId
,
return
myApplicationService
.
queryApiModelDetail
(
environment
,
subscribeId
);
@PathVariable
Integer
systemId
)
{
return
myApplicationService
.
queryApiModelDetail
(
environment
,
subscribeId
,
systemId
);
}
}
}
}
src/main/java/com/hisense/dataservice/dto/DataApiModelSubscribeDto.java
浏览文件 @
c2502aff
...
@@ -26,8 +26,8 @@ public class DataApiModelSubscribeDto {
...
@@ -26,8 +26,8 @@ public class DataApiModelSubscribeDto {
@ApiModelProperty
(
value
=
"行数据范围"
,
required
=
true
)
@ApiModelProperty
(
value
=
"行数据范围"
,
required
=
true
)
private
List
<
LineDataRangeFilter
>
lineDataRangeConfig
;
private
List
<
LineDataRangeFilter
>
lineDataRangeConfig
;
@ApiModelProperty
(
value
=
"订阅系统ID
"
,
required
=
fals
e
)
@ApiModelProperty
(
value
=
"订阅系统ID
s"
,
required
=
tru
e
)
private
Integer
subscribeSystemId
;
private
List
<
Integer
>
subscribeSystemIds
;
@ApiModelProperty
(
value
=
"网络环境"
,
required
=
true
)
@ApiModelProperty
(
value
=
"网络环境"
,
required
=
true
)
private
String
networkEnv
;
private
String
networkEnv
;
...
@@ -37,4 +37,7 @@ public class DataApiModelSubscribeDto {
...
@@ -37,4 +37,7 @@ public class DataApiModelSubscribeDto {
@ApiModelProperty
(
value
=
"订阅服务描述"
,
required
=
true
)
@ApiModelProperty
(
value
=
"订阅服务描述"
,
required
=
true
)
private
String
desc
;
private
String
desc
;
@ApiModelProperty
(
value
=
"订阅服务负责人"
,
required
=
true
)
private
String
subSystemLeader
;
}
}
src/main/java/com/hisense/dataservice/dto/SubscribeApiResultDto.java
0 → 100644
浏览文件 @
c2502aff
package
com
.
hisense
.
dataservice
.
dto
;
import
lombok.Data
;
/**
* @author : scc
* @date : 2023/03/29
**/
@Data
public
class
SubscribeApiResultDto
{
private
String
environment
;
private
Integer
subscribeSystemId
;
// 订阅系统ID
private
StringBuilder
errorMsg
;
private
String
subscribeSystemName
;
// 订阅系统名成
private
boolean
subResult
;
// 订阅结果
}
src/main/java/com/hisense/dataservice/repository/DataApiApplicationRepository.java
浏览文件 @
c2502aff
...
@@ -27,10 +27,10 @@ public interface DataApiApplicationRepository extends JpaRepository<DataApiAppli
...
@@ -27,10 +27,10 @@ public interface DataApiApplicationRepository extends JpaRepository<DataApiAppli
"where p.system =:systemId and pr.dataModelId=:apiId "
)
"where p.system =:systemId and pr.dataModelId=:apiId "
)
List
<
DataApiApplication
>
findSubscribedApiBySystem
(
@Param
(
"systemId"
)
Integer
systemId
,
@Param
(
"apiId"
)
Long
apiId
,
@Param
(
"status"
)
Integer
status
);
List
<
DataApiApplication
>
findSubscribedApiBySystem
(
@Param
(
"systemId"
)
Integer
systemId
,
@Param
(
"apiId"
)
Long
apiId
,
@Param
(
"status"
)
Integer
status
);
//
@Query("select p from DataApiApplication p JOIN DataApiProcessRecord pr " +
@Query
(
"select p from DataApiApplication p JOIN DataApiProcessRecord pr "
+
//
"on pr.id = p.processRecordId and pr.processType='sub' and p.userKey is not null " +
"on pr.id = p.processRecordId and pr.processType='sub' and p.userKey is not null "
+
//
"where p.system =:systemId and p.environment=:env")
"where p.system =:systemId and p.environment=:env"
)
// List<PublishApplication> findSubscribedBySystemUserKeyNotNull(@Param("systemId") Integer systemId, @Param("type") Integer type
, @Param("env") Integer env);
List
<
PublishApplication
>
findSubscribedBySystemUserKeyNotNull
(
@Param
(
"systemId"
)
Integer
systemId
,
@Param
(
"env"
)
Integer
env
);
//
//
// @Query("select p from DataApiApplication p JOIN DataApiProcessRecord pr " +
// @Query("select p from DataApiApplication p JOIN DataApiProcessRecord pr " +
// "on pr.id = p.processRecordId and pr.processType='sub' and p.appId is not null " +
// "on pr.id = p.processRecordId and pr.processType='sub' and p.appId is not null " +
...
...
src/main/java/com/hisense/dataservice/repository/DataApiModelConfigRepository.java
浏览文件 @
c2502aff
...
@@ -5,7 +5,9 @@ import com.hisense.dataservice.enums.ModelConfigType;
...
@@ -5,7 +5,9 @@ import com.hisense.dataservice.enums.ModelConfigType;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.Optional
;
import
java.util.Set
;
/**
/**
* @author : scc
* @author : scc
...
@@ -15,4 +17,5 @@ import java.util.Optional;
...
@@ -15,4 +17,5 @@ import java.util.Optional;
public
interface
DataApiModelConfigRepository
extends
JpaRepository
<
DataApiModelConfig
,
Long
>
{
public
interface
DataApiModelConfigRepository
extends
JpaRepository
<
DataApiModelConfig
,
Long
>
{
Optional
<
DataApiModelConfig
>
findByTypeIdAndType
(
Long
typeId
,
ModelConfigType
type
);
Optional
<
DataApiModelConfig
>
findByTypeIdAndType
(
Long
typeId
,
ModelConfigType
type
);
List
<
DataApiModelConfig
>
findByTypeIdInAndType
(
Set
<
Long
>
typeIds
,
ModelConfigType
type
);
}
}
src/main/java/com/hisense/dataservice/repository/DataApiModelRepository.java
浏览文件 @
c2502aff
...
@@ -42,4 +42,5 @@ public interface DataApiModelRepository extends JpaRepository<DataApiModel,Long>
...
@@ -42,4 +42,5 @@ public interface DataApiModelRepository extends JpaRepository<DataApiModel,Long>
@Query
(
value
=
"select a.user_id, a.cn from ldap_user_info a where a.user_id in (:userIds)"
,
nativeQuery
=
true
)
@Query
(
value
=
"select a.user_id, a.cn from ldap_user_info a where a.user_id in (:userIds)"
,
nativeQuery
=
true
)
List
<
Map
<
String
,
String
>>
getUserInfoByUserIds
(
@Param
(
"userIds"
)
Set
<
String
>
userIds
);
List
<
Map
<
String
,
String
>>
getUserInfoByUserIds
(
@Param
(
"userIds"
)
Set
<
String
>
userIds
);
List
<
DataApiModel
>
findAllByIdIn
(
Set
<
Long
>
ids
);
}
}
src/main/java/com/hisense/dataservice/repository/DataItemRepository.java
浏览文件 @
c2502aff
...
@@ -3,5 +3,10 @@ package com.hisense.dataservice.repository;
...
@@ -3,5 +3,10 @@ package com.hisense.dataservice.repository;
import
com.hisense.dataservice.entity.DataItem
;
import
com.hisense.dataservice.entity.DataItem
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
java.util.List
;
import
java.util.Set
;
public
interface
DataItemRepository
extends
JpaRepository
<
DataItem
,
Integer
>
{
public
interface
DataItemRepository
extends
JpaRepository
<
DataItem
,
Integer
>
{
List
<
DataItem
>
findAllByIdIn
(
Set
<
Integer
>
ids
);
}
}
src/main/java/com/hisense/dataservice/service/MyApplicationService.java
浏览文件 @
c2502aff
...
@@ -13,5 +13,5 @@ import com.hisense.dataservice.vo.MyApplicationVo;
...
@@ -13,5 +13,5 @@ import com.hisense.dataservice.vo.MyApplicationVo;
public
interface
MyApplicationService
extends
BaseService
{
public
interface
MyApplicationService
extends
BaseService
{
Result
<
PageData
<
MyApplicationVo
>>
querySubscribeList
(
String
environment
,
Integer
status
,
Integer
systemId
,
PageLink
pageLink
);
Result
<
PageData
<
MyApplicationVo
>>
querySubscribeList
(
String
environment
,
Integer
status
,
Integer
systemId
,
PageLink
pageLink
);
Result
<
DataApiModelSubscribeDetailVo
>
queryApiModelDetail
(
String
environment
,
Long
subscribeId
);
Result
<
DataApiModelSubscribeDetailVo
>
queryApiModelDetail
(
String
environment
,
Long
subscribeId
,
Integer
systemId
);
}
}
src/main/java/com/hisense/dataservice/service/impl/DataApiCommonServiceImpl.java
浏览文件 @
c2502aff
...
@@ -7,6 +7,7 @@ import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy
...
@@ -7,6 +7,7 @@ import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.hisense.dataservice.bo.*
;
import
com.hisense.dataservice.bo.*
;
import
com.hisense.dataservice.dto.DataApiModelSubscribeDto
;
import
com.hisense.dataservice.dto.DataApiModelSubscribeDto
;
import
com.hisense.dataservice.dto.SubscribeApiResultDto
;
import
com.hisense.dataservice.dto.WorkFlowDto
;
import
com.hisense.dataservice.dto.WorkFlowDto
;
import
com.hisense.dataservice.entity.*
;
import
com.hisense.dataservice.entity.*
;
import
com.hisense.dataservice.enums.*
;
import
com.hisense.dataservice.enums.*
;
...
@@ -17,22 +18,27 @@ import com.hisense.dataservice.repository.*;
...
@@ -17,22 +18,27 @@ import com.hisense.dataservice.repository.*;
import
com.hisense.dataservice.service.DataApiCommonService
;
import
com.hisense.dataservice.service.DataApiCommonService
;
import
com.hisense.dataservice.service.WorkFlowService
;
import
com.hisense.dataservice.service.WorkFlowService
;
import
com.hisense.dataservice.util.FileUtil
;
import
com.hisense.dataservice.util.FileUtil
;
import
com.hisense.dataservice.util.SpringBeanUtil
;
import
com.hisense.dataservice.util.ThreadPoolManagerUtil
;
import
com.hisense.dataservice.util.ThreadPoolManagerUtil
;
import
com.hisense.dataservice.vo.LdapUserInfoVo
;
import
com.hisense.dataservice.vo.LdapUserInfoVo
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.poi.util.StringUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.interceptor.TransactionAspectSupport
;
import
org.springframework.transaction.interceptor.TransactionAspectSupport
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.StringUtils
;
import
org.springframework.util.StringUtils
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.transaction.TransactionRolledbackException
;
import
javax.transaction.TransactionRolledbackException
;
import
javax.transaction.Transactional
;
import
javax.transaction.Transactional
;
import
java.text.SimpleDateFormat
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.*
;
import
java.util.concurrent.Callable
;
import
java.util.concurrent.ExecutionException
;
import
java.util.concurrent.ExecutionException
;
import
java.util.concurrent.Future
;
import
java.util.concurrent.Future
;
import
java.util.concurrent.ThreadPoolExecutor
;
import
java.util.concurrent.ThreadPoolExecutor
;
...
@@ -83,6 +89,7 @@ public class DataApiCommonServiceImpl implements DataApiCommonService {
...
@@ -83,6 +89,7 @@ public class DataApiCommonServiceImpl implements DataApiCommonService {
private
Integer
queryDataTotalPerThread
=
2000
;
private
Integer
queryDataTotalPerThread
=
2000
;
private
ThreadPoolManagerUtil
batchQueryDataThreadPool
=
new
ThreadPoolManagerUtil
(
"batchQueryDataThread"
);
private
ThreadPoolManagerUtil
batchQueryDataThreadPool
=
new
ThreadPoolManagerUtil
(
"batchQueryDataThread"
);
private
ThreadPoolManagerUtil
subscribeApiTaskThreadPool
=
new
ThreadPoolManagerUtil
(
"subscribeApiTaskThreadPool"
);
@Autowired
@Autowired
private
ElasticsearchUtils
elasticsearchUtils
;
private
ElasticsearchUtils
elasticsearchUtils
;
...
@@ -484,188 +491,189 @@ public class DataApiCommonServiceImpl implements DataApiCommonService {
...
@@ -484,188 +491,189 @@ public class DataApiCommonServiceImpl implements DataApiCommonService {
}
}
// 订阅数据api
// 订阅数据api
@Transactional
// @Transactional
public
Result
<
Long
>
subscribeDataApi
(
DataApiModelSubscribeDto
dataApiModelSubscribeDto
,
HttpServletRequest
request
)
{
// public Result<Long> subscribeDataApi(DataApiModelSubscribeDto dataApiModelSubscribeDto, HttpServletRequest request) {
//
Long
modelId
=
dataApiModelSubscribeDto
.
getModelId
();
// Long modelId = dataApiModelSubscribeDto.getModelId();
Integer
subscribeSystemId
=
dataApiModelSubscribeDto
.
getSubscribeSystemId
();
// Integer subscribeSystemId = dataApiModelSubscribeDto.getSubscribeSystemId();
//
String
user
=
""
;
// TODO SecurityUtils.getLoginUser().getLoginName()
// String user = ""; // TODO SecurityUtils.getLoginUser().getLoginName()
//
// 获取订阅系统名称
// // 获取订阅系统名称
DataItem
systemItem
=
dataItemRepository
.
getOne
(
subscribeSystemId
);
// DataItem systemItem = dataItemRepository.getOne(subscribeSystemId);
String
subscribeSystemName
=
systemItem
==
null
?
subscribeSystemId
+
""
:
systemItem
.
getItemName
();
// String subscribeSystemName = systemItem == null ? subscribeSystemId + "" : systemItem.getItemName();
//
// 校验订阅参数
// // 校验订阅参数
Result
<
DataApiModel
>
checkSubscribeApiParamsResult
=
checkSubscribeApiParams
(
dataApiModelSubscribeDto
,
user
,
subscribeSystemName
);
// Result<DataApiModel> checkSubscribeApiParamsResult = checkSubscribeApiParams(dataApiModelSubscribeDto,user, subscribeSystemName);
if
(
checkSubscribeApiParamsResult
.
getCode
().
equals
(
Result
.
FAIL
)){
// if(checkSubscribeApiParamsResult.getCode().equals(Result.FAIL)){
return
failure
(
checkSubscribeApiParamsResult
.
getMsg
());
// return failure(checkSubscribeApiParamsResult.getMsg());
}
// }
DataApiModel
dataApiModel
=
checkSubscribeApiParamsResult
.
getData
();
// DataApiModel dataApiModel = checkSubscribeApiParamsResult.getData();
//
// 获取数据源
// // 获取数据源
Long
dataSourceId
=
dataApiModel
.
getDataSourceId
();
// Long dataSourceId = dataApiModel.getDataSourceId();
Optional
<
DataApiDataSource
>
dataApiDataSourceOptional
=
dataApiDataSourceRepository
.
findById
(
dataSourceId
);
// Optional<DataApiDataSource> dataApiDataSourceOptional = dataApiDataSourceRepository.findById(dataSourceId);
if
(!
dataApiDataSourceOptional
.
isPresent
())
{
// if (!dataApiDataSourceOptional.isPresent()) {
return
failure
(
"订阅数据服务的数据源不存在"
);
// return failure("订阅数据服务的数据源不存在");
}
// }
DataApiDataSource
dataApiDataSource
=
dataApiDataSourceOptional
.
get
();
// DataApiDataSource dataApiDataSource = dataApiDataSourceOptional.get();
//
// 保存行列过滤条件
// // 保存行列过滤条件
List
<
LineDataRangeFilter
>
subLineDataRangeConfig
=
dataApiModelSubscribeDto
.
getLineDataRangeConfig
();
// List<LineDataRangeFilter> subLineDataRangeConfig = dataApiModelSubscribeDto.getLineDataRangeConfig();
List
<
ColumnDataRangeFilter
>
subscribeColumnDataRangeConfig
=
dataApiModelSubscribeDto
.
getColumnDataRangeConfig
();
// List<ColumnDataRangeFilter> subscribeColumnDataRangeConfig = dataApiModelSubscribeDto.getColumnDataRangeConfig();
List
<
TableJoinRelationConfig
>
tableJoinRelationConfig
=
dataApiModel
.
getTableJoinRelationConfig
();
// List<TableJoinRelationConfig> tableJoinRelationConfig = dataApiModel.getTableJoinRelationConfig();
DataApiModelConfig
subscribeDataApiModelConfig
=
new
DataApiModelConfig
();
// DataApiModelConfig subscribeDataApiModelConfig = new DataApiModelConfig();
subscribeDataApiModelConfig
.
setLineDataRangeConfig
(
subLineDataRangeConfig
);
// subscribeDataApiModelConfig.setLineDataRangeConfig(subLineDataRangeConfig);
subscribeDataApiModelConfig
.
setColumnDataRangeConfig
(
subscribeColumnDataRangeConfig
);
// subscribeDataApiModelConfig.setColumnDataRangeConfig(subscribeColumnDataRangeConfig);
subscribeDataApiModelConfig
.
setType
(
ModelConfigType
.
SUBSCRIBE
);
// subscribeDataApiModelConfig.setType(ModelConfigType.SUBSCRIBE);
String
fullSql
=
subscribeDataApiModelConfig
.
generateAndSetFullSql
(
tableJoinRelationConfig
,
dataApiDataSource
.
getType
());
// String fullSql = subscribeDataApiModelConfig.generateAndSetFullSql(tableJoinRelationConfig, dataApiDataSource.getType());
log
.
info
(
"生成的完整sql: {}"
,
fullSql
);
// log.info("生成的完整sql: {}", fullSql);
if
(
StringUtils
.
isEmpty
(
fullSql
))
{
// if (StringUtils.isEmpty(fullSql)) {
return
failure
(
"未能成功生成sql语句"
);
// return failure("未能成功生成sql语句");
}
// }
dataApiModelConfigRepository
.
saveAndFlush
(
subscribeDataApiModelConfig
);
// dataApiModelConfigRepository.saveAndFlush(subscribeDataApiModelConfig);
//
// 保存订阅信息
// // 保存订阅信息
Map
<
String
,
String
>
subSystemProjectAndTenantAdminNameMap
=
dataApiModelRepository
.
findSystemProjectAndTenantAdminNameBySystemId
(
dataApiModelSubscribeDto
.
getSubscribeSystemId
());
// Map<String, String> subSystemProjectAndTenantAdminNameMap = dataApiModelRepository.findSystemProjectAndTenantAdminNameBySystemId(dataApiModelSubscribeDto.getSubscribeSystemId());
String
subSystemLeader
=
subSystemProjectAndTenantAdminNameMap
.
get
(
"projectAdminName"
);
//// String subSystemLeader = subSystemProjectAndTenantAdminNameMap.get("projectAdminName");
DataApiSubscribeConfig
subscribeConfig
=
new
DataApiSubscribeConfig
();
// DataApiSubscribeConfig subscribeConfig = new DataApiSubscribeConfig();
subscribeConfig
.
setSubscribeSystemId
(
dataApiModelSubscribeDto
.
getSubscribeSystemId
());
// subscribeConfig.setSubscribeSystemId(dataApiModelSubscribeDto.getSubscribeSystemId());
subscribeConfig
.
setDataApiModelId
(
modelId
);
// subscribeConfig.setDataApiModelId(modelId);
subscribeConfig
.
setSystemEnv
(
SystemEnv
.
valueOf
(
dataApiModelSubscribeDto
.
getSystemEnv
()));
// subscribeConfig.setSystemEnv(SystemEnv.valueOf(dataApiModelSubscribeDto.getSystemEnv()));
subscribeConfig
.
setNetworkEnv
(
NetworkEnv
.
valueOf
(
dataApiModelSubscribeDto
.
getNetworkEnv
()));
// subscribeConfig.setNetworkEnv(NetworkEnv.valueOf(dataApiModelSubscribeDto.getNetworkEnv()));
subscribeConfig
.
setCreatedTime
(
new
Date
());
// subscribeConfig.setCreatedTime(new Date());
subscribeConfig
.
setSubDesc
(
dataApiModelSubscribeDto
.
getDesc
());
// subscribeConfig.setSubDesc(dataApiModelSubscribeDto.getDesc());
subscribeConfig
.
setHashStr
(
UUID
.
randomUUID
().
toString
());
// subscribeConfig.setHashStr(UUID.randomUUID().toString());
subscribeConfig
.
setSubSystemLeader
(
subSystemLeader
);
// subscribeConfig.setSubSystemLeader(dataApiModelSubscribeDto.getSubSystemLeader());
subscribeConfig
.
setCreator
(
user
);
// subscribeConfig.setCreator(user);
subscribeConfig
=
dataApiSubscribeRepository
.
saveAndFlush
(
subscribeConfig
);
// subscribeConfig = dataApiSubscribeRepository.saveAndFlush(subscribeConfig);
//
// 更新行列配置的typeId
// // 更新行列配置的typeId
subscribeDataApiModelConfig
.
setTypeId
(
subscribeConfig
.
getId
());
// subscribeDataApiModelConfig.setTypeId(subscribeConfig.getId());
dataApiModelConfigRepository
.
saveAndFlush
(
subscribeDataApiModelConfig
);
// dataApiModelConfigRepository.saveAndFlush(subscribeDataApiModelConfig);
//
// 创建流程处理
// // 创建流程处理
DataApiProcessRecord
pr
=
new
DataApiProcessRecord
();
// DataApiProcessRecord pr = new DataApiProcessRecord();
pr
.
setCreatedTime
(
new
Date
());
// pr.setCreatedTime(new Date());
pr
.
setCreator
(
user
);
// pr.setCreator(user);
pr
.
setStatus
(
1
);
// pr.setStatus(1);
pr
.
setDataModelId
(
dataApiModel
.
getId
());
// pr.setDataModelId(dataApiModel.getId());
pr
.
setProcessType
(
"sub"
);
// pr.setProcessType("sub");
pr
=
dataApiProcessRecordRepository
.
saveAndFlush
(
pr
);
// pr = dataApiProcessRecordRepository.saveAndFlush(pr);
//
// 获取鉴权信息
// // 获取鉴权信息
String
userKey
=
""
;
// String userKey = "";
String
appId
=
""
;
// String appId = "";
String
appKey
=
""
;
// String appKey = "";
//
//查询订阅记录
// //查询订阅记录
List
<
DataApiApplication
>
subscribedDataApis
// List<DataApiApplication> subscribedDataApis
=
dataApiApplicationRepository
.
findSubscribedApiBySystem
(
subscribeSystemId
,
dataApiModel
.
getId
(),
2
);
// = dataApiApplicationRepository.findSubscribedApiBySystem(subscribeSystemId,dataApiModel.getId(),2);
if
(!
CollectionUtils
.
isEmpty
(
subscribedDataApis
)){
// if(!CollectionUtils.isEmpty(subscribedDataApis)){
// 之前订阅过则用之前的认证信息
// // 之前订阅过则用之前的认证信息
userKey
=
subscribedDataApis
.
get
(
0
).
getUserKey
();
// userKey = subscribedDataApis.get(0).getUserKey();
appId
=
subscribedDataApis
.
get
(
0
).
getAppId
();
// appId = subscribedDataApis.get(0).getAppId();
appKey
=
subscribedDataApis
.
get
(
0
).
getAppKey
();
// appKey = subscribedDataApis.get(0).getAppKey();
}
else
{
// }else{
// 之前没有订阅过 TODO 需要从3scale或者apisix中进行创建或者获取
//// List<DataApiApplication> subscribedDataApis = dataApiApplicationRepository.findSubscribedBySystemUserKeyNotNull(subscribeSystemId,Integer.valueOf(environment));
userKey
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
).
substring
(
0
,
16
);
// // 之前没有订阅过 TODO 需要从3scale或者apisix中进行创建或者获取
// userKey = UUID.randomUUID().toString().replace("-","").substring(0,16);
}
//
// }
//
// 创建数据服务发布应用信息
//
DataApiApplication
app
=
new
DataApiApplication
();
// // 创建数据服务发布应用信息
app
.
setSystem
(
subscribeSystemId
);
// DataApiApplication app = new DataApiApplication();
app
.
setDataModelSubConfigId
(
subscribeConfig
.
getId
());
// app.setSystem(subscribeSystemId);
app
.
setAppId
(
appId
);
// app.setDataModelSubConfigId(subscribeConfig.getId());
app
.
setAppKey
(
appKey
);
// app.setAppId(appId);
app
.
setUserKey
(
userKey
);
// app.setAppKey(appKey);
app
.
setProcessRecordId
(
pr
.
getId
());
// app.setUserKey(userKey);
app
.
setCreator
(
user
);
// app.setProcessRecordId(pr.getId());
app
=
dataApiApplicationRepository
.
saveAndFlush
(
app
);
// app.setCreator(user);
// app = dataApiApplicationRepository.saveAndFlush(app);
// 开始订阅审批流程
//
Result
<
String
>
startProcessResult
=
startProcess
(
user
,
subscribeSystemName
,
dataApiModel
);
// // 开始订阅审批流程
if
(
startProcessResult
.
getCode
().
equals
(
Result
.
FAIL
)){
// Result<String> startProcessResult = startProcess(user, subscribeSystemName, dataApiModel);
// 回滚事务
// if(startProcessResult.getCode().equals(Result.FAIL)){
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
// // 回滚事务
return
failure
(
startProcessResult
.
getMsg
());
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
// return failure(startProcessResult.getMsg());
// }
// 更新订阅审批流程实例ID
//
String
processInstID
=
startProcessResult
.
getData
();
// // 更新订阅审批流程实例ID
pr
.
setProcessInstID
(
processInstID
);
// String processInstID = startProcessResult.getData();
dataApiProcessRecordRepository
.
saveAndFlush
(
pr
);
// pr.setProcessInstID(processInstID);
// dataApiProcessRecordRepository.saveAndFlush(pr);
return
success
(
subscribeConfig
.
getId
());
//
}
// return success(subscribeConfig.getId());
// }
// 检查订阅api的参数
// 检查订阅api的参数
private
Result
<
DataApiModel
>
checkSubscribeApiParams
(
DataApiModelSubscribeDto
dataApiModelSubscribeDto
,
String
user
,
String
subscribeSystemName
){
// private Result<DataApiModel> checkSubscribeApiParams(DataApiModelSubscribeDto dataApiModelSubscribeDto, String user, String subscribeSystemName){
Long
modelId
=
dataApiModelSubscribeDto
.
getModelId
();
// Long modelId = dataApiModelSubscribeDto.getModelId();
Integer
subscribeSystemId
=
dataApiModelSubscribeDto
.
getSubscribeSystemId
();
// Integer subscribeSystemId = dataApiModelSubscribeDto.getSubscribeSystemId();
//
if
(
modelId
==
null
||
subscribeSystemId
==
null
)
{
// if (modelId == null || subscribeSystemId == null) {
return
failure
(
"请选择需要订阅的API"
);
// return failure("请选择需要订阅的API");
}
if
(
subscribeSystemId
==
null
)
{
return
failure
(
"订阅系统ID为空"
);
}
Optional
<
DataApiModel
>
dataApiModelOptional
=
dataApiModelRepository
.
findById
(
modelId
);
if
(!
dataApiModelOptional
.
isPresent
())
{
return
failure
(
String
.
format
(
"订阅的API【%d】不存在!"
,
modelId
));
}
DataApiModel
dataApiModel
=
dataApiModelOptional
.
get
();
if
(
new
Integer
(
"0"
).
equals
(
dataApiModel
.
getStatus
()))
{
return
failure
(
String
.
format
(
"API【%d】未发布!"
,
modelId
));
}
if
(
subscribeSystemId
.
equals
(
dataApiModel
.
getPublishSystemId
()))
{
return
failure
(
String
.
format
(
"不可为系统{},订阅自己系统发布的API"
,
subscribeSystemId
));
}
log
.
info
(
String
.
format
(
"订阅系统=%s,订阅api=%s"
,
subscribeSystemName
,
dataApiModel
.
getName
()));
// 是否订阅过 根据当前登陆人、订阅系统、api判断是否有过订阅
Optional
<
DataApiSubscribeConfig
>
dataApiSubscribeConfigOptional
=
dataApiSubscribeRepository
.
findBySubscribeSystemIdAndDataApiModelIdAndCreatorAndDeletedIsFalse
(
subscribeSystemId
,
modelId
,
user
);
if
(
dataApiSubscribeConfigOptional
.
isPresent
())
{
return
failure
(
String
.
format
(
"您已经为系统【%s】订阅过API【%s】,不能重复订阅!"
,
subscribeSystemName
,
dataApiModel
.
getName
()));
}
// 是否正在等待审批
// List<DataApiApplication> apps =
// dataApiApplicationRepository.findSubscribedApiBySystem(subscribeSystemId,dataApiModel.getId(),1);
// if(!CollectionUtils.isEmpty(apps)) {
// log.info(String.format("%s正在为系统【%s】申请订阅API【%s】,等待审批!",apps.get(0).getCreator(),subscribeSystemName,dataApiModel.getName()));
// return false;
// }
// }
// if (subscribeSystemId == null) {
// 获取发布时数据api行列配置
// return failure("订阅系统ID为空");
Optional
<
DataApiModelConfig
>
publishDataApiModelConfigOptional
=
dataApiModelConfigRepository
.
findByTypeIdAndType
(
modelId
,
ModelConfigType
.
PUBLISH
);
// }
if
(!
publishDataApiModelConfigOptional
.
isPresent
())
{
//
return
failure
(
"数据服务行列配置为空"
);
// Optional<DataApiModel> dataApiModelOptional = dataApiModelRepository.findById(modelId);
}
// if (!dataApiModelOptional.isPresent()) {
DataApiModelConfig
publishDataApiModelConfig
=
publishDataApiModelConfigOptional
.
get
();
// return failure(String.format("订阅的API【%d】不存在!", modelId));
// }
// 检查列条件
// DataApiModel dataApiModel = dataApiModelOptional.get();
List
<
ColumnDataRangeFilter
>
subscribeColumnDataRangeConfig
=
dataApiModelSubscribeDto
.
getColumnDataRangeConfig
();
// if (new Integer("0").equals(dataApiModel.getStatus())) {
List
<
ColumnDataRangeFilter
>
publishColumnDataRangeConfig
=
publishDataApiModelConfig
.
getColumnDataRangeConfig
();
// return failure(String.format("API【%d】未发布!", modelId));
Boolean
checkColumnResult
=
checkColumnCondition
(
publishColumnDataRangeConfig
,
subscribeColumnDataRangeConfig
);
// }
if
(!
checkColumnResult
)
{
//
return
failure
(
String
.
format
(
"订阅的列条件不在数据API服务定义范围内, pubColumnConfig: {}, subColumnConfig: {}"
,
publishColumnDataRangeConfig
,
subscribeColumnDataRangeConfig
));
// if (subscribeSystemId.equals(dataApiModel.getPublishSystemId())) {
}
// return failure(String.format("不可为系统{},订阅自己系统发布的API", subscribeSystemId));
// }
// 检查行条件
//
List
<
LineDataRangeFilter
>
subLineDataRangeConfig
=
dataApiModelSubscribeDto
.
getLineDataRangeConfig
();
// log.info(String.format("订阅系统=%s,订阅api=%s", subscribeSystemName, dataApiModel.getName()));
List
<
LineDataRangeFilter
>
pubLineDataRangeConfig
=
publishDataApiModelConfig
.
getLineDataRangeConfig
();
//
Boolean
checkLineResult
=
checkLineCondition
(
pubLineDataRangeConfig
,
subLineDataRangeConfig
);
// // 是否订阅过 根据当前登陆人、订阅系统、api判断是否有过订阅
if
(!
checkLineResult
)
{
// Optional<DataApiSubscribeConfig> dataApiSubscribeConfigOptional = dataApiSubscribeRepository.findBySubscribeSystemIdAndDataApiModelIdAndCreatorAndDeletedIsFalse(subscribeSystemId, modelId, user);
return
failure
(
String
.
format
(
"订阅的行条件不在数据API服务定义范围内, pubLineConfig: {}, subLineConfig: {}"
,
publishColumnDataRangeConfig
,
subLineDataRangeConfig
));
// if (dataApiSubscribeConfigOptional.isPresent()) {
}
// return failure(String.format("您已经为系统【%s】订阅过API【%s】,不能重复订阅!", subscribeSystemName, dataApiModel.getName()));
return
success
(
dataApiModel
);
// }
}
//
// // 是否正在等待审批
//// List<DataApiApplication> apps =
//// dataApiApplicationRepository.findSubscribedApiBySystem(subscribeSystemId,dataApiModel.getId(),1);
//// if(!CollectionUtils.isEmpty(apps)) {
//// log.info(String.format("%s正在为系统【%s】申请订阅API【%s】,等待审批!",apps.get(0).getCreator(),subscribeSystemName,dataApiModel.getName()));
//// return false;
//// }
//
// // 获取发布时数据api行列配置
// Optional<DataApiModelConfig> publishDataApiModelConfigOptional = dataApiModelConfigRepository.findByTypeIdAndType(modelId, ModelConfigType.PUBLISH);
// if (!publishDataApiModelConfigOptional.isPresent()) {
// return failure("数据服务行列配置为空");
// }
// DataApiModelConfig publishDataApiModelConfig = publishDataApiModelConfigOptional.get();
//
// // 检查列条件
// List<ColumnDataRangeFilter> subscribeColumnDataRangeConfig = dataApiModelSubscribeDto.getColumnDataRangeConfig();
// List<ColumnDataRangeFilter> publishColumnDataRangeConfig = publishDataApiModelConfig.getColumnDataRangeConfig();
// Boolean checkColumnResult = checkColumnCondition(publishColumnDataRangeConfig, subscribeColumnDataRangeConfig);
// if (!checkColumnResult) {
// return failure(String.format("订阅的列条件不在数据API服务定义范围内, pubColumnConfig: {}, subColumnConfig: {}",publishColumnDataRangeConfig, subscribeColumnDataRangeConfig));
// }
//
// // 检查行条件
// List<LineDataRangeFilter> subLineDataRangeConfig = dataApiModelSubscribeDto.getLineDataRangeConfig();
// List<LineDataRangeFilter> pubLineDataRangeConfig = publishDataApiModelConfig.getLineDataRangeConfig();
// Boolean checkLineResult = checkLineCondition(pubLineDataRangeConfig, subLineDataRangeConfig);
// if (!checkLineResult) {
// return failure(String.format("订阅的行条件不在数据API服务定义范围内, pubLineConfig: {}, subLineConfig: {}",publishColumnDataRangeConfig, subLineDataRangeConfig));
// }
// return success(dataApiModel);
// }
// 开始审批流程
// 开始审批流程
private
Result
<
String
>
startProcess
(
String
user
,
String
subscribeSystemName
,
DataApiModel
dataApiModel
){
private
Result
<
String
>
startProcess
(
String
user
,
String
subscribeSystemName
,
DataApiModel
dataApiModel
){
Integer
publishSystemId
=
dataApiModel
.
getPublishSystemId
().
intValue
();
Integer
publishSystemId
=
dataApiModel
.
getPublishSystemId
().
intValue
();
...
@@ -1005,4 +1013,397 @@ public class DataApiCommonServiceImpl implements DataApiCommonService {
...
@@ -1005,4 +1013,397 @@ public class DataApiCommonServiceImpl implements DataApiCommonService {
return
true
;
return
true
;
}
}
public
Result
<
List
<
Object
>>
subscribeDataApiLatest
(
List
<
DataApiModelSubscribeDto
>
applications
,
String
environment
)
{
// 将RequestAttributes对象设置为子线程共享
try
{
ServletRequestAttributes
sra
=
(
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
();
RequestContextHolder
.
setRequestAttributes
(
sra
,
true
);
}
catch
(
Exception
e
)
{
log
.
error
(
"getRequestAttributes exception:"
,
e
);
}
String
user
=
""
;
// TODO SecurityUtils.getLoginUser().getLoginName()
log
.
info
(
String
.
format
(
"开始订阅,环境=%s,入参=%s"
,
environment
,
applications
));
List
<
Future
<
Result
<
JSONObject
>>>
subResList
=
new
ArrayList
<>();
// 获取订阅的所有api信息
Set
<
Long
>
dataModelIds
=
applications
.
stream
().
map
(
DataApiModelSubscribeDto:
:
getModelId
).
collect
(
Collectors
.
toSet
());
List
<
DataApiModel
>
dataApiModelsForSub
=
dataApiModelRepository
.
findAllByIdIn
(
dataModelIds
);
Map
<
Long
,
DataApiModel
>
dataApiModelIdToSelfMap
=
dataApiModelsForSub
.
stream
().
collect
(
Collectors
.
toMap
(
DataApiModel:
:
getId
,
Function
.
identity
(),
(
k1
,
k2
)
->
k2
));
// 获取所有订阅的api对应的行列配置信息
List
<
DataApiModelConfig
>
dataApiModelConfigList
=
dataApiModelConfigRepository
.
findByTypeIdInAndType
(
dataModelIds
,
ModelConfigType
.
PUBLISH
);
Map
<
Long
,
DataApiModelConfig
>
dataApiModelConfigToSelfMap
=
dataApiModelConfigList
.
stream
().
collect
(
Collectors
.
toMap
(
DataApiModelConfig:
:
getTypeId
,
Function
.
identity
(),
(
k1
,
k2
)
->
k2
));
Set
<
Integer
>
subscribeSystemIdListForQuery
=
new
HashSet
<>();
applications
.
forEach
(
item
->{
subscribeSystemIdListForQuery
.
addAll
(
item
.
getSubscribeSystemIds
());
});
List
<
DataItem
>
dataItemList
=
dataItemRepository
.
findAllByIdIn
(
subscribeSystemIdListForQuery
);
Map
<
Integer
,
DataItem
>
dataItemIdToSelfMap
=
dataItemList
.
stream
().
collect
(
Collectors
.
toMap
(
DataItem:
:
getId
,
Function
.
identity
(),
(
k1
,
k2
)
->
k2
));
// 校验订阅参数
List
<
String
>
failMessage
=
checkSubscribeApiParamsLatest
(
applications
,
dataApiModelIdToSelfMap
,
dataApiModelConfigToSelfMap
,
dataItemIdToSelfMap
);
if
(
CollectionUtils
.
isEmpty
(
failMessage
))
{
return
failure
(
StringUtil
.
join
(
failMessage
.
toArray
(),
";"
));
}
DataApiModel
dataApiModel
;
List
<
Integer
>
subscribeSystemIds
;
List
<
Future
<
Result
<
SubscribeApiResultDto
>>>
subscribeApiTaskFutureList
=
new
ArrayList
<>();
Future
<
Result
<
SubscribeApiResultDto
>>
subscribeApiTask
;
DataItem
dataItem
;
for
(
DataApiModelSubscribeDto
application
:
applications
)
{
dataApiModel
=
dataApiModelIdToSelfMap
.
get
(
application
.
getModelId
());
log
.
info
(
"开始处理api=%s的订阅"
,
dataApiModel
.
getName
());
subscribeSystemIds
=
application
.
getSubscribeSystemIds
();
for
(
Integer
subscribeSystemId
:
subscribeSystemIds
)
{
dataItem
=
dataItemIdToSelfMap
.
get
(
subscribeSystemId
);
SubscribeDataApiTask
subscribeDataApiTask
=
new
SubscribeDataApiTask
(
application
,
dataApiModel
,
environment
,
subscribeSystemId
,
user
,
dataItem
.
getItemName
());
subscribeApiTask
=
subscribeApiTaskThreadPool
.
getThreadPool
().
submit
(
subscribeDataApiTask
);
subscribeApiTaskFutureList
.
add
(
subscribeApiTask
);
}
}
return
subscribeResultHandle
(
subscribeApiTaskFutureList
);
}
public
Result
<
List
<
Object
>>
subscribeDataApiLatest2
(
DataApiModelSubscribeDto
application
,
String
environment
)
{
String
user
=
""
;
// TODO SecurityUtils.getLoginUser().getLoginName()
log
.
info
(
String
.
format
(
"开始订阅,环境=%s,入参=%s"
,
environment
,
application
));
Set
<
Integer
>
subscribeSystemIdListForQuery
=
new
HashSet
<>();
subscribeSystemIdListForQuery
.
addAll
(
application
.
getSubscribeSystemIds
());
List
<
DataItem
>
dataItemList
=
dataItemRepository
.
findAllByIdIn
(
subscribeSystemIdListForQuery
);
Map
<
Integer
,
DataItem
>
dataItemIdToSelfMap
=
dataItemList
.
stream
().
collect
(
Collectors
.
toMap
(
DataItem:
:
getId
,
Function
.
identity
(),
(
k1
,
k2
)
->
k2
));
// 校验订阅参数
Result
<
DataApiModel
>
checkResult
=
checkSubscribeApiParamsLatest2
(
application
,
dataItemIdToSelfMap
);
if
(
checkResult
.
getCode
().
equals
(
Result
.
FAIL
)){
return
failure
(
checkResult
.
getMsg
());
}
DataApiModel
dataApiModel
=
checkResult
.
getData
();
List
<
Integer
>
subscribeSystemIds
;
List
<
Future
<
Result
<
SubscribeApiResultDto
>>>
subscribeApiTaskFutureList
=
new
ArrayList
<>();
Future
<
Result
<
SubscribeApiResultDto
>>
subscribeApiTask
;
DataItem
dataItem
;
log
.
info
(
"开始处理api=%s的订阅"
,
dataApiModel
.
getName
());
subscribeSystemIds
=
application
.
getSubscribeSystemIds
();
for
(
Integer
subscribeSystemId
:
subscribeSystemIds
)
{
dataItem
=
dataItemIdToSelfMap
.
get
(
subscribeSystemId
);
SubscribeDataApiTask
subscribeDataApiTask
=
new
SubscribeDataApiTask
(
application
,
dataApiModel
,
environment
,
subscribeSystemId
,
user
,
dataItem
.
getItemName
());
subscribeApiTask
=
subscribeApiTaskThreadPool
.
getThreadPool
().
submit
(
subscribeDataApiTask
);
subscribeApiTaskFutureList
.
add
(
subscribeApiTask
);
}
return
subscribeResultHandle
(
subscribeApiTaskFutureList
);
}
@Transactional
public
SubscribeApiResultDto
doSubscribe
(
String
environment
,
DataApiModelSubscribeDto
dataApiModelSubscribeDto
,
DataApiModel
dataApiModel
,
Integer
subscribeSystemId
,
String
user
,
String
subscribeSystemName
)
{
SubscribeApiResultDto
subscribeApiResultDto
=
new
SubscribeApiResultDto
();
subscribeApiResultDto
.
setEnvironment
(
environment
);
subscribeApiResultDto
.
setSubscribeSystemId
(
subscribeSystemId
);
subscribeApiResultDto
.
setSubscribeSystemName
(
subscribeSystemName
);
subscribeApiResultDto
.
setSubResult
(
false
);
StringBuilder
resultBuilder
=
new
StringBuilder
();
Long
modelId
=
dataApiModel
.
getId
();
// 获取数据源
Long
dataSourceId
=
dataApiModel
.
getDataSourceId
();
Optional
<
DataApiDataSource
>
dataApiDataSourceOptional
=
dataApiDataSourceRepository
.
findById
(
dataSourceId
);
if
(!
dataApiDataSourceOptional
.
isPresent
())
{
resultBuilder
.
append
(
String
.
format
(
"订阅数据服务:【%s】的数据源:【】 不存在"
,
dataApiModel
.
getName
(),
dataSourceId
));
subscribeApiResultDto
.
setErrorMsg
(
resultBuilder
);
return
subscribeApiResultDto
;
}
DataApiDataSource
dataApiDataSource
=
dataApiDataSourceOptional
.
get
();
// 保存行列过滤条件
List
<
LineDataRangeFilter
>
subLineDataRangeConfig
=
dataApiModelSubscribeDto
.
getLineDataRangeConfig
();
List
<
ColumnDataRangeFilter
>
subscribeColumnDataRangeConfig
=
dataApiModelSubscribeDto
.
getColumnDataRangeConfig
();
List
<
TableJoinRelationConfig
>
tableJoinRelationConfig
=
dataApiModel
.
getTableJoinRelationConfig
();
DataApiModelConfig
subscribeDataApiModelConfig
=
new
DataApiModelConfig
();
subscribeDataApiModelConfig
.
setLineDataRangeConfig
(
subLineDataRangeConfig
);
subscribeDataApiModelConfig
.
setColumnDataRangeConfig
(
subscribeColumnDataRangeConfig
);
subscribeDataApiModelConfig
.
setType
(
ModelConfigType
.
SUBSCRIBE
);
String
fullSql
=
subscribeDataApiModelConfig
.
generateAndSetFullSql
(
tableJoinRelationConfig
,
dataApiDataSource
.
getType
());
log
.
info
(
"生成的完整sql: {}"
,
fullSql
);
if
(
StringUtils
.
isEmpty
(
fullSql
))
{
resultBuilder
.
append
(
String
.
format
(
"API:【%s】,订阅系统:【%s】未能成功生成sql语句"
,
dataApiModel
.
getName
(),
subscribeSystemName
));
subscribeApiResultDto
.
setErrorMsg
(
resultBuilder
);
return
subscribeApiResultDto
;
}
dataApiModelConfigRepository
.
saveAndFlush
(
subscribeDataApiModelConfig
);
// 保存订阅信息
DataApiSubscribeConfig
subscribeConfig
=
new
DataApiSubscribeConfig
();
subscribeConfig
.
setSubscribeSystemId
(
subscribeSystemId
);
subscribeConfig
.
setDataApiModelId
(
modelId
);
subscribeConfig
.
setSystemEnv
(
SystemEnv
.
valueOf
(
dataApiModelSubscribeDto
.
getSystemEnv
()));
subscribeConfig
.
setNetworkEnv
(
NetworkEnv
.
valueOf
(
dataApiModelSubscribeDto
.
getNetworkEnv
()));
subscribeConfig
.
setCreatedTime
(
new
Date
());
subscribeConfig
.
setSubDesc
(
dataApiModelSubscribeDto
.
getDesc
());
subscribeConfig
.
setHashStr
(
UUID
.
randomUUID
().
toString
());
subscribeConfig
.
setSubSystemLeader
(
dataApiModelSubscribeDto
.
getSubSystemLeader
());
subscribeConfig
.
setCreator
(
user
);
subscribeConfig
=
dataApiSubscribeRepository
.
saveAndFlush
(
subscribeConfig
);
// 更新行列配置的typeId
subscribeDataApiModelConfig
.
setTypeId
(
subscribeConfig
.
getId
());
dataApiModelConfigRepository
.
saveAndFlush
(
subscribeDataApiModelConfig
);
// 创建流程处理
DataApiProcessRecord
pr
=
new
DataApiProcessRecord
();
pr
.
setCreatedTime
(
new
Date
());
pr
.
setCreator
(
user
);
pr
.
setStatus
(
1
);
pr
.
setDataModelId
(
dataApiModel
.
getId
());
pr
.
setProcessType
(
"sub"
);
pr
=
dataApiProcessRecordRepository
.
saveAndFlush
(
pr
);
// 获取鉴权信息
String
userKey
=
""
;
String
appId
=
""
;
String
appKey
=
""
;
//查询订阅记录
List
<
DataApiApplication
>
subscribedDataApis
=
dataApiApplicationRepository
.
findSubscribedApiBySystem
(
subscribeSystemId
,
dataApiModel
.
getId
(),
2
);
if
(!
CollectionUtils
.
isEmpty
(
subscribedDataApis
)){
// 之前订阅过则用之前的认证信息
userKey
=
subscribedDataApis
.
get
(
0
).
getUserKey
();
appId
=
subscribedDataApis
.
get
(
0
).
getAppId
();
appKey
=
subscribedDataApis
.
get
(
0
).
getAppKey
();
}
else
{
// List<DataApiApplication> subscribedDataApis = dataApiApplicationRepository.findSubscribedBySystemUserKeyNotNull(subscribeSystemId,Integer.valueOf(environment));
// 之前没有订阅过 TODO 需要从3scale或者apisix中进行创建或者获取
userKey
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
).
substring
(
0
,
16
);
}
// 创建数据服务发布应用信息
DataApiApplication
app
=
new
DataApiApplication
();
app
.
setSystem
(
subscribeSystemId
);
app
.
setDataModelSubConfigId
(
subscribeConfig
.
getId
());
app
.
setAppId
(
appId
);
app
.
setAppKey
(
appKey
);
app
.
setUserKey
(
userKey
);
app
.
setProcessRecordId
(
pr
.
getId
());
app
.
setCreator
(
user
);
app
=
dataApiApplicationRepository
.
saveAndFlush
(
app
);
// 开始订阅审批流程
Result
<
String
>
startProcessResult
=
startProcess
(
user
,
subscribeSystemName
,
dataApiModel
);
if
(
startProcessResult
.
getCode
().
equals
(
Result
.
FAIL
)){
// 回滚事务
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
resultBuilder
.
append
(
String
.
format
(
"API:【%s】,订阅系统:【%s】,流程处理失败:"
,
dataApiModel
.
getName
(),
subscribeSystemName
)
+
startProcessResult
.
getMsg
());
subscribeApiResultDto
.
setErrorMsg
(
resultBuilder
);
return
subscribeApiResultDto
;
}
// 更新订阅审批流程实例ID
String
processInstID
=
startProcessResult
.
getData
();
pr
.
setProcessInstID
(
processInstID
);
dataApiProcessRecordRepository
.
saveAndFlush
(
pr
);
subscribeApiResultDto
.
setSubResult
(
true
);
return
subscribeApiResultDto
;
}
// 检查订阅api的参数
private
Result
<
DataApiModel
>
checkSubscribeApiParamsLatest2
(
DataApiModelSubscribeDto
dataApiModelSubscribeDto
,
Map
<
Integer
,
DataItem
>
dataItemIdToSelfMap
){
Long
modelId
=
dataApiModelSubscribeDto
.
getModelId
();
List
<
Integer
>
subscribeSystemIds
=
dataApiModelSubscribeDto
.
getSubscribeSystemIds
();
if
(
modelId
==
null
)
{
return
failure
(
"请选择需要订阅的API"
);
}
if
(
CollectionUtils
.
isEmpty
(
subscribeSystemIds
))
{
return
failure
(
"订阅系统ID为空"
);
}
DataApiModel
dataApiModel
=
dataApiModelRepository
.
getOne
(
modelId
);
if
(
null
==
dataApiModel
)
{
return
failure
(
String
.
format
(
"订阅的API【%d】不存在!"
,
modelId
));
}
if
(
new
Integer
(
"0"
).
equals
(
dataApiModel
.
getStatus
()))
{
return
failure
(
String
.
format
(
"API【%d】未发布!"
,
modelId
));
}
if
(
subscribeSystemIds
.
contains
(
dataApiModel
.
getPublishSystemId
()))
{
return
failure
(
String
.
format
(
"不可为系统【%s】,订阅自己系统发布的API"
,
dataApiModel
.
getPublishSystemName
()));
}
for
(
Integer
subscribeSystemId
:
subscribeSystemIds
)
{
if
(
null
==
dataItemIdToSelfMap
.
get
(
subscribeSystemId
)){
return
failure
(
String
.
format
(
"针对API:【%s】的订阅,订阅系统:【%d】不存在"
,
dataApiModel
.
getName
(),
subscribeSystemId
));
}
}
// 获取发布时数据api行列配置
Optional
<
DataApiModelConfig
>
publishDataApiModelConfigOptional
=
dataApiModelConfigRepository
.
findByTypeIdAndType
(
modelId
,
ModelConfigType
.
PUBLISH
);
if
(!
publishDataApiModelConfigOptional
.
isPresent
())
{
return
failure
(
String
.
format
(
"API【%d】服务行列配置为空"
,
modelId
));
}
DataApiModelConfig
publishDataApiModelConfig
=
publishDataApiModelConfigOptional
.
get
();
// 检查列条件
List
<
ColumnDataRangeFilter
>
subscribeColumnDataRangeConfig
=
dataApiModelSubscribeDto
.
getColumnDataRangeConfig
();
List
<
ColumnDataRangeFilter
>
publishColumnDataRangeConfig
=
publishDataApiModelConfig
.
getColumnDataRangeConfig
();
Boolean
checkColumnResult
=
checkColumnCondition
(
publishColumnDataRangeConfig
,
subscribeColumnDataRangeConfig
);
if
(!
checkColumnResult
)
{
return
failure
(
String
.
format
(
"API:【%d】,订阅的列条件不在数据API服务定义范围内, pubColumnConfig: {}, subColumnConfig: {}"
,
modelId
,
publishColumnDataRangeConfig
,
subscribeColumnDataRangeConfig
));
}
// 检查行条件
List
<
LineDataRangeFilter
>
subLineDataRangeConfig
=
dataApiModelSubscribeDto
.
getLineDataRangeConfig
();
List
<
LineDataRangeFilter
>
pubLineDataRangeConfig
=
publishDataApiModelConfig
.
getLineDataRangeConfig
();
Boolean
checkLineResult
=
checkLineCondition
(
pubLineDataRangeConfig
,
subLineDataRangeConfig
);
if
(!
checkLineResult
)
{
return
failure
(
String
.
format
(
"API:【%d】,订阅的行条件不在数据API服务定义范围内, pubLineConfig: {}, subLineConfig: {}"
,
modelId
,
publishColumnDataRangeConfig
,
subLineDataRangeConfig
));
}
return
success
(
dataApiModel
);
}
private
List
<
String
>
checkSubscribeApiParamsLatest
(
List
<
DataApiModelSubscribeDto
>
dataApiModelSubscribeDtoList
,
Map
<
Long
,
DataApiModel
>
dataApiModelIdToSelfMap
,
Map
<
Long
,
DataApiModelConfig
>
dataApiModelConfigToSelfMap
,
Map
<
Integer
,
DataItem
>
dataItemIdToSelfMap
){
List
<
String
>
results
=
new
ArrayList
<>();
Long
modelId
;
DataApiModel
dataApiModel
;
DataApiModelConfig
publishDataApiModelConfig
;
for
(
DataApiModelSubscribeDto
dataApiModelSubscribeDto
:
dataApiModelSubscribeDtoList
)
{
modelId
=
dataApiModelSubscribeDto
.
getModelId
();
List
<
Integer
>
subscribeSystemIds
=
dataApiModelSubscribeDto
.
getSubscribeSystemIds
();
if
(
modelId
==
null
)
{
results
.
add
(
"请选择需要订阅的API"
);
continue
;
}
if
(
CollectionUtils
.
isEmpty
(
subscribeSystemIds
))
{
results
.
add
(
"订阅系统ID为空"
);
continue
;
}
dataApiModel
=
dataApiModelIdToSelfMap
.
get
(
modelId
);
if
(
null
==
dataApiModel
)
{
results
.
add
(
String
.
format
(
"订阅的API【%d】不存在!"
,
modelId
));
continue
;
}
if
(
new
Integer
(
"0"
).
equals
(
dataApiModel
.
getStatus
()))
{
results
.
add
(
String
.
format
(
"API【%d】未发布!"
,
modelId
));
continue
;
}
if
(
subscribeSystemIds
.
contains
(
dataApiModel
.
getPublishSystemId
()))
{
results
.
add
(
String
.
format
(
"不可为系统【%s】,订阅自己系统发布的API"
,
dataApiModel
.
getPublishSystemName
()));
continue
;
}
for
(
Integer
subscribeSystemId
:
subscribeSystemIds
)
{
if
(
null
==
dataItemIdToSelfMap
.
get
(
subscribeSystemId
)){
results
.
add
(
String
.
format
(
"针对API:【%s】的订阅,订阅系统:【%d】不存在"
,
dataApiModel
.
getName
(),
subscribeSystemId
));
continue
;
}
}
// 获取发布时数据api行列配置
publishDataApiModelConfig
=
dataApiModelConfigToSelfMap
.
get
(
modelId
);
if
(
publishDataApiModelConfig
==
null
)
{
results
.
add
(
String
.
format
(
"API【%d】服务行列配置为空"
,
modelId
));
continue
;
}
// 检查列条件
List
<
ColumnDataRangeFilter
>
subscribeColumnDataRangeConfig
=
dataApiModelSubscribeDto
.
getColumnDataRangeConfig
();
List
<
ColumnDataRangeFilter
>
publishColumnDataRangeConfig
=
publishDataApiModelConfig
.
getColumnDataRangeConfig
();
Boolean
checkColumnResult
=
checkColumnCondition
(
publishColumnDataRangeConfig
,
subscribeColumnDataRangeConfig
);
if
(!
checkColumnResult
)
{
results
.
add
(
String
.
format
(
"API:【%d】,订阅的列条件不在数据API服务定义范围内, pubColumnConfig: {}, subColumnConfig: {}"
,
modelId
,
publishColumnDataRangeConfig
,
subscribeColumnDataRangeConfig
));
continue
;
}
// 检查行条件
List
<
LineDataRangeFilter
>
subLineDataRangeConfig
=
dataApiModelSubscribeDto
.
getLineDataRangeConfig
();
List
<
LineDataRangeFilter
>
pubLineDataRangeConfig
=
publishDataApiModelConfig
.
getLineDataRangeConfig
();
Boolean
checkLineResult
=
checkLineCondition
(
pubLineDataRangeConfig
,
subLineDataRangeConfig
);
if
(!
checkLineResult
)
{
results
.
add
(
String
.
format
(
"API:【%d】,订阅的行条件不在数据API服务定义范围内, pubLineConfig: {}, subLineConfig: {}"
,
modelId
,
publishColumnDataRangeConfig
,
subLineDataRangeConfig
));
continue
;
}
}
return
results
;
}
/**
* 订阅结果处理
* @param list
* @return
*/
private
Result
<
List
<
Object
>>
subscribeResultHandle
(
List
<
Future
<
Result
<
SubscribeApiResultDto
>>>
list
){
Result
<
List
<
Object
>>
result
=
new
Result
<>();
//消息返回正确结果
List
<
Object
>
messageResult
=
new
ArrayList
<>();
StringBuilder
failMessageStr
=
new
StringBuilder
();
int
failCount
=
0
;
int
successCount
=
0
;
int
startProcessCount
=
0
;
//确保每个线程都执行完
while
(
list
.
size
()>
0
){
Iterator
<
Future
<
Result
<
SubscribeApiResultDto
>>>
it
=
list
.
iterator
();
while
(
it
.
hasNext
()){
Future
<
Result
<
SubscribeApiResultDto
>>
future
=
it
.
next
();
if
(!
future
.
isDone
()){
continue
;
}
else
{
it
.
remove
();
}
StringBuilder
errorMsgBuffer
=
new
StringBuilder
();
try
{
Result
<
SubscribeApiResultDto
>
itemResult
=
future
.
get
();
SubscribeApiResultDto
subResult
=
itemResult
.
getData
();
errorMsgBuffer
=
subResult
.
getErrorMsg
();
boolean
isSubResult
=
subResult
.
isSubResult
();
if
(!
isSubResult
)
{
String
message
=
String
.
format
((
failCount
+
1
)+
"、失败原因:%s"
,
errorMsgBuffer
.
toString
());
failMessageStr
.
append
(
message
);
failCount
+=
1
;
}
else
{
successCount
+=
1
;
startProcessCount
+=
1
;
}
}
catch
(
Exception
e
)
{
log
.
error
(
"订阅结果获取异常!"
,
e
);
errorMsgBuffer
.
append
(
"订阅结果获取异常!"
+
e
.
getMessage
());
String
message
=
String
.
format
((
failCount
+
1
)+
"、失败原因:%s"
,
errorMsgBuffer
.
toString
());
failMessageStr
.
append
(
message
);
failCount
+=
1
;
}
}
}
String
endMessage
;
String
resultCode
;
String
msg
=
""
;
if
(
startProcessCount
>
0
)
{
msg
=
String
.
format
(
",%d个正在订阅审批中,%d个已成功订阅"
,
startProcessCount
,
successCount
-
startProcessCount
);
}
if
(
failCount
==
0
&&
successCount
>
0
)
{
endMessage
=
String
.
format
(
"成功订阅%d个API%s"
,
successCount
,
msg
);
resultCode
=
Result
.
OK
;
}
else
if
(
successCount
>
0
)
{
endMessage
=
String
.
format
(
"成功订阅%d个API%s, 未能订阅%d个API!%s"
,
successCount
,
msg
,
failCount
,
failMessageStr
.
toString
());
resultCode
=
Result
.
OTHER
;
}
else
{
endMessage
=
String
.
format
(
"失败,未能订阅%d个API!%s"
,
failCount
,
failMessageStr
.
toString
());
resultCode
=
Result
.
FAIL
;
}
log
.
info
(
String
.
format
(
"订阅结束,成功订阅%d个API, 订阅失败%d个API"
,
successCount
,
failCount
));
result
.
setAlert
(
1
);
result
.
setCode
(
resultCode
);
result
.
setMsg
(
endMessage
);
result
.
setData
(
messageResult
);
return
result
;
}
}
}
src/main/java/com/hisense/dataservice/service/impl/MyApplicationServiceImpl.java
浏览文件 @
c2502aff
...
@@ -69,11 +69,11 @@ public class MyApplicationServiceImpl implements MyApplicationService {
...
@@ -69,11 +69,11 @@ public class MyApplicationServiceImpl implements MyApplicationService {
}
}
@Override
@Override
public
Result
<
DataApiModelSubscribeDetailVo
>
queryApiModelDetail
(
String
environment
,
Long
subscribeId
)
{
public
Result
<
DataApiModelSubscribeDetailVo
>
queryApiModelDetail
(
String
environment
,
Long
subscribeId
,
Integer
systemId
)
{
DataApiModelSubscribeDetailVo
subscribeDetailVo
=
new
DataApiModelSubscribeDetailVo
();
DataApiModelSubscribeDetailVo
subscribeDetailVo
=
new
DataApiModelSubscribeDetailVo
();
subscribeDetailVo
.
setSubscribeId
(
subscribeId
);
subscribeDetailVo
.
setSubscribeId
(
subscribeId
);
// 获取订阅信息
// 获取订阅信息
Optional
<
DataApiSubscribeConfig
>
dataApiSubscribeConfigOptional
=
dataApiSubscribeRepository
.
findByIdAndSystemEnv
(
subscribeId
,
SystemEnv
.
valueOf
(
environment
)
);
Optional
<
DataApiSubscribeConfig
>
dataApiSubscribeConfigOptional
=
dataApiSubscribeRepository
.
findByIdAndSystemEnv
AndSubscribeSystemId
(
subscribeId
,
SystemEnv
.
valueOf
(
environment
),
systemId
);
if
(!
dataApiSubscribeConfigOptional
.
isPresent
()){
if
(!
dataApiSubscribeConfigOptional
.
isPresent
()){
return
failure
(
"未查询到订阅信息"
);
return
failure
(
"未查询到订阅信息"
);
}
}
...
...
src/main/java/com/hisense/dataservice/util/SpringBeanUtil.java
0 → 100644
浏览文件 @
c2502aff
package
com
.
hisense
.
dataservice
.
util
;
import
org.springframework.beans.BeansException
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.stereotype.Component
;
@Component
public
class
SpringBeanUtil
implements
ApplicationContextAware
{
private
static
ApplicationContext
applicationContext
=
null
;
/***
* 根据一个bean的id获取配置文件中相应的bean
*/
public
static
Object
getBean
(
String
beanId
)
throws
BeansException
{
if
(
applicationContext
.
containsBean
(
beanId
))
{
applicationContext
.
getBean
(
beanId
);
}
return
null
;
}
@Override
public
void
setApplicationContext
(
ApplicationContext
applicationContext
)
throws
BeansException
{
if
(
SpringBeanUtil
.
applicationContext
==
null
)
{
SpringBeanUtil
.
applicationContext
=
applicationContext
;
}
}
/***
* 根据一个bean的类型获取配置文件中相应的bean
*/
public
static
<
T
>
T
getBean
(
Class
<
T
>
requiredType
)
throws
BeansException
{
return
applicationContext
.
getBean
(
requiredType
);
}
/**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
*/
public
static
boolean
containsBean
(
String
name
)
{
return
applicationContext
.
containsBean
(
name
);
}
public
static
ApplicationContext
getApplicationContext
()
{
return
SpringBeanUtil
.
applicationContext
;
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论