diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/AssetDataSource.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/AssetDataSource.java new file mode 100644 index 0000000..e9675bf --- /dev/null +++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/AssetDataSource.java @@ -0,0 +1,31 @@ +package com.muyu.data.source.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * 资产数据源 + * + * @author HuFangMing + * @ClassName: AssetDataSource + * @createTime: 2024/4/23 20:30 + */ + +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class AssetDataSource { +// 主键 +private Long id; +// 名称 +private String name; +// 系统名 +private String systemName; +// 数据库名称 +private String databaseName; + //类型 +private String type; +} diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/Children.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/Children.java new file mode 100644 index 0000000..7d9b3c5 --- /dev/null +++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/Children.java @@ -0,0 +1,27 @@ +package com.muyu.data.source.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * 数据库下的表数据展示 + * + * @author HuFangMing + * @ClassName: Children + * @createTime: 2024/4/23 20:37 + */ + +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class Children { +private Long id; +private String name; +private String as; +private Long dataTotal; +private String type; +private Long assetId; +} diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/DataSource.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/DataSource.java index 265a922..f7ab8b6 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/DataSource.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/DataSource.java @@ -3,6 +3,8 @@ package com.muyu.data.source.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.common.security.utils.SecurityUtils; +import java.util.Date; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -47,15 +49,10 @@ public class DataSource extends BaseEntity { @ApiModelProperty(name = "数据来源系统名称", value = "数据来源系统名称") private String systemName; - /** 数据库名称 */ - @Excel(name = "数据库名称") - @ApiModelProperty(name = "数据库名称", value = "数据库名称") - private String databaseName; - /** 数据库类型 */ @Excel(name = "数据库类型") @ApiModelProperty(name = "数据库类型", value = "数据库类型") - private Long databaseType; + private String dataType; /** 主机地址 */ @Excel(name = "主机地址") @@ -67,6 +64,11 @@ public class DataSource extends BaseEntity { @ApiModelProperty(name = "端口号", value = "端口号") private String port; + /** 数据库名称 */ + @Excel(name = "数据库名称") + @ApiModelProperty(name = "数据库名称", value = "数据库名称") + private String databaseName; + /** 用户名 */ @Excel(name = "用户名") @ApiModelProperty(name = "用户名", value = "用户名") @@ -113,61 +115,64 @@ public class DataSource extends BaseEntity { private Long maxWaitSize; /** - * 查询构造器 - */ + * 查询构造器 + */ public static DataSource queryBuild( DataSourceQueryReq dataSourceQueryReq){ return DataSource.builder() - .name(dataSourceQueryReq.getName()) - .systemName(dataSourceQueryReq.getSystemName()) - .databaseName(dataSourceQueryReq.getDatabaseName()) - .build(); + .name(dataSourceQueryReq.getName()) + .systemName(dataSourceQueryReq.getSystemName()) + .build(); } /** - * 添加构造器 - */ + * 添加构造器 + */ public static DataSource saveBuild(DataSourceSaveReq dataSourceSaveReq){ return DataSource.builder() - .name(dataSourceSaveReq.getName()) - .systemName(dataSourceSaveReq.getSystemName()) - .databaseName(dataSourceSaveReq.getDatabaseName()) - .databaseType(dataSourceSaveReq.getDatabaseType()) - .host(dataSourceSaveReq.getHost()) - .port(dataSourceSaveReq.getPort()) - .user(dataSourceSaveReq.getUser()) - .password(dataSourceSaveReq.getPassword()) - .type(dataSourceSaveReq.getType()) - .connectionParam(dataSourceSaveReq.getConnectionParam()) - .status(dataSourceSaveReq.getStatus()) - .initNum(dataSourceSaveReq.getInitNum()) - .maxNum(dataSourceSaveReq.getMaxNum()) - .maxWaitTime(dataSourceSaveReq.getMaxWaitTime()) - .maxWaitSize(dataSourceSaveReq.getMaxWaitSize()) - .build(); + .name(dataSourceSaveReq.getName()) + .systemName(dataSourceSaveReq.getSystemName()) + .dataType(dataSourceSaveReq.getDatabaseType()) + .host(dataSourceSaveReq.getHost()) + .port(dataSourceSaveReq.getPort()) + .databaseName(dataSourceSaveReq.getDatabaseName()) + .user(dataSourceSaveReq.getUser()) + .password(dataSourceSaveReq.getPassword()) + .type(dataSourceSaveReq.getType()) + .connectionParam(dataSourceSaveReq.getConnectionParam()) + .initNum(dataSourceSaveReq.getInitNum()) + .maxNum(dataSourceSaveReq.getMaxNum()) + .maxWaitTime(dataSourceSaveReq.getMaxWaitTime()) + .maxWaitSize(dataSourceSaveReq.getMaxWaitSize()) + .remark(dataSourceSaveReq.getRemark()) + .createBy(SecurityUtils.getUsername()) + .createTime(new Date()) + .build(); } /** - * 修改构造器 - */ + * 修改构造器 + */ public static DataSource editBuild(Long id, DataSourceEditReq dataSourceEditReq){ return DataSource.builder() .id(id) - .name(dataSourceEditReq.getName()) - .systemName(dataSourceEditReq.getSystemName()) - .databaseName(dataSourceEditReq.getDatabaseName()) - .databaseType(dataSourceEditReq.getDatabaseType()) - .host(dataSourceEditReq.getHost()) - .port(dataSourceEditReq.getPort()) - .user(dataSourceEditReq.getUser()) - .password(dataSourceEditReq.getPassword()) - .type(dataSourceEditReq.getType()) - .connectionParam(dataSourceEditReq.getConnectionParam()) - .status(dataSourceEditReq.getStatus()) - .initNum(dataSourceEditReq.getInitNum()) - .maxNum(dataSourceEditReq.getMaxNum()) - .maxWaitTime(dataSourceEditReq.getMaxWaitTime()) - .maxWaitSize(dataSourceEditReq.getMaxWaitSize()) - .build(); + .name(dataSourceEditReq.getName()) + .systemName(dataSourceEditReq.getSystemName()) + .dataType(dataSourceEditReq.getDatabaseType()) + .host(dataSourceEditReq.getHost()) + .port(dataSourceEditReq.getPort()) + .databaseName(dataSourceEditReq.getDatabaseName()) + .user(dataSourceEditReq.getUser()) + .password(dataSourceEditReq.getPassword()) + .type(dataSourceEditReq.getType()) + .connectionParam(dataSourceEditReq.getConnectionParam()) + .initNum(dataSourceEditReq.getInitNum()) + .maxNum(dataSourceEditReq.getMaxNum()) + .maxWaitTime(dataSourceEditReq.getMaxWaitTime()) + .maxWaitSize(dataSourceEditReq.getMaxWaitSize()) + .remark(dataSourceEditReq.getRemark()) + .updateBy(SecurityUtils.getUsername()) + .updateTime(new Date()) + .build(); } } diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/TableData.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/TableData.java new file mode 100644 index 0000000..8249d5c --- /dev/null +++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/TableData.java @@ -0,0 +1,34 @@ +package com.muyu.data.source.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * 表结构 + * + * @author HuFangMing + * @ClassName: TableData + * @createTime: 2024/4/23 20:39 + */ + +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class TableData { +private Long id; +private String name; +private String comment; +private String isPrimaryKey; +private String type; +private String mappingType; +private Long length; +private Long decimalPlaces; +private String isNull; +private String defaultValue; +private String isDict; +private String dictKey; +private Long childrenId; +} diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DataSourceEditReq.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DataSourceEditReq.java index f99679e..c19e7f9 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DataSourceEditReq.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DataSourceEditReq.java @@ -37,7 +37,7 @@ public class DataSourceEditReq extends BaseEntity { /** 数据库类型 */ @ApiModelProperty(name = "数据库类型", value = "数据库类型") - private Long databaseType; + private String databaseType; /** 主机地址 */ @ApiModelProperty(name = "主机地址", value = "主机地址") diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DataSourceSaveReq.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DataSourceSaveReq.java index fab79a7..acbd9db 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DataSourceSaveReq.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DataSourceSaveReq.java @@ -46,7 +46,7 @@ public class DataSourceSaveReq extends BaseEntity { /** 数据库类型 */ @ApiModelProperty(name = "数据库类型", value = "数据库类型") - private Long databaseType; + private String databaseType; /** 主机地址 */ diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/ShowTableReq.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/ShowTableReq.java new file mode 100644 index 0000000..ab0db1f --- /dev/null +++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/ShowTableReq.java @@ -0,0 +1,24 @@ +package com.muyu.data.source.domain.req; + +import com.muyu.data.source.domain.AssetDataSource; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * 查询表结构 + * + * @author HuFangMing + * @ClassName: ShowTableReq + * @createTime: 2024/4/23 20:45 + */ + +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class ShowTableReq { +private AssetDataSource assetDataSource; +private String tableName; +} diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/resp/ColumnResp.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/resp/ColumnResp.java new file mode 100644 index 0000000..b5c179a --- /dev/null +++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/resp/ColumnResp.java @@ -0,0 +1,29 @@ +package com.muyu.data.source.domain.resp; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * 字段描述 + * + * @author HuFangMing + * @ClassName: ColumnResp + * @createTime: 2024/4/23 20:47 + */ + +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class ColumnResp { +private String columnName; +private String columnComment; +private String columnKey; +private String columnType; +private Long length; +private Long numericScale; +private String isNullable; +private String columnDefault; +} diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/resp/CountResp.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/resp/CountResp.java new file mode 100644 index 0000000..8da7527 --- /dev/null +++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/resp/CountResp.java @@ -0,0 +1,24 @@ +package com.muyu.data.source.domain.resp; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * 数据资产数量 + * + * @author HuFangMing + * @ClassName: CountResp + * @createTime: 2024/4/23 21:15 + */ + +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class CountResp { +private Long assetStructureCount; +private Long assetStructureTableCount; +private Long assetStructureTableDataCount; +} diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/resp/Table.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/resp/Table.java new file mode 100644 index 0000000..523bc35 --- /dev/null +++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/resp/Table.java @@ -0,0 +1,24 @@ +package com.muyu.data.source.domain.resp; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * 表 + * + * @author HuFangMing + * @ClassName: Table + * @createTime: 2024/4/23 21:21 + */ + +@Data +@SuperBuilder +@AllArgsConstructor +@NoArgsConstructor +public class Table { +private String tableName; +private String tableComment; +private Long tableRows; +} diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DataSourceController.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DataSourceController.java index 59af459..5c4157c 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DataSourceController.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DataSourceController.java @@ -1,5 +1,9 @@ package com.muyu.data.source.controller; +import com.muyu.data.source.domain.AssetDataSource; +import com.muyu.data.source.domain.Children; +import com.muyu.data.source.domain.DatabaseType; +import com.muyu.data.source.domain.req.ShowTableReq; import java.util.List; import javax.servlet.http.HttpServletResponse; @@ -113,9 +117,72 @@ public class DataSourceController extends BaseController { */ @RequiresPermissions("data:source:jdbc") @Log(title = "数据源类型", businessType = BusinessType.DELETE) - @PostMapping("/test/{databaseId}") + @PostMapping("/test") @ApiOperation("测试数据源") - public Result testConnection(@PathVariable("databaseId") Long id) { - return Result.success(dataSourceService.testConnection(id)); + public Result testConnection(@RequestBody DataSource dataSource) { + return Result.success(dataSourceService.testConnection(dataSource)); } + /** + * 同步数据 + */ + @RequiresPermissions("data:source:sync") + @PostMapping("/sync") + public Result synchronous(@RequestBody DataSource dataSource){ + + return Result.success( dataSourceService.syncConnection(dataSource)); + } + + /** + * 获取数据库描述 + */ + @RequiresPermissions("data:source:sync") + @GetMapping("/getAssetList") + public Result> getAssetList(){ + + return Result.success( dataSourceService.getAssetList()); + } + + /** + * 获取数据库下表描述 + */ + @RequiresPermissions("data:source:childrenlist") + @GetMapping("/getChildrenList") + public Result> getChildrenList(@RequestBody AssetDataSource assetDataSource){ + + return Result.success( dataSourceService.getChildrenList(assetDataSource)); + } + + /** + * 获取表下的字段描述 + */ + @RequiresPermissions("data:source:addtbledate") + @GetMapping("/addTbleDate") + public Result addTbleDate(@RequestBody ShowTableReq showTableReq){ + + return Result.success( dataSourceService.addTbleDate(showTableReq)); + } + + /** + * 查询所有表结构 + */ + @RequiresPermissions("data:source:selecttablelist") + @GetMapping("/selectTableList") + public Result> selectTableList(){ + + return Result.success( dataSourceService.selectTableList()); + } + + + + /** + * 查询表的总数 + */ + @RequiresPermissions("data:source:selecttabledatacount") + @GetMapping("/selectTableDataCount") + public Result selectTableDataCount(){ + + return Result.success( dataSourceService.selectTableDataCount()); + } + + } diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/mapper/DataSourceMapper.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/mapper/DataSourceMapper.java index 37772ec..8a1bec6 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/mapper/DataSourceMapper.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/mapper/DataSourceMapper.java @@ -1,5 +1,12 @@ package com.muyu.data.source.mapper; +import com.muyu.common.core.domain.Result; +import com.muyu.data.source.domain.AssetDataSource; +import com.muyu.data.source.domain.Children; +import com.muyu.data.source.domain.TableData; +import com.muyu.data.source.domain.resp.ColumnResp; +import com.muyu.data.source.domain.resp.Table; +import feign.Param; import java.util.List; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.muyu.data.source.domain.DataSource; @@ -12,4 +19,26 @@ import com.muyu.data.source.domain.DataSource; */ public interface DataSourceMapper extends BaseMapper { + + Result insertAsset(AssetDataSource assetDataSource); + + List selectAssetList(); + + List selectTable(String databaseName); + + Result addChildren(Children children); + + List getChildrenList(Long id); + + List selectColumn(@Param("databaseName") String databaseName, @Param("tableName") String tableName); + + Children selectChildren(@Param("id") Long id, @Param("tableName") String tableName); + + void addTableData(TableData tableData); + + List getTableDataList(Long id); + + List selectTableData(); + + List selectChildrenList(); } diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/DataSourceService.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/DataSourceService.java index 9eb4e67..6be1f19 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/DataSourceService.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/DataSourceService.java @@ -1,5 +1,13 @@ package com.muyu.data.source.service; +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.data.source.domain.AssetDataSource; +import com.muyu.data.source.domain.Children; +import com.muyu.data.source.domain.DatabaseType; +import com.muyu.data.source.domain.TableData; +import com.muyu.data.source.domain.req.ShowTableReq; +import com.muyu.data.source.domain.resp.CountResp; import java.util.List; import com.muyu.data.source.domain.DataSource; import com.baomidou.mybatisplus.extension.service.IService; @@ -19,5 +27,18 @@ public interface DataSourceService extends IService { */ public List list(DataSource dataSource); - boolean testConnection(Long databaseId); + Boolean testConnection(DataSource dataSource); + + Boolean syncConnection(DataSource dataSource); + + List getAssetList(); + + List getChildrenList(AssetDataSource assetDataSource ); + + Result addTbleDate(ShowTableReq showTableReq); + + List selectTableList(); + + + CountResp selectTableDataCount(); } diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DataSourceServiceImpl.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DataSourceServiceImpl.java index c49fd04..95de8dd 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DataSourceServiceImpl.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DataSourceServiceImpl.java @@ -1,8 +1,21 @@ package com.muyu.data.source.service.impl; + +import com.muyu.common.core.domain.Result; +import com.muyu.data.source.domain.AssetDataSource; +import com.muyu.data.source.domain.Children; import com.muyu.data.source.domain.DatabaseType; +import com.muyu.data.source.domain.TableData; +import com.muyu.data.source.domain.req.ShowTableReq; +import com.muyu.data.source.domain.resp.ColumnResp; +import com.muyu.data.source.domain.resp.CountResp; +import com.muyu.data.source.domain.resp.Table; import com.muyu.data.source.service.DatabaseTypeService; +import java.sql.Connection; import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; import java.util.HashSet; import java.util.List; @@ -29,6 +42,8 @@ import redis.clients.jedis.Jedis; @Service public class DataSourceServiceImpl extends ServiceImpl implements DataSourceService { + @Autowired + private DataSourceMapper dataSourceMapper; @Autowired private DataSourceService dataSourceService; @@ -63,21 +78,20 @@ public class DataSourceServiceImpl extends ServiceImpl dataSourceList = this.list( new LambdaQueryWrapper() - .eq(DataSource::getDatabaseType, id) + .eq(DataSource::getDataType, dataSource.getDataType()) ); // 使用Set进行去重, Set uniqueDataSources = new HashSet<>(dataSourceList); Optional source = uniqueDataSources.stream().distinct().findFirst(); - if (source.isPresent()){ + if (source.isPresent()) { dataSource = source.get(); } @@ -86,34 +100,38 @@ public class DataSourceServiceImpl extends ServiceImpl() - .eq(DatabaseType::getDatabaseId, dataSource.getDatabaseType()) + .eq(DatabaseType::getDatabaseId, dataSource.getDataType()) ); - if (dataType.getDatabaseName().equals("mysql")||dataType.equals("MYSQL")){ - driveClass=dataType.getDriverManager(); + if (dataType.getDatabaseName().equals("mysql") || dataType.equals("MYSQL")) { + driveClass = dataType.getDriverManager(); } try { - if (dataType.getDriverManager() != null && dataType.getUrlPre() != null){ - if ("mysql".equals(dataType.getDatabaseName())){ + if (dataType.getDriverManager() != null && dataType.getUrlPre() != null) { + if ("mysql".equals(dataType.getDatabaseName())) { driveClass = dataType.getDriverManager(); - jdbcUrl = dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + "/" + dataSource.getDatabaseName() + "?" + dataSource.getConnectionParam(); + jdbcUrl = dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + "/" + + dataSource.getDatabaseName() + "?" + dataSource.getConnectionParam(); } - if ("oracle".equals(dataType.getDatabaseName())){ + if ("oracle".equals(dataType.getDatabaseName())) { driveClass = dataType.getDriverManager(); - jdbcUrl = dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + ":" + dataSource.getDatabaseName(); + jdbcUrl = dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + ":" + + dataSource.getDatabaseName(); } - if ("sqlserver".equals(dataType.getDatabaseName())){ + if ("sqlserver".equals(dataType.getDatabaseName())) { driveClass = dataType.getDriverManager(); - jdbcUrl = dataType.getUrlPre()+ dataSource.getHost() +":"+dataSource.getPort()+";databaseName="+dataSource.getDatabaseName(); + jdbcUrl = + dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + ";databaseName=" + + dataSource.getDatabaseName(); } flag = testDatasource(driveClass, jdbcUrl, dataSource.getUser(), dataSource.getPassword()); - }else if(dataType.getDriverManager()== null && dataType.getUrlPre() == null){ + } else if (dataType.getDriverManager() == null && dataType.getUrlPre() == null) { // redis //连接指定的redis Jedis jedis = new Jedis(dataSource.getHost(), Integer.valueOf(dataSource.getPort())); //如果有密码则需要下面这一行 - if (dataSource.getPassword() != null && !dataSource.getPassword().equals("")){ + if (dataSource.getPassword() != null && !dataSource.getPassword().equals("")) { jedis.auth(dataSource.getPassword()); } //查看服务是否运行,运行正常的话返回一个PONG,否则返回一个连接错误 @@ -125,13 +143,180 @@ public class DataSourceServiceImpl extends ServiceImpl getAssetList() { + List list = dataSourceMapper.selectAssetList(); + return list; + } + + @Override + public List getChildrenList(AssetDataSource assetDataSource) { + //查询数据源对象 + DataSource dataSource = this.getOne(new LambdaQueryWrapper() {{ + eq(DataSource::getName, assetDataSource.getName()); + eq(DataSource::getDatabaseName, assetDataSource.getDatabaseName()); + }}); + //数据库类型为mysql + if ("mysql".equals(dataSource.getDataType())) { + //根据id查询表描述 + List childrenList = dataSourceMapper.getChildrenList(assetDataSource.getId()); + //获取表描述的集合 + List
tableList = dataSourceMapper.selectTable(assetDataSource.getDatabaseName()); + //判断是否存在 + if (childrenList == null || childrenList.size() == 0) { + tableList.forEach(table -> { + Children children = Children.builder() + .name(table.getTableName()) + .as(table.getTableComment()) + .dataTotal(table.getTableRows()) + .type("dataTble") + .assetId(assetDataSource.getId()) + .build(); + //添加到数据库 + dataSourceMapper.addChildren(children); + + }); + } + //返回表描述 + return childrenList; + } + return null; + } + + + @Override + public Result addTbleDate(ShowTableReq showTableReq) { + // 查询数据源对象 + DataSource dataSource = this.getOne(new LambdaQueryWrapper<>() {{ + eq(DataSource::getName, showTableReq.getAssetDataSource().getName()); + eq(DataSource::getDatabaseName, showTableReq.getAssetDataSource().getDatabaseName()); + }}); + Children children = dataSourceMapper.selectChildren(showTableReq.getAssetDataSource().getId(), + showTableReq.getTableName()); + // 获取数据类型对象 + Result dataTypeResult = dataTypeController.getByType(dataSource.getDataType()); + if (Result.isError(dataTypeResult)) { + throw new RuntimeException("数据类型不存在"); + } + DatabaseType dataType = dataTypeResult.getData(); + String jdbcUrl = dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + "/" + + dataSource.getDatabaseName() + "?" + dataSource.getConnectionParam(); + List columnRespList = dataSourceMapper.selectColumn(dataSource.getDatabaseName(), + showTableReq.getTableName()); + List tableDataList = dataSourceMapper.getTableDataList(children.getId()); + + if (tableDataList == null || tableDataList.size() == 0) { + columnRespList.forEach(columnResp -> { + String javaType = getJavaType(dataType.getDriverManager(), jdbcUrl, dataSource.getUser(), + dataSource.getPassword(), showTableReq.getTableName(), columnResp.getColumnName()); + TableData tableData = TableData.builder() + .name(columnResp.getColumnName()) + .comment(columnResp.getColumnComment()) + .isPrimaryKey(columnResp.getColumnKey().equals("PRI") ? "Y" : "N") + .type(columnResp.getColumnType()) + .mappingType(javaType) + .length(columnResp.getLength()) + .decimalPlaces(columnResp.getNumericScale()) + .isNull(columnResp.getIsNullable().equals("YES") ? "Y" : "N") + .defaultValue(columnResp.getColumnDefault()) + .isDict("N") + .dictKey(null) + .childrenId(children.getId()) + .build(); + dataSourceMapper.addTableData(tableData); + }); + } + return Result.success(); + } + + @Override + public List selectTableList() { + List tableDataList = dataSourceMapper.selectTableData(); + return tableDataList; + } + + @Override + public CountResp selectTableDataCount() { + List assetDataSourceList = dataSourceMapper.selectAssetList(); + long size = assetDataSourceList.size(); + List childrenList = dataSourceMapper.selectChildrenList(); + long size1 = childrenList.size(); + long sum = childrenList.stream().mapToLong(Children::getDataTotal).sum(); + CountResp countResp = CountResp.builder() + .assetStructureCount(size) + .assetStructureTableCount(size1) + .assetStructureTableDataCount(sum) + .build(); + return countResp; + } + + public static String getJavaType(String driveClass, String url, String username, String password, String tableName, String columnName) { + Connection connection = buildConnection(driveClass, url, username, password); + PreparedStatement pst = null; + String javaType = null; + try { + String sql = "select * from " + tableName; + pst = connection.prepareStatement(sql); + ResultSetMetaData rsd = pst.executeQuery().getMetaData(); + for (int i = 1; i <= rsd.getColumnCount(); i++) { + if (rsd.getColumnName(i).equals(columnName)) { + if (rsd.getColumnClassName(i).equals("java.time.LocalDateTime")) { + javaType = "LocalDateTime"; + } else { + javaType = rsd.getColumnClassName(i).replace("java.lang.", ""); + } + } + } + } catch (SQLException e) { + throw new RuntimeException(e); + } finally { + try { + pst.close(); + pst = null; + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + return javaType; + } + + public static Connection buildConnection(String driveClass, String url, String username, String password) { + try { + Class.forName(driveClass); + Connection connection = DriverManager.getConnection(url, username, password); + return connection; + } catch (Exception e) { + return null; + } + } + + // 建立连接 public static boolean testDatasource(String driveClass, String url, String username, String password) { try { Class.forName(driveClass); diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/resources/mapper/data/DataSourceMapper.xml b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/resources/mapper/data/DataSourceMapper.xml index b5dc8de..18eba6e 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/resources/mapper/data/DataSourceMapper.xml +++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/resources/mapper/data/DataSourceMapper.xml @@ -9,7 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -31,4 +31,75 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select id, name, system_name, database_name, database_type, host, port, user, password, type, connection_param, status, init_num, max_num, max_wait_time, max_wait_size, remark, create_by, create_time, update_by, update_time from data_source + + + INSERT INTO `data_source`.`asset_data_source` (`name`, `system_name`, `database_name`, `type`) + VALUES (#{name}, #{systemName}, #{databaseName}, #{type}); + + + + INSERT INTO `data_source`.`children` (`name`, `as`, `data_total`, `type`, `asset_id`) + VALUES (#{name}, #{as}, #{dataTotal}, #{type}, #{assetId}); + + + + INSERT INTO `data_source`.`table_data` (`name`, `comment`, `is_primary_key`, `type`, `mapping_type`, `length`, `decimal_places`, `is_null`, `default_value`, `is_dict`, `dict_key`, `children_id`) + VALUES (#{name}, #{comment}, #{isPrimaryKey}, #{type}, #{mappingType}, #{length}, #{decimalPlaces}, #{isNull}, #{defaultValue}, #{isDict}, #{dictKey}, #{childrenId}); + + + + + + + + + + + + + + + +