提交 c2502aff authored 作者: songchuancai's avatar songchuancai

优化代码

上级 7cc43e06
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
......@@ -58,11 +58,13 @@ public class MyApplicationController extends BaseController{
@ApiOperation(value = "数据服务管理-服务详情")
@ApiImplicitParams({
@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,
@PathVariable Long subscribeId) {
return myApplicationService.queryApiModelDetail(environment, subscribeId);
@PathVariable Long subscribeId,
@PathVariable Integer systemId) {
return myApplicationService.queryApiModelDetail(environment, subscribeId,systemId);
}
}
......@@ -26,8 +26,8 @@ public class DataApiModelSubscribeDto {
@ApiModelProperty(value = "行数据范围", required = true)
private List<LineDataRangeFilter> lineDataRangeConfig;
@ApiModelProperty(value = "订阅系统ID", required = false)
private Integer subscribeSystemId;
@ApiModelProperty(value = "订阅系统IDs", required = true)
private List<Integer> subscribeSystemIds;
@ApiModelProperty(value = "网络环境", required = true)
private String networkEnv;
......@@ -37,4 +37,7 @@ public class DataApiModelSubscribeDto {
@ApiModelProperty(value = "订阅服务描述", required = true)
private String desc;
@ApiModelProperty(value = "订阅服务负责人", required = true)
private String subSystemLeader;
}
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; // 订阅结果
}
......@@ -27,10 +27,10 @@ public interface DataApiApplicationRepository extends JpaRepository<DataApiAppli
"where p.system =:systemId and pr.dataModelId=:apiId ")
List<DataApiApplication> findSubscribedApiBySystem(@Param("systemId") Integer systemId, @Param("apiId") Long apiId, @Param("status") Integer status);
// @Query("select p from DataApiApplication p JOIN DataApiProcessRecord pr " +
// "on pr.id = p.processRecordId and pr.processType='sub' and p.userKey is not null " +
// "where p.system =:systemId and p.environment=:env")
// List<PublishApplication> findSubscribedBySystemUserKeyNotNull(@Param("systemId") Integer systemId, @Param("type") Integer type, @Param("env") Integer env);
@Query("select p from DataApiApplication p JOIN DataApiProcessRecord pr " +
"on pr.id = p.processRecordId and pr.processType='sub' and p.userKey is not null " +
"where p.system =:systemId and p.environment=:env")
List<PublishApplication> findSubscribedBySystemUserKeyNotNull(@Param("systemId") Integer systemId, @Param("env") Integer env);
//
// @Query("select p from DataApiApplication p JOIN DataApiProcessRecord pr " +
// "on pr.id = p.processRecordId and pr.processType='sub' and p.appId is not null " +
......
......@@ -5,7 +5,9 @@ import com.hisense.dataservice.enums.ModelConfigType;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
import java.util.Set;
/**
* @author : scc
......@@ -15,4 +17,5 @@ import java.util.Optional;
public interface DataApiModelConfigRepository extends JpaRepository<DataApiModelConfig,Long> {
Optional<DataApiModelConfig> findByTypeIdAndType(Long typeId, ModelConfigType type);
List<DataApiModelConfig> findByTypeIdInAndType(Set<Long> typeIds, ModelConfigType type);
}
......@@ -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)
List<Map<String,String>> getUserInfoByUserIds(@Param("userIds") Set<String> userIds);
List<DataApiModel> findAllByIdIn(Set<Long> ids);
}
......@@ -3,5 +3,10 @@ package com.hisense.dataservice.repository;
import com.hisense.dataservice.entity.DataItem;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Set;
public interface DataItemRepository extends JpaRepository<DataItem, Integer> {
List<DataItem> findAllByIdIn(Set<Integer> ids);
}
......@@ -13,5 +13,5 @@ import com.hisense.dataservice.vo.MyApplicationVo;
public interface MyApplicationService extends BaseService{
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);
}
......@@ -7,6 +7,7 @@ import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy
import com.alibaba.fastjson.JSONObject;
import com.hisense.dataservice.bo.*;
import com.hisense.dataservice.dto.DataApiModelSubscribeDto;
import com.hisense.dataservice.dto.SubscribeApiResultDto;
import com.hisense.dataservice.dto.WorkFlowDto;
import com.hisense.dataservice.entity.*;
import com.hisense.dataservice.enums.*;
......@@ -17,22 +18,27 @@ import com.hisense.dataservice.repository.*;
import com.hisense.dataservice.service.DataApiCommonService;
import com.hisense.dataservice.service.WorkFlowService;
import com.hisense.dataservice.util.FileUtil;
import com.hisense.dataservice.util.SpringBeanUtil;
import com.hisense.dataservice.util.ThreadPoolManagerUtil;
import com.hisense.dataservice.vo.LdapUserInfoVo;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.CollectionUtils;
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.transaction.TransactionRolledbackException;
import javax.transaction.Transactional;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
......@@ -83,6 +89,7 @@ public class DataApiCommonServiceImpl implements DataApiCommonService {
private Integer queryDataTotalPerThread = 2000;
private ThreadPoolManagerUtil batchQueryDataThreadPool = new ThreadPoolManagerUtil("batchQueryDataThread");
private ThreadPoolManagerUtil subscribeApiTaskThreadPool = new ThreadPoolManagerUtil("subscribeApiTaskThreadPool");
@Autowired
private ElasticsearchUtils elasticsearchUtils;
......@@ -484,188 +491,189 @@ public class DataApiCommonServiceImpl implements DataApiCommonService {
}
// 订阅数据api
@Transactional
public Result<Long> subscribeDataApi(DataApiModelSubscribeDto dataApiModelSubscribeDto, HttpServletRequest request) {
Long modelId = dataApiModelSubscribeDto.getModelId();
Integer subscribeSystemId = dataApiModelSubscribeDto.getSubscribeSystemId();
String user = ""; // TODO SecurityUtils.getLoginUser().getLoginName()
// 获取订阅系统名称
DataItem systemItem = dataItemRepository.getOne(subscribeSystemId);
String subscribeSystemName = systemItem == null ? subscribeSystemId + "" : systemItem.getItemName();
// 校验订阅参数
Result<DataApiModel> checkSubscribeApiParamsResult = checkSubscribeApiParams(dataApiModelSubscribeDto,user, subscribeSystemName);
if(checkSubscribeApiParamsResult.getCode().equals(Result.FAIL)){
return failure(checkSubscribeApiParamsResult.getMsg());
}
DataApiModel dataApiModel = checkSubscribeApiParamsResult.getData();
// 获取数据源
Long dataSourceId = dataApiModel.getDataSourceId();
Optional<DataApiDataSource> dataApiDataSourceOptional = dataApiDataSourceRepository.findById(dataSourceId);
if (!dataApiDataSourceOptional.isPresent()) {
return failure("订阅数据服务的数据源不存在");
}
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)) {
return failure("未能成功生成sql语句");
}
dataApiModelConfigRepository.saveAndFlush(subscribeDataApiModelConfig);
// 保存订阅信息
Map<String, String> subSystemProjectAndTenantAdminNameMap = dataApiModelRepository.findSystemProjectAndTenantAdminNameBySystemId(dataApiModelSubscribeDto.getSubscribeSystemId());
String subSystemLeader = subSystemProjectAndTenantAdminNameMap.get("projectAdminName");
DataApiSubscribeConfig subscribeConfig = new DataApiSubscribeConfig();
subscribeConfig.setSubscribeSystemId(dataApiModelSubscribeDto.getSubscribeSystemId());
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(subSystemLeader);
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{
// 之前没有订阅过 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();
return failure(startProcessResult.getMsg());
}
// 更新订阅审批流程实例ID
String processInstID = startProcessResult.getData();
pr.setProcessInstID(processInstID);
dataApiProcessRecordRepository.saveAndFlush(pr);
return success(subscribeConfig.getId());
}
// @Transactional
// public Result<Long> subscribeDataApi(DataApiModelSubscribeDto dataApiModelSubscribeDto, HttpServletRequest request) {
//
// Long modelId = dataApiModelSubscribeDto.getModelId();
// Integer subscribeSystemId = dataApiModelSubscribeDto.getSubscribeSystemId();
//
// String user = ""; // TODO SecurityUtils.getLoginUser().getLoginName()
//
// // 获取订阅系统名称
// DataItem systemItem = dataItemRepository.getOne(subscribeSystemId);
// String subscribeSystemName = systemItem == null ? subscribeSystemId + "" : systemItem.getItemName();
//
// // 校验订阅参数
// Result<DataApiModel> checkSubscribeApiParamsResult = checkSubscribeApiParams(dataApiModelSubscribeDto,user, subscribeSystemName);
// if(checkSubscribeApiParamsResult.getCode().equals(Result.FAIL)){
// return failure(checkSubscribeApiParamsResult.getMsg());
// }
// DataApiModel dataApiModel = checkSubscribeApiParamsResult.getData();
//
// // 获取数据源
// Long dataSourceId = dataApiModel.getDataSourceId();
// Optional<DataApiDataSource> dataApiDataSourceOptional = dataApiDataSourceRepository.findById(dataSourceId);
// if (!dataApiDataSourceOptional.isPresent()) {
// return failure("订阅数据服务的数据源不存在");
// }
// 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)) {
// return failure("未能成功生成sql语句");
// }
// dataApiModelConfigRepository.saveAndFlush(subscribeDataApiModelConfig);
//
// // 保存订阅信息
// Map<String, String> subSystemProjectAndTenantAdminNameMap = dataApiModelRepository.findSystemProjectAndTenantAdminNameBySystemId(dataApiModelSubscribeDto.getSubscribeSystemId());
//// String subSystemLeader = subSystemProjectAndTenantAdminNameMap.get("projectAdminName");
// DataApiSubscribeConfig subscribeConfig = new DataApiSubscribeConfig();
// subscribeConfig.setSubscribeSystemId(dataApiModelSubscribeDto.getSubscribeSystemId());
// 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();
// return failure(startProcessResult.getMsg());
// }
//
// // 更新订阅审批流程实例ID
// String processInstID = startProcessResult.getData();
// pr.setProcessInstID(processInstID);
// dataApiProcessRecordRepository.saveAndFlush(pr);
//
// return success(subscribeConfig.getId());
// }
// 检查订阅api的参数
private Result<DataApiModel> checkSubscribeApiParams(DataApiModelSubscribeDto dataApiModelSubscribeDto, String user, String subscribeSystemName){
Long modelId = dataApiModelSubscribeDto.getModelId();
Integer subscribeSystemId = dataApiModelSubscribeDto.getSubscribeSystemId();
if (modelId == null || subscribeSystemId == null) {
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;
// private Result<DataApiModel> checkSubscribeApiParams(DataApiModelSubscribeDto dataApiModelSubscribeDto, String user, String subscribeSystemName){
// Long modelId = dataApiModelSubscribeDto.getModelId();
// Integer subscribeSystemId = dataApiModelSubscribeDto.getSubscribeSystemId();
//
// if (modelId == null || subscribeSystemId == null) {
// 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;
//// }
//
// // 获取发布时数据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);
// }
// 获取发布时数据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){
Integer publishSystemId = dataApiModel.getPublishSystemId().intValue();
......@@ -1005,4 +1013,397 @@ public class DataApiCommonServiceImpl implements DataApiCommonService {
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;
}
}
......@@ -69,11 +69,11 @@ public class MyApplicationServiceImpl implements MyApplicationService {
}
@Override
public Result<DataApiModelSubscribeDetailVo> queryApiModelDetail(String environment, Long subscribeId) {
public Result<DataApiModelSubscribeDetailVo> queryApiModelDetail(String environment, Long subscribeId,Integer systemId) {
DataApiModelSubscribeDetailVo subscribeDetailVo = new DataApiModelSubscribeDetailVo();
subscribeDetailVo.setSubscribeId(subscribeId);
// 获取订阅信息
Optional<DataApiSubscribeConfig> dataApiSubscribeConfigOptional = dataApiSubscribeRepository.findByIdAndSystemEnv(subscribeId, SystemEnv.valueOf(environment));
Optional<DataApiSubscribeConfig> dataApiSubscribeConfigOptional = dataApiSubscribeRepository.findByIdAndSystemEnvAndSubscribeSystemId(subscribeId, SystemEnv.valueOf(environment), systemId);
if(!dataApiSubscribeConfigOptional.isPresent()){
return failure("未查询到订阅信息");
}
......
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论