Commit b1a4d242 authored by wenmo's avatar wenmo

字段血缘

parent 0f217e3f
...@@ -63,6 +63,7 @@ public class StudioController { ...@@ -63,6 +63,7 @@ public class StudioController {
public Result getCAByStatement(@RequestBody StudioCADTO studioCADTO) { public Result getCAByStatement(@RequestBody StudioCADTO studioCADTO) {
switch (studioCADTO.getType()){ switch (studioCADTO.getType()){
case 1:return Result.succeed(studioService.getOneTableColumnCAByStatement(studioCADTO.getStatement()),"执行成功"); case 1:return Result.succeed(studioService.getOneTableColumnCAByStatement(studioCADTO.getStatement()),"执行成功");
// case 2:return Result.succeed(studioService.getColumnCAByStatement(studioCADTO.getStatement()),"执行成功");
default:return Result.failed("敬请期待"); default:return Result.failed("敬请期待");
} }
} }
......
...@@ -3,6 +3,7 @@ package com.dlink.service; ...@@ -3,6 +3,7 @@ package com.dlink.service;
import com.dlink.dto.SessionDTO; import com.dlink.dto.SessionDTO;
import com.dlink.dto.StudioDDLDTO; import com.dlink.dto.StudioDDLDTO;
import com.dlink.dto.StudioExecuteDTO; import com.dlink.dto.StudioExecuteDTO;
import com.dlink.explainer.ca.ColumnCANode;
import com.dlink.explainer.ca.TableCANode; import com.dlink.explainer.ca.TableCANode;
import com.dlink.job.JobResult; import com.dlink.job.JobResult;
import com.dlink.result.IResult; import com.dlink.result.IResult;
...@@ -35,4 +36,6 @@ public interface StudioService { ...@@ -35,4 +36,6 @@ public interface StudioService {
List<TableCANode> getOneTableCAByStatement(String statement); List<TableCANode> getOneTableCAByStatement(String statement);
List<TableCANode> getOneTableColumnCAByStatement(String statement); List<TableCANode> getOneTableColumnCAByStatement(String statement);
List<ColumnCANode> getColumnCAByStatement(String statement);
} }
...@@ -4,11 +4,13 @@ import com.dlink.dto.SessionDTO; ...@@ -4,11 +4,13 @@ import com.dlink.dto.SessionDTO;
import com.dlink.dto.StudioDDLDTO; import com.dlink.dto.StudioDDLDTO;
import com.dlink.dto.StudioExecuteDTO; import com.dlink.dto.StudioExecuteDTO;
import com.dlink.explainer.ca.CABuilder; import com.dlink.explainer.ca.CABuilder;
import com.dlink.explainer.ca.ColumnCANode;
import com.dlink.explainer.ca.TableCANode; import com.dlink.explainer.ca.TableCANode;
import com.dlink.job.JobConfig; import com.dlink.job.JobConfig;
import com.dlink.job.JobManager; import com.dlink.job.JobManager;
import com.dlink.job.JobResult; import com.dlink.job.JobResult;
import com.dlink.model.Cluster; import com.dlink.model.Cluster;
import com.dlink.parser.SqlType;
import com.dlink.result.IResult; import com.dlink.result.IResult;
import com.dlink.result.SelectResult; import com.dlink.result.SelectResult;
import com.dlink.service.ClusterService; import com.dlink.service.ClusterService;
...@@ -17,9 +19,11 @@ import com.dlink.session.ExecutorEntity; ...@@ -17,9 +19,11 @@ import com.dlink.session.ExecutorEntity;
import com.dlink.session.SessionConfig; import com.dlink.session.SessionConfig;
import com.dlink.session.SessionInfo; import com.dlink.session.SessionInfo;
import com.dlink.session.SessionPool; import com.dlink.session.SessionPool;
import com.dlink.trans.Operations;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
...@@ -93,11 +97,28 @@ public class StudioServiceImpl implements StudioService { ...@@ -93,11 +97,28 @@ public class StudioServiceImpl implements StudioService {
@Override @Override
public List<TableCANode> getOneTableCAByStatement(String statement) { public List<TableCANode> getOneTableCAByStatement(String statement) {
return CABuilder.getOneTableCAByStatement(statement); if(Operations.getSqlTypeFromStatements(statement)== SqlType.INSERT) {
return CABuilder.getOneTableCAByStatement(statement);
}else{
return new ArrayList<>();
}
} }
@Override @Override
public List<TableCANode> getOneTableColumnCAByStatement(String statement) { public List<TableCANode> getOneTableColumnCAByStatement(String statement) {
return CABuilder.getOneTableColumnCAByStatement(statement); if(Operations.getSqlTypeFromStatements(statement)== SqlType.INSERT) {
return CABuilder.getOneTableColumnCAByStatement(statement);
}else{
return new ArrayList<>();
}
}
@Override
public List<ColumnCANode> getColumnCAByStatement(String statement) {
if(Operations.getSqlTypeFromStatements(statement)== SqlType.INSERT) {
return CABuilder.getColumnCAByStatement(statement);
}else{
return new ArrayList<>();
}
} }
} }
...@@ -88,22 +88,22 @@ public class ColumnCAGenerator implements CAGenerator { ...@@ -88,22 +88,22 @@ public class ColumnCAGenerator implements CAGenerator {
sufOnly.add(nodeRel.getSufId()); sufOnly.add(nodeRel.getSufId());
} }
} }
for (NodeRel nodeRel : this.columnCASRel) { /*for (NodeRel nodeRel : this.columnCASRel) {
if(sufOnly.contains(nodeRel.getPreId())) { if(sufOnly.contains(nodeRel.getPreId())) {
sufOnly.remove(nodeRel.getPreId()); sufOnly.remove(nodeRel.getPreId());
} }
} }*/
List<Integer> preOnly = new ArrayList<>(); List<Integer> preOnly = new ArrayList<>();
for (NodeRel nodeRel : this.columnCASRel) { for (NodeRel nodeRel : this.columnCASRel) {
if(!preOnly.contains(nodeRel.getPreId())) { if(!preOnly.contains(nodeRel.getPreId())) {
preOnly.add(nodeRel.getPreId()); preOnly.add(nodeRel.getPreId());
} }
} }
for (NodeRel nodeRel : this.columnCASRel) { /*for (NodeRel nodeRel : this.columnCASRel) {
if(preOnly.contains(nodeRel.getSufId())) { if(preOnly.contains(nodeRel.getSufId())) {
preOnly.remove(nodeRel.getSufId()); preOnly.remove(nodeRel.getSufId());
} }
} }*/
for (int i = 0; i < sufOnly.size(); i++) { for (int i = 0; i < sufOnly.size(); i++) {
ColumnCA columnCA = (ColumnCA)this.columnCASMaps.get(sufOnly.get(i)); ColumnCA columnCA = (ColumnCA)this.columnCASMaps.get(sufOnly.get(i));
List<String> fields = tableCA.getFields(); List<String> fields = tableCA.getFields();
......
...@@ -6,65 +6,13 @@ import {connect} from "umi"; ...@@ -6,65 +6,13 @@ import {connect} from "umi";
import styles from "./index.less"; import styles from "./index.less";
import { getCAByStatement} from "@/pages/FlinkSqlStudio/service"; import { getCAByStatement} from "@/pages/FlinkSqlStudio/service";
import {useState} from "react"; import {useState} from "react";
import React from 'react';
const { TabPane } = Tabs; const { TabPane } = Tabs;
const data = {
id: '青年X高收入',
title: '青年X高收入',
body: '1,323,945,835',
children: [
{
id: '青年',
title: {
content: '青年',
style: {
fill: 'yellow',
},
},
body: {
content: '89,133,24',
style: {
fill: 'red',
},
},
footer: {
content: '占比',
value: '30%',
style: {
fill: '#aaa',
},
valueStyle: {
fill: '#000',
},
},
children: [
{ id: 'A11', title: '15~17', body: '89,133,24' },
{
id: 'A12',
title: '17~19',
footer: {
content: '占比',
value: '30%',
},
},
{ id: 'A13', title: '19~21', body: '89,133,24' },
{ id: 'A14', title: '21~24', body: '89,133,24' },
],
},
{
id: 'A2',
title: '高收入',
body: '761,871,877',
},
],
};
const StudioCA = (props:any) => { const StudioCA = (props:any) => {
const {current} = props; const {current} = props;
const [oneTableCAData,setOneTableCAData] = useState<any>(null); const [oneTableCAData,setOneTableCAData] = useState<any>(null);
const [oneColumnCAData,setOneColumnCAData] = useState<any>(null);
const nodeStateStyles = { const nodeStateStyles = {
hover: { hover: {
...@@ -114,6 +62,43 @@ const StudioCA = (props:any) => { ...@@ -114,6 +62,43 @@ const StudioCA = (props:any) => {
}, },
}; };
const columnConfig = {
data:oneColumnCAData,
behaviors: ['drag-canvas', 'zoom-canvas', 'drag-node'],
bodyStyle: {
fill: '#aaa',
},
nodeStateStyles,
onReady: (graph) => {
graph.on('node:mouseenter', (evt) => {
const item = evt.item;
graph.setItemState(item, 'hover', true);
});
graph.on('node:mouseleave', (evt) => {
const item = evt.item;
graph.setItemState(item, 'hover', false);
});
},
edgeStyle: (item, graph) => {
/**
* graph.findById(item.target).getModel()
* item.source: 获取 source 数据
* item.target: 获取 target 数据
*/
// console.log(graph.findById(item.target).getModel());
return {
stroke: '#40a9ff',
lineWidth: graph.findById(item.target).getModel().columnSize,
strokeOpacity: 0.5,
};
},
nodeStyle: () => {
return {
stroke: '#40a9ff',
};
},
};
const getOneTableCA=()=>{ const getOneTableCA=()=>{
const res = getCAByStatement({ const res = getCAByStatement({
statement:current.value, statement:current.value,
...@@ -128,6 +113,20 @@ const StudioCA = (props:any) => { ...@@ -128,6 +113,20 @@ const StudioCA = (props:any) => {
}) })
}; };
const getOneColumnCA=()=>{
const res = getCAByStatement({
statement:current.value,
type: 2,
});
res.then((result)=>{
if(result.code==0){
setOneColumnCAData(convertTreeData(result.datas[0]));
}else{
setOneColumnCAData(null);
}
})
};
const convertTreeData=(node)=>{ const convertTreeData=(node)=>{
if(node){ if(node){
node.body=node.columns.toString(); node.body=node.columns.toString();
...@@ -170,7 +169,18 @@ const StudioCA = (props:any) => { ...@@ -170,7 +169,18 @@ const StudioCA = (props:any) => {
} }
key="OneColumnCA" key="OneColumnCA"
> >
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> <div>
<div style={{float: "left"}}>
<Tooltip title="重新计算血缘">
<Button
type="text"
icon={<SearchOutlined />}
onClick={getOneColumnCA}
/>
</Tooltip>
</div>
{oneColumnCAData!=null?<IndentedTreeGraph {...columnConfig} />:<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />}
</div>
</TabPane> </TabPane>
<TabPane <TabPane
tab={ tab={
......
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