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

修改数据api验证逻辑并进行测试

上级 ef00bcd9
...@@ -15,7 +15,6 @@ import java.util.List; ...@@ -15,7 +15,6 @@ import java.util.List;
* @author : scc * @author : scc
* @date : 2023/02/20 * @date : 2023/02/20
* 列数据范围过滤 * 列数据范围过滤
* TODO tableName tableId 和columnId columnName不为空的设计
**/ **/
@ApiModel("列数据范围过滤") @ApiModel("列数据范围过滤")
@Data @Data
...@@ -23,11 +22,10 @@ import java.util.List; ...@@ -23,11 +22,10 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
public class ColumnDataRangeFilter { public class ColumnDataRangeFilter {
// 表名 // 表名
@JsonIgnore @ApiModelProperty(value = "表名", required = false)
@ApiModelProperty(name = "表名", required = false)
private String tableName; private String tableName;
// 表名ID // 表名ID
@ApiModelProperty(name = "表名ID", required = true) @ApiModelProperty(value = "表名ID", required = true)
private Long tableId; private Long tableId;
// 字段 // 字段
......
package com.hisense.dataservice.bo; package com.hisense.dataservice.bo;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hisense.dataservice.enums.FieldTypeEnum;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -14,16 +13,15 @@ import lombok.NoArgsConstructor; ...@@ -14,16 +13,15 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
public class DataColumn { public class DataColumn {
// 字段名 // 字段名
@JsonIgnore @ApiModelProperty(value = "字段名", required = false)
@ApiModelProperty(name = "字段名", required = false)
private String columnName; private String columnName;
// 字段ID // 字段ID
@ApiModelProperty(name = "字段ID", required = true) @ApiModelProperty(value = "字段ID", required = true)
private Long id; private Long id;
// 字段类型 // 字段类型
@ApiModelProperty(name = "字段类型", required = false) @ApiModelProperty(value = "字段类型", required = false)
private FieldTypeEnum fieldType; private String fieldType;
// 字段描述 // 字段描述
@ApiModelProperty(name = "字段描述", required = false) @ApiModelProperty(value = "字段描述", required = false)
private String desc; private String desc;
} }
\ No newline at end of file
...@@ -22,27 +22,25 @@ import java.util.List; ...@@ -22,27 +22,25 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
public class FilterCondition { public class FilterCondition {
// 表名 // 表名
@JsonIgnore @ApiModelProperty(value = "表名", required = false)
@ApiModelProperty(name = "表名", required = false)
private String tableName; private String tableName;
// 表ID // 表ID
@JsonIgnore @ApiModelProperty(value = "表ID", required = false)
@ApiModelProperty(name = "表ID", required = false)
private Long tableId; private Long tableId;
// 字段 // 字段
@ApiModelProperty(name = "字段", required = true) @ApiModelProperty(value = "字段", required = true)
@NonNull @NonNull
private DataColumn field; private DataColumn field;
// 过滤条件 // 过滤条件
@ApiModelProperty(name = "过滤条件", required = true) @ApiModelProperty(value = "过滤条件", required = true)
@NonNull @NonNull
private OperateEnum operateEnumType; private OperateEnum operateEnumType;
// 过滤值 // 过滤值
@ApiModelProperty(name = "过滤值", required = true) @ApiModelProperty(value = "过滤值", required = true)
@NonNull @NonNull
private List<Object> filterValues; private List<Object> filterValues;
......
...@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.util.CollectionUtils;
import java.util.List; import java.util.List;
...@@ -21,43 +22,42 @@ import java.util.List; ...@@ -21,43 +22,42 @@ import java.util.List;
public class LineDataRangeFilter { public class LineDataRangeFilter {
// 条件全部满足还是满足一个: true:全部匹配, false: 只需要满足一个即可 // 条件全部满足还是满足一个: true:全部匹配, false: 只需要满足一个即可
@ApiModelProperty(name = "条件是否全部满足", required = false) @ApiModelProperty(value = "条件是否全部满足", required = false)
private Boolean fullMatched = Boolean.TRUE; private Boolean fullMatched = Boolean.TRUE;
// 过滤条件 // 过滤条件
@ApiModelProperty(name = "过滤条件", required = false) @ApiModelProperty(value = "过滤条件", required = false)
private List<FilterCondition> filterConditions; private List<FilterCondition> filterConditions;
@ApiModelProperty(name = "表ID", required = true) @ApiModelProperty(value = "表ID", required = true)
private Long tableId; private Long tableId;
@JsonIgnore @JsonIgnore
@ApiModelProperty(name = "表名", required = false) @ApiModelProperty(value = "表名", required = false)
private String tableName; private String tableName;
/** /**
* TODO 优化stringbuilder只创建一份并且进行引用传递
* 生成where条件 * 生成where条件
* 例如: where 1=1 and (v1 or v2) and (v3 and v4) * 例如: where 1=1 and (v1 or v2) and (v3 and v4)
* *
* @param LineDataRangeFilters * @param lineDataRangeFilters
* @return * @return
*/ */
public static String generateFilterWhereSql(List<LineDataRangeFilter> LineDataRangeFilters) { public static String generateFilterWhereSql(List<LineDataRangeFilter> lineDataRangeFilters) {
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
// 拼接初始条件 // 拼接初始条件
if (LineDataRangeFilters.isEmpty()) { if (CollectionUtils.isEmpty(lineDataRangeFilters)) {
result.append(" 1=1 "); result.append(" 1=1 ");
return result.toString(); return result.toString();
} }
for (int i = 0; i < LineDataRangeFilters.size(); i++) { for (int i = 0; i < lineDataRangeFilters.size(); i++) {
if (i == LineDataRangeFilters.size() - 1) { if (i == lineDataRangeFilters.size() - 1) {
result = LineDataRangeFilters.get(i).generateFilterSql(result); result = lineDataRangeFilters.get(i).generateFilterSql(result);
result.append(" "); result.append(" ");
} else { } else {
result = LineDataRangeFilters.get(i).generateFilterSql(result); result = lineDataRangeFilters.get(i).generateFilterSql(result);
result.append(" and "); result.append(" and ");
} }
} }
......
...@@ -38,6 +38,7 @@ public class QueryDataTask<T> implements Callable<T> { ...@@ -38,6 +38,7 @@ public class QueryDataTask<T> implements Callable<T> {
List<List<Object>> result = new ArrayList<>(); List<List<Object>> result = new ArrayList<>();
Result<List<JSONObject>> dataResult = JdbcUtil.executeSql(dataApiDataSource, querySql, jdbcParamValues, queryDataTotalPerThread); Result<List<JSONObject>> dataResult = JdbcUtil.executeSql(dataApiDataSource, querySql, jdbcParamValues, queryDataTotalPerThread);
List<JSONObject> dataJsonList = dataResult.getData(); List<JSONObject> dataJsonList = dataResult.getData();
// TODO 针对错误信息保存到es
for (JSONObject dataJson : dataJsonList) { for (JSONObject dataJson : dataJsonList) {
List<Object> lineData = new ArrayList<>(); List<Object> lineData = new ArrayList<>();
for (List<String> head : columnHeads) { for (List<String> head : columnHeads) {
......
...@@ -17,12 +17,12 @@ import lombok.NoArgsConstructor; ...@@ -17,12 +17,12 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class TableJoinRelationConfig { public class TableJoinRelationConfig {
@ApiModelProperty(name = "表名", required = true) @ApiModelProperty(value = "表名", required = false)
private String tableName; private String tableName;
@ApiModelProperty(name = "列名", required = true) @ApiModelProperty(value = "列名", required = false)
private String columnName; private String columnName;
@ApiModelProperty(name = "表ID", required = true) @ApiModelProperty(value = "表ID", required = true)
private Long tableId; private Long tableId;
@ApiModelProperty(name = "列ID", required = true) @ApiModelProperty(value = "列ID", required = true)
private Long columnId; private Long columnId;
} }
...@@ -29,10 +29,14 @@ public class DataApiCommonServiceController { ...@@ -29,10 +29,14 @@ public class DataApiCommonServiceController {
@ApiOperation(value = "公共服务-数据查询") @ApiOperation(value = "公共服务-数据查询")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "environment", value = "环境", required = true), @ApiImplicitParam(name = "environment", value = "环境", required = true),
@ApiImplicitParam(name = "pattern", value = "请求路径", required = true) @ApiImplicitParam(name = "pattern", value = "请求路径", required = true),
@ApiImplicitParam(name = "apiId", value = "api订阅的唯一标识", required = true)
}) })
@GetMapping("/{environment}/{pattern}") @GetMapping("/{environment}/{pattern}/{apiId}")
public Object dataQuery(@PathVariable String environment, @PathVariable String pattern, HttpServletRequest request) { public Object dataQuery(@PathVariable String environment,
return dataApiCommonService.queryData(environment, pattern, request); @PathVariable String pattern,
@PathVariable String apiId,
HttpServletRequest request) {
return dataApiCommonService.queryData(environment, pattern, apiId, request);
} }
} }
...@@ -6,6 +6,8 @@ import com.hisense.dataservice.service.DataApiCommonService; ...@@ -6,6 +6,8 @@ import com.hisense.dataservice.service.DataApiCommonService;
import com.hisense.dataservice.service.DataApiDataSourceManagementService; import com.hisense.dataservice.service.DataApiDataSourceManagementService;
import com.hisense.dataservice.service.DataApiServiceManagementService; import com.hisense.dataservice.service.DataApiServiceManagementService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -33,12 +35,19 @@ public class DataServiceManagementController { ...@@ -33,12 +35,19 @@ public class DataServiceManagementController {
// } // }
@ApiOperation(value = "数据服务管理-创建数据服务(草稿状态)",notes = "返回数据模型ID") @ApiOperation(value = "数据服务管理-创建数据服务(草稿状态)",notes = "返回数据模型ID")
@ApiImplicitParams({
@ApiImplicitParam(name = "environment", value = "环境", required = true)
})
@PostMapping("/{environment}") @PostMapping("/{environment}")
public Result<Long> createDataApiService(@RequestBody DataApiModelDto dataApiModelDto, @PathVariable String environment){ public Result<Long> createDataApiService(@PathVariable String environment, @RequestBody DataApiModelDto dataApiModelDto){
return dataApiServiceManagementService.createDataApi(environment,dataApiModelDto); return dataApiServiceManagementService.createDataApi(environment,dataApiModelDto);
} }
@ApiOperation(value = "数据服务管理-发布数据服务") @ApiOperation(value = "数据服务管理-发布数据服务")
@ApiImplicitParams({
@ApiImplicitParam(name = "environment", value = "环境", required = true),
@ApiImplicitParam(name = "modelId", value = "数据服务ID", required = true)
})
@PostMapping("/{environment}/{modelId}") @PostMapping("/{environment}/{modelId}")
public Result<Boolean> publishDataApi(@PathVariable String environment, public Result<Boolean> publishDataApi(@PathVariable String environment,
@PathVariable Long modelId) { @PathVariable Long modelId) {
......
...@@ -3,6 +3,7 @@ package com.hisense.dataservice.dto; ...@@ -3,6 +3,7 @@ package com.hisense.dataservice.dto;
import com.hisense.dataservice.bo.ColumnDataRangeFilter; import com.hisense.dataservice.bo.ColumnDataRangeFilter;
import com.hisense.dataservice.bo.LineDataRangeFilter; import com.hisense.dataservice.bo.LineDataRangeFilter;
import com.hisense.dataservice.bo.TableJoinRelationConfig; import com.hisense.dataservice.bo.TableJoinRelationConfig;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -12,40 +13,41 @@ import java.util.List; ...@@ -12,40 +13,41 @@ import java.util.List;
* @author : scc * @author : scc
* @date : 2023/02/24 * @date : 2023/02/24
**/ **/
@ApiModel("数据api服务dto")
@Data @Data
public class DataApiModelDto { public class DataApiModelDto {
@ApiModelProperty(name = "数据模板ID", required = false) @ApiModelProperty(value = "数据模板ID", required = false)
private Long modelId; private Long modelId;
@ApiModelProperty(name = "数据服务名", required = true) @ApiModelProperty(value = "数据服务名", required = true)
private String modelName; private String modelName;
@ApiModelProperty(name = "数据源ID", required = true) @ApiModelProperty(value = "数据源ID", required = true)
private Long dataSourceId; private Long dataSourceId;
@ApiModelProperty(name = "列数据范围", required = true) @ApiModelProperty(value = "列数据范围", required = true)
private List<ColumnDataRangeFilter> columnDataRangeConfig; private List<ColumnDataRangeFilter> columnDataRangeConfig;
@ApiModelProperty(name = "数据表关系", required = false) @ApiModelProperty(value = "数据表关系", required = false)
private List<TableJoinRelationConfig> tableJoinRelationConfig; private List<TableJoinRelationConfig> tableJoinRelationConfig;
@ApiModelProperty(name = "行数据范围", required = true) @ApiModelProperty(value = "行数据范围", required = true)
private List<LineDataRangeFilter> lineDataRangeConfig; private List<LineDataRangeFilter> lineDataRangeConfig;
@ApiModelProperty(name = "发布系统ID", required = false) @ApiModelProperty(value = "发布系统ID", required = false)
private Long publishSystemId; private Long publishSystemId;
@ApiModelProperty(name = "订阅系统ID", required = false) @ApiModelProperty(value = "订阅系统ID", required = false)
private Integer subscribeSystemId; private Integer subscribeSystemId;
@ApiModelProperty(name = "网络环境", required = true) @ApiModelProperty(value = "网络环境", required = true)
private String networkEnv; private String networkEnv;
@ApiModelProperty(name = "系统环境", required = true) @ApiModelProperty(value = "系统环境", required = true)
private String systemEnv; private String systemEnv;
@ApiModelProperty(name = "数据服务描述", required = true) @ApiModelProperty(value = "数据服务描述", required = true)
private String desc; private String desc;
} }
package com.hisense.dataservice.entity; package com.hisense.dataservice.entity;
import com.hisense.dataservice.enums.FieldTypeEnum;
import com.hisense.dataservice.vo.DataFieldVo; import com.hisense.dataservice.vo.DataFieldVo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
...@@ -24,15 +23,14 @@ public class DataApiColumn extends BaseEntity { ...@@ -24,15 +23,14 @@ public class DataApiColumn extends BaseEntity {
// 字段名 // 字段名
private String fieldName; private String fieldName;
// 字段类型 // 字段类型
@Enumerated(EnumType.STRING)
@Column(name = "field_type", columnDefinition = "varchar2(32)") @Column(name = "field_type", columnDefinition = "varchar2(32)")
private FieldTypeEnum filedType; private String filedType;
public DataFieldVo toItem(){ public DataFieldVo toItem(){
DataFieldVo dataFieldVo = new DataFieldVo(); DataFieldVo dataFieldVo = new DataFieldVo();
dataFieldVo.setFieldId(this.getId()); dataFieldVo.setFieldId(this.getId());
dataFieldVo.setFieldName(this.getFieldName()); dataFieldVo.setFieldName(this.getFieldName());
dataFieldVo.setFiledType(this.getFiledType().name()); dataFieldVo.setFiledType(this.getFiledType());
dataFieldVo.setDataTableId(this.getDataTableId()); dataFieldVo.setDataTableId(this.getDataTableId());
dataFieldVo.setDesc(this.getDescription()); dataFieldVo.setDesc(this.getDescription());
return dataFieldVo; return dataFieldVo;
......
...@@ -30,7 +30,6 @@ public class DataApiModel extends BaseEntity{ ...@@ -30,7 +30,6 @@ public class DataApiModel extends BaseEntity{
// 名称 // 名称
private String name; private String name;
// 数据源ID // 数据源ID
@Column(nullable = false)
private Long dataSourceId; private Long dataSourceId;
// 数据表和对应列集合 Map<数据表ID,列ID列表> 提供订阅时使用 // 数据表和对应列集合 Map<数据表ID,列ID列表> 提供订阅时使用
...@@ -64,9 +63,9 @@ public class DataApiModel extends BaseEntity{ ...@@ -64,9 +63,9 @@ public class DataApiModel extends BaseEntity{
private Integer status; private Integer status;
// 未调试:NO_DEBUG、调试成功:SUCCESS、调试失败:FAIL // 未调试:NO_DEBUG、调试成功:SUCCESS、调试失败:FAIL
@Enumerated(EnumType.ORDINAL) @Enumerated(EnumType.STRING)
@Column(name = "debug_status", columnDefinition = "varchar2(10)", nullable = false) @Column(name = "debug_status", columnDefinition = "varchar2(10) default 'NO_DEBUG' ", nullable = false)
private DebugStatusEnum debugStatus; private DebugStatusEnum debugStatus = DebugStatusEnum.NO_DEBUG;
} }
package com.hisense.dataservice.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "publish_application")
public class PublishApplication {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id;
private String name;// 订阅名称
private String creator;
private Integer system;// 订阅系统所属ID
private String systemName;
private String scaleApplicationId;
/**
* application类型:0-创建api;1-订阅api
*/
private Integer type;
private String userKey;
/**
* 订阅状态: 0-取消订阅,1-正常-创建,2-审批通过,3-审批取消,4-重置密匙前的数据
*/
private Integer status;
private Date createTime;
private Date updateTime;
private String description;
private String state;
private String appId;
private String appKey;
private String mqTags;//订阅时选择的topic下的tag 的id 逗号分割
private String consumerGroup;//订阅时 消费者组
private String subscribedParams;//订阅参数
private String webSubscribedParams;//前端订阅参数原数据,供回显
private Integer originalApiId;//参数订阅生成的api存放 原apiId
}
package com.hisense.dataservice.entity.convert;
import com.alibaba.fastjson.JSONObject;
import com.hisense.dataservice.bo.ColumnDataRangeFilter;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.persistence.AttributeConverter;
import java.util.ArrayList;
import java.util.List;
/**
* @author : scc
* @date : 2023/02/20
* 数据范围过滤条件转换器
**/
public class ColumnDataRangeFilterAttributeConvert implements AttributeConverter<List<ColumnDataRangeFilter>, String> {
@Override
public String convertToDatabaseColumn(List<ColumnDataRangeFilter> columnDataRangeFilters) {
return CollectionUtils.isEmpty(columnDataRangeFilters) ? "" : JSONObject.toJSONString(columnDataRangeFilters);
}
@Override
public List<ColumnDataRangeFilter> convertToEntityAttribute(String dataRangeFilterJsonStr) {
return StringUtils.isEmpty(dataRangeFilterJsonStr) ? new ArrayList<>() : JSONObject.parseObject(dataRangeFilterJsonStr, List.class);
}
}
package com.hisense.dataservice.entity.convert;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.persistence.AttributeConverter;
import java.util.ArrayList;
import java.util.List;
/**
* @author : scc
* @date : 2023/02/20
* 关联表ids转换器
**/
public class DataTableIdsAttributeConvert implements AttributeConverter<List<Integer>, String> {
@Override
public String convertToDatabaseColumn(List<Integer> dataTableIds) {
return CollectionUtils.isEmpty(dataTableIds) ? "" : JSONObject.toJSONString(dataTableIds);
}
@Override
public List<Integer> convertToEntityAttribute(String dataTableIdJsonStr) {
return StringUtils.isEmpty(dataTableIdJsonStr) ? new ArrayList<>() : JSONObject.parseObject(dataTableIdJsonStr, List.class);
}
}
package com.hisense.dataservice.entity.convert;
import com.alibaba.fastjson.JSONObject;
import com.hisense.dataservice.bo.LineDataRangeFilter;
import org.springframework.util.StringUtils;
import javax.persistence.AttributeConverter;
/**
* @author : scc
* @date : 2023/02/20
* 数据范围过滤条件转换器
**/
public class LineDataRangeFilterAttributeConvert implements AttributeConverter<LineDataRangeFilter, String> {
@Override
public String convertToDatabaseColumn(LineDataRangeFilter LineDataRangeFilter) {
return LineDataRangeFilter == null ? "" : JSONObject.toJSONString(LineDataRangeFilter);
}
@Override
public LineDataRangeFilter convertToEntityAttribute(String dataRangeFilterJsonStr) {
return StringUtils.isEmpty(dataRangeFilterJsonStr) ? new LineDataRangeFilter() : JSONObject.parseObject(dataRangeFilterJsonStr, LineDataRangeFilter.class);
}
}
package com.hisense.dataservice.entity.convert;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.persistence.AttributeConverter;
/**
* @author : scc
* @date : 2023/02/20
* 关联表关系转换器
**/
public class TableRelationsAttributeConvert implements AttributeConverter<JSONObject, String> {
@Override
public String convertToDatabaseColumn(JSONObject tableRelations) {
return CollectionUtils.isEmpty(tableRelations) ? "" : JSONObject.toJSONString(tableRelations);
}
@Override
public JSONObject convertToEntityAttribute(String tableRelationJsonStr) {
return StringUtils.isEmpty(tableRelationJsonStr) ? new JSONObject() : JSONObject.parseObject(tableRelationJsonStr);
}
}
package com.hisense.dataservice.enums;
/**
* @author : scc
* @date : 2023/02/20
* 字段类型
* TODO 根据数据源配置不同的数据类型
**/
public enum FieldTypeEnum {
STRING,
INTEGER,
LONG,
DATE,
TIMESTAMP,
DOUBLE;
}
...@@ -21,7 +21,7 @@ public interface DataApiColumnRepository extends JpaRepository<DataApiColumn,Lon ...@@ -21,7 +21,7 @@ public interface DataApiColumnRepository extends JpaRepository<DataApiColumn,Lon
// 根据数据表ID查询所有的列信息 // 根据数据表ID查询所有的列信息
List<DataApiColumn> findAllByDataTableIdAndDeletedIsFalse(Long dataTableId); List<DataApiColumn> findAllByDataTableIdAndDeletedIsFalse(Long dataTableId);
Optional<DataApiColumn> findByDataTableIdAndIdDeletedIsFalse(Long dataTableId, Long id); Optional<DataApiColumn> findByDataTableIdAndIdAndDeletedIsFalse(Long dataTableId, Long id);
Page<DataApiColumn> findAll(Specification specification, Pageable pageable); Page<DataApiColumn> findAll(Specification specification, Pageable pageable);
......
...@@ -25,7 +25,7 @@ public interface DataApiTableRepository extends JpaRepository<DataApiTable,Long> ...@@ -25,7 +25,7 @@ public interface DataApiTableRepository extends JpaRepository<DataApiTable,Long>
// 根据数据源ID查询所有的数据表 // 根据数据源ID查询所有的数据表
List<DataApiTable> findAllByDataSourceIdAndDeletedIsFalse(Long dataSourceId); List<DataApiTable> findAllByDataSourceIdAndDeletedIsFalse(Long dataSourceId);
Optional<DataApiTable> findAllByDataSourceIdAndIdDeletedIsFalse(Long dataSourceId, Long id); Optional<DataApiTable> findAllByDataSourceIdAndIdAndDeletedIsFalse(Long dataSourceId, Long id);
Page<DataApiTable> findAll(Specification specification, Pageable pageable); Page<DataApiTable> findAll(Specification specification, Pageable pageable);
......
...@@ -7,24 +7,27 @@ ...@@ -7,24 +7,27 @@
*/ */
package com.hisense.dataservice.repository; package com.hisense.dataservice.repository;
import com.hisense.dataservice.entity.PublishApplication;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
@Repository @Repository
public interface PublishApplicationRepository{ public interface PublishApplicationRepository extends JpaRepository<PublishApplication, Integer> {
@Query(value ="SELECT " + @Query(value = "SELECT " +
"app.system" + "app.system " +
"FROM publish_application app " + "FROM publish_application app " +
"WHERE app.USER_KEY = :userKey", nativeQuery=true) "WHERE app.user_key = :userKey", nativeQuery = true)
List<Integer> findAllByUserKey(@Param("userKey") String userKey); List<Integer> findAllByUserKey(@Param("userKey") String userKey);
@Query(value ="SELECT " + @Query(value = "SELECT " +
"app.system" + "app.system " +
"FROM publish_application app " + "FROM publish_application app " +
"WHERE app.app_id = :appId and app.app_key = :appkey", nativeQuery=true) "WHERE app.app_id = :appId and app.app_key = :appKey", nativeQuery = true)
List<Integer> findAllByAppIdAndAppKey(@Param("appId") String appId, @Param("appKey") String appKey); List<Integer> findAllByAppIdAndAppKey(@Param("appId") String appId, @Param("appKey") String appKey);
} }
...@@ -10,5 +10,5 @@ import javax.servlet.http.HttpServletRequest; ...@@ -10,5 +10,5 @@ import javax.servlet.http.HttpServletRequest;
**/ **/
public interface DataApiCommonService { public interface DataApiCommonService {
Object queryData(String environment, String pattern, HttpServletRequest request); Object queryData(String environment, String pattern, String apiId, HttpServletRequest request);
} }
package com.hisense.dataservice.service; package com.hisense.dataservice.service;
import com.alibaba.fastjson.JSONObject;
import com.hisense.dataservice.dto.DataApiModelDto; import com.hisense.dataservice.dto.DataApiModelDto;
import com.hisense.dataservice.library.model.Result; import com.hisense.dataservice.library.model.Result;
...@@ -14,4 +15,7 @@ public interface DataApiServiceManagementService extends BaseService { ...@@ -14,4 +15,7 @@ public interface DataApiServiceManagementService extends BaseService {
// 创建或修改未发布的数据api服务(草稿状态) // 创建或修改未发布的数据api服务(草稿状态)
Result<Long> createDataApi(String environment, DataApiModelDto dataApiModelDto); Result<Long> createDataApi(String environment, DataApiModelDto dataApiModelDto);
Result<JSONObject> debugDataApiService(String environment, Long dataModelId);
} }
...@@ -77,7 +77,7 @@ public class DataApiCommonServiceImpl implements DataApiCommonService { ...@@ -77,7 +77,7 @@ public class DataApiCommonServiceImpl implements DataApiCommonService {
return null; return null;
} }
@Override @Override
public Object queryData(String environment, String pattern, HttpServletRequest request) { public Object queryData(String environment, String pattern, String apiId, HttpServletRequest request) {
// TODO 区分数据库连接异常和服务本身异常,保存到ES中 // TODO 区分数据库连接异常和服务本身异常,保存到ES中
...@@ -112,7 +112,6 @@ public class DataApiCommonServiceImpl implements DataApiCommonService { ...@@ -112,7 +112,6 @@ public class DataApiCommonServiceImpl implements DataApiCommonService {
jsonResult.put("message", "获取订阅系统失败!"); jsonResult.put("message", "获取订阅系统失败!");
return jsonResult; return jsonResult;
} }
String apiId = request.getParameter("apiId");
Optional<DataApiModel> dataApiModelOptional = dataApiModelRepository.findByApiID(apiId); Optional<DataApiModel> dataApiModelOptional = dataApiModelRepository.findByApiID(apiId);
if (!dataApiModelOptional.isPresent()) { if (!dataApiModelOptional.isPresent()) {
......
...@@ -10,7 +10,6 @@ import com.hisense.dataservice.repository.*; ...@@ -10,7 +10,6 @@ import com.hisense.dataservice.repository.*;
import com.hisense.dataservice.service.DataApiServiceManagementService; import com.hisense.dataservice.service.DataApiServiceManagementService;
import com.hisense.dataservice.util.ThreadPoolManagerUtil; import com.hisense.dataservice.util.ThreadPoolManagerUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.common.UUIDs;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
...@@ -151,6 +150,15 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage ...@@ -151,6 +150,15 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
if (null == modelId) { if (null == modelId) {
// 新建--设置数据服务相关基础配置 // 新建--设置数据服务相关基础配置
dataApiModel = new DataApiModel(); dataApiModel = new DataApiModel();
if(null == dataApiModelDto.getNetworkEnv()){
return failure("网络环境不能为空", null);
}
if(null == dataApiModelDto.getSystemEnv()){
return failure("系统环境不能为空", null);
}
if(null == dataApiModelDto.getPublishSystemId()){
return failure("发布系统ID不能为空", null);
}
dataApiModel.setNetworkEnv(NetworkEnv.valueOf(dataApiModelDto.getNetworkEnv())); dataApiModel.setNetworkEnv(NetworkEnv.valueOf(dataApiModelDto.getNetworkEnv()));
dataApiModel.setSystemEnv(SystemEnv.valueOf(dataApiModelDto.getSystemEnv())); dataApiModel.setSystemEnv(SystemEnv.valueOf(dataApiModelDto.getSystemEnv()));
dataApiModel.setPublishSystemId(dataApiModelDto.getPublishSystemId()); dataApiModel.setPublishSystemId(dataApiModelDto.getPublishSystemId());
...@@ -188,6 +196,9 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage ...@@ -188,6 +196,9 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
// 设置表之间关联关系 // 设置表之间关联关系
List<TableJoinRelationConfig> tableJoinRelationConfig = dataApiModelDto.getTableJoinRelationConfig(); List<TableJoinRelationConfig> tableJoinRelationConfig = dataApiModelDto.getTableJoinRelationConfig();
if (!CollectionUtils.isEmpty(tableJoinRelationConfig)) { if (!CollectionUtils.isEmpty(tableJoinRelationConfig)) {
if(!isRightTableRelationAndSetName(dataSourceId, tableJoinRelationConfig)){
return failure("多个数据表关系配置不正确", modelId);
}
dataApiModel.setTableJoinRelationConfig(tableJoinRelationConfig); dataApiModel.setTableJoinRelationConfig(tableJoinRelationConfig);
} }
// 保存数据api服务 // 保存数据api服务
...@@ -208,6 +219,7 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage ...@@ -208,6 +219,7 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
} }
Boolean checkFilterResult; Boolean checkFilterResult;
dataSourceId = dataApiModel.getDataSourceId(); // 在次获取最新的数据源ID
// 保存列筛选条件 // 保存列筛选条件
List<ColumnDataRangeFilter> columnDataRangeConfigs = dataApiModelDto.getColumnDataRangeConfig(); List<ColumnDataRangeFilter> columnDataRangeConfigs = dataApiModelDto.getColumnDataRangeConfig();
if (!CollectionUtils.isEmpty(columnDataRangeConfigs)) { if (!CollectionUtils.isEmpty(columnDataRangeConfigs)) {
...@@ -236,8 +248,9 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage ...@@ -236,8 +248,9 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
for (ColumnDataRangeFilter columnDataRangeFilter : columnDataRangeFilters) { for (ColumnDataRangeFilter columnDataRangeFilter : columnDataRangeFilters) {
List<DataColumn> fields = columnDataRangeFilter.getFields(); List<DataColumn> fields = columnDataRangeFilter.getFields();
Long tableId = columnDataRangeFilter.getTableId(); Long tableId = columnDataRangeFilter.getTableId();
Optional<DataApiTable> dataApiTableOptional = dataApiTableRepository.findAllByDataSourceIdAndIdDeletedIsFalse(dataSourceId, tableId); Optional<DataApiTable> dataApiTableOptional = dataApiTableRepository.findAllByDataSourceIdAndIdAndDeletedIsFalse(dataSourceId, tableId);
if(!dataApiTableOptional.isPresent()){ if(!dataApiTableOptional.isPresent()){
log.warn("数据表:【tableId:{}】不存在", tableId);
return Boolean.FALSE; return Boolean.FALSE;
} }
DataApiTable dataApiTable = dataApiTableOptional.get(); DataApiTable dataApiTable = dataApiTableOptional.get();
...@@ -249,7 +262,7 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage ...@@ -249,7 +262,7 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
Long id = field.getId(); Long id = field.getId();
String columnName = columnIdToNameMap.get(id); String columnName = columnIdToNameMap.get(id);
if(StringUtils.isEmpty(columnName)){ if(StringUtils.isEmpty(columnName)){
log.info("数据列:【id:{},name:{}】不存在表:【{}】中", id, columnName, tableId); log.warn("数据列:【id:{},name:{}】不存在表:【{}】中", id, columnName, tableId);
return Boolean.FALSE; return Boolean.FALSE;
} }
field.setColumnName(columnName); // 设置表名 field.setColumnName(columnName); // 设置表名
...@@ -262,8 +275,9 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage ...@@ -262,8 +275,9 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
private Boolean isRightLineConfigAndSetNameField(Long dataSourceId, List<LineDataRangeFilter> lineDataRangeFilters){ private Boolean isRightLineConfigAndSetNameField(Long dataSourceId, List<LineDataRangeFilter> lineDataRangeFilters){
for (LineDataRangeFilter lineDataRangeFilter : lineDataRangeFilters) { for (LineDataRangeFilter lineDataRangeFilter : lineDataRangeFilters) {
Long tableId = lineDataRangeFilter.getTableId(); Long tableId = lineDataRangeFilter.getTableId();
Optional<DataApiTable> dataApiTableOptional = dataApiTableRepository.findAllByDataSourceIdAndIdDeletedIsFalse(dataSourceId, tableId); Optional<DataApiTable> dataApiTableOptional = dataApiTableRepository.findAllByDataSourceIdAndIdAndDeletedIsFalse(dataSourceId, tableId);
if(!dataApiTableOptional.isPresent()){ if(!dataApiTableOptional.isPresent()){
log.warn("数据表:【tableId:{}】不存在", tableId);
return Boolean.FALSE; return Boolean.FALSE;
} }
DataApiTable dataApiTable = dataApiTableOptional.get(); DataApiTable dataApiTable = dataApiTableOptional.get();
...@@ -272,8 +286,9 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage ...@@ -272,8 +286,9 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
filterCondition.setTableName(dataApiTable.getTableName()); // 设置表名 filterCondition.setTableName(dataApiTable.getTableName()); // 设置表名
filterCondition.setTableId(dataApiTable.getId()); // 设置表ID filterCondition.setTableId(dataApiTable.getId()); // 设置表ID
DataColumn field = filterCondition.getField(); DataColumn field = filterCondition.getField();
Optional<DataApiColumn> dataApiColumnOptional = dataApiColumnRepository.findByDataTableIdAndIdDeletedIsFalse(dataApiTable.getId(), field.getId()); Optional<DataApiColumn> dataApiColumnOptional = dataApiColumnRepository.findByDataTableIdAndIdAndDeletedIsFalse(dataApiTable.getId(), field.getId());
if(!dataApiColumnOptional.isPresent()){ if(!dataApiColumnOptional.isPresent()){
log.warn("数据表:【tableId:{}】不存在数据字段:【columnId: {}】", tableId, field.getId());
return Boolean.FALSE; return Boolean.FALSE;
} }
DataApiColumn dataApiColumn = dataApiColumnOptional.get(); DataApiColumn dataApiColumn = dataApiColumnOptional.get();
...@@ -284,6 +299,36 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage ...@@ -284,6 +299,36 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
return Boolean.TRUE; return Boolean.TRUE;
} }
// 表关系配置检查
private Boolean isRightTableRelationAndSetName(Long dataSourceId, List<TableJoinRelationConfig> tableJoinRelationConfigs){
DataApiTable dataApiTable;
DataApiColumn dataApiColumn;
Long tableId;
Long columnId;
Optional<DataApiTable> dataApiTableOptional;
Optional<DataApiColumn> dataApiColumnOptional;
for (TableJoinRelationConfig tableJoinRelationConfig : tableJoinRelationConfigs) {
tableId = tableJoinRelationConfig.getTableId();
columnId = tableJoinRelationConfig.getColumnId();
dataApiTableOptional = dataApiTableRepository.findAllByDataSourceIdAndIdAndDeletedIsFalse(dataSourceId, tableId);
if(!dataApiTableOptional.isPresent()){
log.warn("数据表:【tableId:{}】不存在", tableId);
return Boolean.FALSE;
}
dataApiTable = dataApiTableOptional.get();
tableJoinRelationConfig.setTableName(dataApiTable.getTableName());
dataApiColumnOptional = dataApiColumnRepository.findByDataTableIdAndIdAndDeletedIsFalse(dataApiTable.getId(), columnId);
if(!dataApiColumnOptional.isPresent()){
log.warn("数据表:【tableId:{}】不存在数据字段:【columnId:{}】", tableId, columnId);
return Boolean.FALSE;
}
dataApiColumn = dataApiColumnOptional.get();
tableJoinRelationConfig.setColumnName(dataApiColumn.getFieldName());
}
return Boolean.TRUE;
}
public Result<JSONObject> debugDataApiService(String environment, Long dataModelId){ public Result<JSONObject> debugDataApiService(String environment, Long dataModelId){
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
...@@ -292,13 +337,14 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage ...@@ -292,13 +337,14 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
return failure("调试数据api服务失败--数据api服务不存在", null); return failure("调试数据api服务失败--数据api服务不存在", null);
} }
DataApiModel dataApiModel = dataApiModelOptional.get(); DataApiModel dataApiModel = dataApiModelOptional.get();
if(null == dataApiModel.getDataSourceId()){
return failure("调试数据api服务失败--数据源未配置", null);
}
Optional<DataApiDataSource> dataApiDataSourceOptional = dataApiDataSourceRepository.findById(dataApiModel.getDataSourceId()); Optional<DataApiDataSource> dataApiDataSourceOptional = dataApiDataSourceRepository.findById(dataApiModel.getDataSourceId());
if (dataApiDataSourceOptional.isPresent()) { if (!dataApiDataSourceOptional.isPresent()) {
return failure("调试数据api服务失败--数据源不存在", null); return failure("调试数据api服务失败--数据源不存在", null);
} }
DataApiDataSource dataApiDataSource = dataApiDataSourceOptional.get(); DataApiDataSource dataApiDataSource = dataApiDataSourceOptional.get();
DataSourceTypeEnum dataSourceType = dataApiDataSource.getType();
DataApiModelConfig dataApiModelConfig; DataApiModelConfig dataApiModelConfig;
Optional<DataApiModelConfig> dataApiModelConfigOptional = dataApiModelConfigRepository.findByTypeIdAndType(dataApiModel.getId(), ModelConfigType.PUBLISH); Optional<DataApiModelConfig> dataApiModelConfigOptional = dataApiModelConfigRepository.findByTypeIdAndType(dataApiModel.getId(), ModelConfigType.PUBLISH);
...@@ -306,9 +352,12 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage ...@@ -306,9 +352,12 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
return failure("调试数据api服务失败--行列配置不存在", null); return failure("调试数据api服务失败--行列配置不存在", null);
} }
dataApiModelConfig = dataApiModelConfigOptional.get(); dataApiModelConfig = dataApiModelConfigOptional.get();
List<TableJoinRelationConfig> tableJoinRelationConfig = dataApiModel.getTableJoinRelationConfig(); List<TableJoinRelationConfig> tableJoinRelationConfigs = dataApiModel.getTableJoinRelationConfig();
if(CollectionUtils.isEmpty(tableJoinRelationConfigs)){
return failure("调试数据api服务失败--数据表关系配置不存在", null);
}
String fullSql = dataApiModelConfig.generateAndSetFullSql(tableJoinRelationConfig, dataApiDataSource.getType()); String fullSql = dataApiModelConfig.generateAndSetFullSql(tableJoinRelationConfigs, dataApiDataSource.getType());
if(StringUtils.isEmpty(fullSql)){ if(StringUtils.isEmpty(fullSql)){
return failure("调试数据api服务失败--生成sql失败", null); return failure("调试数据api服务失败--生成sql失败", null);
} }
...@@ -316,15 +365,14 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage ...@@ -316,15 +365,14 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
List<List<Object>> data = new ArrayList<>(); List<List<Object>> data = new ArrayList<>();
try{ try{
data = executeDataQueryTask(fullSql, dataApiModelConfig, dataApiDataSource); data = executeDataQueryTask(fullSql, dataApiModelConfig, dataApiDataSource);
dataApiModel.setDebugStatus(DebugStatusEnum.SUCCESS);
}catch (Exception e){ }catch (Exception e){
log.error("执行数据查询失败:", e); log.error("执行数据查询失败:", e);
dataApiModel.setDebugStatus(DebugStatusEnum.FAIL); dataApiModel.setDebugStatus(DebugStatusEnum.FAIL);
} }
// 设置调试结果 // 设置调试结果
dataApiModel.setDebugStatus(DebugStatusEnum.SUCCESS);
dataApiModelRepository.save(dataApiModel); dataApiModelRepository.save(dataApiModel);
List<List<String>> heads = ColumnDataRangeFilter.generateExcelHead(dataApiModelConfig.getColumnDataRangeConfig()); List<List<String>> heads = ColumnDataRangeFilter.generateExcelHead(dataApiModelConfig.getColumnDataRangeConfig());
result.put("data", data); result.put("data", data);
result.put("heads", heads); result.put("heads", heads);
...@@ -334,11 +382,15 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage ...@@ -334,11 +382,15 @@ public class DataApiServiceManagementServiceImpl implements DataApiServiceManage
private List<List<Object>> executeDataQueryTask(String dataSql, DataApiModelConfig dataApiModelConfig, DataApiDataSource dataSource) throws Exception{ private List<List<Object>> executeDataQueryTask(String dataSql, DataApiModelConfig dataApiModelConfig, DataApiDataSource dataSource) throws Exception{
// 获取sql的填充参数 // 获取sql的填充参数
List<Object> jdbcParamValues = new ArrayList<>(); List<Object> jdbcParamValues = new ArrayList<>();
for (LineDataRangeFilter lineDataRangeFilter : dataApiModelConfig.getLineDataRangeConfig()) { List<LineDataRangeFilter> lineDataRangeConfigs = dataApiModelConfig.getLineDataRangeConfig();
for (FilterCondition filterCondition : lineDataRangeFilter.getFilterConditions()) { if(!CollectionUtils.isEmpty(lineDataRangeConfigs)){
jdbcParamValues.addAll(filterCondition.getFilterValues()); for (LineDataRangeFilter lineDataRangeFilter : lineDataRangeConfigs) {
for (FilterCondition filterCondition : lineDataRangeFilter.getFilterConditions()) {
jdbcParamValues.addAll(filterCondition.getFilterValues());
}
} }
} }
DataSourceTypeEnum dataSourceType = dataSource.getType(); DataSourceTypeEnum dataSourceType = dataSource.getType();
// 封装查询数据任务 // 封装查询数据任务
Long limitFirstValue = 0L; Long limitFirstValue = 0L;
......
...@@ -55,7 +55,7 @@ public class JdbcUtil { ...@@ -55,7 +55,7 @@ public class JdbcUtil {
return new Result<>(jsonObjects); return new Result<>(jsonObjects);
} }
public static Result<List<JSONObject>> executeSql(DataApiDataSource datasource, String sql, List<Object> jdbcParamValues, Integer batchSize) { public static Result<List<JSONObject>> executeSql(DataApiDataSource datasource, String sql, List<Object> jdbcParamValues, Integer batchSize) throws Exception {
String threadName = Thread.currentThread().getName(); String threadName = Thread.currentThread().getName();
...@@ -102,10 +102,13 @@ public class JdbcUtil { ...@@ -102,10 +102,13 @@ public class JdbcUtil {
return new Result("200", "查询成功", result); return new Result("200", "查询成功", result);
} catch (SQLException sqlException) { } catch (SQLException sqlException) {
log.error("[{}] 数据库连接失败:", datasource.getSourceName(), sqlException); log.error("[{}] 数据库连接失败:", datasource.getSourceName(), sqlException);
return new Result("600", sqlException.getMessage(), result); // TODO 记录到ES
throw new SQLException("数据库连接失败");
// return new Result("600", sqlException.getMessage(), result);
} catch (Exception e) { } catch (Exception e) {
log.error("thread: {}, sql: {}, params: {}, 分页查询数据异常:", threadName, sql, jdbcParamValues, e); log.error("thread: {}, sql: {}, params: {}, 分页查询数据异常:", threadName, sql, jdbcParamValues, e);
return new Result("500", e.getMessage(), result); throw new SQLException("分页查询数据异常");
// return new Result("500", e.getMessage(), result);
} finally { } finally {
try { try {
if (connection != null) if (connection != null)
......
...@@ -2,7 +2,6 @@ package com.hisense.dataservice.repository; ...@@ -2,7 +2,6 @@ package com.hisense.dataservice.repository;
import com.hisense.dataservice.DataServiceApplication; import com.hisense.dataservice.DataServiceApplication;
import com.hisense.dataservice.entity.DataApiColumn; import com.hisense.dataservice.entity.DataApiColumn;
import com.hisense.dataservice.enums.FieldTypeEnum;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -25,7 +24,7 @@ public class DataApiColumnRepositoryTest { ...@@ -25,7 +24,7 @@ public class DataApiColumnRepositoryTest {
DataApiColumn dataApiColumn = new DataApiColumn(); DataApiColumn dataApiColumn = new DataApiColumn();
dataApiColumn.setDataTableId(1L); dataApiColumn.setDataTableId(1L);
dataApiColumn.setFieldName("id"); dataApiColumn.setFieldName("id");
dataApiColumn.setFiledType(FieldTypeEnum.LONG); dataApiColumn.setFiledType("LONG");
dataApiColumnRepository.save(dataApiColumn); dataApiColumnRepository.save(dataApiColumn);
} }
} }
...@@ -56,7 +56,7 @@ public class DataApiCommonServiceTest { ...@@ -56,7 +56,7 @@ public class DataApiCommonServiceTest {
Long dataApiSubscribeConfigId; Long dataApiSubscribeConfigId;
DataApiModel dataApiModel = new DataApiModel(); DataApiModel dataApiModel = new DataApiModel();
dataApiModel.setApiID(1); dataApiModel.setApiID("1");
dataApiModel.setNetworkEnv(NetworkEnv.INNER); dataApiModel.setNetworkEnv(NetworkEnv.INNER);
dataApiModel.setSystemEnv(SystemEnv.DEV); dataApiModel.setSystemEnv(SystemEnv.DEV);
dataApiModel.setDataSourceId(1L); dataApiModel.setDataSourceId(1L);
...@@ -165,7 +165,7 @@ public class DataApiCommonServiceTest { ...@@ -165,7 +165,7 @@ public class DataApiCommonServiceTest {
dataApiModelConfigIds.add(dataApiModelConfigRepository.save(dataApiModelConfig2).getId()); dataApiModelConfigIds.add(dataApiModelConfigRepository.save(dataApiModelConfig2).getId());
// 执行业务 // 执行业务
JSONObject jsonObject = (JSONObject) dataApiModelService.queryData("test", "tttt"); JSONObject jsonObject = (JSONObject) dataApiModelService.queryData("test", "tttt","1",null);
// 清理数据 // 清理数据
cleanTestData(dataApiModelId, dataApiModelConfigIds, dataApiSubscribeConfigId); cleanTestData(dataApiModelId, dataApiModelConfigIds, dataApiSubscribeConfigId);
...@@ -340,7 +340,6 @@ public class DataApiCommonServiceTest { ...@@ -340,7 +340,6 @@ public class DataApiCommonServiceTest {
lineDataRangeFilters.add(lineDataRangeFilter2); lineDataRangeFilters.add(lineDataRangeFilter2);
dataApiModelDto.setLineDataRangeConfig(lineDataRangeFilters); dataApiModelDto.setLineDataRangeConfig(lineDataRangeFilters);
dataApiModelDto.setApiID(1);
dataApiModelDto.setModelName("testModelName"); dataApiModelDto.setModelName("testModelName");
dataApiModelDto.setNetworkEnv(NetworkEnv.INNER.name()); dataApiModelDto.setNetworkEnv(NetworkEnv.INNER.name());
dataApiModelDto.setSystemEnv(SystemEnv.DEV.name()); dataApiModelDto.setSystemEnv(SystemEnv.DEV.name());
...@@ -348,7 +347,7 @@ public class DataApiCommonServiceTest { ...@@ -348,7 +347,7 @@ public class DataApiCommonServiceTest {
dataApiModelDto.setDataSourceId(1L); dataApiModelDto.setDataSourceId(1L);
try { try {
dataApiModelService.createOrUpdateDataApi(dataApiModelDto); // dataApiModelService.publishDataApi(dataApiModelDto);
} catch (Exception e) { } catch (Exception e) {
log.error("创建或更新数据服务api失败:" , e); log.error("创建或更新数据服务api失败:" , e);
} }
...@@ -472,7 +471,6 @@ public class DataApiCommonServiceTest { ...@@ -472,7 +471,6 @@ public class DataApiCommonServiceTest {
lineDataRangeFilters.add(lineDataRangeFilter2); lineDataRangeFilters.add(lineDataRangeFilter2);
dataApiModelDto.setLineDataRangeConfig(lineDataRangeFilters); dataApiModelDto.setLineDataRangeConfig(lineDataRangeFilters);
dataApiModelDto.setApiID(1);
dataApiModelDto.setModelId(429l); dataApiModelDto.setModelId(429l);
dataApiModelDto.setNetworkEnv(NetworkEnv.INNER.name()); dataApiModelDto.setNetworkEnv(NetworkEnv.INNER.name());
dataApiModelDto.setSystemEnv(SystemEnv.DEV.name()); dataApiModelDto.setSystemEnv(SystemEnv.DEV.name());
......
package com.hisense.dataservice.service;
import com.alibaba.fastjson.JSONObject;
import com.hisense.dataservice.DataServiceApplication;
import com.hisense.dataservice.bo.ColumnDataRangeFilter;
import com.hisense.dataservice.bo.DataColumn;
import com.hisense.dataservice.bo.TableJoinRelationConfig;
import com.hisense.dataservice.dto.DataApiModelDto;
import com.hisense.dataservice.enums.NetworkEnv;
import com.hisense.dataservice.enums.SystemEnv;
import com.hisense.dataservice.library.model.Result;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
/**
* @author : scc
* @date : 2023/03/15
**/
@Slf4j
@SpringBootTest(classes = DataServiceApplication.class)
@RunWith(SpringRunner.class)
public class DataApiServiceManagementServiceTest {
@Autowired
private DataApiServiceManagementService dataApiServiceManagementService;
@Test
public void testCreateDataApi(){
Result<Long> result1 = dataApiServiceManagementService.createDataApi("test", buildModelDtoForServiceCreate());
Assert.assertNotNull(result1.getData());
log.info("执行第一步结果:{}", result1);
DataApiModelDto dataApiModelDto = buildModelDtoForSourceConfigWithSingleTable();
dataApiModelDto.setModelId(result1.getData());
Result<Long> result2 = dataApiServiceManagementService.createDataApi("test", dataApiModelDto);
Assert.assertNotNull(result2.getData());
log.info("执行第二步结果:{}", result2);
dataApiModelDto = buildModelDtoDataColumnConfigWithSingleTable();
dataApiModelDto.setModelId(result2.getData());
Result<Long> result3 = dataApiServiceManagementService.createDataApi("test", dataApiModelDto);
log.info("执行第三步结果:{}", result3);
Result<Boolean> result4 = dataApiServiceManagementService.publishDataApi("test", result3.getData());
log.info("执行第四步结果,发布api:{}", result4);
Assert.assertEquals(false, result4.getData());
Result<JSONObject> result5 = dataApiServiceManagementService.debugDataApiService("test", result3.getData());
log.info("执行第五步结果,调试api:{}", result5);
Assert.assertEquals(false, result5.getData());
}
private DataApiModelDto buildModelDtoForServiceCreate(){
DataApiModelDto dataApiModelDto = new DataApiModelDto();
dataApiModelDto.setModelName("测试模式名称");
dataApiModelDto.setDesc("测试模式描述");
dataApiModelDto.setNetworkEnv(NetworkEnv.INNER.name());
dataApiModelDto.setSystemEnv(SystemEnv.DEV.name());
dataApiModelDto.setPublishSystemId(1L);
return dataApiModelDto;
}
// 单表
private DataApiModelDto buildModelDtoForSourceConfigWithSingleTable(){
DataApiModelDto dataApiModelDto = new DataApiModelDto();
dataApiModelDto.setDataSourceId(1L);
TableJoinRelationConfig tableJoinRelationConfig1 = new TableJoinRelationConfig();
tableJoinRelationConfig1.setTableId(1L);
tableJoinRelationConfig1.setColumnId(2L);
List<TableJoinRelationConfig> tableJoinRelationConfigs = new ArrayList<>();
tableJoinRelationConfigs.add(tableJoinRelationConfig1);
dataApiModelDto.setTableJoinRelationConfig(tableJoinRelationConfigs);
return dataApiModelDto;
}
// 多表配置关系
private DataApiModelDto buildModelDtoForSourceConfigWithMutilTable(){
DataApiModelDto dataApiModelDto = new DataApiModelDto();
dataApiModelDto.setDataSourceId(1L);
TableJoinRelationConfig tableJoinRelationConfig1 = new TableJoinRelationConfig();
tableJoinRelationConfig1.setTableId(1L);
tableJoinRelationConfig1.setColumnId(2L);
TableJoinRelationConfig tableJoinRelationConfig2 = new TableJoinRelationConfig();
tableJoinRelationConfig2.setTableId(2L);
tableJoinRelationConfig2.setColumnId(6L); // TODO 设置不存在的Id测试
List<TableJoinRelationConfig> tableJoinRelationConfigs = new ArrayList<>();
tableJoinRelationConfigs.add(tableJoinRelationConfig1);
tableJoinRelationConfigs.add(tableJoinRelationConfig2);
dataApiModelDto.setTableJoinRelationConfig(tableJoinRelationConfigs);
return dataApiModelDto;
}
private DataApiModelDto buildModelDtoDataColumnConfigWithSingleTable(){
DataApiModelDto dataApiModelDto = new DataApiModelDto();
List<ColumnDataRangeFilter> columnDataRangeFilters = new ArrayList<>();
ColumnDataRangeFilter columnDataRangeFilter = new ColumnDataRangeFilter();
List<DataColumn> dataColumns = new ArrayList<>();
DataColumn dataColumn = new DataColumn();
dataColumn.setId(1L);
dataColumns.add(dataColumn);
dataColumn = new DataColumn();
dataColumn.setId(2L);
dataColumns.add(dataColumn);
dataColumn = new DataColumn();
dataColumn.setId(3L);
dataColumns.add(dataColumn);
columnDataRangeFilter.setTableId(1L);
columnDataRangeFilter.setFields(dataColumns);
columnDataRangeFilters.add(columnDataRangeFilter);
dataApiModelDto.setColumnDataRangeConfig(columnDataRangeFilters);
return dataApiModelDto;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论