From 54817d56297f7f38fe4fa3c76e625653cb926e4e Mon Sep 17 00:00:00 2001 From: sunshine7058 <2564255161@qq.com> Date: Fri, 26 Apr 2024 21:28:56 +0800 Subject: [PATCH] =?UTF-8?q?fix():=E9=87=8D=E6=9E=84=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../source/MuYuDataSourceApplication.java | 2 + .../service/impl/DataSourceServiceImpl.java | 652 ++++++++++-------- 2 files changed, 362 insertions(+), 292 deletions(-) diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/MuYuDataSourceApplication.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/MuYuDataSourceApplication.java index a14978d..272d6c6 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/MuYuDataSourceApplication.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/MuYuDataSourceApplication.java @@ -6,6 +6,7 @@ import com.muyu.common.security.annotation.EnableMyFeignClients; import com.muyu.common.swagger.annotation.EnableCustomSwagger2; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; /** * 系统模块 @@ -16,6 +17,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableCustomSwagger2 @EnableMyFeignClients @SpringBootApplication + public class MuYuDataSourceApplication { public static void main (String[] args) { SpringApplication.run(MuYuDataSourceApplication.class, args); 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 17e04ba..31dec6b 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,34 +1,40 @@ package com.muyu.data.source.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.utils.ObjUtils; import com.muyu.data.source.domain.AssetDataSource; import com.muyu.data.source.domain.Children; +import com.muyu.data.source.domain.DataSource; 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.mapper.DataSourceMapper; import com.muyu.data.source.service.AssetDataSourceService; import com.muyu.data.source.service.ChildrenService; +import com.muyu.data.source.service.DataSourceService; import com.muyu.data.source.service.DatabaseTypeService; import com.muyu.data.source.service.TableDataService; import java.sql.Connection; +import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; - -import com.muyu.common.core.utils.ObjUtils; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.muyu.data.source.mapper.DataSourceMapper; -import com.muyu.data.source.domain.DataSource; -import com.muyu.data.source.service.DataSourceService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import redis.clients.jedis.Jedis; /** @@ -39,315 +45,377 @@ import redis.clients.jedis.Jedis; */ @Slf4j @Service -public class DataSourceServiceImpl extends ServiceImpl implements DataSourceService { +public class DataSourceServiceImpl extends ServiceImpl implements DataSourceService { - @Autowired - private DataSourceMapper dataSourceMapper; - @Autowired - private AssetDataSourceService assetDataSourceService; + @Autowired + private DataSourceMapper dataSourceMapper; + @Autowired + private AssetDataSourceService assetDataSourceService; - @Autowired - private ChildrenService childrenService; + @Autowired + private ChildrenService childrenService; - @Autowired - private TableDataService tableDataService; - @Autowired - private DatabaseTypeService databaseTypeService; + @Autowired + private TableDataService tableDataService; + @Autowired + private DatabaseTypeService databaseTypeService; - /** - * 查询数据源列表 - * - * @param dataSource 数据源 - * @return 数据源 - */ - @Override - public List list(DataSource dataSource) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + private static Integer version = 1; + /** + * 查询数据源列表 + * + * @param dataSource 数据源 + * @return 数据源 + */ + @Override + public List list(DataSource dataSource) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - if (ObjUtils.notNull(dataSource.getName())) { - queryWrapper.like(DataSource::getName, dataSource.getName()); - } - - if (ObjUtils.notNull(dataSource.getSystemName())) { - queryWrapper.like(DataSource::getSystemName, dataSource.getSystemName()); - } - - if (ObjUtils.notNull(dataSource.getDatabaseName())) { - queryWrapper.like(DataSource::getDatabaseName, dataSource.getDatabaseName()); - } - - return list(queryWrapper); + if (ObjUtils.notNull(dataSource.getName())) { + queryWrapper.like(DataSource::getName, dataSource.getName()); } - /** - * 测试连接 - * - * @param - */ - @Override - public Boolean testConnection(DataSource dataSource) { - DatabaseType dataType = databaseTypeService.getOne(new LambdaQueryWrapper<>() {{ - eq(DatabaseType::getDatabaseName, dataSource.getDataType()); - }}); + if (ObjUtils.notNull(dataSource.getSystemName())) { + queryWrapper.like(DataSource::getSystemName, dataSource.getSystemName()); + } - String jdbcUrl = ""; - String driveClass = ""; - boolean flag = false; - if (dataType.getDatabaseName().equals("mysql") || dataType.equals("MYSQL")) { - driveClass = dataType.getDriverManager(); + if (ObjUtils.notNull(dataSource.getDatabaseName())) { + queryWrapper.like(DataSource::getDatabaseName, dataSource.getDatabaseName()); + } + return list(queryWrapper); + } + + /** + * 测试连接 + * + * @param + */ + @Override + public Boolean testConnection(DataSource dataSource) { + DatabaseType dataType = databaseTypeService.getOne(new LambdaQueryWrapper<>() {{ + eq(DatabaseType::getDatabaseName, dataSource.getDataType()); + }}); + + String jdbcUrl = ""; + String driveClass = ""; + boolean flag = false; + if (dataType.getDatabaseName().equals("mysql") || dataType.equals("MYSQL")) { + driveClass = dataType.getDriverManager(); + + } + try { + 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(); } + if ("oracle".equals(dataType.getDatabaseName())) { + driveClass = dataType.getDriverManager(); + jdbcUrl = dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + ":" + + dataSource.getDatabaseName(); + } + if ("sqlserver".equals(dataType.getDatabaseName())) { + driveClass = dataType.getDriverManager(); + 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) { + // redis + //连接指定的redis + Jedis jedis = new Jedis(dataSource.getHost(), Integer.valueOf(dataSource.getPort())); + //如果有密码则需要下面这一行 + if (dataSource.getPassword() != null && !dataSource.getPassword().equals("")) { + jedis.auth(dataSource.getPassword()); + } + //查看服务是否运行,运行正常的话返回一个PONG,否则返回一个连接错误 try { - 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(); - } - if ("oracle".equals(dataType.getDatabaseName())) { - driveClass = dataType.getDriverManager(); - jdbcUrl = dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + ":" - + dataSource.getDatabaseName(); - } - if ("sqlserver".equals(dataType.getDatabaseName())) { - driveClass = dataType.getDriverManager(); - 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) { - // redis - //连接指定的redis - Jedis jedis = new Jedis(dataSource.getHost(), Integer.valueOf(dataSource.getPort())); - //如果有密码则需要下面这一行 - if (dataSource.getPassword() != null && !dataSource.getPassword().equals("")) { - jedis.auth(dataSource.getPassword()); - } - //查看服务是否运行,运行正常的话返回一个PONG,否则返回一个连接错误 - try { - jedis.ping(); - flag = true; - } catch (Exception e) { - flag = false; - } - } - return flag; + jedis.ping(); + flag = true; } catch (Exception e) { - return flag; + flag = false; } - + } + return flag; + } catch (Exception e) { + return flag; } - /** - * 同步数据 - * - * @param dataSource - * @return - */ - @Override - public Boolean syncConnection(DataSource dataSource) { - if ("mysql".equals(dataSource.getDataType())) { - AssetDataSource assetDataSource = AssetDataSource.builder() - .name(dataSource.getName()) - .systemName(dataSource.getSystemName()) - .databaseName(dataSource.getDatabaseName()) - .type("dataSource") - .build(); - return assetDataSourceService.save(assetDataSource); - } - return false; + } + + /** + * 同步数据 + * + * @param dataSource + * @return + */ + @Override + public Boolean syncConnection(DataSource dataSource) { + if ("mysql".equals(dataSource.getDataType())) { + AssetDataSource assetDataSource = AssetDataSource.builder() + .name(dataSource.getName()) + .systemName(dataSource.getSystemName()) + .databaseName(dataSource.getDatabaseName()) + .type("dataSource") + .build(); + return assetDataSourceService.save(assetDataSource); } + return false; + } - @Override - public List getAssetList() { - List assetDataSourceList = assetDataSourceService.list(); - return assetDataSourceList; - } + @Override + public List getAssetList() { + List assetDataSourceList = assetDataSourceService.list(); + return assetDataSourceList; + } - @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 = childrenService.list(new LambdaQueryWrapper() {{ - eq(Children::getAssetId, assetDataSource.getId()); - }}); - //获取表描述的集合 - List tableList = dataSourceMapper.selectTable(assetDataSource.getDatabaseName()); - //判断是否存在 - if (childrenList == null || childrenList.size() == 0) { - tableList.forEach(table -> { - Children children = Children.builder() - .name(table.getTableName()) - .annotation(table.getTableComment()) - .dataTotal(table.getTableRows()) - .type("dataTable") - .assetId(assetDataSource.getId()) - .build(); - //添加到数据库 - childrenService.save(children); - - }); - } - //返回表描述 - return childrenList; - } - return null; - } - - - @Override - public void addTbleDate(ShowTableReq showTableReq) { - // 查询数据源对象 - - - - - - - - - DataSource dataSource = this.getOne(new LambdaQueryWrapper<>() {{ - eq(DataSource::getName, showTableReq.getAssetStructure().getName()); - eq(DataSource::getDatabaseName, showTableReq.getAssetStructure().getDatabaseName()); - }}); - Children children = childrenService.getOne(new LambdaQueryWrapper<>() {{ - eq(Children::getAssetId, showTableReq.getAssetStructure().getId()); - eq(Children::getName, showTableReq.getTableName()); - }}); - // 获取数据类型对象 - DatabaseType dataType = databaseTypeService.getOne(new LambdaQueryWrapper<>() { - { - eq(DatabaseType::getDatabaseName, dataSource.getDataType()); - } - }); - String jdbcUrl = dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + "/" + @Override + public List getChildrenList(AssetDataSource assetDataSource) { + //查询数据源对象 + DataSource dataSource = this.getOne(new LambdaQueryWrapper() {{ + eq(DataSource::getName, assetDataSource.getName()); + eq(DataSource::getDatabaseName, assetDataSource.getDatabaseName()); + }}); + DatabaseType databaseType = databaseTypeService.getOne(new LambdaQueryWrapper() {{ + eq(DatabaseType::getDatabaseName, dataSource.getDataType()); + }}); + //数据库类型为mysql + if ("mysql".equals(dataSource.getDataType())) { +// 根据id查询表描述 + List childrenList = childrenService.list(new LambdaQueryWrapper() {{ + eq(Children::getAssetId, assetDataSource.getId()); + }}); + if (childrenList == null || childrenList.size() == 0) { + String jdbcUrl = databaseType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + "/" + dataSource.getDatabaseName() + "?" + dataSource.getConnectionParam(); - List columnRespList = dataSourceMapper.selectColumn(dataSource.getDatabaseName(), - showTableReq.getTableName()); - List tableDataList = tableDataService.list(new LambdaQueryWrapper<>() {{ - eq(TableData::getChildrenId, 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(); - tableDataService.save(tableData); - }); - } - - } - - - @Override - public CountResp selectTableDataCount() { - List assetDataSourceList = assetDataSourceService.list(); - long size = assetDataSourceList.size(); - List childrenList = childrenService.list(); - 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; - } - - @Override - public List selectTableData(Long id) { - List tableDataList = tableDataService.list(new LambdaQueryWrapper<>() {{ - eq(TableData::getChildrenId, id); - }}); - return tableDataList; - } - - - @Override - public CountResp getTableDataCount(Long id) { - List childrenList = childrenService.list(new LambdaQueryWrapper<>() {{ - eq(Children::getAssetId, id); - }}); - long size = childrenList.size(); - long sum = childrenList.stream().mapToLong(Children::getDataTotal).sum(); - return CountResp.builder() - .assetStructureCount(0L) - .assetStructureTableCount(size) - .assetStructureTableDataCount(sum) - .build(); - } - - 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.", ""); - } - } - } + Class.forName(databaseType.getDriverManager()); + + Connection conn = DriverManager.getConnection(jdbcUrl, dataSource.getUser(), + dataSource.getPassword()); + DatabaseMetaData metaData = conn.getMetaData(); + Statement statement = conn.createStatement(); + ResultSet rs = statement.executeQuery( + "select * from information_schema.tables where TABLE_SCHEMA = " + + "'" + dataSource.getDatabaseName() + "'"); + ResultSet tableRet = metaData.getTables(conn.getCatalog(), "%", "%", new String[]{"TABLE"}); + while (rs.next()) { + String tableName = rs.getString("TABLE_NAME"); + String tableComment = rs.getString("TABLE_COMMENT"); + ; + + Children children = Children.builder() + .name(tableName) + .annotation(tableComment) + .dataTotal(Long.valueOf(rs.getRow())) + .type("dataTable") + .build(); + children.setAssetId(assetDataSource.getId()); + childrenService.save(children); + } + conn.close(); + rs.close(); + tableRet.close(); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); } catch (SQLException e) { - throw new RuntimeException(e); - } finally { - try { - pst.close(); - pst = null; - } catch (SQLException e) { - throw new RuntimeException(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; - } - } + } +// + //获取表描述的集合 +// List
tableList = dataSourceMapper.selectTable(assetDataSource.getDatabaseName()); + //判断是否存在 +// if (childrenList == null || childrenList.size() == 0) { +// tableList.forEach(table -> { +// Children children = Children.builder() +// .name(table.getTableName()) +// .annotation(table.getTableComment()) +// .dataTotal(table.getTableRows()) +// .type("dataTable") +// .assetId(assetDataSource.getId()) +// .build(); +// //添加到数据库 +// childrenService.save(children); + +// }); + + //返回表描述 + return childrenList; - // 建立连接 - 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; - } } + return null; + } + + + @Override + public void addTbleDate(ShowTableReq showTableReq) { +// if (version == 1){ + DataSource dataSource = this.getOne(new LambdaQueryWrapper<>() {{ + eq(DataSource::getName, showTableReq.getAssetStructure().getName()); + eq(DataSource::getDatabaseName, showTableReq.getAssetStructure().getDatabaseName()); + }}); + Children children = childrenService.getOne(new LambdaQueryWrapper<>() {{ + eq(Children::getAssetId, showTableReq.getAssetStructure().getId()); + eq(Children::getName, showTableReq.getTableName()); + }}); + // 获取数据类型对象 + DatabaseType dataType = databaseTypeService.getOne(new LambdaQueryWrapper<>() { + { + eq(DatabaseType::getDatabaseName, dataSource.getDataType()); + } + }); + String jdbcUrl = dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + "/" + + dataSource.getDatabaseName() + "?" + dataSource.getConnectionParam(); + + List tableDataList = tableDataService.list(new LambdaQueryWrapper<>() {{ + eq(TableData::getChildrenId, children.getId()); + }}); + + if (tableDataList == null || tableDataList.size() == 0) { + try { + Class.forName(dataType.getDriverManager()); + Connection connection = DriverManager.getConnection(jdbcUrl, dataSource.getUser(), dataSource.getPassword()); + Statement statement = connection.createStatement(); + String sql = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS where table_schema ='" + dataSource.getDatabaseName() + "' AND table_name = '" + showTableReq.getTableName() + "'"; + ResultSet rs = statement.executeQuery(sql); + while (rs.next()) { + String columnName = rs.getString("COLUMN_NAME"); + String columnComment = rs.getString("COLUMN_COMMENT"); + String columnKey = rs.getString("COLUMN_KEY"); + String columnType = rs.getString("DATA_TYPE"); + String javaType = getJavaType(dataType.getDriverManager(), jdbcUrl, dataSource.getUser(), dataSource.getPassword(), showTableReq.getTableName(), columnName); + String type = rs.getString("COLUMN_TYPE"); + int length = 0; + Pattern pattern = Pattern.compile("\\d+"); + Matcher matcher = pattern.matcher(type); + if (matcher.find()) { + String numberString = matcher.group(); + length = Integer.parseInt(numberString); + } + int numericScale = rs.getInt("NUMERIC_SCALE"); + String isNullable = rs.getString("IS_NULLABLE"); + String columnDefault = rs.getString("COLUMN_DEFAULT"); + TableData tableData = TableData.builder() + .name(columnName) + .comment(columnComment) + .isPrimaryKey(columnKey.equals("PRI") ? "Y" : "N") + .type(columnType) + .mappingType(javaType) + .length(Long.valueOf(length)) + .decimalPlaces(Long.valueOf(numericScale)) + .isNull(isNullable.equals("YES") ? "Y" : "N") + .defaultValue(columnDefault) + .isDict("N") + .dictKey(null) + .childrenId(children.getId()) + .build(); + tableDataService.save(tableData); + } + connection.close(); + rs.close(); + } catch (Exception e) { + throw new RuntimeException(e); + } +// version ++; +// } + } + } + + @Override + public CountResp selectTableDataCount() { + List assetDataSourceList = assetDataSourceService.list(); + long size = assetDataSourceList.size(); + List childrenList = childrenService.list(); + 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; + } + + @Override + public List selectTableData(Long id) { + List tableDataList = tableDataService.list(new LambdaQueryWrapper<>() {{ + eq(TableData::getChildrenId, id); + }}); + return tableDataList; + } + + + @Override + public CountResp getTableDataCount(Long id) { + List childrenList = childrenService.list(new LambdaQueryWrapper<>() {{ + eq(Children::getAssetId, id); + }}); + long size = childrenList.size(); + long sum = childrenList.stream().mapToLong(Children::getDataTotal).sum(); + return CountResp.builder() + .assetStructureCount(0L) + .assetStructureTableCount(size) + .assetStructureTableDataCount(sum) + .build(); + } + + + 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); + DriverManager.getConnection(url, username, password); + return true; + } catch (Exception e) { + return false; + } + } }