Commit 4e494e0e authored by wenmo's avatar wenmo

元数据表

parent 83671764
...@@ -119,4 +119,12 @@ public class DataBaseController { ...@@ -119,4 +119,12 @@ public class DataBaseController {
databaseService.updateById(dataBase); databaseService.updateById(dataBase);
return Result.succeed(dataBase,"状态刷新完成"); return Result.succeed(dataBase,"状态刷新完成");
} }
/**
* 获取元数据的表
*/
@GetMapping("/getSchemasAndTables")
public Result getSchemasAndTables(@RequestParam Integer id) {
return Result.succeed(databaseService.getSchemasAndTables(id),"获取成功");
}
} }
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.dlink.service; ...@@ -2,6 +2,7 @@ package com.dlink.service;
import com.dlink.db.service.ISuperService; import com.dlink.db.service.ISuperService;
import com.dlink.model.DataBase; import com.dlink.model.DataBase;
import com.dlink.model.Schema;
import java.util.List; import java.util.List;
...@@ -18,4 +19,6 @@ public interface DataBaseService extends ISuperService<DataBase> { ...@@ -18,4 +19,6 @@ public interface DataBaseService extends ISuperService<DataBase> {
boolean saveOrUpdateDataBase(DataBase dataBase); boolean saveOrUpdateDataBase(DataBase dataBase);
List<DataBase> listEnabledAll(); List<DataBase> listEnabledAll();
List<Schema> getSchemasAndTables(Integer id);
} }
...@@ -5,7 +5,9 @@ import com.dlink.assertion.Asserts; ...@@ -5,7 +5,9 @@ import com.dlink.assertion.Asserts;
import com.dlink.db.service.impl.SuperServiceImpl; import com.dlink.db.service.impl.SuperServiceImpl;
import com.dlink.mapper.DataBaseMapper; import com.dlink.mapper.DataBaseMapper;
import com.dlink.metadata.driver.Driver; import com.dlink.metadata.driver.Driver;
import com.dlink.metadata.driver.DriverConfig;
import com.dlink.model.DataBase; import com.dlink.model.DataBase;
import com.dlink.model.Schema;
import com.dlink.service.DataBaseService; import com.dlink.service.DataBaseService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -60,4 +62,12 @@ public class DataBaseServiceImpl extends SuperServiceImpl<DataBaseMapper, DataBa ...@@ -60,4 +62,12 @@ public class DataBaseServiceImpl extends SuperServiceImpl<DataBaseMapper, DataBa
public List<DataBase> listEnabledAll() { public List<DataBase> listEnabledAll() {
return this.list(new QueryWrapper<DataBase>().eq("enabled",1)); return this.list(new QueryWrapper<DataBase>().eq("enabled",1));
} }
@Override
public List<Schema> getSchemasAndTables(Integer id) {
DataBase dataBase = getById(id);
Asserts.checkNotNull(dataBase,"该数据源不存在!");
Driver driver = Driver.build(dataBase.getDriverConfig()).connect();
return driver.getSchemasAndTables();
}
} }
...@@ -120,6 +120,10 @@ export function showDataBase(dispatch: any) { ...@@ -120,6 +120,10 @@ export function showDataBase(dispatch: any) {
}); });
}); });
} }
/*--- 刷新 元数据表 ---*/
export function showMetaDataTable(id:number) {
return getData('api/database/getSchemasAndTables',{id:id});
}
/*--- 刷新 Flink Jobs ---*/ /*--- 刷新 Flink Jobs ---*/
export function showFlinkJobs(clusterId:number) { export function showFlinkJobs(clusterId:number) {
return getData('api/studio/listJobs',{clusterId:clusterId}); return getData('api/studio/listJobs',{clusterId:clusterId});
......
import {
message, Button,Tree, Empty, Select,Tag,
Tooltip
} from "antd";
import {StateType} from "@/pages/FlinkSqlStudio/model";
import {connect} from "umi";
import {useState} from "react";
import styles from "./index.less";
import {
ReloadOutlined,
PlusOutlined,
DownOutlined
} from '@ant-design/icons';
import React from "react";
import {showMetaDataTable} from "@/components/Studio/StudioEvent/DDL";
import {convertToTreeData} from "@/components/Studio/StudioTree/Function";
import {getCatalogueTreeData} from "@/pages/FlinkSqlStudio/service";
const { DirectoryTree } = Tree;
const {Option} = Select;
const StudioMetaData = (props: any) => {
const {database, dispatch} = props;
const [databaseId, setDataBaseId] = useState<number>();
const [treeData, setTreeData] = useState<[]>([]);
const onRefreshTreeData = ()=>{
if(!databaseId)return;
const res = showMetaDataTable(databaseId);
res.then((result) => {
let tables = result.datas;
for(let i=0;i<tables.length;i++){
tables[i].children=tables[i].tables;
for(let j=0;j<tables[i].children.length;j++){
tables[i].children[j].title=tables[i].children[j].name;
tables[i].children[j].key=tables[i].children[j].name;
}
tables[i].title=tables[i].name;
tables[i].key=tables[i].name;
}
setTreeData(result.datas);
});
};
const onChangeDataBase = (value: number)=>{
setDataBaseId(value);
onRefreshTreeData();
};
const getDataBaseOptions = ()=>{
let itemList = [];
for (let item of database) {
let tag = (<><Tag color={item.enabled ? "processing" : "error"}>{item.type}</Tag>{item.alias}</>);
itemList.push(<Option value={item.id} label={tag}>
{tag}
</Option>)
}
return itemList;
};
return (
<>
<Select
// style={{width: '100%'}}
placeholder="选择数据源"
optionLabelProp="label"
onChange={onChangeDataBase}
>
{getDataBaseOptions()}
</Select>
<div style={{float: "right"}}>
<Tooltip title="刷新元数据表">
<Button
type="text"
icon={<ReloadOutlined/>}
onClick={onRefreshTreeData}
/>
</Tooltip>
</div>
<DirectoryTree
multiple
switcherIcon={<DownOutlined/>}
treeData={treeData}
height={400}
/>
</>
);
};
export default connect(({Studio}: { Studio: StateType }) => ({
database: Studio.database,
}))(StudioMetaData);
...@@ -8,6 +8,7 @@ import StudioConnector from "./StudioConnector"; ...@@ -8,6 +8,7 @@ import StudioConnector from "./StudioConnector";
import React from "react"; import React from "react";
import StudioDataBase from "./StudioDataBase"; import StudioDataBase from "./StudioDataBase";
import StudioCluster from "./StudioCluster"; import StudioCluster from "./StudioCluster";
import StudioMetaData from "./StudioMetaData";
const { TabPane } = Tabs; const { TabPane } = Tabs;
...@@ -28,7 +29,7 @@ const StudioLeftTool = (props:any) => { ...@@ -28,7 +29,7 @@ const StudioLeftTool = (props:any) => {
<StudioDataBase /> <StudioDataBase />
</TabPane> </TabPane>
<TabPane tab={<span><AppstoreOutlined /> 元数据</span>} key="MetaData" > <TabPane tab={<span><AppstoreOutlined /> 元数据</span>} key="MetaData" >
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> <StudioMetaData />
</TabPane> </TabPane>
<TabPane tab={<span><FunctionOutlined /> 函数</span>} key="Function" > <TabPane tab={<span><FunctionOutlined /> 函数</span>} key="Function" >
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment