Commit b1a4d242 authored by wenmo's avatar wenmo

字段血缘

parent 0f217e3f
......@@ -63,6 +63,7 @@ public class StudioController {
public Result getCAByStatement(@RequestBody StudioCADTO studioCADTO) {
switch (studioCADTO.getType()){
case 1:return Result.succeed(studioService.getOneTableColumnCAByStatement(studioCADTO.getStatement()),"执行成功");
// case 2:return Result.succeed(studioService.getColumnCAByStatement(studioCADTO.getStatement()),"执行成功");
default:return Result.failed("敬请期待");
}
}
......
......@@ -3,6 +3,7 @@ package com.dlink.service;
import com.dlink.dto.SessionDTO;
import com.dlink.dto.StudioDDLDTO;
import com.dlink.dto.StudioExecuteDTO;
import com.dlink.explainer.ca.ColumnCANode;
import com.dlink.explainer.ca.TableCANode;
import com.dlink.job.JobResult;
import com.dlink.result.IResult;
......@@ -35,4 +36,6 @@ public interface StudioService {
List<TableCANode> getOneTableCAByStatement(String statement);
List<TableCANode> getOneTableColumnCAByStatement(String statement);
List<ColumnCANode> getColumnCAByStatement(String statement);
}
......@@ -4,11 +4,13 @@ import com.dlink.dto.SessionDTO;
import com.dlink.dto.StudioDDLDTO;
import com.dlink.dto.StudioExecuteDTO;
import com.dlink.explainer.ca.CABuilder;
import com.dlink.explainer.ca.ColumnCANode;
import com.dlink.explainer.ca.TableCANode;
import com.dlink.job.JobConfig;
import com.dlink.job.JobManager;
import com.dlink.job.JobResult;
import com.dlink.model.Cluster;
import com.dlink.parser.SqlType;
import com.dlink.result.IResult;
import com.dlink.result.SelectResult;
import com.dlink.service.ClusterService;
......@@ -17,9 +19,11 @@ import com.dlink.session.ExecutorEntity;
import com.dlink.session.SessionConfig;
import com.dlink.session.SessionInfo;
import com.dlink.session.SessionPool;
import com.dlink.trans.Operations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
......@@ -93,11 +97,28 @@ public class StudioServiceImpl implements StudioService {
@Override
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
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 {
sufOnly.add(nodeRel.getSufId());
}
}
for (NodeRel nodeRel : this.columnCASRel) {
/*for (NodeRel nodeRel : this.columnCASRel) {
if(sufOnly.contains(nodeRel.getPreId())) {
sufOnly.remove(nodeRel.getPreId());
}
}
}*/
List<Integer> preOnly = new ArrayList<>();
for (NodeRel nodeRel : this.columnCASRel) {
if(!preOnly.contains(nodeRel.getPreId())) {
preOnly.add(nodeRel.getPreId());
}
}
for (NodeRel nodeRel : this.columnCASRel) {
/*for (NodeRel nodeRel : this.columnCASRel) {
if(preOnly.contains(nodeRel.getSufId())) {
preOnly.remove(nodeRel.getSufId());
}
}
}*/
for (int i = 0; i < sufOnly.size(); i++) {
ColumnCA columnCA = (ColumnCA)this.columnCASMaps.get(sufOnly.get(i));
List<String> fields = tableCA.getFields();
......
......@@ -6,65 +6,13 @@ import {connect} from "umi";
import styles from "./index.less";
import { getCAByStatement} from "@/pages/FlinkSqlStudio/service";
import {useState} from "react";
import React from 'react';
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 {current} = props;
const [oneTableCAData,setOneTableCAData] = useState<any>(null);
const [oneColumnCAData,setOneColumnCAData] = useState<any>(null);
const nodeStateStyles = {
hover: {
......@@ -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 res = getCAByStatement({
statement:current.value,
......@@ -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)=>{
if(node){
node.body=node.columns.toString();
......@@ -170,7 +169,18 @@ const StudioCA = (props:any) => {
}
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
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