提交 5d11c0d7 authored 作者: songchuancai's avatar songchuancai

优化数据表和字段校验逻辑+服务详情

上级 ecf119a7
......@@ -7,6 +7,7 @@ import com.hisense.dataservice.library.model.page.PageLink;
import com.hisense.dataservice.service.DataApiCommonService;
import com.hisense.dataservice.service.DataApiDataSourceManagementService;
import com.hisense.dataservice.service.DataApiServiceManagementService;
import com.hisense.dataservice.vo.DataApiModelDetailVo;
import com.hisense.dataservice.vo.DataApiModelItemVo;
import com.hisense.dataservice.vo.DataTableVo;
import io.swagger.annotations.Api;
......@@ -76,6 +77,17 @@ public class DataServiceManagementController extends BaseController {
return dataApiServiceManagementService.queryDataApiList(environment, status, pageLink);
}
@ApiOperation(value = "数据服务管理-服务详情")
@ApiImplicitParams({
@ApiImplicitParam(name = "environment", value = "环境", required = true),
@ApiImplicitParam(name = "modelId", value = "数据服务ID", required = true)
})
@GetMapping("/{environment}/{modelId}")
public Result<DataApiModelDetailVo> getApiModelDetail(@PathVariable String environment,
@PathVariable Long modelId) {
return dataApiServiceManagementService.queryApiModelDetail(environment, modelId);
}
@GetMapping("/dataFileDownload/{environment}/{pattern}/{fileId}")
public Object dataFileDownload(@PathVariable String environment, @PathVariable String pattern, @PathVariable String fileId) {
......
......@@ -28,4 +28,6 @@ public interface DataApiColumnRepository extends JpaRepository<DataApiColumn,Lon
// 判断数据表中是否存在某个字段
boolean existsByDataTableIdAndFieldName(Long dataTableId,String fileName);
List<DataApiColumn> findAllByDataTableIdIn(Iterable<Long> tableIds);
}
......@@ -5,6 +5,7 @@ import com.hisense.dataservice.dto.DataApiModelDto;
import com.hisense.dataservice.library.model.Result;
import com.hisense.dataservice.library.model.page.PageData;
import com.hisense.dataservice.library.model.page.PageLink;
import com.hisense.dataservice.vo.DataApiModelDetailVo;
import com.hisense.dataservice.vo.DataApiModelItemVo;
import java.util.List;
......@@ -24,4 +25,6 @@ public interface DataApiServiceManagementService extends BaseService {
Result<JSONObject> debugDataApiService(String environment, Long dataModelId);
Result<PageData<DataApiModelItemVo>> queryDataApiList(String environment, Integer status, PageLink pageLink);
Result<DataApiModelDetailVo> queryApiModelDetail(String environment, Long modelId);
}
......@@ -11,9 +11,12 @@ import com.hisense.dataservice.library.model.page.PageLink;
import com.hisense.dataservice.repository.*;
import com.hisense.dataservice.service.DataApiServiceManagementService;
import com.hisense.dataservice.util.ThreadPoolManagerUtil;
import com.hisense.dataservice.vo.DataApiModelDetailVo;
import com.hisense.dataservice.vo.DataApiModelItemVo;
import com.hisense.dataservice.vo.DataSourceVo;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.jpa.domain.Specification;
......@@ -207,10 +210,36 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
dataApiModel.setDataSourceId(dataSourceId);
}
// 设置表之间关联关系
// 表关系、行列配置
List<TableJoinRelationConfig> tableJoinRelationConfig = dataApiModelDto.getTableJoinRelationConfig();
List<ColumnDataRangeFilter> columnDataRangeConfigs = dataApiModelDto.getColumnDataRangeConfig();
List<LineDataRangeFilter> lineDataRangeConfigs = dataApiModelDto.getLineDataRangeConfig();
// 获取数据表和数据字段相关信息
Map<Long, DataApiTable> dataApiTableIdToSelfMap = null;
Map<Long, Map<Long, DataApiColumn>> tableIdAndColumnIdToSelfMap = null;
dataSourceId = dataApiModel.getDataSourceId(); // 获取dataApiModel中最新的数据源ID
if(dataSourceId != null){
dataApiTableIdToSelfMap = queryDataApiTableByDataSourceId(dataSourceId);
Set<Long> tableIds = new HashSet<>();
if(!CollectionUtils.isEmpty(tableJoinRelationConfig)){
tableIds.addAll(tableJoinRelationConfig.stream().map(item -> item.getTableId()).collect(Collectors.toList()));
}
if(!CollectionUtils.isEmpty(columnDataRangeConfigs)){
tableIds.addAll(columnDataRangeConfigs.stream().map(item -> item.getTableId()).collect(Collectors.toList()));
}
if(!CollectionUtils.isEmpty(lineDataRangeConfigs)){
tableIds.addAll(lineDataRangeConfigs.stream().map(item -> item.getTableId()).collect(Collectors.toList()));
}
tableIdAndColumnIdToSelfMap = queryDataColumnByTableIds(tableIds);
}
// 设置表之间关联关系
if (!CollectionUtils.isEmpty(tableJoinRelationConfig)) {
if(!isRightTableRelationAndSetName(dataSourceId, tableJoinRelationConfig)){
if(dataApiTableIdToSelfMap == null || tableIdAndColumnIdToSelfMap == null){
return failure("多个数据表关系配置不正确,数据源相关配置未能正确加载", modelId);
}
if(!isRightTableRelationAndSetName(tableJoinRelationConfig,dataApiTableIdToSelfMap,tableIdAndColumnIdToSelfMap)){
return failure("多个数据表关系配置不正确", modelId);
}
dataApiModel.setTableJoinRelationConfig(tableJoinRelationConfig);
......@@ -233,20 +262,23 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
}
Boolean checkFilterResult;
dataSourceId = dataApiModel.getDataSourceId(); // 在次获取最新的数据源ID
// 保存列筛选条件
List<ColumnDataRangeFilter> columnDataRangeConfigs = dataApiModelDto.getColumnDataRangeConfig();
if (!CollectionUtils.isEmpty(columnDataRangeConfigs)) {
checkFilterResult = isRightColumnConfigAndSetNameField(dataSourceId, columnDataRangeConfigs);
if(dataApiTableIdToSelfMap == null || tableIdAndColumnIdToSelfMap == null){
return failure("数据列过滤配置不正确,数据源相关配置未能正确加载", modelId);
}
checkFilterResult = isRightColumnConfigAndSetNameField(columnDataRangeConfigs,dataApiTableIdToSelfMap,tableIdAndColumnIdToSelfMap);
if(!checkFilterResult){
return failure("数据列过滤配置不正确", modelId);
}
dataApiModelConfig.setColumnDataRangeConfig(columnDataRangeConfigs);
}
// 保存行筛选条件
List<LineDataRangeFilter> lineDataRangeConfigs = dataApiModelDto.getLineDataRangeConfig();
if (!CollectionUtils.isEmpty(lineDataRangeConfigs)) {
checkFilterResult = isRightLineConfigAndSetNameField(dataSourceId, lineDataRangeConfigs);
if(dataApiTableIdToSelfMap == null || tableIdAndColumnIdToSelfMap == null){
return failure("数据行过滤配置不正确,数据源相关配置未能正确加载", modelId);
}
checkFilterResult = isRightLineConfigAndSetNameField(lineDataRangeConfigs,dataApiTableIdToSelfMap,tableIdAndColumnIdToSelfMap);
if(!checkFilterResult){
return failure("数据行过滤配置不正确", modelId);
}
......@@ -258,7 +290,7 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
}
// 列配置检查
private Boolean isRightColumnConfigAndSetNameField(Long dataSourceId, List<ColumnDataRangeFilter> columnDataRangeFilters){
private Boolean isRightColumnConfigAndSetNameField(List<ColumnDataRangeFilter> columnDataRangeFilters, Map<Long, DataApiTable> dataApiTableIdToSelfMap, Map<Long, Map<Long, DataApiColumn>> tableIdAndColumnIdToSelfMap){
DataApiTable dataApiTable;
for (ColumnDataRangeFilter columnDataRangeFilter : columnDataRangeFilters) {
List<DataColumn> fields = columnDataRangeFilter.getFields();
......@@ -267,15 +299,21 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
log.warn("列过滤条件:{},数据表ID不存在", columnDataRangeFilter);
return Boolean.FALSE;
}
dataApiTable = queryDataApiTableByDataSourceIdAndTableId(dataSourceId,tableId);
// dataApiTable = queryDataApiTableByDataSourceIdAndTableId(dataSourceId,tableId);
dataApiTable = dataApiTableIdToSelfMap.get(tableId);
if(null == dataApiTable){
log.warn("数据表:【tableId:{}】不存在", tableId);
return Boolean.FALSE;
}
columnDataRangeFilter.setTableName(dataApiTable.getTableName()); // 设置表名
List<DataApiColumn> dataApiColumns = dataApiColumnRepository.findAllByDataTableIdAndDeletedIsFalse(tableId);
Map<Long, DataApiColumn> columnIdToNameMap = dataApiColumns.stream().collect(Collectors.toMap(DataApiColumn::getId, Function.identity()));
// List<DataApiColumn> dataApiColumns = dataApiColumnRepository.findAllByDataTableIdAndDeletedIsFalse(tableId);
// Map<Long, DataApiColumn> columnIdToNameMap = dataApiColumns.stream().collect(Collectors.toMap(DataApiColumn::getId, Function.identity()));
Map<Long, DataApiColumn> columnIdToNameMap = tableIdAndColumnIdToSelfMap.get(tableId);
if(columnIdToNameMap == null){
log.warn("列过滤条件:【{}】中不存在该表:【{}】", columnDataRangeFilter, tableId);
return Boolean.FALSE;
}
for (DataColumn field : fields) {
Long id = field.getId();
if(null == id){
......@@ -297,7 +335,7 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
}
// 行配置检查
private Boolean isRightLineConfigAndSetNameField(Long dataSourceId, List<LineDataRangeFilter> lineDataRangeFilters){
private Boolean isRightLineConfigAndSetNameField(List<LineDataRangeFilter> lineDataRangeFilters, Map<Long, DataApiTable> dataApiTableIdToSelfMap, Map<Long, Map<Long, DataApiColumn>> tableIdAndColumnIdToSelfMap){
DataApiTable dataApiTable;
DataApiColumn dataApiColumn;
for (LineDataRangeFilter lineDataRangeFilter : lineDataRangeFilters) {
......@@ -306,7 +344,8 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
log.warn("行过滤条件:{},数据表ID不存在", lineDataRangeFilter);
return Boolean.FALSE;
}
dataApiTable = queryDataApiTableByDataSourceIdAndTableId(dataSourceId,tableId);
// dataApiTable = queryDataApiTableByDataSourceIdAndTableId(dataSourceId,tableId);
dataApiTable = dataApiTableIdToSelfMap.get(tableId);
if(null == dataApiTable){
log.warn("数据表:【tableId:{}】不存在", tableId);
return Boolean.FALSE;
......@@ -320,7 +359,13 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
log.warn("过滤条件:{},数据字段不存在", filterCondition);
return Boolean.FALSE;
}
dataApiColumn = queryDataApiColumnWithTableIdAndField(dataApiTable.getId(), field.getId());
// dataApiColumn = queryDataApiColumnWithTableIdAndField(dataApiTable.getId(), field.getId());
Map<Long, DataApiColumn> dataApiColumnMap = tableIdAndColumnIdToSelfMap.get(dataApiTable.getId());
if(dataApiColumnMap == null){
log.warn("数据表:【tableId:{}】不存在数据字段:【columnId: {}】", tableId, field.getId());
return Boolean.FALSE;
}
dataApiColumn = dataApiColumnMap.get(field.getId());
if(null == dataApiColumn){
log.warn("数据表:【tableId:{}】不存在数据字段:【columnId: {}】", tableId, field.getId());
return Boolean.FALSE;
......@@ -336,7 +381,7 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
// 表关系配置检查
private Boolean isRightTableRelationAndSetName(Long dataSourceId, List<TableJoinRelationConfig> tableJoinRelationConfigs){
private Boolean isRightTableRelationAndSetName(List<TableJoinRelationConfig> tableJoinRelationConfigs, Map<Long, DataApiTable> dataApiTableIdToSelfMap, Map<Long, Map<Long, DataApiColumn>> tableIdAndColumnIdToSelfMap){
DataApiTable dataApiTable;
DataApiColumn dataApiColumn;
Long tableId;
......@@ -348,13 +393,20 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
log.warn("配置关系:{}中数据表ID或者数据字段ID为空", tableJoinRelationConfig);
return Boolean.FALSE;
}
dataApiTable = queryDataApiTableByDataSourceIdAndTableId(dataSourceId,tableId);
// dataApiTable = queryDataApiTableByDataSourceIdAndTableId(dataSourceId,tableId);
dataApiTable = dataApiTableIdToSelfMap.get(tableId);
if(null == dataApiTable){
log.warn("数据表:【tableId:{}】不存在", tableId);
return Boolean.FALSE;
}
tableJoinRelationConfig.setTableName(dataApiTable.getTableName());
dataApiColumn = queryDataApiColumnWithTableIdAndField(dataApiTable.getId(), columnId);
// dataApiColumn = queryDataApiColumnWithTableIdAndField(dataApiTable.getId(), columnId);
Map<Long, DataApiColumn> dataApiColumnMap = tableIdAndColumnIdToSelfMap.get(dataApiTable.getId());
if(dataApiColumnMap == null){
log.warn("数据表:【tableId:{}】不存在数据字段:【columnId: {}】", tableId, columnId);
return Boolean.FALSE;
}
dataApiColumn = dataApiColumnMap.get(columnId);
if(null == dataApiColumn){
log.warn("数据表:【tableId:{}】不存在数据字段:【columnId: {}】", tableId, columnId);
return Boolean.FALSE;
......@@ -381,6 +433,23 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
return dataApiTableOptional.get();
}
private Map<Long,DataApiTable> queryDataApiTableByDataSourceId(Long dataSourceId){
List<DataApiTable> dataApiTableList = dataApiTableRepository.findAllByDataSourceIdAndDeletedIsFalse(dataSourceId);
Map<Long, DataApiTable> tableIdToSelfMap = dataApiTableList.stream().collect(Collectors.toMap(DataApiTable::getId, Function.identity()));
return tableIdToSelfMap;
}
private Map<Long,Map<Long, DataApiColumn>> queryDataColumnByTableIds(Set<Long> tableIds){
List<DataApiColumn> columnList = dataApiColumnRepository.findAllByDataTableIdIn(tableIds);
Map<Long,Map<Long, DataApiColumn>> tableIdAndColumnIdToSelfMap = new HashMap<>();
for (DataApiColumn dataApiColumn : columnList) {
Long dataTableId = dataApiColumn.getDataTableId();
Long columnId = dataApiColumn.getId();
Map<Long, DataApiColumn> columnIdToSelfMap = tableIdAndColumnIdToSelfMap.getOrDefault(dataTableId, new HashMap<>());
columnIdToSelfMap.put(columnId, dataApiColumn);
tableIdAndColumnIdToSelfMap.put(dataTableId, columnIdToSelfMap);
}
return tableIdAndColumnIdToSelfMap;
}
public Result<JSONObject> debugDataApiService(String environment, Long dataModelId){
JSONObject result = new JSONObject();
......@@ -454,6 +523,26 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
return success(result);
}
@Override
public Result<DataApiModelDetailVo> queryApiModelDetail(String environment, Long modelId) {
Optional<DataApiModel> dataApiModelOptional = dataApiModelRepository.findByIdAndSystemEnv(modelId, SystemEnv.valueOf(environment));
DataApiModelDetailVo dataApiModelDetailVo = new DataApiModelDetailVo();
if(!dataApiModelOptional.isPresent()){
return failure("数据服务不存在");
}
DataApiModel dataApiModel = dataApiModelOptional.get();
BeanUtils.copyProperties(dataApiModel, dataApiModelDetailVo);
Optional<DataApiModelConfig> dataApiModelConfig = dataApiModelConfigRepository.findByTypeIdAndType(dataApiModel.getId(), ModelConfigType.PUBLISH);
dataApiModelConfig.ifPresent((item)->{
dataApiModelDetailVo.setColumnDataRangeConfig(item.getColumnDataRangeConfig());
dataApiModelDetailVo.setLineDataRangeConfig(item.getLineDataRangeConfig());
});
// TODO 设置发布系统相关信息
// dataApiModelDetailVo.setPublishSystem();
// dataApiModelDetailVo.setSystemLeader();
return success(dataApiModelDetailVo);
}
private List<List<Object>> executeDataQueryTask(String dataSql, DataApiModelConfig dataApiModelConfig, DataApiDataSource dataSource) throws Exception{
// 获取sql的填充参数
List<Object> jdbcParamValues = new ArrayList<>();
......
......@@ -29,6 +29,9 @@ public class DataApiModelDetailVo {
@ApiModelProperty(name = "数据服务描述")
private String description;
@ApiModelProperty(name = "数据源类型")
private String dataSourceId;
@ApiModelProperty(name = "发布/创建人")
private String creator;
......
......@@ -91,6 +91,13 @@ public class DataApiServiceManagementServiceTest {
}
@Test
public void test(){
Result<JSONObject> result5 = dataApiServiceManagementService.debugDataApiService("DEV", 541L);
log.info("执行调试;第五步结果,调试api:{}", result5);
Assert.assertEquals(null, result5.getData());
}
private DataApiModelDto buildModelDtoForServiceCreate(){
DataApiModelDto dataApiModelDto = new DataApiModelDto();
dataApiModelDto.setModelName("测试模式名称");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论