refactor:代码重构(表结构分析的过于复杂,优化了表结构)
parent
08dec2fa81
commit
e689771020
|
@ -27,6 +27,7 @@ public class InnerAuthAspect implements Ordered {
|
|||
throw new InnerAuthException("没有内部访问权限,不允许访问");
|
||||
}
|
||||
|
||||
|
||||
String userid = ServletUtils.getRequest().getHeader(SecurityConstants.DETAILS_USER_ID);
|
||||
String username = ServletUtils.getRequest().getHeader(SecurityConstants.DETAILS_USERNAME);
|
||||
// 用户信息验证
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
package com.etl.data.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.etl.common.core.web.domain.BaseEntity;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @ClassName AssetsModel
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/22 10:07
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("assets_model")
|
||||
public class AssetsModel extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
* 资产模型主键id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
/**
|
||||
* 关联表id
|
||||
*/
|
||||
private Long dataTableId;
|
||||
/**
|
||||
* 字段名称
|
||||
*/
|
||||
private String fieldsName;
|
||||
/**
|
||||
* 字段注释
|
||||
*/
|
||||
private String fieldsAnnotation;
|
||||
/**
|
||||
* 是否主键
|
||||
*/
|
||||
private Integer isPrimary;
|
||||
/**
|
||||
* 数据库类型
|
||||
*/
|
||||
private String baseType;
|
||||
/**
|
||||
* java映射类型
|
||||
*/
|
||||
private String javaType;
|
||||
/**
|
||||
* 字段长度
|
||||
*/
|
||||
private Integer fieldsLength;
|
||||
/**
|
||||
* 小数位
|
||||
*/
|
||||
private Integer decimalPlace;
|
||||
/**
|
||||
* 是否为空
|
||||
*/
|
||||
private Integer isEmpty;
|
||||
/**
|
||||
* 默认值
|
||||
*/
|
||||
private String defaultValue;
|
||||
/**
|
||||
* 是否字典
|
||||
*/
|
||||
private Integer isDictionary;
|
||||
/**
|
||||
* 映射字典
|
||||
*/
|
||||
private String reflectionDictionary;
|
||||
/**
|
||||
* 以防万一,在加一个表名
|
||||
*/
|
||||
private String tableName;
|
||||
}
|
|
@ -1,9 +1,8 @@
|
|||
package com.etl.data.source.domain;
|
||||
package com.etl.data.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.etl.common.core.annotation.Excel;
|
||||
import com.etl.common.core.web.domain.BaseEntity;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
|
@ -11,103 +10,82 @@ import lombok.EqualsAndHashCode;
|
|||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
|
||||
/**
|
||||
* 数据源信息对象 data_source
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-21
|
||||
* @ClassName DataSource
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 11:36
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@SuperBuilder
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("data_source")
|
||||
public class DataSource extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
@TableId( type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 数据源名称
|
||||
* 数据类型
|
||||
*/
|
||||
@Excel(name = "数据源名称")
|
||||
private String dataSourceName;
|
||||
|
||||
private String name;
|
||||
/**
|
||||
* 数据源系统名称
|
||||
* 数据来源系统
|
||||
*/
|
||||
@Excel(name = "数据源系统名称")
|
||||
private String dataSourceSystemName;
|
||||
|
||||
/**
|
||||
* 数据源类型
|
||||
*/
|
||||
@Excel(name = "数据源类型")
|
||||
private String fromSystem;
|
||||
private Long typeId;
|
||||
|
||||
/**
|
||||
* 数据源ip地址
|
||||
* 数据源连接ip
|
||||
*/
|
||||
@Excel(name = "数据源ip地址")
|
||||
private String dataSourceIp;
|
||||
|
||||
/**
|
||||
* 端口号
|
||||
* 数据源连接端口号
|
||||
*/
|
||||
@Excel(name = "端口号")
|
||||
private String dataSourcePort;
|
||||
|
||||
/**
|
||||
* 连接数据库名称
|
||||
* 数据源连接库名称
|
||||
*/
|
||||
@Excel(name = "连接数据库名称")
|
||||
private String dataSourceDatabaseName;
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
* 数据连接用户名
|
||||
*/
|
||||
private String dataSourceUsername;
|
||||
|
||||
/**
|
||||
* 密码
|
||||
* 数据源连接密码
|
||||
*/
|
||||
private String dataSourcePassword;
|
||||
|
||||
/**
|
||||
* 额外配置
|
||||
* 数据源额外配置
|
||||
*/
|
||||
private String additionalConfiguration;
|
||||
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
@Excel(name = "状态")
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 初始化连接数量
|
||||
*/
|
||||
private Long initialNumberOfConnections;
|
||||
|
||||
private Integer initialNumberOfConnections;
|
||||
/**
|
||||
* 最大连接数量
|
||||
*/
|
||||
private Long maximumNumberOfConnections;
|
||||
|
||||
private Integer maximumNumberOfConnections;
|
||||
/**
|
||||
* 最大等待时间
|
||||
*/
|
||||
private Long maximumWaitingTime;
|
||||
|
||||
private Integer maximumWaitingTime;
|
||||
/**
|
||||
* 最大等待次数
|
||||
*/
|
||||
private Long maximumWaitingTimes;
|
||||
private Integer maximumWaitingTimes;
|
||||
/**
|
||||
* 是否同步
|
||||
*/
|
||||
private Integer isSync;
|
||||
|
||||
private Integer tableCount;
|
||||
private Integer dataModelCount;
|
||||
|
||||
}
|
|
@ -1,9 +1,8 @@
|
|||
package com.etl.data.structure.domain;
|
||||
package com.etl.data.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.etl.common.core.annotation.Excel;
|
||||
import com.etl.common.core.web.domain.BaseEntity;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
|
@ -12,44 +11,39 @@ import lombok.NoArgsConstructor;
|
|||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 资产结构对象表 asset_structure_table
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-22
|
||||
* @ClassName DataTable
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/22 10:01
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@SuperBuilder
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("asset_structure_table")
|
||||
public class AssetStructureTable extends BaseEntity {
|
||||
@TableName("data_table")
|
||||
public class DataTable extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
* 逐渐id
|
||||
*/
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 数据资产id
|
||||
* 数据来源id
|
||||
*/
|
||||
@Excel(name = "数据资产id")
|
||||
private Long assetStructureId;
|
||||
|
||||
private Long dataSourceId;
|
||||
/**
|
||||
* 数据资产表
|
||||
* 表名
|
||||
*/
|
||||
@Excel(name = "数据资产表")
|
||||
private String tableName;
|
||||
|
||||
/**
|
||||
* 数据库数据总数
|
||||
* 记录条数
|
||||
*/
|
||||
@Excel(name = "表数据总数")
|
||||
private Long tableDataCount;
|
||||
private Integer recordCount;
|
||||
/**
|
||||
* 表注释
|
||||
*/
|
||||
private String tableAnnotation;
|
||||
|
||||
@Excel(name = "表注释")
|
||||
private String tableNameAnnotation;
|
||||
}
|
|
@ -1,9 +1,8 @@
|
|||
package com.etl.data.type.domain;
|
||||
package com.etl.data.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.etl.common.core.annotation.Excel;
|
||||
import com.etl.common.core.web.domain.BaseEntity;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
|
@ -12,42 +11,20 @@ import lombok.NoArgsConstructor;
|
|||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 数据源类型对象 data_type
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-21
|
||||
* @ClassName DataType
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 11:34
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@SuperBuilder
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("data_type")
|
||||
public class DataType extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 编号
|
||||
*/
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
@TableId( type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 数据源类型
|
||||
*/
|
||||
@Excel(name = "数据源类型")
|
||||
private String dataType;
|
||||
|
||||
/**
|
||||
* 注册驱动
|
||||
*/
|
||||
@Excel(name = "注册驱动")
|
||||
private String driverManager;
|
||||
|
||||
/**
|
||||
* jdbc前缀
|
||||
*/
|
||||
@Excel(name = "jdbc前缀")
|
||||
private String jdbcPre;
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package com.etl.data.domain.decoration;
|
||||
|
||||
import com.etl.data.domain.DataSource;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName DataSourceDecoration
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/23 14:39
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DataSourceDecoration {
|
||||
private DataSource dataSource;
|
||||
private List<DataTableDecoration> dataTableList;
|
||||
private String type;
|
||||
public static DataSourceDecoration dataSourceBuild(DataSource dataSource, List<DataTableDecoration> dataTables){
|
||||
return DataSourceDecoration.builder()
|
||||
.dataSource(dataSource)
|
||||
.type("dataSource")
|
||||
.dataTableList(dataTables)
|
||||
.build();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package com.etl.data.domain.decoration;
|
||||
|
||||
import com.etl.data.domain.DataTable;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @ClassName DataTypeDecoration
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/23 14:40
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DataTableDecoration {
|
||||
private DataTable dataTable;
|
||||
private String type;
|
||||
public static DataTableDecoration dataSourceBuild(DataTable dataTable){
|
||||
return DataTableDecoration.builder()
|
||||
.dataTable(dataTable)
|
||||
.type("dataTable")
|
||||
.build();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.etl.data.domain.model;
|
||||
|
||||
import com.etl.data.domain.DataSource;
|
||||
import com.etl.data.domain.DataTable;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName DataSourceInfo
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/23 14:30
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DataSourceInfo {
|
||||
private DataSource dataSource;
|
||||
private List<DataTable> dataTableList;
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package com.etl.data.domain.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @ClassName DataTest
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/19 20:48
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class NameAndType {
|
||||
private String name;
|
||||
private String type;
|
||||
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.etl.data.domain.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @ClassName Structure
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/21 19:28
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class Structure {
|
||||
private Integer id;
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package com.etl.data.domain.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @ClassName TableInfo
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/21 19:33
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TableInfo {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Long tableId;
|
||||
/**
|
||||
* 表名
|
||||
*/
|
||||
private String tableName;
|
||||
/**
|
||||
* 数据条数
|
||||
*/
|
||||
private Long dataCount;
|
||||
/**
|
||||
* 表注释
|
||||
*/
|
||||
private String dataAnnotation;
|
||||
private String type;
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package com.etl.data.domain.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @ClassName DataSourceQueryReq
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 13:20
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DataSourceQueryReq {
|
||||
private String fromSystem;
|
||||
private String name;
|
||||
private String dataSourceDatabaseName;
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package com.etl.data.domain.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @ClassName QueryTableReq
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/21 11:58
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class QueryTableReq {
|
||||
private Long typeId;
|
||||
private String dataSourceIp;
|
||||
private String dataSourcePort;
|
||||
private String dataSourceDatabaseName;
|
||||
private String dataSourceUsername;
|
||||
private String dataSourcePassword;
|
||||
private String additionalConfiguration;
|
||||
private String tableName;
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package com.etl.data.domain.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @ClassName TableStructureQueryReq
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/21 22:22
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TableStructureQueryReq {
|
||||
private Long id;
|
||||
private Long typeId;
|
||||
private String dataType;
|
||||
private String dataSourceIp;
|
||||
private String dataSourcePort;
|
||||
private String dataSourceDatabaseName;
|
||||
private String dataSourceUsername;
|
||||
private String dataSourcePassword;
|
||||
private String additionalConfiguration;
|
||||
private String status;
|
||||
private Integer initialNumberOfConnections;
|
||||
private Integer maximumNumberOfConnections;
|
||||
private Integer maximumWaitingTime;
|
||||
private Integer maximumWaitingTimes;
|
||||
private String name;
|
||||
private String fromSystem;
|
||||
private String remark;
|
||||
private String tableName;
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package com.etl.data.domain.resp;
|
||||
|
||||
import com.etl.data.domain.AssetsModel;
|
||||
import com.etl.data.domain.DataTable;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName AssetsModelResp
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/23 20:38
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class AssetsModelResp {
|
||||
private DataTable dataTable;
|
||||
private List<AssetsModel> assetsModelList;
|
||||
public static AssetsModelResp dataTableAndAssetsModelBuild(DataTable dTable,List<AssetsModel> assetsModels){
|
||||
return AssetsModelResp.builder()
|
||||
.dataTable(dTable)
|
||||
.assetsModelList(assetsModels)
|
||||
.build();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
package com.etl.data.domain.resp;
|
||||
|
||||
import com.etl.data.domain.DataSource;
|
||||
import com.etl.data.domain.DataType;
|
||||
import com.etl.data.domain.req.TableStructureQueryReq;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName DataSourceResp
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 11:42
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DataSourceResp {
|
||||
private Long id;
|
||||
private Long typeId;
|
||||
private String dataType;
|
||||
private String dataSourceIp;
|
||||
private String dataSourcePort;
|
||||
private String dataSourceDatabaseName;
|
||||
private String dataSourceUsername;
|
||||
private String dataSourcePassword;
|
||||
private String additionalConfiguration;
|
||||
private String status;
|
||||
private Integer initialNumberOfConnections;
|
||||
private Integer maximumNumberOfConnections;
|
||||
private Integer maximumWaitingTime;
|
||||
private Integer maximumWaitingTimes;
|
||||
private String name;
|
||||
private String fromSystem;
|
||||
private String remark;
|
||||
private Integer isSync;
|
||||
private List<DataSpliceParam> dataSpliceParamList;
|
||||
public static DataSourceResp buildDataSourceResp(List<DataSpliceParam> dataSpliceParams, DataSource dataSource, DataType dataType){
|
||||
return DataSourceResp.builder()
|
||||
.id(dataSource.getId())
|
||||
.typeId(dataType.getId())
|
||||
.dataType(dataType.getDataType())
|
||||
.dataSourceIp(dataSource.getDataSourceIp())
|
||||
.dataSourcePort(dataSource.getDataSourcePort())
|
||||
.dataSourceDatabaseName(dataSource.getDataSourceDatabaseName())
|
||||
.dataSourceUsername(dataSource.getDataSourceUsername())
|
||||
.dataSourcePassword(dataSource.getDataSourcePassword())
|
||||
.additionalConfiguration(dataSource.getAdditionalConfiguration())
|
||||
.status(dataSource.getStatus())
|
||||
.initialNumberOfConnections(dataSource.getInitialNumberOfConnections())
|
||||
.maximumNumberOfConnections(dataSource.getMaximumNumberOfConnections())
|
||||
.maximumWaitingTime(dataSource.getMaximumWaitingTime())
|
||||
.maximumWaitingTimes(dataSource.getMaximumWaitingTimes())
|
||||
.dataSpliceParamList(dataSpliceParams)
|
||||
.name(dataSource.getName())
|
||||
.fromSystem(dataSource.getFromSystem())
|
||||
.remark(dataSource.getRemark())
|
||||
.isSync(dataSource.getIsSync())
|
||||
.build();
|
||||
}
|
||||
public static DataSourceResp tableStructureQueryReqBuild(TableStructureQueryReq dataSource){
|
||||
return DataSourceResp.builder()
|
||||
.id(dataSource.getId())
|
||||
.typeId(dataSource.getTypeId())
|
||||
.dataType(dataSource.getDataType())
|
||||
.dataSourceIp(dataSource.getDataSourceIp())
|
||||
.dataSourcePort(dataSource.getDataSourcePort())
|
||||
.dataSourceDatabaseName(dataSource.getDataSourceDatabaseName())
|
||||
.dataSourceUsername(dataSource.getDataSourceUsername())
|
||||
.dataSourcePassword(dataSource.getDataSourcePassword())
|
||||
.additionalConfiguration(dataSource.getAdditionalConfiguration())
|
||||
.status(dataSource.getStatus())
|
||||
.initialNumberOfConnections(dataSource.getInitialNumberOfConnections())
|
||||
.maximumNumberOfConnections(dataSource.getMaximumNumberOfConnections())
|
||||
.maximumWaitingTime(dataSource.getMaximumWaitingTime())
|
||||
.maximumWaitingTimes(dataSource.getMaximumWaitingTimes())
|
||||
.dataSpliceParamList(null)
|
||||
.name(dataSource.getName())
|
||||
.fromSystem(dataSource.getFromSystem())
|
||||
.remark(dataSource.getRemark())
|
||||
.build();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package com.etl.data.domain.resp;
|
||||
|
||||
import com.etl.data.domain.decoration.DataSourceDecoration;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName DataSourceTableResp
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/21 19:39
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DataSourceTableResp {
|
||||
/**
|
||||
* 数据源和表的层级结构
|
||||
*/
|
||||
private List<DataSourceDecoration> dataSourceDecorationList;
|
||||
/**
|
||||
* 系统中所有已经接入的表数量
|
||||
*/
|
||||
private Integer allTableCount;
|
||||
/**
|
||||
* 系统中所有已经接入的数据模型(字段)数量
|
||||
*/
|
||||
private Integer allDataModelCount;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package com.etl.data.domain.resp;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @ClassName DataSpliceParam
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 12:28
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DataSpliceParam {
|
||||
private String paramName;
|
||||
private String paramValue;
|
||||
}
|
|
@ -1,147 +0,0 @@
|
|||
package com.etl.data.source.domain.resp;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.etl.common.core.annotation.Excel;
|
||||
import com.etl.common.core.web.domain.BaseEntity;
|
||||
import com.etl.data.source.domain.DataSource;
|
||||
import com.etl.data.type.domain.DataType;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 数据源信息对象 data_source
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-21
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@SuperBuilder
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("data_source")
|
||||
public class DataSourceResp extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 数据源名称
|
||||
*/
|
||||
@Excel(name = "数据源名称")
|
||||
private String dataSourceName;
|
||||
|
||||
/**
|
||||
* 数据源系统名称
|
||||
*/
|
||||
@Excel(name = "数据源系统名称")
|
||||
private String dataSourceSystemName;
|
||||
|
||||
/**
|
||||
* 数据源类型
|
||||
*/
|
||||
@Excel(name = "数据源类型")
|
||||
private Long typeId;
|
||||
|
||||
|
||||
@Excel(name = "数据源类型")
|
||||
private String dataType;
|
||||
|
||||
/**
|
||||
* 数据源ip地址
|
||||
*/
|
||||
@Excel(name = "数据源ip地址")
|
||||
private String dataSourceIp;
|
||||
|
||||
/**
|
||||
* 端口号
|
||||
*/
|
||||
@Excel(name = "端口号")
|
||||
private String dataSourcePort;
|
||||
|
||||
/**
|
||||
* 连接数据库名称
|
||||
*/
|
||||
@Excel(name = "连接数据库名称")
|
||||
private String dataSourceDatabaseName;
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
@Excel(name = "用户名")
|
||||
private String dataSourceUsername;
|
||||
|
||||
/**
|
||||
* 密码
|
||||
*/
|
||||
@Excel(name = "密码")
|
||||
private String dataSourcePassword;
|
||||
|
||||
/**
|
||||
* 额外配置
|
||||
*/
|
||||
@Excel(name = "额外配置")
|
||||
private String additionalConfiguration;
|
||||
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
@Excel(name = "状态")
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 初始化连接数量
|
||||
*/
|
||||
@Excel(name = "初始化连接数量")
|
||||
private Long initialNumberOfConnections;
|
||||
|
||||
/**
|
||||
* 最大连接数量
|
||||
*/
|
||||
@Excel(name = "最大连接数量")
|
||||
private Long maximumNumberOfConnections;
|
||||
|
||||
/**
|
||||
* 最大等待时间
|
||||
*/
|
||||
@Excel(name = "最大等待时间")
|
||||
private Long maximumWaitingTime;
|
||||
|
||||
/**
|
||||
* 最大等待次数
|
||||
*/
|
||||
@Excel(name = "最大等待次数")
|
||||
private Long maximumWaitingTimes;
|
||||
|
||||
|
||||
public static DataSourceResp dataSourceBuilder(DataSource source, DataType dataType) {
|
||||
return DataSourceResp.builder()
|
||||
.id(source.getId())
|
||||
.dataSourceName(source.getDataSourceName())
|
||||
.dataSourceSystemName(source.getDataSourceSystemName())
|
||||
.typeId(source.getTypeId())
|
||||
.dataType(dataType.getDataType())
|
||||
.dataSourceIp(source.getDataSourceIp())
|
||||
.dataSourcePort(source.getDataSourcePort())
|
||||
.dataSourceDatabaseName(source.getDataSourceDatabaseName())
|
||||
.dataSourceUsername(source.getDataSourceUsername())
|
||||
.dataSourcePassword(source.getDataSourcePassword())
|
||||
.additionalConfiguration(source.getAdditionalConfiguration())
|
||||
.status(source.getStatus())
|
||||
.initialNumberOfConnections(source.getInitialNumberOfConnections())
|
||||
.maximumNumberOfConnections(source.getMaximumNumberOfConnections())
|
||||
.maximumWaitingTime(source.getMaximumWaitingTime())
|
||||
.maximumWaitingTimes(source.getMaximumWaitingTimes())
|
||||
.remark(source.getRemark())
|
||||
.build();
|
||||
}
|
||||
}
|
|
@ -1,73 +0,0 @@
|
|||
package com.etl.data.structure.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.etl.common.core.web.domain.BaseEntity;
|
||||
import com.etl.data.source.domain.DataSource;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 资产结构对象 asset_structure
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-22
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@SuperBuilder
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("asset_structure")
|
||||
public class AssetStructure extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 数据源id
|
||||
*/
|
||||
private Long dataSourceSystemId;
|
||||
|
||||
/**
|
||||
* 数据源名称
|
||||
*/
|
||||
private String dataSourceName;
|
||||
|
||||
/**
|
||||
* 数据源系统名称
|
||||
*/
|
||||
private String dataSourceSystemName;
|
||||
|
||||
/**
|
||||
* 连接数据库名称
|
||||
*/
|
||||
private String dataSourceDatabaseName;
|
||||
|
||||
public static AssetStructure dataSourceSaveBuilder(Long id, DataSource dataSource) {
|
||||
return AssetStructure.builder()
|
||||
.dataSourceSystemId(id)
|
||||
.dataSourceName(dataSource.getDataSourceName())
|
||||
.dataSourceSystemName(dataSource.getDataSourceSystemName())
|
||||
.dataSourceDatabaseName(dataSource.getDataSourceDatabaseName())
|
||||
.build();
|
||||
}
|
||||
|
||||
public static AssetStructure dataSourceUpdateBuilder(AssetStructure assetStructure, Long id, DataSource dataSource) {
|
||||
return AssetStructure.builder()
|
||||
.id(assetStructure.getId())
|
||||
.dataSourceSystemId(id)
|
||||
.dataSourceName(dataSource.getDataSourceName())
|
||||
.dataSourceSystemName(dataSource.getDataSourceSystemName())
|
||||
.dataSourceDatabaseName(dataSource.getDataSourceDatabaseName())
|
||||
.build();
|
||||
}
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
package com.etl.data.structure.domain.resp;
|
||||
|
||||
import com.etl.data.structure.domain.AssetStructure;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据资产返回类
|
||||
*
|
||||
* @author Chao
|
||||
* @ClassName: AssetStructureResp 数据资产返回类
|
||||
* @CreateTime: 2024/4/22 下午7:23
|
||||
*/
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@SuperBuilder
|
||||
public class AssetStructureResp {
|
||||
|
||||
/**
|
||||
* 数据资产
|
||||
*/
|
||||
private List<AssetStructure> assetStructureList;
|
||||
|
||||
/**
|
||||
* 数据资产表总数
|
||||
*/
|
||||
private Long assetStructureTableCount;
|
||||
|
||||
/**
|
||||
* 数据资产表数据总数
|
||||
*/
|
||||
private Long assetStructureTableDataCount;
|
||||
|
||||
|
||||
}
|
|
@ -9,7 +9,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|||
/**
|
||||
* 数据源模块
|
||||
*
|
||||
* @author Chao
|
||||
* @author YunFei
|
||||
*/
|
||||
@EnableCustomConfig
|
||||
@EnableCustomSwagger2
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
package com.etl.data.controller;
|
||||
|
||||
import com.etl.common.core.domain.Result;
|
||||
import com.etl.common.core.web.controller.BaseController;
|
||||
import com.etl.data.domain.resp.AssetsModelResp;
|
||||
import com.etl.data.service.AssetsModelService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName AssetsModelController
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/23 20:08
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/assets")
|
||||
public class AssetsModelController extends BaseController {
|
||||
@Autowired
|
||||
private AssetsModelService assetsModelService;
|
||||
|
||||
//查找所有的数据模型
|
||||
@PostMapping("/getAssetsModelList")
|
||||
public Result<List<AssetsModelResp>> getAssetsModelListByTableIds(@RequestBody List<Integer> tableIds){
|
||||
return assetsModelService.getAssetsModelListByTableIds(tableIds);
|
||||
}
|
||||
@GetMapping("/getAssetsModelByDataTableId")
|
||||
public Result<AssetsModelResp> getAssetsModelByDataTableId(@RequestParam Integer id){
|
||||
return assetsModelService.getAssetsModelByDataTableId(id);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
package com.etl.data.controller;
|
||||
|
||||
import com.etl.common.core.domain.Result;
|
||||
import com.etl.common.core.web.controller.BaseController;
|
||||
import com.etl.common.security.utils.SecurityUtils;
|
||||
import com.etl.data.domain.DataSource;
|
||||
import com.etl.data.domain.req.DataSourceQueryReq;
|
||||
import com.etl.data.domain.req.TableStructureQueryReq;
|
||||
import com.etl.data.domain.resp.DataSourceResp;
|
||||
import com.etl.data.domain.resp.DataSourceTableResp;
|
||||
import com.etl.data.service.DataSourceService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName DataSourceController
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 11:06
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/source")
|
||||
public class DataSourceController extends BaseController {
|
||||
@Autowired
|
||||
private DataSourceService dataSourceService;
|
||||
|
||||
@PostMapping("/list")
|
||||
public Result getDataSourceList (@RequestBody DataSourceQueryReq dataSourceQueryReq) {
|
||||
List<DataSourceResp> list = dataSourceService.list(dataSourceQueryReq);
|
||||
return success(list);
|
||||
}
|
||||
@PostMapping("/insertDataSource")
|
||||
public Result insertDataSource(@RequestBody DataSource dataSource){
|
||||
if (dataSource.getId() != null){
|
||||
dataSource.setUpdateBy(SecurityUtils.getUsername());
|
||||
dataSource.setUpdateTime(new Date());
|
||||
dataSourceService.updateById(dataSource);
|
||||
}else {
|
||||
dataSource.setCreateBy(SecurityUtils.getUsername());
|
||||
dataSource.setCreateTime(new Date());
|
||||
dataSourceService.save(dataSource);
|
||||
}
|
||||
return success();
|
||||
}
|
||||
@PostMapping("/testConnect")
|
||||
public Result testConnect(@RequestBody DataSourceResp dataSourceResp){
|
||||
return dataSourceService.testConnect(dataSourceResp);
|
||||
}
|
||||
|
||||
@PostMapping("/queryBigStructure")
|
||||
public Result<DataSourceTableResp> queryStructure(){
|
||||
return dataSourceService.queryBigStructure();
|
||||
}
|
||||
|
||||
@PostMapping("/queryTableStructure")
|
||||
public Result queryTableStructure(@RequestBody TableStructureQueryReq tableStructureQueryReq){
|
||||
return dataSourceService.queryTableStructure(tableStructureQueryReq);
|
||||
}
|
||||
//数据同步
|
||||
@PostMapping("/dataSynchronization")
|
||||
public Result dataSynchronization(@RequestBody DataSourceResp dataSourceResp){
|
||||
return dataSourceService.dataSynchronization(dataSourceResp);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package com.etl.data.controller;
|
||||
|
||||
import com.etl.common.core.domain.Result;
|
||||
import com.etl.common.core.web.controller.BaseController;
|
||||
import com.etl.data.domain.DataType;
|
||||
import com.etl.data.service.DataTypeService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName DataTypeController
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 12:55
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/dataType")
|
||||
public class DataTypeController extends BaseController {
|
||||
@Autowired
|
||||
private DataTypeService dataTypeService;
|
||||
|
||||
/**
|
||||
* 查询所有类型
|
||||
*/
|
||||
@GetMapping("/getAllDataType")
|
||||
public Result<List<DataType>> getAllDataList(){
|
||||
List<DataType> list = dataTypeService.list();
|
||||
return Result.success(list);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.etl.data.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.etl.data.domain.AssetsModel;
|
||||
|
||||
/**
|
||||
* @ClassName AssetsModelMapper
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/22 14:37
|
||||
*/
|
||||
public interface AssetsModelMapper extends BaseMapper<AssetsModel> {
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.etl.data.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.etl.data.domain.DataSource;
|
||||
|
||||
/**
|
||||
* @ClassName DataSourceMapper
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 11:46
|
||||
*/
|
||||
public interface DataSourceMapper extends BaseMapper<DataSource> {
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.etl.data.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.etl.data.domain.DataTable;
|
||||
|
||||
/**
|
||||
* @ClassName DataTableMapper
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/22 14:35
|
||||
*/
|
||||
public interface DataTableMapper extends BaseMapper<DataTable> {
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.etl.data.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.etl.data.domain.DataType;
|
||||
|
||||
/**
|
||||
* @ClassName DataSourceMapper
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 11:46
|
||||
*/
|
||||
public interface DataTypeMapper extends BaseMapper<DataType> {
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.etl.data.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.etl.common.core.domain.Result;
|
||||
import com.etl.data.domain.AssetsModel;
|
||||
import com.etl.data.domain.resp.AssetsModelResp;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName AssetsModelService
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/22 14:39
|
||||
*/
|
||||
public interface AssetsModelService extends IService<AssetsModel> {
|
||||
Result<List<AssetsModelResp>> getAssetsModelListByTableIds(List<Integer> tableIds);
|
||||
|
||||
Result<AssetsModelResp> getAssetsModelByDataTableId(Integer id);
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package com.etl.data.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.etl.common.core.domain.Result;
|
||||
import com.etl.data.domain.DataSource;
|
||||
import com.etl.data.domain.req.DataSourceQueryReq;
|
||||
import com.etl.data.domain.req.TableStructureQueryReq;
|
||||
import com.etl.data.domain.resp.DataSourceResp;
|
||||
import com.etl.data.domain.resp.DataSourceTableResp;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName DataMansgerService
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 11:48
|
||||
*/
|
||||
public interface DataSourceService extends IService<DataSource> {
|
||||
List<DataSourceResp> list(DataSourceQueryReq dataSourceQueryReq);
|
||||
|
||||
Result testConnect(DataSourceResp dataSourceResp);
|
||||
|
||||
|
||||
Result queryTableStructure(TableStructureQueryReq tableStructureQueryReq);
|
||||
|
||||
Result<DataSourceTableResp> queryBigStructure();
|
||||
|
||||
Result dataSynchronization(DataSourceResp dataSourceResp);
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.etl.data.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.etl.data.domain.DataTable;
|
||||
|
||||
/**
|
||||
* @ClassName DataTableService
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/22 14:36
|
||||
*/
|
||||
public interface DataTableService extends IService<DataTable> {
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.etl.data.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.etl.data.domain.DataType;
|
||||
|
||||
/**
|
||||
* @ClassName DataMansgerService
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 11:48
|
||||
*/
|
||||
public interface DataTypeService extends IService<DataType> {
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package com.etl.data.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.etl.common.core.domain.Result;
|
||||
import com.etl.data.domain.AssetsModel;
|
||||
import com.etl.data.domain.DataTable;
|
||||
import com.etl.data.domain.resp.AssetsModelResp;
|
||||
import com.etl.data.mapper.AssetsModelMapper;
|
||||
import com.etl.data.service.AssetsModelService;
|
||||
import com.etl.data.service.DataTableService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName AssetsModelServiceImpl
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/22 14:39
|
||||
*/
|
||||
@Service
|
||||
public class AssetsModelServiceImpl extends ServiceImpl<AssetsModelMapper, AssetsModel> implements AssetsModelService {
|
||||
@Autowired
|
||||
private DataTableService dataTableService;
|
||||
@Override
|
||||
public Result<List<AssetsModelResp>> getAssetsModelListByTableIds(List<Integer> tableId) {
|
||||
ArrayList<AssetsModelResp> assetsModelRespArrayList = new ArrayList<>();
|
||||
//查询数据表
|
||||
LambdaQueryWrapper<DataTable> dataTableLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
dataTableLambdaQueryWrapper.in(DataTable::getId,tableId);
|
||||
List<DataTable> dataTableList = dataTableService.list(dataTableLambdaQueryWrapper);
|
||||
//查询所有的数据模型
|
||||
for (DataTable dataTable : dataTableList) {
|
||||
LambdaQueryWrapper<AssetsModel> assetsModelLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
assetsModelLambdaQueryWrapper.eq(AssetsModel::getDataTableId,dataTable.getId());
|
||||
List<AssetsModel> assetsModelList = this.list(assetsModelLambdaQueryWrapper);
|
||||
assetsModelRespArrayList.add(AssetsModelResp.dataTableAndAssetsModelBuild(dataTable,assetsModelList));
|
||||
}
|
||||
return Result.success(assetsModelRespArrayList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<AssetsModelResp> getAssetsModelByDataTableId(Integer tableId) {
|
||||
DataTable dataTable = dataTableService.getById(tableId);
|
||||
LambdaQueryWrapper<AssetsModel> assetsModelLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
assetsModelLambdaQueryWrapper.eq(AssetsModel::getDataTableId,dataTable.getId());
|
||||
List<AssetsModel> assetsModelList = this.list(assetsModelLambdaQueryWrapper);
|
||||
AssetsModelResp assetsModelResp = AssetsModelResp.dataTableAndAssetsModelBuild(dataTable, assetsModelList);
|
||||
return Result.success(assetsModelResp);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,407 @@
|
|||
package com.etl.data.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.etl.common.core.domain.Result;
|
||||
import com.etl.common.security.utils.SecurityUtils;
|
||||
import com.etl.data.domain.AssetsModel;
|
||||
import com.etl.data.domain.DataSource;
|
||||
import com.etl.data.domain.DataTable;
|
||||
import com.etl.data.domain.DataType;
|
||||
import com.etl.data.domain.decoration.DataSourceDecoration;
|
||||
import com.etl.data.domain.decoration.DataTableDecoration;
|
||||
import com.etl.data.domain.req.DataSourceQueryReq;
|
||||
import com.etl.data.domain.req.TableStructureQueryReq;
|
||||
import com.etl.data.domain.resp.DataSourceResp;
|
||||
import com.etl.data.domain.resp.DataSourceTableResp;
|
||||
import com.etl.data.domain.resp.DataSpliceParam;
|
||||
import com.etl.data.mapper.DataSourceMapper;
|
||||
import com.etl.data.service.AssetsModelService;
|
||||
import com.etl.data.service.DataSourceService;
|
||||
import com.etl.data.service.DataTableService;
|
||||
import com.etl.data.service.DataTypeService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* @ClassName DataSourceServiceImpl
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 11:49
|
||||
*/
|
||||
@Service
|
||||
public class DataSourceServiceImpl extends ServiceImpl<DataSourceMapper, DataSource> implements DataSourceService {
|
||||
|
||||
@Autowired
|
||||
private DataTypeService dataTypeService;
|
||||
@Autowired
|
||||
private DataTableService dataTableService;
|
||||
@Autowired
|
||||
private AssetsModelService assetsModelService;
|
||||
|
||||
@Override
|
||||
public List<DataSourceResp> list(DataSourceQueryReq dataSourceQueryReq) {
|
||||
|
||||
LambdaQueryWrapper<DataSource> dataSourceLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
if (dataSourceQueryReq.getFromSystem() != null && !"".equals(dataSourceQueryReq.getFromSystem())) {
|
||||
dataSourceLambdaQueryWrapper.eq(DataSource::getFromSystem, dataSourceQueryReq.getFromSystem());
|
||||
}
|
||||
if (dataSourceQueryReq.getDataSourceDatabaseName() != null && !"".equals(dataSourceQueryReq.getDataSourceDatabaseName())) {
|
||||
dataSourceLambdaQueryWrapper.eq(DataSource::getDataSourceDatabaseName, dataSourceQueryReq.getDataSourceDatabaseName());
|
||||
}
|
||||
if (dataSourceQueryReq.getName() != null && !"".equals(dataSourceQueryReq.getName())) {
|
||||
dataSourceLambdaQueryWrapper.eq(DataSource::getName, dataSourceQueryReq.getName());
|
||||
}
|
||||
List<DataSource> list = this.list(dataSourceLambdaQueryWrapper);
|
||||
ArrayList<DataSourceResp> dataSourceRespList = new ArrayList<>();
|
||||
//切割参数数据
|
||||
for (DataSource dataSource : list) {
|
||||
//查询数据源类型表
|
||||
DataType byId = dataTypeService.getById(dataSource.getTypeId());
|
||||
String additionalConfiguration = dataSource.getAdditionalConfiguration();
|
||||
String[] split = additionalConfiguration.split("&");
|
||||
ArrayList<DataSpliceParam> dataSpliceParams = new ArrayList<>();
|
||||
for (String s : split) {
|
||||
String[] strings = s.split("=");
|
||||
DataSpliceParam dataSpliceParam = new DataSpliceParam(strings[0], strings[1]);
|
||||
dataSpliceParams.add(dataSpliceParam);
|
||||
}
|
||||
DataSourceResp dataSourceResp = DataSourceResp.buildDataSourceResp(dataSpliceParams, dataSource, byId);
|
||||
dataSourceRespList.add(dataSourceResp);
|
||||
}
|
||||
return dataSourceRespList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result testConnect(DataSourceResp dataSourceResp) {
|
||||
String username = dataSourceResp.getDataSourceUsername(); //用户名
|
||||
String password = dataSourceResp.getDataSourcePassword();//密码
|
||||
String dbName = dataSourceResp.getDataSourceDatabaseName(); //数据库名
|
||||
System.out.println("数据库名:" + dbName);
|
||||
Integer dbType = Math.toIntExact(dataSourceResp.getTypeId()); //数据库类型 1-mysql,2-oracle,3-postgressql
|
||||
String dbIp = dataSourceResp.getDataSourceIp(); //数据库地址
|
||||
String dbPort = dataSourceResp.getDataSourcePort(); //端口
|
||||
String dbIpPort = dbIp + ":" + dbPort;
|
||||
String driveClass;
|
||||
String jdbcUrl;
|
||||
try {
|
||||
|
||||
switch (dbType) {
|
||||
case 1:
|
||||
// mysql数据库
|
||||
driveClass = "com.mysql.cj.jdbc.Driver";
|
||||
jdbcUrl = "jdbc:mysql://" + dbIpPort + "/" + dbName
|
||||
+ "?serverTimezone=Asia/Shanghai&serverTimezone=Asia/Shanghai" +
|
||||
"&useSSL=false&useUnicode=true&characterEncoding=UTF-8";
|
||||
break;
|
||||
case 2:
|
||||
// oracle数据库
|
||||
driveClass = "oracle.jdbc.OracleDriver";
|
||||
jdbcUrl = "jdbc:oracle:thin:@" + dbIpPort + ":" + dbName;
|
||||
break;
|
||||
default:
|
||||
// PostgreSQL数据库
|
||||
driveClass = "org.postgresql.Driver";
|
||||
jdbcUrl = "jdbc:postgresql://" + dbIpPort + "/" + dbName;
|
||||
}
|
||||
boolean b = testDatasource(driveClass, jdbcUrl, username, password);
|
||||
System.out.println(b);
|
||||
if (!b) {
|
||||
return Result.error("连接失败");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return Result.error("连接失败");
|
||||
}
|
||||
return Result.success("连接成功", "连接成功");
|
||||
}
|
||||
|
||||
public Connection queryStructure(DataSourceResp dataSourceResp, String infoDataBaseName) {
|
||||
try {
|
||||
//
|
||||
String username = dataSourceResp.getDataSourceUsername(); //用户名
|
||||
String password = dataSourceResp.getDataSourcePassword();//密码
|
||||
String dbName = infoDataBaseName == null ? dataSourceResp.getDataSourceDatabaseName() : infoDataBaseName; //数据库名
|
||||
System.out.println("数据库名:" + dbName);
|
||||
Integer dbType = Math.toIntExact(dataSourceResp.getTypeId()); //数据库类型 1-mysql,2-oracle,3-postgressql
|
||||
String dbIp = dataSourceResp.getDataSourceIp(); //数据库地址
|
||||
String dbPort = dataSourceResp.getDataSourcePort(); //端口
|
||||
String dbIpPort = dbIp + ":" + dbPort;
|
||||
String driveClass;
|
||||
String jdbcUrl;
|
||||
//
|
||||
driveClass = "com.mysql.cj.jdbc.Driver";
|
||||
jdbcUrl = "jdbc:mysql://" + dbIpPort + "/" + dbName
|
||||
+ "?serverTimezone=Asia/Shanghai&serverTimezone=Asia/Shanghai" +
|
||||
"&useSSL=false&useUnicode=true&characterEncoding=UTF-8";
|
||||
|
||||
Class.forName(driveClass);
|
||||
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
|
||||
return connection;
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result queryTableStructure(TableStructureQueryReq tableStructureQueryReq) {
|
||||
DataSourceResp dataSourceResp = DataSourceResp.tableStructureQueryReqBuild(tableStructureQueryReq);
|
||||
Connection getAssetsConnection = queryStructure(dataSourceResp, null);
|
||||
try {
|
||||
DatabaseMetaData metaData = getAssetsConnection.getMetaData();
|
||||
System.out.println("要查询的表名:" + tableStructureQueryReq.getTableName());
|
||||
ResultSet pkInfo = metaData.getPrimaryKeys(tableStructureQueryReq.getDataSourceDatabaseName(), "%", tableStructureQueryReq.getTableName());
|
||||
System.out.println(pkInfo == null);
|
||||
while (pkInfo.next()) {
|
||||
System.out.print("数据库名称:" + pkInfo.getString("TABLE_CAT") + " ");
|
||||
System.out.print("表名称:" + pkInfo.getString("TABLE_NAME") + " ");
|
||||
System.out.print("主键列的名称:" + pkInfo.getString("COLUMN_NAME") + " ");
|
||||
System.out.print("类型:" + pkInfo.getString("PK_NAME") + " ");
|
||||
System.out.println("");
|
||||
}
|
||||
System.out.println("------------------------------分隔符--------------------------------------------");
|
||||
// 获取表的相对应的列的名字
|
||||
ResultSet tableInfo = metaData.getColumns(tableStructureQueryReq.getDataSourceDatabaseName(), "%", tableStructureQueryReq.getTableName(), "%");
|
||||
while (tableInfo.next()) {
|
||||
// 表的名字
|
||||
System.out.print("表名:" + tableInfo.getString("TABLE_NAME") + " ");
|
||||
// 列的名称
|
||||
System.out.print("列名:" + tableInfo.getString("COLUMN_NAME") + " ");
|
||||
// 默认值
|
||||
System.out.print("默认值 :" + tableInfo.getString("COLUMN_DEF") + " ");
|
||||
// 字段的类型
|
||||
System.out.print("字段的类型:" + tableInfo.getString("TYPE_NAME") + " ");
|
||||
// 是否可以为空
|
||||
System.out.print("是否可以为空:" + tableInfo.getString("IS_NULLABLE") + " ");
|
||||
// 是否为自增
|
||||
System.out.print("是否为自增:" + tableInfo.getString("IS_AUTOINCREMENT") + " ");
|
||||
// 字段说明
|
||||
System.out.print("字段说明:" + tableInfo.getString("REMARKS") + " ");
|
||||
// 长度(有时候是错的)
|
||||
System.out.print("长度:" + tableInfo.getString("COLUMN_SIZE") + " ");
|
||||
System.out.println();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<DataSourceTableResp> queryBigStructure() {
|
||||
Integer allTableCount = 0;
|
||||
Integer allDataModelCount = 0;
|
||||
//创建数据源装饰着对象结合
|
||||
ArrayList<DataSourceDecoration> dataSourceDecorations = new ArrayList<>();
|
||||
//获取所有数据源
|
||||
List<DataSource> dataSourceList = this.list();
|
||||
for (DataSource dataSource : dataSourceList) {
|
||||
LambdaQueryWrapper<DataTable> dataTableLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
dataTableLambdaQueryWrapper.eq(DataTable::getDataSourceId,dataSource.getId());
|
||||
//数据表装饰对象
|
||||
ArrayList<DataTableDecoration> dataTableDecorations = new ArrayList<>();
|
||||
List<DataTable> dataTableList = dataTableService.list(dataTableLambdaQueryWrapper);
|
||||
for (DataTable dataTable : dataTableList) {
|
||||
dataTableDecorations.add(DataTableDecoration.dataSourceBuild(dataTable));
|
||||
}
|
||||
dataSourceDecorations.add(DataSourceDecoration.dataSourceBuild(dataSource, dataTableDecorations));
|
||||
allTableCount = dataSource.getTableCount() + allTableCount;
|
||||
allDataModelCount = dataSource.getDataModelCount() + allDataModelCount;
|
||||
|
||||
}
|
||||
|
||||
return Result.success(DataSourceTableResp.builder()
|
||||
.allDataModelCount(allDataModelCount)
|
||||
.allTableCount(allTableCount)
|
||||
.dataSourceDecorationList(dataSourceDecorations)
|
||||
.build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result dataSynchronization(DataSourceResp dataSourceResp) {
|
||||
//获取所有表,根据数据源id'
|
||||
LambdaQueryWrapper<DataTable> dataTableLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
dataTableLambdaQueryWrapper.eq(DataTable::getDataSourceId,dataSourceResp.getId());
|
||||
List<DataTable> dataTableList = dataTableService.list(dataTableLambdaQueryWrapper);
|
||||
//获取所有的根据此数据源存储的表id
|
||||
List<Long> dataTableIdList = dataTableList.stream().map(DataTable::getId).toList();
|
||||
//根据表id获取所有的模型记录
|
||||
if (dataTableIdList != null && dataTableIdList.size()!=0){
|
||||
LambdaQueryWrapper<AssetsModel> assetsModelLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
assetsModelLambdaQueryWrapper.in(AssetsModel::getDataTableId,dataTableIdList);
|
||||
List<AssetsModel> OldAssetsModelList = assetsModelService.list(assetsModelLambdaQueryWrapper);
|
||||
//获取所有的数据模型记录
|
||||
List<Long> assetsModelIdList = OldAssetsModelList.stream().map(AssetsModel::getId).toList();
|
||||
//删除所有源表
|
||||
dataTableService.removeBatchByIds(dataTableIdList);
|
||||
if (assetsModelIdList != null && assetsModelIdList.size() !=0){
|
||||
//删除所有模型
|
||||
assetsModelService.removeBatchByIds(assetsModelIdList);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
//链接数据库对象
|
||||
Connection connectionGetCount = queryStructure(dataSourceResp, null);
|
||||
ArrayList<DataTable> tableInfos = new ArrayList<>();
|
||||
Connection connection = queryStructure(dataSourceResp, "information_schema");
|
||||
String queryTableSql = "select TABLE_NAME as 'tableName',TABLE_COMMENT as 'dataAnnotation' from `TABLES` t where TABLE_SCHEMA = '" + dataSourceResp.getDataSourceDatabaseName() + "'";
|
||||
PreparedStatement preparedStatement = connection.prepareStatement(queryTableSql);
|
||||
ResultSet resultSet = preparedStatement.executeQuery();
|
||||
while (resultSet.next()) {
|
||||
String tableName = resultSet.getString("tableName");
|
||||
String dataAnnotation = resultSet.getString("dataAnnotation");
|
||||
|
||||
String queryTableDataCount = "SELECT count(1) FROM " + tableName;
|
||||
PreparedStatement preparedStatementCount = connectionGetCount.prepareStatement(queryTableDataCount);
|
||||
ResultSet resultSetCount = preparedStatementCount.executeQuery();
|
||||
while (resultSetCount.next()) {
|
||||
tableInfos.add(DataTable.builder()
|
||||
.id(null)
|
||||
.tableName(tableName)
|
||||
.dataSourceId(dataSourceResp.getId())
|
||||
.createBy(SecurityUtils.getUsername())
|
||||
.createTime(new Date())
|
||||
.recordCount(resultSetCount.getInt(1))
|
||||
.tableAnnotation(dataAnnotation)
|
||||
.build());
|
||||
}
|
||||
}
|
||||
dataTableService.saveBatch(tableInfos);
|
||||
Connection getAssetsConnection = queryStructure(dataSourceResp, null);
|
||||
ArrayList<AssetsModel> assetsModelList = new ArrayList<>();
|
||||
for (DataTable tableInfo : tableInfos) {
|
||||
DatabaseMetaData metaData = getAssetsConnection.getMetaData();
|
||||
ResultSet pkInfo = metaData.getPrimaryKeys(dataSourceResp.getDataSourceDatabaseName(), "%", tableInfo.getTableName());
|
||||
|
||||
System.out.println(pkInfo == null);
|
||||
String primaryString = "";
|
||||
|
||||
while (pkInfo.next()) {
|
||||
primaryString = pkInfo.getString("COLUMN_NAME");
|
||||
}
|
||||
System.out.println("------------------------------分隔符--------------------------------------------");
|
||||
// 获取表的相对应的列的名字
|
||||
ResultSet assetsInfo = metaData.getColumns(dataSourceResp.getDataSourceDatabaseName(), "%", tableInfo.getTableName(), "%");
|
||||
|
||||
String queryTableDataCount = "SELECT * FROM " + tableInfo.getTableName();
|
||||
PreparedStatement preparedStatementCount = connectionGetCount.prepareStatement(queryTableDataCount);
|
||||
ResultSet resultSetCount = preparedStatementCount.executeQuery();
|
||||
|
||||
while (assetsInfo.next()) {
|
||||
// 表的名字
|
||||
String tableName = assetsInfo.getString("TABLE_NAME");
|
||||
// 列的名称
|
||||
String fieldsName = assetsInfo.getString("COLUMN_NAME");
|
||||
String javaType = "";
|
||||
for (int i = 0; i < resultSetCount.getMetaData().getColumnCount(); i++) {
|
||||
String columnName = resultSetCount.getMetaData().getColumnName(i + 1);
|
||||
if (columnName.equals(fieldsName)){
|
||||
javaType = resultSetCount.getMetaData().getColumnClassName(i+1);
|
||||
}
|
||||
}
|
||||
// 默认值
|
||||
String defaultValue = assetsInfo.getString("COLUMN_DEF");
|
||||
// 字段的类型
|
||||
String baseType = assetsInfo.getString("TYPE_NAME");
|
||||
|
||||
// 是否可以为空
|
||||
Integer isEmpty = null;
|
||||
if ("YES".equals(assetsInfo.getString("IS_NULLABLE"))) {
|
||||
isEmpty = 1;
|
||||
} else {
|
||||
isEmpty = 0;
|
||||
}
|
||||
// 字段注释
|
||||
String fieldsAnnotation = assetsInfo.getString("REMARKS");
|
||||
// 长度(有时候是错的)
|
||||
Integer fieldsLength = Integer.valueOf(assetsInfo.getString("COLUMN_SIZE"));
|
||||
//小数位
|
||||
Integer decimalPlace = assetsInfo.getInt("DECIMAL_DIGITS");
|
||||
//是否主键
|
||||
Integer isPrimary = null;
|
||||
if (fieldsName.equals(primaryString)) {
|
||||
isPrimary = 1;
|
||||
} else {
|
||||
isPrimary = 0;
|
||||
}
|
||||
AssetsModel assetsModel = AssetsModel.builder()
|
||||
.decimalPlace(decimalPlace)
|
||||
.dataTableId(tableInfo.getId())
|
||||
.baseType(baseType)
|
||||
.defaultValue(defaultValue)
|
||||
.fieldsAnnotation(fieldsAnnotation)
|
||||
.fieldsLength(fieldsLength)
|
||||
.fieldsName(fieldsName)
|
||||
.tableName(tableName)
|
||||
.isEmpty(isEmpty)
|
||||
.isPrimary(isPrimary)
|
||||
.javaType(javaType)
|
||||
.createBy(SecurityUtils.getUsername())
|
||||
.createTime(new Date())
|
||||
.build();
|
||||
assetsModelList.add(assetsModel);
|
||||
}
|
||||
|
||||
}
|
||||
assetsModelService.saveBatch(assetsModelList);
|
||||
//查询本库中所有的表(资产模型)数量
|
||||
String queryTableCount = "SELECT COUNT(*) TABLES FROM information_schema.TABLES WHERE table_schema = "+"'"+dataSourceResp.getDataSourceDatabaseName()+"'"+" GROUP BY table_schema";
|
||||
PreparedStatement preparedStatementGetTableCount = connection.prepareStatement(queryTableCount);
|
||||
ResultSet resultSetCount = preparedStatementGetTableCount.executeQuery();
|
||||
int tableCount = 0;
|
||||
while (resultSetCount.next()){
|
||||
tableCount = resultSetCount.getInt(1);
|
||||
}
|
||||
//查询本库中所有的字段(数据模型)适量
|
||||
String queryFieldsCount = "SELECT COUNT(column_name) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = "+ "'"+dataSourceResp.getDataSourceDatabaseName()+"'";
|
||||
PreparedStatement preparedStatementGetFieldsCount = connection.prepareStatement(queryFieldsCount);
|
||||
ResultSet resultSetFieldsCount = preparedStatementGetFieldsCount.executeQuery();
|
||||
int fieldsCount = 0;
|
||||
while (resultSetFieldsCount.next()){
|
||||
fieldsCount = resultSetFieldsCount.getInt(1);
|
||||
}
|
||||
//修改数量
|
||||
UpdateWrapper<DataSource> dataSourceUpdateWrapper = new UpdateWrapper<>();
|
||||
dataSourceUpdateWrapper.eq("id",dataSourceResp.getId());
|
||||
dataSourceUpdateWrapper.set("table_count",tableCount);
|
||||
dataSourceUpdateWrapper.set("data_model_count",fieldsCount);
|
||||
this.update(dataSourceUpdateWrapper);
|
||||
} catch (Exception e) {
|
||||
return Result.success(null,"数据同步失败,失败原因"+e.getMessage());
|
||||
}
|
||||
return Result.success(null,"数据同步成功");
|
||||
}
|
||||
|
||||
public static void close(ResultSet rs, PreparedStatement ps, Connection conn) throws Exception {
|
||||
if (rs != null) {
|
||||
rs.close();
|
||||
}
|
||||
if (ps != null) {
|
||||
ps.close();
|
||||
}
|
||||
if (conn != null) {
|
||||
conn.close();
|
||||
}
|
||||
}
|
||||
|
||||
//测试数据源连接是否有效
|
||||
public static boolean testDatasource(String driveClass, String url, String username, String password) {
|
||||
//Result<List<HashMap<String,String>>>
|
||||
try {
|
||||
Class.forName(driveClass);
|
||||
Connection connection = DriverManager.getConnection(url, username, password);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package com.etl.data.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.etl.data.domain.DataTable;
|
||||
import com.etl.data.mapper.DataTableMapper;
|
||||
import com.etl.data.service.DataTableService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @ClassName DataTableServiceImpl
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/22 14:36
|
||||
*/
|
||||
@Service
|
||||
public class DataTableServiceImpl extends ServiceImpl<DataTableMapper, DataTable> implements DataTableService {
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package com.etl.data.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.etl.data.domain.DataType;
|
||||
import com.etl.data.mapper.DataTypeMapper;
|
||||
import com.etl.data.service.DataTypeService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @ClassName DataSourceServiceImpl
|
||||
* @Description 描述
|
||||
* @Author YunFei.Du
|
||||
* @Date 2024/4/20 11:49
|
||||
*/
|
||||
@Service
|
||||
public class DataTypeServiceImpl extends ServiceImpl<DataTypeMapper, DataType> implements DataTypeService {
|
||||
|
||||
}
|
|
@ -1,115 +0,0 @@
|
|||
package com.etl.data.source.controller;
|
||||
|
||||
import com.etl.common.core.domain.Result;
|
||||
import com.etl.common.core.utils.poi.ExcelUtil;
|
||||
import com.etl.common.core.web.controller.BaseController;
|
||||
import com.etl.common.core.web.page.TableDataInfo;
|
||||
import com.etl.common.log.annotation.Log;
|
||||
import com.etl.common.log.enums.BusinessType;
|
||||
import com.etl.common.security.annotation.RequiresPermissions;
|
||||
import com.etl.data.source.domain.DataSource;
|
||||
import com.etl.data.source.domain.resp.DataSourceResp;
|
||||
import com.etl.data.source.service.IDataSourceService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据源信息Controller
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-21
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/source")
|
||||
public class DataSourceController extends BaseController {
|
||||
@Autowired
|
||||
private IDataSourceService dataSourceService;
|
||||
|
||||
/**
|
||||
* 查询数据源信息列表
|
||||
*/
|
||||
@RequiresPermissions("data:source:list")
|
||||
@GetMapping("/list")
|
||||
public Result<TableDataInfo<DataSourceResp>> list(DataSource dataSource) {
|
||||
startPage();
|
||||
List<DataSourceResp> list = dataSourceService.selectDataSourceList(dataSource);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出数据源信息列表
|
||||
*/
|
||||
@RequiresPermissions("data:source:export")
|
||||
@Log(title = "数据源信息", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, DataSource dataSource) {
|
||||
List<DataSourceResp> list = dataSourceService.selectDataSourceList(dataSource);
|
||||
ExcelUtil<DataSourceResp> util = new ExcelUtil<DataSourceResp>(DataSourceResp.class);
|
||||
util.exportExcel(response, list, "数据源信息数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取数据源信息详细信息
|
||||
*/
|
||||
@RequiresPermissions("data:source:query")
|
||||
@GetMapping(value = "/{id}")
|
||||
public Result getInfo(@PathVariable("id") Long id) {
|
||||
return success(dataSourceService.selectDataSourceById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增数据源信息
|
||||
*/
|
||||
@RequiresPermissions("data:source:add")
|
||||
@Log(title = "数据源信息", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public Result add(@RequestBody DataSource dataSource) {
|
||||
return toAjax(dataSourceService.insertDataSource(dataSource));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改数据源信息
|
||||
*/
|
||||
@RequiresPermissions("data:source:edit")
|
||||
@Log(title = "数据源信息", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public Result edit(@RequestBody DataSource dataSource) {
|
||||
return toAjax(dataSourceService.updateDataSource(dataSource));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除数据源信息
|
||||
*/
|
||||
@RequiresPermissions("data:source:remove")
|
||||
@Log(title = "数据源信息", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public Result remove(@PathVariable Long[] ids) {
|
||||
return toAjax(dataSourceService.deleteDataSourceByIds(ids));
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试链接
|
||||
* @param id 数据源id
|
||||
* @return
|
||||
*/
|
||||
@RequiresPermissions("data:source:testConnection")
|
||||
@PostMapping(value = "testConnection/{id}")
|
||||
public Result testConnection(@PathVariable("id") Long id) {
|
||||
return Result.success(dataSourceService.testConnection(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 资产同步
|
||||
* @param id 数据源id
|
||||
* @return
|
||||
*/
|
||||
@RequiresPermissions("data:source:assetSynchronization")
|
||||
@PostMapping(value = "assetSynchronization/{id}")
|
||||
public Result assetSynchronization(@PathVariable("id") Long id) {
|
||||
return Result.success(dataSourceService.assetSynchronization(id));
|
||||
}
|
||||
|
||||
}
|
|
@ -1,62 +0,0 @@
|
|||
package com.etl.data.source.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.etl.data.source.domain.DataSource;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据源信息Mapper接口
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-21
|
||||
*/
|
||||
public interface DataSourceMapper extends BaseMapper<DataSource> {
|
||||
/**
|
||||
* 查询数据源信息
|
||||
*
|
||||
* @param id 数据源信息主键
|
||||
* @return 数据源信息
|
||||
*/
|
||||
public DataSource selectDataSourceById(Long id);
|
||||
|
||||
/**
|
||||
* 查询数据源信息列表
|
||||
*
|
||||
* @param dataSource 数据源信息
|
||||
* @return 数据源信息集合
|
||||
*/
|
||||
public List<DataSource> selectDataSourceList(DataSource dataSource);
|
||||
|
||||
/**
|
||||
* 新增数据源信息
|
||||
*
|
||||
* @param dataSource 数据源信息
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertDataSource(DataSource dataSource);
|
||||
|
||||
/**
|
||||
* 修改数据源信息
|
||||
*
|
||||
* @param dataSource 数据源信息
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateDataSource(DataSource dataSource);
|
||||
|
||||
/**
|
||||
* 删除数据源信息
|
||||
*
|
||||
* @param id 数据源信息主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteDataSourceById(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除数据源信息
|
||||
*
|
||||
* @param ids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteDataSourceByIds(Long[] ids);
|
||||
}
|
|
@ -1,76 +0,0 @@
|
|||
package com.etl.data.source.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.etl.data.source.domain.DataSource;
|
||||
import com.etl.data.source.domain.resp.DataSourceResp;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据源信息Service接口
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-21
|
||||
*/
|
||||
public interface IDataSourceService extends IService<DataSource> {
|
||||
/**
|
||||
* 查询数据源信息
|
||||
*
|
||||
* @param id 数据源信息主键
|
||||
* @return 数据源信息
|
||||
*/
|
||||
public DataSource selectDataSourceById(Long id);
|
||||
|
||||
/**
|
||||
* 查询数据源信息列表
|
||||
*
|
||||
* @param dataSource 数据源信息
|
||||
* @return 数据源信息集合
|
||||
*/
|
||||
public List<DataSourceResp> selectDataSourceList(DataSource dataSource);
|
||||
|
||||
/**
|
||||
* 新增数据源信息
|
||||
*
|
||||
* @param dataSource 数据源信息
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertDataSource(DataSource dataSource);
|
||||
|
||||
/**
|
||||
* 修改数据源信息
|
||||
*
|
||||
* @param dataSource 数据源信息
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateDataSource(DataSource dataSource);
|
||||
|
||||
/**
|
||||
* 批量删除数据源信息
|
||||
*
|
||||
* @param ids 需要删除的数据源信息主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteDataSourceByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 删除数据源信息信息
|
||||
*
|
||||
* @param id 数据源信息主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteDataSourceById(Long id);
|
||||
|
||||
/**
|
||||
* 测试连接
|
||||
* @param id 数据源id
|
||||
*/
|
||||
boolean testConnection(Long id);
|
||||
|
||||
/**
|
||||
* 资产同步
|
||||
* @param id 数据源id
|
||||
* @return
|
||||
*/
|
||||
boolean assetSynchronization(Long id);
|
||||
}
|
|
@ -1,420 +0,0 @@
|
|||
package com.etl.data.source.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.etl.common.core.utils.DateUtils;
|
||||
import com.etl.data.source.domain.DataSource;
|
||||
import com.etl.data.source.domain.resp.DataSourceResp;
|
||||
import com.etl.data.source.mapper.DataSourceMapper;
|
||||
import com.etl.data.source.service.IDataSourceService;
|
||||
import com.etl.data.structure.domain.AssetStructure;
|
||||
import com.etl.data.structure.domain.AssetStructureTable;
|
||||
import com.etl.data.structure.service.IAssetStructureService;
|
||||
import com.etl.data.structure.service.IAssetStructureTableService;
|
||||
import com.etl.data.type.domain.DataType;
|
||||
import com.etl.data.type.service.IDataTypeService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import redis.clients.jedis.Jedis;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据源信息Service业务层处理
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-21
|
||||
*/
|
||||
@Service
|
||||
public class DataSourceServiceImpl extends ServiceImpl<DataSourceMapper, DataSource> implements IDataSourceService {
|
||||
@Autowired
|
||||
private DataSourceMapper dataSourceMapper;
|
||||
|
||||
@Autowired
|
||||
private IDataTypeService dataTypeService;
|
||||
|
||||
@Autowired
|
||||
private IAssetStructureService assetStructureService;
|
||||
|
||||
@Autowired
|
||||
private IAssetStructureTableService assetStructureTableService;
|
||||
|
||||
/**
|
||||
* 查询数据源信息
|
||||
*
|
||||
* @param id 数据源信息主键
|
||||
* @return 数据源信息
|
||||
*/
|
||||
@Override
|
||||
public DataSource selectDataSourceById(Long id) {
|
||||
return dataSourceMapper.selectDataSourceById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询数据源信息列表
|
||||
*
|
||||
* @param dataSource 数据源信息
|
||||
* @return 数据源信息
|
||||
*/
|
||||
@Override
|
||||
public List<DataSourceResp> selectDataSourceList(DataSource dataSource) {
|
||||
List<DataSource> dataSources = dataSourceMapper.selectDataSourceList(dataSource);
|
||||
List<DataType> dataTypeList = dataTypeService.list();
|
||||
List<DataSourceResp> dataSourceResps = new ArrayList<>();
|
||||
dataSources.stream()
|
||||
.flatMap(source ->
|
||||
dataTypeList.stream()
|
||||
.filter(dataType -> dataType.getId().equals(source.getTypeId()))
|
||||
.map(dataType -> DataSourceResp.dataSourceBuilder(source, dataType))
|
||||
).forEach(dataSourceResps::add);
|
||||
return dataSourceResps;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增数据源信息
|
||||
*
|
||||
* @param dataSource 数据源信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertDataSource(DataSource dataSource) {
|
||||
dataSource.setCreateTime(DateUtils.getNowDate());
|
||||
return dataSourceMapper.insertDataSource(dataSource);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改数据源信息
|
||||
*
|
||||
* @param dataSource 数据源信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateDataSource(DataSource dataSource) {
|
||||
dataSource.setUpdateTime(DateUtils.getNowDate());
|
||||
return dataSourceMapper.updateDataSource(dataSource);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除数据源信息
|
||||
*
|
||||
* @param ids 需要删除的数据源信息主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteDataSourceByIds(Long[] ids) {
|
||||
return dataSourceMapper.deleteDataSourceByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除数据源信息信息
|
||||
*
|
||||
* @param id 数据源信息主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteDataSourceById(Long id) {
|
||||
return dataSourceMapper.deleteDataSourceById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试连接
|
||||
*
|
||||
* @param id 数据源id
|
||||
*/
|
||||
@Override
|
||||
public boolean testConnection(Long id) {
|
||||
DataSource dataSource = this.getOne(
|
||||
new LambdaQueryWrapper<DataSource>()
|
||||
.eq(DataSource::getId, id)
|
||||
);
|
||||
String jdbcUrl = "";
|
||||
String driveClass = "";
|
||||
boolean flag = false;
|
||||
DataType dataType = dataTypeService.getOne(
|
||||
new LambdaQueryWrapper<DataType>()
|
||||
.eq(DataType::getId, dataSource.getTypeId())
|
||||
);
|
||||
try {
|
||||
if (dataType.getDriverManager() != null && dataType.getJdbcPre() != null) {
|
||||
if ("mysql".equals(dataType.getDataType())) {
|
||||
driveClass = dataType.getDriverManager();
|
||||
jdbcUrl = dataType.getJdbcPre() + dataSource.getDataSourceIp() + ":" + dataSource.getDataSourcePort() + "/" + dataSource.getDataSourceDatabaseName() + "?" + dataSource.getAdditionalConfiguration();
|
||||
}
|
||||
if ("oracle".equals(dataType.getDataType())) {
|
||||
driveClass = dataType.getDriverManager();
|
||||
jdbcUrl = dataType.getJdbcPre() + dataSource.getDataSourceIp() + ":" + dataSource.getDataSourcePort() + ":" + dataSource.getDataSourceDatabaseName();
|
||||
}
|
||||
if ("sqlserver".equals(dataType.getDataType())) {
|
||||
driveClass = dataType.getDriverManager();
|
||||
jdbcUrl = dataType.getJdbcPre() + dataSource.getDataSourceIp() + ":" + dataSource.getDataSourcePort() + ";databaseName=" + dataSource.getDataSourceDatabaseName();
|
||||
}
|
||||
flag = testDatasource(driveClass, jdbcUrl, dataSource.getDataSourceUsername(), dataSource.getDataSourcePassword());
|
||||
} else {
|
||||
// redis
|
||||
//连接指定的redis
|
||||
Jedis jedis = new Jedis(dataSource.getDataSourceIp(), Integer.valueOf(dataSource.getDataSourcePort()));
|
||||
//如果有密码则需要下面这一行
|
||||
if (dataSource.getDataSourcePassword() != null && !dataSource.getDataSourcePassword().equals("")) {
|
||||
jedis.auth(dataSource.getDataSourcePassword());
|
||||
}
|
||||
//查看服务是否运行,运行正常的话返回一个PONG,否则返回一个连接错误
|
||||
try {
|
||||
jedis.ping();
|
||||
flag = true;
|
||||
} catch (Exception e) {
|
||||
flag = false;
|
||||
}
|
||||
}
|
||||
if (flag) {
|
||||
this.update(
|
||||
new UpdateWrapper<DataSource>()
|
||||
.set("status", "S")
|
||||
.eq("id", id)
|
||||
);
|
||||
} else {
|
||||
this.update(
|
||||
new UpdateWrapper<DataSource>()
|
||||
.set("status", "E")
|
||||
.eq("id", id)
|
||||
);
|
||||
}
|
||||
return flag;
|
||||
} catch (Exception e) {
|
||||
return flag;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 资产同步
|
||||
*
|
||||
* @param id 数据源id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public boolean assetSynchronization(Long id) {
|
||||
DataSource dataSource = this.getOne(
|
||||
new LambdaQueryWrapper<DataSource>()
|
||||
.eq(DataSource::getId, id)
|
||||
);
|
||||
// 查询是否存在当前
|
||||
AssetStructure assetStructure = assetStructureService.getOne(
|
||||
new LambdaQueryWrapper<AssetStructure>()
|
||||
.eq(AssetStructure::getDataSourceSystemId, id)
|
||||
);
|
||||
boolean b = this.testConnection(id);
|
||||
if (b) {
|
||||
// 如果不存在就给他添加资产结构表
|
||||
if (assetStructure == null) {
|
||||
// 构建实体
|
||||
AssetStructure entity = AssetStructure.dataSourceSaveBuilder(id, dataSource);
|
||||
assetStructureService.save(entity);
|
||||
String jdbcUrl = "";
|
||||
String driveClass = "";
|
||||
DataType dataType = dataTypeService.getOne(
|
||||
new LambdaQueryWrapper<DataType>()
|
||||
.eq(DataType::getId, dataSource.getTypeId())
|
||||
);
|
||||
try {
|
||||
List<AssetStructureTable> assetStructureTableList = new ArrayList<>();
|
||||
if (dataType.getDriverManager() != null && dataType.getJdbcPre() != null) {
|
||||
if ("mysql".equals(dataType.getDataType())) {
|
||||
driveClass = dataType.getDriverManager();
|
||||
jdbcUrl = dataType.getJdbcPre() + dataSource.getDataSourceIp() + ":" + dataSource.getDataSourcePort() + "/" + dataSource.getDataSourceDatabaseName() + "?" + dataSource.getAdditionalConfiguration();
|
||||
// 加载数据库驱动
|
||||
Class.forName(driveClass);
|
||||
// 连接数据库
|
||||
Connection conn = DriverManager.getConnection(jdbcUrl, dataSource.getDataSourceUsername(), dataSource.getDataSourcePassword());
|
||||
Statement st = conn.createStatement();
|
||||
ResultSet rs = st.executeQuery("select * from information_schema.tables where TABLE_SCHEMA = " + "'" + dataSource.getDataSourceDatabaseName() + "'");
|
||||
while (rs.next()) {
|
||||
// 获取表名
|
||||
String tableName = rs.getString("TABLE_NAME");
|
||||
// 表注释
|
||||
String tableNameAnnotation = rs.getString("TABLE_COMMENT");
|
||||
// 添加数据
|
||||
// 表数据数量
|
||||
assetStructureTableList.add(
|
||||
new AssetStructureTable() {{
|
||||
setAssetStructureId(entity.getId());
|
||||
setTableName(tableName);
|
||||
setTableNameAnnotation(tableNameAnnotation);
|
||||
}}
|
||||
);
|
||||
}
|
||||
assetStructureTableList.stream().forEach(assetStructureTable -> {
|
||||
try {
|
||||
ResultSet rs2 = st.executeQuery("select count(*) as countNum from " + assetStructureTable.getTableName());
|
||||
while (rs2.next()) {
|
||||
assetStructureTable.setTableDataCount(rs2.getLong("countNum"));
|
||||
}
|
||||
rs2.close();
|
||||
} catch (SQLException e) {
|
||||
|
||||
}
|
||||
});
|
||||
conn.close();
|
||||
st.close();
|
||||
rs.close();
|
||||
// 批量插入
|
||||
assetStructureTableService.saveBatch(assetStructureTableList);
|
||||
}
|
||||
if ("oracle".equals(dataType.getDataType())) {
|
||||
driveClass = dataType.getDriverManager();
|
||||
jdbcUrl = dataType.getJdbcPre() + dataSource.getDataSourceIp() + ":" + dataSource.getDataSourcePort() + ":" + dataSource.getDataSourceDatabaseName();
|
||||
}
|
||||
if ("sqlserver".equals(dataType.getDataType())) {
|
||||
driveClass = dataType.getDriverManager();
|
||||
jdbcUrl = dataType.getJdbcPre() + dataSource.getDataSourceIp() + ":" + dataSource.getDataSourcePort() + ";databaseName=" + dataSource.getDataSourceDatabaseName();
|
||||
}
|
||||
|
||||
} else {
|
||||
// redis
|
||||
//连接指定的redis
|
||||
Jedis jedis = new Jedis(dataSource.getDataSourceIp(), Integer.valueOf(dataSource.getDataSourcePort()));
|
||||
//如果有密码则需要下面这一行
|
||||
if (dataSource.getDataSourcePassword() != null && !dataSource.getDataSourcePassword().equals("")) {
|
||||
jedis.auth(dataSource.getDataSourcePassword());
|
||||
}
|
||||
//查看服务是否运行,运行正常的话返回一个PONG,否则返回一个连接错误
|
||||
try {
|
||||
jedis.ping();
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(e);
|
||||
return false;
|
||||
}
|
||||
} else { // 如果他存在就给他修改
|
||||
AssetStructure entity = AssetStructure.dataSourceUpdateBuilder(assetStructure, id, dataSource);
|
||||
|
||||
// 修改资产结构
|
||||
assetStructureService.update(
|
||||
entity, new LambdaUpdateWrapper<AssetStructure>()
|
||||
.eq(AssetStructure::getId, entity.getId())
|
||||
);
|
||||
|
||||
// 删除资产结构表信息
|
||||
assetStructureTableService.remove(
|
||||
new LambdaQueryWrapper<AssetStructureTable>()
|
||||
.eq(AssetStructureTable::getAssetStructureId, entity.getId())
|
||||
);
|
||||
|
||||
String jdbcUrl = "";
|
||||
String driveClass = "";
|
||||
DataType dataType = dataTypeService.getOne(
|
||||
new LambdaQueryWrapper<DataType>()
|
||||
.eq(DataType::getId, dataSource.getTypeId())
|
||||
);
|
||||
try {
|
||||
List<AssetStructureTable> assetStructureTableList = new ArrayList<>();
|
||||
if (dataType.getDriverManager() != null && dataType.getJdbcPre() != null) {
|
||||
if ("mysql".equals(dataType.getDataType())) {
|
||||
driveClass = dataType.getDriverManager();
|
||||
jdbcUrl = dataType.getJdbcPre() + dataSource.getDataSourceIp() + ":" + dataSource.getDataSourcePort() + "/" + dataSource.getDataSourceDatabaseName() + "?" + dataSource.getAdditionalConfiguration();
|
||||
// 加载数据库驱动
|
||||
Class.forName(driveClass);
|
||||
// 连接数据库
|
||||
Connection conn = DriverManager.getConnection(jdbcUrl, dataSource.getDataSourceUsername(), dataSource.getDataSourcePassword());
|
||||
Statement st = conn.createStatement();
|
||||
ResultSet rs = st.executeQuery("select * from information_schema.tables where TABLE_SCHEMA = " + "'" + dataSource.getDataSourceDatabaseName() + "'");
|
||||
while (rs.next()) {
|
||||
// 获取表名
|
||||
String tableName = rs.getString("TABLE_NAME");
|
||||
// 表注释
|
||||
String tableNameAnnotation = rs.getString("TABLE_COMMENT");
|
||||
// 添加数据
|
||||
// 表数据数量
|
||||
assetStructureTableList.add(
|
||||
new AssetStructureTable() {{
|
||||
setAssetStructureId(entity.getId());
|
||||
setTableName(tableName);
|
||||
setTableNameAnnotation(tableNameAnnotation);
|
||||
}}
|
||||
);
|
||||
}
|
||||
assetStructureTableList.stream().forEach(assetStructureTable -> {
|
||||
try {
|
||||
ResultSet rs2 = st.executeQuery("select count(*) as countNum from " + assetStructureTable.getTableName());
|
||||
while (rs2.next()) {
|
||||
assetStructureTable.setTableDataCount(rs2.getLong("countNum"));
|
||||
}
|
||||
rs2.close();
|
||||
} catch (SQLException e) {
|
||||
|
||||
}
|
||||
});
|
||||
conn.close();
|
||||
st.close();
|
||||
rs.close();
|
||||
// 批量插入
|
||||
assetStructureTableService.saveBatch(assetStructureTableList);
|
||||
}
|
||||
if ("oracle".equals(dataType.getDataType())) {
|
||||
driveClass = dataType.getDriverManager();
|
||||
jdbcUrl = dataType.getJdbcPre() + dataSource.getDataSourceIp() + ":" + dataSource.getDataSourcePort() + ":" + dataSource.getDataSourceDatabaseName();
|
||||
}
|
||||
if ("sqlserver".equals(dataType.getDataType())) {
|
||||
driveClass = dataType.getDriverManager();
|
||||
jdbcUrl = dataType.getJdbcPre() + dataSource.getDataSourceIp() + ":" + dataSource.getDataSourcePort() + ";databaseName=" + dataSource.getDataSourceDatabaseName();
|
||||
}
|
||||
|
||||
} else {
|
||||
// redis
|
||||
//连接指定的redis
|
||||
Jedis jedis = new Jedis(dataSource.getDataSourceIp(), Integer.valueOf(dataSource.getDataSourcePort()));
|
||||
//如果有密码则需要下面这一行
|
||||
if (dataSource.getDataSourcePassword() != null && !dataSource.getDataSourcePassword().equals("")) {
|
||||
jedis.auth(dataSource.getDataSourcePassword());
|
||||
}
|
||||
//查看服务是否运行,运行正常的话返回一个PONG,否则返回一个连接错误
|
||||
try {
|
||||
jedis.ping();
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 如果连接失败并存在就给他删除
|
||||
if (assetStructure != null) {
|
||||
// 删除
|
||||
assetStructureService.removeById(assetStructure.getId());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试数据源连接是否有效
|
||||
*
|
||||
* @param driveClass 驱动类
|
||||
* @param url 连接
|
||||
* @param username 用户名
|
||||
* @param password 密码
|
||||
* @return 布尔
|
||||
*/
|
||||
public static boolean testDatasource(String driveClass, String url, String username, String password) {
|
||||
try {
|
||||
Class.forName(driveClass);
|
||||
DriverManager.getConnection(url, username, password);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
package com.etl.data.structure.controller;
|
||||
|
||||
import com.etl.common.core.domain.Result;
|
||||
import com.etl.common.security.annotation.RequiresPermissions;
|
||||
import com.etl.data.structure.domain.resp.AssetStructureResp;
|
||||
import com.etl.data.structure.service.IAssetStructureService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 数据资产 Controller 层
|
||||
*
|
||||
* @author Chao
|
||||
* @ClassName: AssetStructureController 数据资产 Controller 层
|
||||
* @CreateTime: 2024/4/22 上午10:09
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/structure")
|
||||
public class AssetStructureController {
|
||||
|
||||
@Autowired
|
||||
private IAssetStructureService assetStructureService;
|
||||
|
||||
/**
|
||||
* 查询数据源信息列表
|
||||
*/
|
||||
@RequiresPermissions("data:structure:list")
|
||||
@PostMapping("/list")
|
||||
public Result<AssetStructureResp> list() {
|
||||
return Result.success(assetStructureService.selectAssetSouructureList());
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
package com.etl.data.structure.controller;
|
||||
|
||||
import com.etl.common.core.domain.Result;
|
||||
import com.etl.common.security.annotation.RequiresPermissions;
|
||||
import com.etl.data.structure.domain.AssetStructureTable;
|
||||
import com.etl.data.structure.service.IAssetStructureTableService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据资产表 Controller 层
|
||||
*
|
||||
* @author Chao
|
||||
* @ClassName: AssetStructureTableController 数据资产表 Controller 层
|
||||
* @CreateTime: 2024/4/22 下午7:28
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/structureTable")
|
||||
public class AssetStructureTableController {
|
||||
|
||||
@Autowired
|
||||
private IAssetStructureTableService assetStructureTableService;
|
||||
|
||||
/**
|
||||
* 查询所有的表
|
||||
* @param assetStructureId
|
||||
* @return
|
||||
*/
|
||||
@RequiresPermissions("data:structureTable:list")
|
||||
@PostMapping("list/{assetStructureId}")
|
||||
public Result<List<AssetStructureTable>> list(@PathVariable("assetStructureId") Long assetStructureId) {
|
||||
return Result.success(assetStructureTableService.selectAssetSouructureTableList(assetStructureId));
|
||||
}
|
||||
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
package com.etl.data.structure.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.etl.data.structure.domain.AssetStructure;
|
||||
|
||||
/**
|
||||
* 数据资产Mapper接口
|
||||
*
|
||||
* @author Chao
|
||||
* @ClassName: AssetStructureMapper 数据资产Mapper
|
||||
* @CreateTime: 2024/4/22 下午2:12
|
||||
*/
|
||||
public interface AssetStructureMapper extends BaseMapper<AssetStructure> {
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
package com.etl.data.structure.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.etl.data.structure.domain.AssetStructureTable;
|
||||
|
||||
/**
|
||||
* 资产结构Mapper接口
|
||||
*
|
||||
* @author Chao
|
||||
* @ClassName: AssetStructureTableMapper 资产结构Mapper接口
|
||||
* @CreateTime: 2024/4/22 下午5:23
|
||||
*/
|
||||
public interface AssetStructureTableMapper extends BaseMapper<AssetStructureTable> {
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
package com.etl.data.structure.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.etl.data.structure.domain.AssetStructure;
|
||||
import com.etl.data.structure.domain.resp.AssetStructureResp;
|
||||
|
||||
/**
|
||||
* 数据资产Service 接口
|
||||
*
|
||||
* @author Chao
|
||||
* @ClassName: IAssetStructureService 数据资产Service 接口
|
||||
* @CreateTime: 2024/4/22 下午2:08
|
||||
*/
|
||||
public interface IAssetStructureService extends IService<AssetStructure> {
|
||||
/**
|
||||
* 查询数据资产列表
|
||||
*
|
||||
* @return 数据资产集合
|
||||
*/
|
||||
AssetStructureResp selectAssetSouructureList();
|
||||
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
package com.etl.data.structure.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.etl.data.structure.domain.AssetStructureTable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 资产结构表表Service接口
|
||||
*
|
||||
* @author Chao
|
||||
* @ClassName: IAssetStructureTableService 资产结构表表Service接口
|
||||
* @CreateTime: 2024/4/22 下午5:21
|
||||
*/
|
||||
public interface IAssetStructureTableService extends IService<AssetStructureTable> {
|
||||
/**
|
||||
* 查询该数据资产表
|
||||
* @param assetStructureId 数据资产id
|
||||
* @return
|
||||
*/
|
||||
List<AssetStructureTable> selectAssetSouructureTableList(Long assetStructureId );
|
||||
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
package com.etl.data.structure.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.etl.data.structure.domain.AssetStructure;
|
||||
import com.etl.data.structure.domain.AssetStructureTable;
|
||||
import com.etl.data.structure.domain.resp.AssetStructureResp;
|
||||
import com.etl.data.structure.mapper.AssetStructureMapper;
|
||||
import com.etl.data.structure.service.IAssetStructureService;
|
||||
import com.etl.data.structure.service.IAssetStructureTableService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据资产Service 业务实现层
|
||||
*
|
||||
* @author Chao
|
||||
* @ClassName: AssetStructureServiceImpl 数据资产Service 业务实现层
|
||||
* @CreateTime: 2024/4/22 下午2:10
|
||||
*/
|
||||
@Service
|
||||
public class AssetStructureServiceImpl extends ServiceImpl<AssetStructureMapper, AssetStructure> implements IAssetStructureService {
|
||||
|
||||
@Autowired
|
||||
private IAssetStructureTableService assetStructureTableService;
|
||||
|
||||
|
||||
/**
|
||||
* 查询数据资产列表
|
||||
*
|
||||
* @return 数据资产列表
|
||||
*/
|
||||
@Override
|
||||
public AssetStructureResp selectAssetSouructureList() {
|
||||
// 创建一个列表
|
||||
List<AssetStructure> assetStructureList = this.list();
|
||||
|
||||
List<AssetStructureTable> assetStructureTableList = assetStructureTableService.list();
|
||||
|
||||
// 统计数据
|
||||
long assetStructureTableCount = assetStructureTableList.size();
|
||||
// 统计数据总数
|
||||
long assetStructureTableDataCount;
|
||||
|
||||
|
||||
assetStructureTableDataCount = assetStructureTableList.stream().mapToLong(AssetStructureTable::getTableDataCount).sum();
|
||||
|
||||
return new AssetStructureResp(){{
|
||||
setAssetStructureList(assetStructureList);
|
||||
setAssetStructureTableCount(assetStructureTableCount);
|
||||
setAssetStructureTableDataCount(assetStructureTableDataCount);
|
||||
}};
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
package com.etl.data.structure.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.etl.data.structure.domain.AssetStructureTable;
|
||||
import com.etl.data.structure.mapper.AssetStructureTableMapper;
|
||||
import com.etl.data.structure.service.IAssetStructureTableService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 资产结构表表Service业务实现层
|
||||
*
|
||||
* @author Chao
|
||||
* @ClassName: AssetStructureTableServiceImpl 资产结构表表Service业务实现层
|
||||
* @CreateTime: 2024/4/22 下午5:22
|
||||
*/
|
||||
@Service
|
||||
public class AssetStructureTableServiceImpl extends ServiceImpl<AssetStructureTableMapper, AssetStructureTable> implements IAssetStructureTableService {
|
||||
/**
|
||||
* 查询该数据资产表
|
||||
* @param assetStructureId 数据资产id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<AssetStructureTable> selectAssetSouructureTableList(Long assetStructureId) {
|
||||
List<AssetStructureTable> list = this.list(
|
||||
new LambdaQueryWrapper<AssetStructureTable>()
|
||||
.eq(AssetStructureTable::getAssetStructureId, assetStructureId)
|
||||
);
|
||||
return list;
|
||||
}
|
||||
}
|
|
@ -1,91 +0,0 @@
|
|||
package com.etl.data.type.controller;
|
||||
|
||||
import com.etl.common.core.domain.Result;
|
||||
import com.etl.common.core.utils.poi.ExcelUtil;
|
||||
import com.etl.common.core.web.controller.BaseController;
|
||||
import com.etl.common.core.web.page.TableDataInfo;
|
||||
import com.etl.common.log.annotation.Log;
|
||||
import com.etl.common.log.enums.BusinessType;
|
||||
import com.etl.common.security.annotation.RequiresPermissions;
|
||||
import com.etl.data.type.domain.DataType;
|
||||
import com.etl.data.type.service.IDataTypeService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据源类型Controller
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-21
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/type")
|
||||
public class DataTypeController extends BaseController {
|
||||
@Autowired
|
||||
private IDataTypeService dataTypeService;
|
||||
|
||||
/**
|
||||
* 查询数据源类型列表
|
||||
*/
|
||||
@RequiresPermissions("data:type:list")
|
||||
@GetMapping("/list")
|
||||
public Result<TableDataInfo<DataType>> list(DataType dataType) {
|
||||
startPage();
|
||||
List<DataType> list = dataTypeService.selectDataTypeList(dataType);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出数据源类型列表
|
||||
*/
|
||||
@RequiresPermissions("data:type:export")
|
||||
@Log(title = "数据源类型", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, DataType dataType) {
|
||||
List<DataType> list = dataTypeService.selectDataTypeList(dataType);
|
||||
ExcelUtil<DataType> util = new ExcelUtil<DataType>(DataType.class);
|
||||
util.exportExcel(response, list, "数据源类型数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取数据源类型详细信息
|
||||
*/
|
||||
@RequiresPermissions("data:type:query")
|
||||
@GetMapping(value = "/{id}")
|
||||
public Result getInfo(@PathVariable("id") Long id) {
|
||||
return success(dataTypeService.selectDataTypeById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增数据源类型
|
||||
*/
|
||||
@RequiresPermissions("data:type:add")
|
||||
@Log(title = "数据源类型", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public Result add(@RequestBody DataType dataType) {
|
||||
return toAjax(dataTypeService.insertDataType(dataType));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改数据源类型
|
||||
*/
|
||||
@RequiresPermissions("data:type:edit")
|
||||
@Log(title = "数据源类型", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public Result edit(@RequestBody DataType dataType) {
|
||||
return toAjax(dataTypeService.updateDataType(dataType));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除数据源类型
|
||||
*/
|
||||
@RequiresPermissions("data:type:remove")
|
||||
@Log(title = "数据源类型", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public Result remove(@PathVariable Long[] ids) {
|
||||
return toAjax(dataTypeService.deleteDataTypeByIds(ids));
|
||||
}
|
||||
}
|
|
@ -1,62 +0,0 @@
|
|||
package com.etl.data.type.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.etl.data.type.domain.DataType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据源类型Mapper接口
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-21
|
||||
*/
|
||||
public interface DataTypeMapper extends BaseMapper<DataType> {
|
||||
/**
|
||||
* 查询数据源类型
|
||||
*
|
||||
* @param id 数据源类型主键
|
||||
* @return 数据源类型
|
||||
*/
|
||||
public DataType selectDataTypeById(Long id);
|
||||
|
||||
/**
|
||||
* 查询数据源类型列表
|
||||
*
|
||||
* @param dataType 数据源类型
|
||||
* @return 数据源类型集合
|
||||
*/
|
||||
public List<DataType> selectDataTypeList(DataType dataType);
|
||||
|
||||
/**
|
||||
* 新增数据源类型
|
||||
*
|
||||
* @param dataType 数据源类型
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertDataType(DataType dataType);
|
||||
|
||||
/**
|
||||
* 修改数据源类型
|
||||
*
|
||||
* @param dataType 数据源类型
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateDataType(DataType dataType);
|
||||
|
||||
/**
|
||||
* 删除数据源类型
|
||||
*
|
||||
* @param id 数据源类型主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteDataTypeById(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除数据源类型
|
||||
*
|
||||
* @param ids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteDataTypeByIds(Long[] ids);
|
||||
}
|
|
@ -1,62 +0,0 @@
|
|||
package com.etl.data.type.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.etl.data.type.domain.DataType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据源类型Service接口
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-21
|
||||
*/
|
||||
public interface IDataTypeService extends IService<DataType> {
|
||||
/**
|
||||
* 查询数据源类型
|
||||
*
|
||||
* @param id 数据源类型主键
|
||||
* @return 数据源类型
|
||||
*/
|
||||
public DataType selectDataTypeById(Long id);
|
||||
|
||||
/**
|
||||
* 查询数据源类型列表
|
||||
*
|
||||
* @param dataType 数据源类型
|
||||
* @return 数据源类型集合
|
||||
*/
|
||||
public List<DataType> selectDataTypeList(DataType dataType);
|
||||
|
||||
/**
|
||||
* 新增数据源类型
|
||||
*
|
||||
* @param dataType 数据源类型
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertDataType(DataType dataType);
|
||||
|
||||
/**
|
||||
* 修改数据源类型
|
||||
*
|
||||
* @param dataType 数据源类型
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateDataType(DataType dataType);
|
||||
|
||||
/**
|
||||
* 批量删除数据源类型
|
||||
*
|
||||
* @param ids 需要删除的数据源类型主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteDataTypeByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 删除数据源类型信息
|
||||
*
|
||||
* @param id 数据源类型主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteDataTypeById(Long id);
|
||||
}
|
|
@ -1,102 +0,0 @@
|
|||
package com.etl.data.type.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.etl.common.core.utils.DateUtils;
|
||||
import com.etl.data.type.domain.DataType;
|
||||
import com.etl.data.type.mapper.DataTypeMapper;
|
||||
import com.etl.data.type.service.IDataTypeService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据源类型Service业务层处理
|
||||
*
|
||||
* @author Chao
|
||||
* @date 2024-04-21
|
||||
*/
|
||||
@Service
|
||||
public class DataTypeServiceImpl extends ServiceImpl<DataTypeMapper, DataType> implements IDataTypeService {
|
||||
@Autowired
|
||||
private DataTypeMapper dataTypeMapper;
|
||||
|
||||
/**
|
||||
* 查询数据源类型
|
||||
*
|
||||
* @param id 数据源类型主键
|
||||
* @return 数据源类型
|
||||
*/
|
||||
@Override
|
||||
public DataType selectDataTypeById(Long id) {
|
||||
return dataTypeMapper.selectDataTypeById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询数据源类型列表
|
||||
*
|
||||
* @param dataType 数据源类型
|
||||
* @return 数据源类型
|
||||
*/
|
||||
@Override
|
||||
public List<DataType> selectDataTypeList(DataType dataType) {
|
||||
return dataTypeMapper.selectDataTypeList(dataType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增数据源类型
|
||||
*
|
||||
* @param dataType 数据源类型
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertDataType(DataType dataType) {
|
||||
dataType.setCreateTime(DateUtils.getNowDate());
|
||||
dataType.setDataType(lowerCase(dataType.getDataType()));
|
||||
return dataTypeMapper.insertDataType(dataType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改数据源类型
|
||||
*
|
||||
* @param dataType 数据源类型
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateDataType(DataType dataType) {
|
||||
dataType.setUpdateTime(DateUtils.getNowDate());
|
||||
dataType.setDataType(lowerCase(dataType.getDataType()));
|
||||
return dataTypeMapper.updateDataType(dataType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除数据源类型
|
||||
*
|
||||
* @param ids 需要删除的数据源类型主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteDataTypeByIds(Long[] ids) {
|
||||
return dataTypeMapper.deleteDataTypeByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除数据源类型信息
|
||||
*
|
||||
* @param id 数据源类型主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteDataTypeById(Long id) {
|
||||
return dataTypeMapper.deleteDataTypeById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将所有的大写转换成小写并清除中间所有的空格
|
||||
* @param str 需要转换的参数
|
||||
* @return 转换后的参数
|
||||
*/
|
||||
public static String lowerCase(String str){
|
||||
return str.toLowerCase().replaceAll(" ","");
|
||||
}
|
||||
}
|
|
@ -31,4 +31,4 @@ spring:
|
|||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
logging:
|
||||
level:
|
||||
com.etl.shop.cart.mapper: DEBUG
|
||||
com.etl.data.mapper: DEBUG
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.etl.data.mapper.AssetsModelMapper">
|
||||
|
||||
</mapper>
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.etl.data.mapper.DataSourceMapper">
|
||||
|
||||
</mapper>
|
|
@ -1,130 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.etl.data.source.mapper.DataSourceMapper">
|
||||
|
||||
<resultMap type="com.etl.data.source.domain.DataSource" id="DataSourceResult">
|
||||
<result property="id" column="id" />
|
||||
<result property="dataSourceName" column="data_source_name" />
|
||||
<result property="dataSourceSystemName" column="data_source_system_name" />
|
||||
<result property="typeId" column="type_id" />
|
||||
<result property="dataSourceIp" column="data_source_ip" />
|
||||
<result property="dataSourcePort" column="data_source_port" />
|
||||
<result property="dataSourceDatabaseName" column="data_source_database_name" />
|
||||
<result property="dataSourceUsername" column="data_source_username" />
|
||||
<result property="dataSourcePassword" column="data_source_password" />
|
||||
<result property="additionalConfiguration" column="additional_configuration" />
|
||||
<result property="status" column="status" />
|
||||
<result property="remark" column="remark" />
|
||||
<result property="initialNumberOfConnections" column="initial_number_of_connections" />
|
||||
<result property="maximumNumberOfConnections" column="maximum_number_of_connections" />
|
||||
<result property="maximumWaitingTime" column="maximum_waiting_time" />
|
||||
<result property="maximumWaitingTimes" column="maximum_waiting_times" />
|
||||
<result property="createBy" column="create_by" />
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateTime" column="update_time" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectDataSourceVo">
|
||||
select id, data_source_name, data_source_system_name, type_id, data_source_ip, data_source_port, data_source_database_name, data_source_username, data_source_password, additional_configuration, status, remark, initial_number_of_connections, maximum_number_of_connections, maximum_waiting_time, maximum_waiting_times, create_by, create_time, update_by, update_time from data_source
|
||||
</sql>
|
||||
|
||||
<select id="selectDataSourceList" parameterType="com.etl.data.source.domain.DataSource" resultMap="DataSourceResult">
|
||||
<include refid="selectDataSourceVo"/>
|
||||
<where>
|
||||
<if test="typeId != null and typeId != ''"> and type_id = #{typeId}</if>
|
||||
<if test="dataSourceName != null and dataSourceName != ''"> and data_source_name like concat('%', #{dataSourceName}, '%')</if>
|
||||
<if test="dataSourceSystemName != null and dataSourceSystemName != ''"> and data_source_system_name like concat('%', #{dataSourceSystemName}, '%')</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="selectDataSourceById" parameterType="Long" resultMap="DataSourceResult">
|
||||
<include refid="selectDataSourceVo"/>
|
||||
where id = #{id}
|
||||
</select>
|
||||
|
||||
<insert id="insertDataSource" parameterType="com.etl.data.source.domain.DataSource" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into data_source
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="dataSourceName != null">data_source_name,</if>
|
||||
<if test="dataSourceSystemName != null">data_source_system_name,</if>
|
||||
<if test="typeId != null">type_id,</if>
|
||||
<if test="dataSourceIp != null">data_source_ip,</if>
|
||||
<if test="dataSourcePort != null">data_source_port,</if>
|
||||
<if test="dataSourceDatabaseName != null">data_source_database_name,</if>
|
||||
<if test="dataSourceUsername != null">data_source_username,</if>
|
||||
<if test="dataSourcePassword != null">data_source_password,</if>
|
||||
<if test="additionalConfiguration != null">additional_configuration,</if>
|
||||
<if test="status != null">status,</if>
|
||||
<if test="remark != null">remark,</if>
|
||||
<if test="initialNumberOfConnections != null">initial_number_of_connections,</if>
|
||||
<if test="maximumNumberOfConnections != null">maximum_number_of_connections,</if>
|
||||
<if test="maximumWaitingTime != null">maximum_waiting_time,</if>
|
||||
<if test="maximumWaitingTimes != null">maximum_waiting_times,</if>
|
||||
<if test="createBy != null">create_by,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="updateBy != null">update_by,</if>
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="dataSourceName != null">#{dataSourceName},</if>
|
||||
<if test="dataSourceSystemName != null">#{dataSourceSystemName},</if>
|
||||
<if test="typeId != null">#{typeId},</if>
|
||||
<if test="dataSourceIp != null">#{dataSourceIp},</if>
|
||||
<if test="dataSourcePort != null">#{dataSourcePort},</if>
|
||||
<if test="dataSourceDatabaseName != null">#{dataSourceDatabaseName},</if>
|
||||
<if test="dataSourceUsername != null">#{dataSourceUsername},</if>
|
||||
<if test="dataSourcePassword != null">#{dataSourcePassword},</if>
|
||||
<if test="additionalConfiguration != null">#{additionalConfiguration},</if>
|
||||
<if test="status != null">#{status},</if>
|
||||
<if test="remark != null">#{remark},</if>
|
||||
<if test="initialNumberOfConnections != null">#{initialNumberOfConnections},</if>
|
||||
<if test="maximumNumberOfConnections != null">#{maximumNumberOfConnections},</if>
|
||||
<if test="maximumWaitingTime != null">#{maximumWaitingTime},</if>
|
||||
<if test="maximumWaitingTimes != null">#{maximumWaitingTimes},</if>
|
||||
<if test="createBy != null">#{createBy},</if>
|
||||
<if test="createTime != null">#{createTime},</if>
|
||||
<if test="updateBy != null">#{updateBy},</if>
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateDataSource" parameterType="com.etl.data.source.domain.DataSource">
|
||||
update data_source
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="dataSourceName != null">data_source_name = #{dataSourceName},</if>
|
||||
<if test="dataSourceSystemName != null">data_source_system_name = #{dataSourceSystemName},</if>
|
||||
<if test="typeId != null">type_id = #{typeId},</if>
|
||||
<if test="dataSourceIp != null">data_source_ip = #{dataSourceIp},</if>
|
||||
<if test="dataSourcePort != null">data_source_port = #{dataSourcePort},</if>
|
||||
<if test="dataSourceDatabaseName != null">data_source_database_name = #{dataSourceDatabaseName},</if>
|
||||
<if test="dataSourceUsername != null">data_source_username = #{dataSourceUsername},</if>
|
||||
<if test="dataSourcePassword != null">data_source_password = #{dataSourcePassword},</if>
|
||||
<if test="additionalConfiguration != null">additional_configuration = #{additionalConfiguration},</if>
|
||||
<if test="status != null">status = #{status},</if>
|
||||
<if test="remark != null">remark = #{remark},</if>
|
||||
<if test="initialNumberOfConnections != null">initial_number_of_connections = #{initialNumberOfConnections},</if>
|
||||
<if test="maximumNumberOfConnections != null">maximum_number_of_connections = #{maximumNumberOfConnections},</if>
|
||||
<if test="maximumWaitingTime != null">maximum_waiting_time = #{maximumWaitingTime},</if>
|
||||
<if test="maximumWaitingTimes != null">maximum_waiting_times = #{maximumWaitingTimes},</if>
|
||||
<if test="createBy != null">create_by = #{createBy},</if>
|
||||
<if test="createTime != null">create_time = #{createTime},</if>
|
||||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<delete id="deleteDataSourceById" parameterType="Long">
|
||||
delete from data_source where id = #{id}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteDataSourceByIds" parameterType="String">
|
||||
delete from data_source where id in
|
||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
</mapper>
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.etl.data.mapper.DataTableMapper">
|
||||
|
||||
</mapper>
|
|
@ -1,84 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.etl.data.type.mapper.DataTypeMapper">
|
||||
|
||||
<resultMap type="com.etl.data.type.domain.DataType" id="DataTypeResult">
|
||||
<result property="id" column="id" />
|
||||
<result property="dataType" column="data_type" />
|
||||
<result property="driverManager" column="driver_manager" />
|
||||
<result property="jdbcPre" column="jdbc_pre" />
|
||||
<result property="remark" column="remark" />
|
||||
<result property="createBy" column="create_by" />
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateTime" column="update_time" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectDataTypeVo">
|
||||
select id, data_type, driver_manager, jdbc_pre, remark, create_by, create_time, update_by, update_time from data_type
|
||||
</sql>
|
||||
|
||||
<select id="selectDataTypeList" parameterType="com.etl.data.type.domain.DataType" resultMap="DataTypeResult">
|
||||
<include refid="selectDataTypeVo"/>
|
||||
<where>
|
||||
<if test="dataType != null and dataType != ''"> and data_type like concat('%', #{dataType}, '%')</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="selectDataTypeById" parameterType="Long" resultMap="DataTypeResult">
|
||||
<include refid="selectDataTypeVo"/>
|
||||
where id = #{id}
|
||||
</select>
|
||||
|
||||
<insert id="insertDataType" parameterType="com.etl.data.type.domain.DataType" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into data_type
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="dataType != null">data_type,</if>
|
||||
<if test="driverManager != null">driver_manager,</if>
|
||||
<if test="jdbcPre != null">jdbc_pre,</if>
|
||||
<if test="remark != null">remark,</if>
|
||||
<if test="createBy != null">create_by,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="updateBy != null">update_by,</if>
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="dataType != null">#{dataType},</if>
|
||||
<if test="driverManager != null">#{driverManager},</if>
|
||||
<if test="jdbcPre != null">#{jdbcPre},</if>
|
||||
<if test="remark != null">#{remark},</if>
|
||||
<if test="createBy != null">#{createBy},</if>
|
||||
<if test="createTime != null">#{createTime},</if>
|
||||
<if test="updateBy != null">#{updateBy},</if>
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateDataType" parameterType="com.etl.data.type.domain.DataType">
|
||||
update data_type
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="dataType != null">data_type = #{dataType},</if>
|
||||
<if test="driverManager != null">driver_manager = #{driverManager},</if>
|
||||
<if test="jdbcPre != null">jdbc_pre = #{jdbcPre},</if>
|
||||
<if test="remark != null">remark = #{remark},</if>
|
||||
<if test="createBy != null">create_by = #{createBy},</if>
|
||||
<if test="createTime != null">create_time = #{createTime},</if>
|
||||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<delete id="deleteDataTypeById" parameterType="Long">
|
||||
delete from data_type where id = #{id}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteDataTypeByIds" parameterType="String">
|
||||
delete from data_type where id in
|
||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
</mapper>
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.etl.data.mapper.DataTypeMapper">
|
||||
|
||||
</mapper>
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.etl.data.mapper.DictionaryInfoMapper">
|
||||
|
||||
</mapper>
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.etl.data.mapper.DictionaryMapper">
|
||||
|
||||
</mapper>
|
Loading…
Reference in New Issue