feat: 同步资产结构到数据库

master
baize 2024-04-23 09:28:42 +08:00
parent f9f39497ab
commit d0131f4d97
7 changed files with 156 additions and 4 deletions

View File

@ -0,0 +1,44 @@
package com.muyu.data.source.domain;
import com.muyu.common.core.web.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* AssetStructure
*
* @author DeKangLiu
* on 2024/4/22
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AssetStructure{
/** 接入源名称 */
private String accessSourceName;
/** 数据来源系统名称 */
private String dataSourceSystemName;
/** 数据库名称 */
private String databaseName;
/**数据库表名*/
private String databaseTableName;
/**数据量*/
private Integer dataVolume;
/**数据条数*/
private Integer dataQuantity;
/**是否核心*/
private String coreOrNot;
}

View File

@ -82,6 +82,13 @@
<groupId>com.muyu</groupId>
<artifactId>muyu-common-swagger</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.20</version>
<scope>compile</scope>
</dependency>
</dependencies>

View File

@ -4,6 +4,7 @@ import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.muyu.data.source.domain.AccessType;
import com.muyu.data.source.domain.AssetStructure;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -121,4 +122,9 @@ public class DataSourceController extends BaseController {
public Result testConnection(@RequestBody DataSourceSaveReq dataSourceSaveReq){
return dataSourceService.testConnection(dataSourceSaveReq);
}
@PostMapping("/synchronization")
public Result synchronization(@RequestBody DataSource dataSource){
return dataSourceService.synchronization(dataSource);
}
}

View File

@ -3,7 +3,9 @@ package com.muyu.data.source.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.data.source.domain.AccessType;
import com.muyu.data.source.domain.AssetStructure;
import com.muyu.data.source.domain.DataSource;
import org.apache.ibatis.annotations.Param;
/**
* Mapper
@ -14,4 +16,8 @@ import com.muyu.data.source.domain.DataSource;
public interface DataSourceMapper extends BaseMapper<DataSource> {
List<AccessType> findAccessType();
void addAssets(@Param("assetStructure") List<AssetStructure> assetStructure);
void addAssets1(AssetStructure assetStructure);
}

View File

@ -4,6 +4,7 @@ import java.util.List;
import com.muyu.common.core.domain.Result;
import com.muyu.data.source.domain.AccessType;
import com.muyu.data.source.domain.AssetStructure;
import com.muyu.data.source.domain.DataSource;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.data.source.domain.req.DataSourceSaveReq;
@ -26,4 +27,7 @@ public interface DataSourceService extends IService<DataSource> {
List<AccessType> findAccessType();
Result testConnection(DataSourceSaveReq dataSourceQueryReq);
Result synchronization(DataSource dataSource);
}

View File

@ -1,14 +1,15 @@
package com.muyu.data.source.service.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.ObjUtils;
import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.data.source.domain.AccessType;
import com.muyu.data.source.domain.AssetStructure;
import com.muyu.data.source.domain.req.DataSourceSaveReq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -115,4 +116,53 @@ public class DataSourceServiceImpl extends ServiceImpl<DataSourceMapper, DataSou
return Result.error("连接失败");
}
@Override
public Result synchronization(DataSource dataSource) {
AssetStructure assetStructure = new AssetStructure();
ArrayList<String> tableNames = new ArrayList<>();
List<AssetStructure> list = new ArrayList<>();
String user=dataSource.getDatabaseUserName();
String password=dataSource.getDatabaseUserPassword();
String jdbcDriver="com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://" + dataSource.getHostAddress() + ":" + dataSource.getHostPort() + "/" + dataSource.getDatabaseName();
String query="show tables ";
try(Connection con=DriverManager.getConnection(url,user,password);
Statement stmt=con.createStatement();
ResultSet rs= stmt.executeQuery(query)) {
ResultSetMetaData rsmd = rs.getMetaData();
// 5. 处理查询结果
while (rs.next()) {
String tableName = rs.getString(1);
tableNames.add(tableName);
}
System.out.println(tableNames);
for (String tableName : tableNames) {
assetStructure.setAccessSourceName(dataSource.getAccessSourceName());
assetStructure.setDatabaseName(dataSource.getDatabaseName());
assetStructure.setDataSourceSystemName(dataSource.getDataSourceSystemName());
for (int a = 0; a < rsmd.getColumnCount(); a++) {
assetStructure.setDatabaseTableName(rsmd.getTableName(a+1));
assetStructure.setDataQuantity(rsmd.getColumnDisplaySize(a+1));
assetStructure.setDataVolume(rsmd.getColumnDisplaySize(a+1));
}
assetStructure.setDatabaseTableName(tableName);
// assetStructure.setCreateBy(SecurityUtils.getUsername());
// assetStructure.setCreateTime(new Date());
dataSourceMapper.addAssets1(assetStructure);
}
return Result.success("同步成功");
} catch (SQLException e) {
System.out.println("连接失败"+e.getMessage());
return Result.error("同步失败");
}
}
}

View File

@ -29,6 +29,41 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectDataSourceVo">
select id, access_source_name, data_source_system_name, host_address, host_port, data_access_type_id, database_name, data_connection_parameter, initial_quantity, maximum_quantity, maximum_time, maximum_frequency, remark, create_by, create_time, update_by, update_time ,database_user_name ,database_user_password from data_source
</sql>
<insert id="addAssets">
INSERT INTO `data_management`.`asset_structure`
(`access_source_name`, `data_source_system_name`, `database_name`, `database_table_name`, `data_volume`, `data_quantity`, `core_or_not`)
VALUES
<foreach collection="assetStructure" item="assetStructure" separator=",">
(
#{assetStructure.accessSourceName},
#{assetStructure.dataSourceSystemName},
#{assetStructure.databaseName},
#{assetStructure.databaseTableName},
#{assetStructure.dataVolume},
#{assetStructure.dataQuantity},
'Y'
)
</foreach>
</insert>
<insert id="addAssets1">
INSERT INTO `data_management`.`asset_structure`
(`access_source_name`, `data_source_system_name`, `database_name`, `database_table_name`, `data_volume`, `data_quantity`, `core_or_not`)
VALUES
(
#{accessSourceName},
#{dataSourceSystemName},
#{databaseName},
#{databaseTableName},
#{dataVolume},
#{dataQuantity},
'Y'
)
</insert>
<select id="findAccessType" resultType="com.muyu.data.source.domain.AccessType">
select * from access_type
</select>