feat: 新增资产展示功能

资产展示功能,会展示选中数据资产表的表信息,以及表资产信息(数据默认只展示表中第一条数据),表中没有数据,则展示的数据值为null
master
yaoxin 2024-04-27 20:30:55 +08:00
parent cf644531f8
commit a098a62a6b
4 changed files with 84 additions and 207 deletions

View File

@ -1,11 +1,21 @@
package com.muyu.etl.domain; package com.muyu.etl.domain;
import com.muyu.common.security.utils.SecurityUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.commons.lang3.builder.ToStringStyle;
import com.muyu.common.core.annotation.Excel; import com.muyu.common.core.annotation.Excel;
import com.muyu.common.core.web.domain.BaseEntity; import com.muyu.common.core.web.domain.BaseEntity;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* asset_model * asset_model
@ -13,6 +23,11 @@ import java.util.List;
* @author ruoyi * @author ruoyi
* @date 2024-04-22 * @date 2024-04-22
*/ */
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AssetModel extends BaseEntity public class AssetModel extends BaseEntity
{ {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -86,149 +101,4 @@ public class AssetModel extends BaseEntity
public List<DictionaryData> getDictionaryDatas() { public List<DictionaryData> getDictionaryDatas() {
return dictionaryDatas; return dictionaryDatas;
} }
public void setDictionaryDatas(List<DictionaryData> dictionaryDatas) {
this.dictionaryDatas = dictionaryDatas;
}
public void setId(Long id)
{
this.id = id;
}
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
public Long getId()
{
return id;
}
public void setDataAssetId(Long dataAssetId)
{
this.dataAssetId = dataAssetId;
}
public Long getDataAssetId()
{
return dataAssetId;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setComment(String comment)
{
this.comment = comment;
}
public String getComment()
{
return comment;
}
public void setIsPrimaryKey(String isPrimaryKey)
{
this.isPrimaryKey = isPrimaryKey;
}
public String getIsPrimaryKey()
{
return isPrimaryKey;
}
public void setType(String type)
{
this.type = type;
}
public String getType()
{
return type;
}
public void setMappingType(String mappingType)
{
this.mappingType = mappingType;
}
public String getMappingType()
{
return mappingType;
}
public void setLength(String length)
{
this.length = length;
}
public String getLength()
{
return length;
}
public void setDecimalPlaces(String decimalPlaces)
{
this.decimalPlaces = decimalPlaces;
}
public String getDecimalPlaces()
{
return decimalPlaces;
}
public void setIsNull(String isNull)
{
this.isNull = isNull;
}
public String getIsNull()
{
return isNull;
}
public void setIsDict(String isDict)
{
this.isDict = isDict;
}
public String getIsDict()
{
return isDict;
}
public void setDictKey(String dictKey)
{
this.dictKey = dictKey;
}
public String getDictKey()
{
return dictKey;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("dataAssetId", getDataAssetId())
.append("name", getName())
.append("comment", getComment())
.append("isPrimaryKey", getIsPrimaryKey())
.append("type", getType())
.append("mappingType", getMappingType())
.append("length", getLength())
.append("decimalPlaces", getDecimalPlaces())
.append("isNull", getIsNull())
.append("isDict", getIsDict())
.append("defaultValue", getDefaultValue())
.append("dictKey", getDictKey())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
} }

View File

@ -1,16 +1,29 @@
package com.muyu.etl.domain; package com.muyu.etl.domain;
import com.muyu.common.security.utils.SecurityUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.commons.lang3.builder.ToStringStyle;
import com.muyu.common.core.annotation.Excel; import com.muyu.common.core.annotation.Excel;
import com.muyu.common.core.web.domain.BaseEntity; import com.muyu.common.core.web.domain.BaseEntity;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
/** /**
* data_asset * data_asset
* *
* @author ruoyi * @author ruoyi
* @date 2024-04-22 * @date 2024-04-22
*/ */
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DataAsset extends BaseEntity public class DataAsset extends BaseEntity
{ {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -109,4 +122,21 @@ public class DataAsset extends BaseEntity
.append("remark", getRemark()) .append("remark", getRemark())
.toString(); .toString();
} }
public DataAsset dataAssetBuilder(DataSource dataSource, ResultSet resultSet) {
try {
return DataAsset.builder()
.tableName(resultSet.getString("t_name"))
.tableComment(resultSet.getString("table_comment") == null ? "-":resultSet.getString("table_comment"))
.tableCount(Long.valueOf(resultSet.getString("table_rows")))
.fields(Long.valueOf(resultSet.getString("fields")))
.dataSourceId(dataSource.getId())
.createBy(SecurityUtils.getUsername())
.createTime(new Date())
.build();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
} }

View File

@ -3,6 +3,7 @@ package com.muyu.etl.domain.custom;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -15,6 +16,7 @@ import java.util.Map;
* @Date 2024/4/21 9:54 * @Date 2024/4/21 9:54
*/ */
@Data @Data
@SuperBuilder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class AssetsModule { public class AssetsModule {
@ -23,4 +25,11 @@ public class AssetsModule {
private List<TableAssets> tableAssets; private List<TableAssets> tableAssets;
private TableDetail tableDetail; private TableDetail tableDetail;
public AssetsModule assetsModuleBuilder(List<Map<String, VTClass>> kvtList, HashMap<String, String> map) {
return AssetsModule.builder()
.kvtList(kvtList)
.structure(map)
.build();
}
} }

View File

@ -224,6 +224,7 @@ public class DataSourceServiceImpl implements IDataSourceService
List<Map<String, VTClass>> kvtList = new ArrayList<>(); List<Map<String, VTClass>> kvtList = new ArrayList<>();
HashMap<String, String> map = new HashMap<>(); HashMap<String, String> map = new HashMap<>();
try { try {
//进行jdbc驱动
Class.forName(dataSource.getJdbcDriver()); Class.forName(dataSource.getJdbcDriver());
conn = DriverManager.getConnection(jdbcUrl, dataSource.getUsername(), dataSource.getPassword()); conn = DriverManager.getConnection(jdbcUrl, dataSource.getUsername(), dataSource.getPassword());
} catch (SQLException | ClassNotFoundException e) { } catch (SQLException | ClassNotFoundException e) {
@ -233,9 +234,10 @@ public class DataSourceServiceImpl implements IDataSourceService
PreparedStatement pst = conn.prepareStatement(dataSource.getSql()); PreparedStatement pst = conn.prepareStatement(dataSource.getSql());
ResultSet resultSet = pst.executeQuery(); ResultSet resultSet = pst.executeQuery();
ResultSetMetaData rsd = resultSet.getMetaData(); ResultSetMetaData rsd = resultSet.getMetaData();
//循环查询到的每一列信息
for(int i = 1; i <= rsd.getColumnCount(); i++) { for(int i = 1; i <= rsd.getColumnCount(); i++) {
String substring = rsd.getColumnClassName(i).substring(rsd.getColumnClassName(i).indexOf("java.lang.") + 10); String[] split = rsd.getColumnClassName(i).split("\\.");
map.put(rsd.getColumnName(i),substring); map.put(rsd.getColumnName(i),split[split.length-1]);
} }
int columnCount = rsd.getColumnCount(); int columnCount = rsd.getColumnCount();
// 遍历每一行的数据 // 遍历每一行的数据
@ -255,13 +257,13 @@ public class DataSourceServiceImpl implements IDataSourceService
kvtList.add(stringVTClassHashMap); kvtList.add(stringVTClassHashMap);
} }
pst.close(); pst.close();
conn.close();
pst = null;
conn = null;
} catch(SQLException e) { } catch(SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
AssetsModule assetsModule = new AssetsModule(); return new AssetsModule().assetsModuleBuilder(kvtList,map);
assetsModule.setKvtList(kvtList);
assetsModule.setStructure(map);
return assetsModule;
} }
public Map<String,String> getTypeMap(DataSource dataSource, String tableName){ public Map<String,String> getTypeMap(DataSource dataSource, String tableName){
@ -276,9 +278,8 @@ public class DataSourceServiceImpl implements IDataSourceService
Connection conn = null; Connection conn = null;
Map<String, String> map = new HashMap<>(); Map<String, String> map = new HashMap<>();
try { try {
Class.forName(dataSource.getJdbcDriver());
conn = DriverManager.getConnection(jdbcUrl, dataSource.getUsername(), dataSource.getPassword()); conn = DriverManager.getConnection(jdbcUrl, dataSource.getUsername(), dataSource.getPassword());
} catch (SQLException | ClassNotFoundException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
try { try {
@ -294,7 +295,6 @@ public class DataSourceServiceImpl implements IDataSourceService
}else{ }else{
substring = rsd.getColumnClassName(i); substring = rsd.getColumnClassName(i);
} }
map.put(rsd.getColumnName(i),substring); map.put(rsd.getColumnName(i),substring);
} }
pst.close(); pst.close();
@ -315,9 +315,8 @@ public class DataSourceServiceImpl implements IDataSourceService
long endTime = new Date().getTime(); long endTime = new Date().getTime();
log.info("查询表字段类型信息耗时:"+(endTime-staTime)+"ms"); log.info("查询表字段类型信息耗时:"+(endTime-staTime)+"ms");
try { try {
Class.forName(dataSource.getJdbcDriver());
conn = DriverManager.getConnection(jdbcUrl, dataSource.getUsername(), dataSource.getPassword()); conn = DriverManager.getConnection(jdbcUrl, dataSource.getUsername(), dataSource.getPassword());
} catch (SQLException | ClassNotFoundException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
try { try {
@ -329,40 +328,22 @@ public class DataSourceServiceImpl implements IDataSourceService
primaryKeyColumnName = primaryKeyRS.getString("COLUMN_NAME"); primaryKeyColumnName = primaryKeyRS.getString("COLUMN_NAME");
} }
while (columnsRS.next()) { while (columnsRS.next()) {
AssetModel assetModel = new AssetModel(); AssetModel build = AssetModel.builder()
String columnName = columnsRS.getString("COLUMN_NAME"); .createBy(SecurityUtils.getUsername())
String typeName = columnsRS.getString("TYPE_NAME"); .createTime(new Date())
int columnSize = columnsRS.getInt("COLUMN_SIZE"); .length(String.valueOf(columnsRS.getInt("COLUMN_SIZE")))
int decimalDigits = columnsRS.getInt("DECIMAL_DIGITS"); .decimalPlaces(String.valueOf(columnsRS.getInt("DECIMAL_DIGITS")))
String isNullable = columnsRS.getString("IS_NULLABLE"); .name(columnsRS.getString("COLUMN_NAME"))
String columnDef = columnsRS.getString("COLUMN_DEF"); .type(columnsRS.getString("TYPE_NAME"))
String remarks = columnsRS.getString("REMARKS"); .mappingType(typeMap.get(columnsRS.getString("COLUMN_NAME")))
assetModel.setCreateTime(new Date()); .dictKey("")
assetModel.setCreateBy(SecurityUtils.getUsername()); .isDict("")
assetModel.setLength(String.valueOf(columnSize)); .isNull(columnsRS.getString("IS_NULLABLE").substring(0, 1))
assetModel.setDecimalPlaces(String.valueOf(decimalDigits)); .isPrimaryKey(columnsRS.getString("COLUMN_NAME").equals(primaryKeyColumnName) ? "Y" : "N")
assetModel.setName(columnName); .comment(columnsRS.getString("REMARKS")==null || columnsRS.getString("REMARKS")=="" ? "-" : columnsRS.getString("REMARKS"))
assetModel.setType(typeName); .defaultValue(columnsRS.getString("COLUMN_DEF")==null || columnsRS.getString("COLUMN_DEF")=="" ? "-":columnsRS.getString("COLUMN_DEF"))
assetModel.setMappingType(typeMap.get(columnName)); .build();
assetModel.setDictKey(""); assetModels.add(build);
assetModel.setIsDict("");
assetModel.setIsNull(isNullable.substring(0,1));
if (columnName.equals(primaryKeyColumnName)){
assetModel.setIsPrimaryKey("Y");
}else{
assetModel.setIsPrimaryKey("N");
}
if (remarks==null || remarks==""){
assetModel.setComment("-");
}else{
assetModel.setComment(remarks);
}
if (columnDef==null || columnDef==""){
assetModel.setDefaultValue("-");
}else{
assetModel.setDefaultValue(columnDef);
}
assetModels.add(assetModel);
} }
columnsRS.close(); columnsRS.close();
primaryKeyRS.close(); primaryKeyRS.close();
@ -459,20 +440,7 @@ public class DataSourceServiceImpl implements IDataSourceService
ResultSet resultSet = ps.executeQuery(); ResultSet resultSet = ps.executeQuery();
while (resultSet.next()) { while (resultSet.next()) {
DataAsset dataAsset = new DataAsset(); dataAssets.add(new DataAsset().dataAssetBuilder(dataSource, resultSet));
// ... (保留原方法中对dataAsset的设置逻辑)
dataAsset.setTableName(resultSet.getString("t_name"));
if (resultSet.getString("table_comment")==null || "".equals(resultSet.getString("table_comment"))){
dataAsset.setTableComment("-");
}else{
dataAsset.setTableComment(resultSet.getString("table_comment"));
}
dataAsset.setTableCount(Long.valueOf(resultSet.getString("table_rows")));
dataAsset.setFields(Long.valueOf(resultSet.getString("fields")));
dataAsset.setDataSourceId(dataSource.getId());
dataAsset.setCreateBy(SecurityUtils.getUsername());
dataAsset.setCreateTime(new Date());
dataAssets.add(dataAsset);
} }
return dataAssets; return dataAssets;
}); });
@ -541,10 +509,10 @@ public class DataSourceServiceImpl implements IDataSourceService
Result<List<Dictionary>> result = dictionaryService.getDictionaryDataList(strings); Result<List<Dictionary>> result = dictionaryService.getDictionaryDataList(strings);
List<Dictionary> data = result.getData(); List<Dictionary> data = result.getData();
assetModels.stream() assetModels.stream()
.forEach(assetModel1 -> { .forEach(assetModelInfo -> {
data.stream().forEach(dataInfo -> { data.stream().forEach(dataInfo -> {
if (assetModel1.getDictKey().equals(dataInfo.getDictionaryKey())){ if (assetModelInfo.getDictKey().equals(dataInfo.getDictionaryKey())){
assetModel1.setDictionaryDatas(dataInfo.getDictionaryDataList()); assetModelInfo.setDictionaryDatas(dataInfo.getDictionaryDataList());
} }
}); });
}); });