#
Junjie
2024-03-13 7049a9a623d3eb4cf589ad07f42db0a483df71ea
#
7个文件已修改
6个文件已添加
3个文件已删除
2 文件已重命名
1546 ■■■■■ 已修改文件
zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerCrn.jsx 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerEdge.jsx 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerNode.jsx 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Flow/GraphComponent.jsx 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Flow/GraphConfig.jsx 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Flow/GraphDrawer.jsx 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Flow/GraphTools copy.jsx 348 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Flow/GraphTools.jsx 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Flow/GraphTools2.jsx 323 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Flow/StencilComponent.jsx 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Flow/css/GrapDrawer.less 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Flow/css/GraphTools.less 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/config/setting.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/flow/api.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/route.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/controller/FlowController.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/entity/param/FlowLogicCodeParam.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerCrn.jsx
New file
@@ -0,0 +1,124 @@
import React, { useRef, useEffect, useState } from "react";
import { Button, Drawer, Input, Switch, Select } from 'antd';
import { initNodeData } from "../GraphConfig";
const { TextArea } = Input;
export const GraphDrawerCrn = ({ graphRef, isReady }) => {
    const [open, setOpen] = useState(false);
    const [init, setInit] = useState(false);
    const [nodeData, setNodeData] = useState(null);
    const [codeContent, setCodeContent] = useState(null);
    const [execClass, setExecClass] = useState(null);
    const [execApi, setExecApi] = useState(null);
    const classList = [
        { value: 'crnClass', label: '堆垛机类' },
    ];
    const apiList = [
        { value: 'load', label: '取货' },
        { value: 'unload', label: '放货' },
        { value: 'load_unload', label: '取放货' },
    ];
    const showNodeDrawer = (graph, node) => {
        if (node.data.type == "crn") {
            setOpen(true);
            setNodeData(node);
            if (node.data == null) {
                node.data = initNodeData;
            }
            if (node.data.codeContent != null) {
                setCodeContent(node.data.codeContent);
            }
            if (node.data.execClass != null) {
                setExecClass(node.data.execClass);
            }else{
                setExecClass(null);
            }
            if (node.data.execApi != null) {
                setExecApi(node.data.execApi);
            }else {
                setExecApi(null);
            }
        }
    };
    const onNodeClose = (e) => {
        setOpen(false);
        setNodeData(null);
        setCodeContent(null);
    };
    const nodeTextAreaChange = (e) => {
        setCodeContent(e.target.value);
        nodeData.data.codeContent = e.target.value;
    }
    const nodeDataInputChange = (e) => {
        nodeData.label = e.target.value;
    }
    const classListChange = (e) => {
        setExecClass(e);
        nodeData.data.execClass = e;
    }
    const apiListChange = (e) => {
        setExecApi(e);
        nodeData.data.execApi = e;
    }
    useEffect(() => {
        if (isReady) {
            const graph = graphRef.current;
            if (!init) {
                graph.on("node:dblclick", ({ node }) => {
                    showNodeDrawer(graph, node);
                })
                setInit(true);
            }
        }
    }, [apiList])
    if (nodeData) {
        return (
            <>
                <Drawer title={nodeData.label} onClose={onNodeClose} open={open} size="large">
                    <div className="graphDrawerContainer">
                        <div>堆垛机组件</div>
                        <div>ID:{nodeData.id}</div>
                        <div>组件名:<Input defaultValue={nodeData.label} onChange={nodeDataInputChange} /></div>
                        <div>根节点:<Switch checkedChildren="是" unCheckedChildren="否" checked={nodeData.data.root} /></div>
                        <div>
                            执行类:
                            <Select
                                style={{ width: 120 }}
                                options={classList}
                                onChange={classListChange}
                                defaultValue={execClass}
                            />
                        </div>
                        <div>
                            执行接口:
                            <Select
                                style={{ width: 120 }}
                                options={apiList}
                                onChange={apiListChange}
                                defaultValue={execApi}
                            />
                        </div>
                        <div>可执行代码:</div>
                        <TextArea value={codeContent} onChange={nodeTextAreaChange} rows={10} />
                    </div>
                </Drawer>
            </>
        );
    }
}
zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerEdge.jsx
New file
@@ -0,0 +1,108 @@
import React, { useRef, useEffect, useState } from "react";
import { Button, Drawer, Input, Switch, AutoComplete } from 'antd';
import { CloseSquareFilled } from '@ant-design/icons';
import { initNodeData } from "../GraphConfig";
const { TextArea } = Input;
export const GraphDrawerEdge = ({ graphRef, isReady }) => {
    const [open, setOpen] = useState(false);
    const [init, setInit] = useState(false);
    const [edgeData, setEdgeData] = useState(null);
    const [codeContent, setCodeContent] = useState(null);
    const options = [
        { value: 'true' },
        { value: 'false' },
    ];
    const showEdgeDrawer = (graph, edge) => {
        setOpen(true);
        setEdgeData(edge);
        if (edge.data == null) {
            edge.data = initNodeData;
        }
        if (edge.data.codeContent != null) {
            setCodeContent(edge.data.codeContent);
        }
        if (edge.labels.length == 0) {
            edge.appendLabel({
                attrs: {
                    label: {
                        text: ""
                    }
                }
            })
        }
    }
    const onEdgeClose = (e) => {
        setOpen(false);
        setEdgeData(null);
        setCodeContent(null);
    };
    const edgeTextAreaChange = (e) => {
        setCodeContent(e.target.value);
        edgeData.data.codeContent = e.target.value;
    }
    const edgeDataInputChange = (value) => {
        edgeData.removeLabelAt(0);
        edgeData.appendLabel({
            attrs: {
                label: {
                    text: value
                }
            }
        })
        edgeData.data.logicBool = value == 'true' ? true : false;
    }
    useEffect(() => {
        if (isReady) {
            const graph = graphRef.current;
            if (!init) {
                graph.on("edge:dblclick", ({ edge }) => {
                    showEdgeDrawer(graph, edge);
                })
                setInit(true);
            }
        }
    })
    if (edgeData) {
        return (
            <>
                <Drawer title={edgeData.label} onClose={onEdgeClose} open={open} size="large">
                    <div className="graphDrawerContainer">
                        <div>ID:{edgeData.id}</div>
                        <div>
                            属性详情:
                            <AutoComplete
                                style={{
                                    width: 200,
                                }}
                                options={options}
                                filterOption={(inputValue, option) =>
                                    option.value.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1
                                }
                                allowClear={{ clearIcon: <CloseSquareFilled /> }}
                                defaultValue={edgeData.labels[0].attrs.label.text}
                                onChange={edgeDataInputChange}
                            />
                        </div>
                        <div>根节点:<Switch checkedChildren="是" unCheckedChildren="否" checked={edgeData.data.root} /></div>
                        <div>可执行代码:</div>
                        <TextArea value={codeContent} onChange={edgeTextAreaChange} rows={10} />
                    </div>
                </Drawer>
            </>
        );
    }
}
zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerNode.jsx
New file
@@ -0,0 +1,71 @@
import React, { useRef, useEffect, useState } from "react";
import { Button, Drawer, Input, Switch } from 'antd';
import { initNodeData } from "../GraphConfig";
const { TextArea } = Input;
export const GraphDrawerNode = ({ graphRef, isReady }) => {
    const [open, setOpen] = useState(false);
    const [init, setInit] = useState(false);
    const [nodeData, setNodeData] = useState(null);
    const [codeContent, setCodeContent] = useState(null);
    const showNodeDrawer = (graph, node) => {
        if (node.data.type == null || node.data.type == "none") {
            setOpen(true);
            setNodeData(node);
            if (node.data == null) {
                node.data = initNodeData;
            }
            if (node.data.codeContent != null) {
                setCodeContent(node.data.codeContent);
            }
        }
    };
    const onNodeClose = (e) => {
        setOpen(false);
        setNodeData(null);
        setCodeContent(null);
    };
    const nodeTextAreaChange = (e) => {
        setCodeContent(e.target.value);
        nodeData.data.codeContent = e.target.value;
    }
    const nodeDataInputChange = (e) => {
        nodeData.label = e.target.value;
    }
    useEffect(() => {
        if (isReady) {
            const graph = graphRef.current;
            if (!init) {
                graph.on("node:dblclick", ({ node }) => {
                    showNodeDrawer(graph, node);
                })
                setInit(true);
            }
        }
    })
    if (nodeData) {
        return (
            <>
                <Drawer title={nodeData.label} onClose={onNodeClose} open={open} size="large">
                    <div className="graphDrawerContainer">
                        <div>ID:{nodeData.id}</div>
                        <div>组件名:<Input defaultValue={nodeData.label} onChange={nodeDataInputChange} /></div>
                        <div>根节点:<Switch checkedChildren="是" unCheckedChildren="否" checked={nodeData.data.root} /></div>
                        <div>可执行代码:</div>
                        <TextArea value={codeContent} onChange={nodeTextAreaChange} rows={10} />
                    </div>
                </Drawer>
            </>
        );
    }
}
zy-asrs-flow/src/components/Flow/GraphComponent.jsx
@@ -1440,6 +1440,10 @@
                {
                    name: 'group1',
                    title: '常用组件',
                },
                {
                    name: 'group2',
                    title: '逻辑组件'
                }
            ],
        })
@@ -1468,9 +1472,57 @@
            data: initNodeData,
        })
        const n3Data = JSON.parse(JSON.stringify(initNodeData))
        n3Data.isLogic = true;//逻辑判断
        const n3 = graph.createNode({
        const crnData = JSON.parse(JSON.stringify(initNodeData))
        crnData.type = "crn";
        const crnStencil = graph.createNode({
            shape: "rect",
            width: 80,
            height: 40,
            label: "堆垛机组件",
            attrs: commonGraphAttrs,
            ports: commonGraphPorts,
            data: crnData,
        })
        const shuttleData = JSON.parse(JSON.stringify(initNodeData))
        shuttleData.type = "shuttle";
        const shuttleStencil = graph.createNode({
            shape: "rect",
            width: 80,
            height: 40,
            label: "四向车组件",
            attrs: commonGraphAttrs,
            ports: commonGraphPorts,
            data: shuttleData,
        })
        const liftData = JSON.parse(JSON.stringify(initNodeData))
        liftData.type = "lift";
        const liftStencil = graph.createNode({
            shape: "rect",
            width: 80,
            height: 40,
            label: "提升机组件",
            attrs: commonGraphAttrs,
            ports: commonGraphPorts,
            data: liftData,
        })
        const devpData = JSON.parse(JSON.stringify(initNodeData))
        devpData.type = "devp";
        const devpStencil = graph.createNode({
            shape: "rect",
            width: 80,
            height: 40,
            label: "输送线组件",
            attrs: commonGraphAttrs,
            ports: commonGraphPorts,
            data: devpData,
        })
        const logicStencilData = JSON.parse(JSON.stringify(initNodeData))
        logicStencilData.isLogic = true;//逻辑判断
        const logicStencil = graph.createNode({
            shape: 'path',
            width: 100,
            height: 60,
@@ -1479,10 +1531,11 @@
            attrs: commonGraphAttrs,
            label: '逻辑判断',
            ports: commonGraphPorts,
            data: n3Data,
            data: logicStencilData,
        })
        stencil.load([n1, n2, n3], 'group1')
        stencil.load([n1, n2, crnStencil, shuttleStencil, liftStencil, devpStencil], 'group1')
        stencil.load([logicStencil], 'group2')
    }
    function initBind(graph) {
zy-asrs-flow/src/components/Flow/GraphConfig.jsx
@@ -93,7 +93,7 @@
}
const initGraphConnecting = {
    router: 'manhattan',
    // router: 'manhattan',
    connector: {
        name: 'rounded',
        args: {
@@ -135,6 +135,9 @@
    searchLogicId: 1,//默认逻辑id
    searchLogicBool: true,//默认逻辑id方向
    searchIndex: 0,//默认执行优先级
    type: "none", //组件类型
    execClass: null,//执行类
    execApi: null,//执行接口
}
export { commonGraphPorts, commonGraphAttrs, initGraphConnecting, initNodeData }
zy-asrs-flow/src/components/Flow/GraphDrawer.jsx
@@ -1,134 +1,16 @@
import React, { useRef, useEffect, useState } from "react";
import { Button, Drawer, Input, Switch } from 'antd';
import { initNodeData } from "./GraphConfig";
import './GrapDrawer.less';
const { TextArea } = Input;
import { GraphDrawerNode } from "./Drawer/GraphDrawerNode";
import { GraphDrawerEdge } from "./Drawer/GraphDrawerEdge";
import { GraphDrawerCrn } from "./Drawer/GraphDrawerCrn";
import './css/GrapDrawer.less';
export const GraphDrawer = ({ graphRef, isReady }) => {
    const [open, setOpen] = useState(false);
    const [init, setInit] = useState(false);
    const [nodeData, setNodeData] = useState(null);
    const [edgeData, setEdgeData] = useState(null);
    const [codeContent, setCodeContent] = useState(null);
    const showNodeDrawer = (graph, node) => {
        setOpen(true);
        setNodeData(node);
        if (node.data == null) {
            node.data = initNodeData;
        }
        if (node.data.codeContent != null) {
            setCodeContent(node.data.codeContent);
        }
    };
    const showEdgeDrawer = (graph, edge) => {
        setOpen(true);
        setEdgeData(edge);
        if (edge.data == null) {
            edge.data = initNodeData;
        }
        if (edge.data.codeContent != null) {
            setCodeContent(edge.data.codeContent);
        }
        if (edge.labels.length == 0) {
            edge.appendLabel({
                attrs: {
                    label: {
                        text: ""
                    }
                }
            })
        }
    }
    const onNodeClose = (e) => {
        setOpen(false);
        setNodeData(null);
        setCodeContent(null);
    };
    const onEdgeClose = (e) => {
        setOpen(false);
        setEdgeData(null);
        setCodeContent(null);
    };
    const nodeTextAreaChange = (e) => {
        setCodeContent(e.target.value);
        nodeData.data.codeContent = e.target.value;
    }
    const edgeTextAreaChange = (e) => {
        setCodeContent(e.target.value);
        edgeData.data.codeContent = e.target.value;
    }
    const nodeDataInputChange = (e) => {
        nodeData.label = e.target.value;
    }
    const edgeDataInputChange = (e) => {
        edgeData.removeLabelAt(0);
        edgeData.appendLabel({
            attrs: {
                label: {
                    text: e.target.value
                }
            }
        })
        edgeData.data.logicBool = e.target.value == 'true' ? true : false;
    }
    useEffect(() => {
        if (isReady) {
            const graph = graphRef.current;
            if (!init) {
                graph.on("node:dblclick", ({ node }) => {
                    showNodeDrawer(graph, node);
                })
                graph.on("edge:dblclick", ({ edge }) => {
                    showEdgeDrawer(graph, edge);
                })
                setInit(true);
            }
        }
    })
    if (nodeData) {
        return (
            <>
                <Drawer title={nodeData.label} onClose={onNodeClose} open={open} size="large">
                    <div className="graphDrawerContainer">
                        <div>ID:{nodeData.id}</div>
                        <div>组件名:<Input defaultValue={nodeData.label} onChange={nodeDataInputChange} /></div>
                        <div>根节点:<Switch checkedChildren="是" unCheckedChildren="否" checked={nodeData.data.root} /></div>
                        <div>可执行代码:</div>
                        <TextArea value={codeContent} onChange={nodeTextAreaChange} rows={10} />
                    </div>
                </Drawer>
            </>
        );
    } else if (edgeData) {
        return (
            <>
                <Drawer title={edgeData.label} onClose={onEdgeClose} open={open} size="large">
                    <div className="graphDrawerContainer">
                        <div>ID:{edgeData.id}</div>
                        <div>属性详情:<Input defaultValue={edgeData.labels[0].attrs.label.text} onChange={edgeDataInputChange} /></div>
                        <div>根节点:<Switch checkedChildren="是" unCheckedChildren="否" checked={edgeData.data.root} /></div>
                        <div>可执行代码:</div>
                        <TextArea value={codeContent} onChange={edgeTextAreaChange} rows={10} />
                    </div>
                </Drawer>
            </>
        );
    }
    return (
        <>
            <GraphDrawerNode graphRef={graphRef} isReady={isReady} />
            <GraphDrawerEdge graphRef={graphRef} isReady={isReady} />
            <GraphDrawerCrn graphRef={graphRef} isReady={isReady} />
        </>
    );
}
zy-asrs-flow/src/components/Flow/GraphTools copy.jsx
File was deleted
zy-asrs-flow/src/components/Flow/GraphTools.jsx
@@ -2,7 +2,8 @@
import { Button, message, Modal } from 'antd';
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
import { solarizedlight } from 'react-syntax-highlighter/dist/esm/styles/prism';
import './GraphTools.less'
import { exportDataToServer } from "../../services/flow/api";
import './css/GraphTools.less'
export const GraphTools = ({ graphRef, isReady }) => {
@@ -76,15 +77,16 @@
                return;
            }
            console.log(getDescendants(rootNode, nodes, graph));
            const codeContent = transCode(rootNode, nodes, graph)
            console.log(codeContent);
            let result = sortNodes(rootNode, nodes, graph);
            exportDataToServer({
                data: result
            }).then((res) => {
                console.log(res);
            })
        }
    }
    const transCode = (rootNode, nodes, graph) => {
        let codeContent = "";
    const sortNodes = (rootNode, nodes, graph) => {
        let values = nodeDFS(rootNode, nodes, graph);
        const searchNode = {
            id: 1,
@@ -93,7 +95,6 @@
        };
        let cpValues = JSON.parse(JSON.stringify(values))
        console.log(cpValues);
        let searchIndex = 0;
        cpValues.forEach((value) => {
@@ -131,6 +132,56 @@
            }
        })
        return cpValues;
    }
    const transCode = (rootNode, nodes, graph) => {
        let codeContent = "";
        let values = nodeDFS(rootNode, nodes, graph);
        const searchNode = {
            id: 1,
            parent: null,
            logicBool: true
        };
        let cpValues = JSON.parse(JSON.stringify(values))
        let searchIndex = 0;
        cpValues.forEach((value) => {
            if (value.data.isLogic) {
                value.data.searchLogicId = searchNode.id;
                value.data.searchLogicBool = searchNode.logicBool;
                value.data.searchIndex = searchIndex++;
                let tmpSearchNode = JSON.parse(JSON.stringify(searchNode))
                searchNode.parent = tmpSearchNode;
                searchNode.id = value.id;
                searchNode.logicBool = null;
                searchIndex = 0;
            } else {
                let id = searchNode.id;
                let logicBool = searchNode.logicBool;
                const connectedEdges = graph.getConnectedEdges(value);//取边
                connectedEdges.forEach((edge) => {
                    let tmpSearchNode = JSON.parse(JSON.stringify(searchNode));
                    while (tmpSearchNode.parent != null) {
                        if (edge.source.cell == tmpSearchNode.id) {
                            logicBool = edge.data.logicBool;//更新方向
                            searchNode.logicBool = edge.data.logicBool;
                            id = tmpSearchNode.id;
                            break;
                        }
                        tmpSearchNode = tmpSearchNode.parent;
                    }
                })
                value.data.searchLogicId = id;
                value.data.searchLogicBool = logicBool;
                value.data.searchIndex = searchIndex++;
            }
        })
        console.log(cpValues);
        console.log(searchNode);
@@ -197,6 +248,8 @@
            obj.id = key;
            sortTmp[tmp[key].index] = obj;
        }
        console.log(sortTmp);
        // 合并True和False
        sortTmp.forEach((item) => {
@@ -287,104 +340,13 @@
        return formattedCode;
    }
    // const transCode = (rootNode, nodes, graph) => {
    //     let codeContent = "";
    //     const descendants = [];
    //     let stack = [rootNode];
    //     let count = 0;
    //     while (stack.length > 0) {
    //         const current = stack.pop();
    //         descendants.push(current);
    //         const children = getChildren(current, nodes, graph);
    //         stack.push(...children);
    //         // 输出代码
    //         if (!current.data.isLogic) {
    //             const connectedEdges = graph.getConnectedEdges(current);//取边
    //             connectedEdges.forEach((edge) => {
    //                 //过滤从自身节点出去的边
    //                 if(edge.source.cell != current.id){
    //                     //取上一节点
    //                     let lastNode = null;
    //                     nodes.forEach((node) => {
    //                         if(node.id == edge.source.cell){
    //                             lastNode = node;
    //                         }
    //                     })
    //                     if(lastNode != null) {
    //                         //判断节点是否逻辑节点
    //                         if(lastNode.data.isLogic){
    //                             console.log(lastNode);
    //                             let nestedIfCode = "";
    //                             if(lastNode.data.logicBool == 'true') {
    //                                 nestedIfCode = `
    //                                 if (${lastNode.data.codeContent}) {
    //                                     ${current.data.codeContent}
    //                                 }
    //                                 `;
    //                             }else{
    //                                 nestedIfCode = `
    //                                 if (!(${lastNode.data.codeContent})) {
    //                                     ${current.data.codeContent}
    //                                 }
    //                                 `;
    //                             }
    //                             codeContent += "\n" + nestedIfCode;
    //                             console.log(codeContent);
    //                         }else{
    //                             if (current.data.codeContent != null) {
    //                                 codeContent += "\n" + current.data.codeContent;
    //                             }
    //                         }
    //                     }
    //                 }
    //                 console.log(current);
    //             })
    //         } else {
    //             // if (current.data.codeContent != null) {
    //             //     codeContent += "\n" + current.data.codeContent;
    //             // }
    //             // const connectedEdges = graph.getConnectedEdges(current);
    //             // console.log(connectedEdges);
    //             // stack = []
    //             // let test = []
    //             // connectedEdges.forEach((edge) => {
    //             //     nodes.forEach((item) => {
    //             //         if (item.id === edge.target.cell && item.id != current.id) {
    //             //             test.push(item);
    //             //         }
    //             //     })
    //             // });
    //             // console.log(test);
    //             // console.log();
    //             // let nestedIfCode = `
    //             // if (true}) {
    //             //     ${current.data.codeContent}
    //             // }
    //             // `;
    //             // codeContent += "\n" + nestedIfCode;
    //             // console.log(codeContent);
    //         }
    //     }
    //     console.log(codeContent);
    // }
    const nodeDFS = (node, nodes, graph) => {
        let values = [];
        if (graph) {
            const connectedEdges = graph.getConnectedEdges(node);
            const children = [];
            console.log(node);
            // console.log(node);
            connectedEdges.forEach((edge) => {
                nodes.forEach((item) => {
                    if (item.id === edge.target.cell && item.id != node.id) {
@@ -393,11 +355,11 @@
                })
            });
            console.log(connectedEdges);
            // console.log(connectedEdges);
            if (children.length != 0) {
                console.log(children);
                // console.log(children);
                children.forEach((node) => {
                    console.log(node);
                    // console.log(node);
                    values.push(node);
                    values = values.concat(nodeDFS(node, nodes, graph))
                })
@@ -450,7 +412,7 @@
                </Button>
            </div>
            <Modal title="Basic Modal" open={isModalOpen} onOk={handleOk} onCancel={handleCancel}>
            <Modal title="预览代码" open={isModalOpen} onOk={handleOk} onCancel={handleCancel}>
                <SyntaxHighlighter language="java" style={solarizedlight}>
                    {preCode}
                </SyntaxHighlighter>
zy-asrs-flow/src/components/Flow/GraphTools2.jsx
File was deleted
zy-asrs-flow/src/components/Flow/StencilComponent.jsx
File was deleted
zy-asrs-flow/src/components/Flow/css/GrapDrawer.less
zy-asrs-flow/src/components/Flow/css/GraphTools.less
zy-asrs-flow/src/config/setting.ts
@@ -1,5 +1,5 @@
// 接口地址
export const API_BASE_URL: string = 'http://192.168.4.113:9090/wcs';
export const API_BASE_URL: string = 'http://127.0.0.1:9090/wcs';
// 项目名称
export const PROJECT_NAME: string = 'admin';
zy-asrs-flow/src/services/flow/api.js
New file
@@ -0,0 +1,9 @@
import { request } from '@umijs/max';
import React from 'react';
export function exportDataToServer(data) {
    return request('/flow/analysisExportData', {
        data: data,
        method: 'POST'
    });
}
zy-asrs-flow/src/services/route.js
@@ -26,6 +26,7 @@
export async function getRoutersInfo() {
    return getRouters().then((res) => {
        console.log(res);
        if (res.code === 200) {
            // return res.data;
            const routersInfo = convertCompatRouters(res.data);
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/controller/FlowController.java
New file
@@ -0,0 +1,68 @@
package com.zy.asrs.wcs.asrs.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.wcs.asrs.entity.param.FlowLogicCodeParam;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@RestController
@RequestMapping("/flow")
public class FlowController {
    @PostMapping("/analysisExportData")
    public R analysisExportData(@RequestBody HashMap<String, Object> param) {
        System.out.println(param);
        List<LinkedHashMap<String, Object>> data = (List<LinkedHashMap<String, Object>>) param.get("data");
        ArrayList<FlowLogicCodeParam> list = new ArrayList<>();
        FlowLogicCodeParam first = new FlowLogicCodeParam();
        first.setId("1");
        list.add(first);
        for (LinkedHashMap<String, Object> map : data) {
            LinkedHashMap<String, Object> mapData = (LinkedHashMap<String, Object>) map.get("data");
            String id = map.get("id").toString();
            Boolean isLogic = Boolean.parseBoolean(mapData.get("isLogic").toString());
            String searchLogicId = mapData.get("searchLogicId").toString();
            Boolean searchLogicBool = Boolean.parseBoolean(mapData.get("searchLogicBool").toString());
            String codeContent = mapData.get("codeContent").toString();
            if (isLogic) {
                FlowLogicCodeParam flowLogicCodeParam = new FlowLogicCodeParam();
                flowLogicCodeParam.setId(id);
                flowLogicCodeParam.setLogic(codeContent);
                FlowLogicCodeParam last = list.get(list.size() - 1);
                if (searchLogicBool) {
                    last.getLogicTrue().add(map);
                }else {
                    last.getLogicFalse().add(map);
                }
                list.add(flowLogicCodeParam);
            }else {
                for (FlowLogicCodeParam codeParam : list) {
                    if (codeParam.getId().equals(searchLogicId)) {
                        if (searchLogicBool) {
                            codeParam.getLogicTrue().add(map);
                        }else {
                            codeParam.getLogicFalse().add(map);
                        }
                    }
                }
            }
        }
        System.out.println(list);
        return R.ok();
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/entity/param/FlowLogicCodeParam.java
New file
@@ -0,0 +1,20 @@
package com.zy.asrs.wcs.asrs.entity.param;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Data
public class FlowLogicCodeParam {
    private String id;
    private String logic;
    private List<Map<String, Object>> logicTrue = new ArrayList<>();
    private List<Map<String, Object>> logicFalse = new ArrayList<>();
}
zy-asrs-wcs/src/main/resources/application.yml
@@ -18,7 +18,7 @@
#    password: zy@123
    url: jdbc:mysql://127.0.0.1:3306/asrs?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: xltys1995
    password: root
#    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
#    url: jdbc:sqlserver://47.97.1.152:51433;databasename=jkasrs
#    username: sa