From 17ce02ec6fefa4e8b9ac870e2b52dea0942f5597 Mon Sep 17 00:00:00 2001
From: wente <329538422@qq.com>
Date: 星期四, 05 十二月 2024 09:40:30 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java |  803 ++++++++++++++++-----------------------------------------
 1 files changed, 227 insertions(+), 576 deletions(-)

diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java
index b32146d..57ff08e 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java
@@ -1,6 +1,5 @@
 package com.zt.life.modules.mainPart.taskReliability.service;
 
-import cn.hutool.core.convert.Convert;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import com.zt.common.service.BaseService;
@@ -10,7 +9,6 @@
 import com.zt.life.modules.mainPart.basicInfo.dao.XhProductModelDao;
 import com.zt.life.modules.mainPart.basicInfo.model.ProductImg;
 import com.zt.life.modules.mainPart.taskReliability.dao.*;
-import com.zt.life.modules.mainPart.taskReliability.dto.ModelLinePairDto;
 import com.zt.life.modules.mainPart.taskReliability.model.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -40,33 +38,6 @@
     public static final String OPE_TYPE_SWITCH = "switch";
     public static final String OPE_TYPE_VOTE = "vote";
     public static final String OPE_TYPE_BRIDGE = "bridge";
-
-    // 鑺傜偣
-    /* 鑷姩甯冨眬锛歴tart涓巈nd鐨勫ぇ灏� */
-    public static final int LAYOUT_START_END_SIZE_X = 60;
-    public static final int LAYOUT_START_END_SIZE_Y = 40;
-    /* 鑷姩甯冨眬锛氳櫄妗嗙殑澶у皬 */
-    public static final int LAYOUT_DASHED_BOX_SIZE_X = 60;
-    public static final int LAYOUT_DASHED_BOX_SIZE_Y = 40;
-    /* 鑷姩甯冨眬锛氶�昏緫杩愮畻绗︾殑澶у皬 */
-    public static final int LAYOUT_OPE_NODE_SIZE_X = 50;
-    public static final int LAYOUT_OPE_NODE_SIZE_Y = 50;
-    /* 鑷姩甯冨眬锛氳澶囪妭鐐圭殑澶у皬 */
-    public static final int LAYOUT_DEVICE_NODE_SIZE_X = 60;
-    public static final int LAYOUT_DEVICE_NODE_SIZE_Y = 60;
-    /* 鑷姩甯冨眬锛歝onnect鐨勫ぇ灏� */
-    public static final int LAYOUT_CONNECT_SIZE_X = 10;
-    public static final int LAYOUT_CONNECT_SIZE_Y = 10;
-
-    // 鍗曞厓鏍硷紙瀛樻斁鑺傜偣锛�
-    /* 鑷姩甯冨眬锛氬崟鍏冩牸澶у皬 */
-    public static final int LAYOUT_CELL_SIZE_X = 120;
-    public static final int LAYOUT_CELL_SIZE_Y = 120;
-    /* 鑷姩甯冨眬锛氳妭鐐瑰崰鎹崟鍏冩牸鏁伴噺 */
-    public static final int LAYOUT_CELL_NUM_NODE_X = 1;
-    public static final int LAYOUT_CELL_NUM_NODE_Y = 1;
-    public static final int LAYOUT_CELL_NUM_CONNECT_X = 1;
-    public static final int LAYOUT_CELL_NUM_CONNECT_Y = 1;
 
     @Autowired
     private ModelLineDao modelLineDao;
@@ -167,63 +138,171 @@
 
         // 1. 瑙f瀽鍑鸿妭鐐逛笌杈�
         getNodeAndLineFromRbd(modelRbd.getId(), rbdJsonArray, modelNodeList, modelLineList, productImgList);
+
         // 2. 杞崲涓烘爲鍨嬬粨鏋�
         RbdTreeNode root = recognizeRbd(modelNodeList, modelLineList);
-        // 3. 閫掑綊璁$畻RBD鐨勫竷灞�绌洪棿澶у皬
+        // 3. 灏嗘ˉ鑱旇浆鎹负3鏀矾鐨勫苟鑱�
+        convertBridgeToThreeBranchParallel(root);
+        // 4. 閫掑綊璁$畻RBD鐨勫竷灞�绌洪棿澶у皬
+        calcLayoutSize(root);
 
-        // 4. 閫掑綊璁$畻RBD鐨勫竷灞�绌洪棿鍙傛暟锛坸銆亂鍧愭爣锛�
-
-        // 5. 淇濆瓨鑷姩甯冨眬妯″瀷
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("cells", rbdJsonArray);
-        modelRbd.setContent(jsonObject.toString());
-        modelRbdDao.updateById(modelRbd);
-
-        return result;
-/*
-        // 3. 澶嶅埗浜у搧鑺傜偣(node)鍒發ist
-        List<ModelNode> modelNodeAndVnodeList = modelNodeList.stream().filter(item ->
-                "node".equals(item.getNodeType())).collect(Collectors.toList());
-        // 4. 涓嶆柇灏嗗熀鏈ā鍨嬶紙涓茶仈銆佸苟鑱斻�佹梺鑱斻�佽〃鍐炽�佹ˉ鑱旓級鏇挎崲涓鸿櫄鑺傜偣鑰岀畝鍖栧浘褰紝鐩磋嚦鏃犳硶绠�鍖栦负姝€��
-//        result = getAlgorithmFromRbd(modelRbd, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList);
-
-        // 6. 閫掑綊璁$畻RBD鐨勫竷灞�绌洪棿澶у皬
-        calcLayoutSize(modelRbd, algorithmList, modelNodeAndVnodeList);
-        Collections.reverse(algorithmList);
-        RbdTreeNode root2 = listToTree(algorithmList.get(0).getComputerList(), algorithmList, modelNodeAndVnodeList);
-
-        RbdTreeNode root = new RbdTreeNode();
-
-        root.setId(Convert.toLong("20000"));
-
-        root.setName("end");
-        root.setNodeType("vnode");
-        root.setAlgorithmType("parallel");
-        root.setPicId("20000");
-        root.setPairStartNodeId("10000");
-
-        root.setBlockWidthNum(root2.getBlockWidthNum() + 2);
-        root.setBlockHeightNum(root2.getBlockHeightNum());
-        root.getChildren().add(root2);
-
-        // 7. 閫掑綊璁$畻RBD鐨勫竷灞�绌洪棿鍙傛暟锛坸銆亂鍧愭爣锛�
+        // 5. 閫掑綊璁$畻RBD鐨勫竷灞�绌洪棿鍙傛暟锛坸銆亂鍧愭爣锛�
         root.setBlockX(0);
         root.setBlockY(0);
-
         Map<String, RbdTreeNode> nodeMap = new HashMap<>();
-        calcPosition(rbdJsonArray, root, nodeMap);
+        calcPosition(rbdJsonArray, root, nodeMap, false);
         setEdgeRouter(rbdJsonArray, nodeMap);
 
+        // 6. 淇濆瓨鑷姩甯冨眬妯″瀷
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("cells", rbdJsonArray);
         modelRbd.setContent(jsonObject.toString());
-        //        calcLayoutPosition(modelRbd, algorithmList, modelNodeAndVnodeList);
-
-        // 8. 淇濆瓨鑷姩甯冨眬妯″瀷
-        // 鏇存柊RBD鏁版嵁
-//        modelRbd.setAutoLayoutContent("娴嬭瘯鏂囧瓧");
 //        modelRbdDao.updateById(modelRbd);
-*/
+
+        return result;
+    }
+
+    private void calcPosition(JSONArray rbdJsonArray, RbdTreeNode block, Map<String, RbdTreeNode> nodeMap, Boolean lastIsSeries) {
+        if ("node,start,end,connect,parallel,switch,vote,bridge".contains(block.getNodeType())) {
+            setNodePositionXY(rbdJsonArray, block, nodeMap);
+        } else {
+
+            Double descentWidth = block.getDescentWidth();
+            if (descentWidth == null || descentWidth == 0.0) {
+                descentWidth = block.getBlockWidth();
+            }
+            Double descentHeight = block.getDescentHeight();
+            if (descentHeight == null || descentHeight == 0.0) {
+                descentHeight = block.getBlockHeight();
+            }
+            List<RbdTreeNode> children = block.getChildren();
+            if (OPE_TYPE_SERIES.equals(block.getAlgorithmType())) {
+                Double subBlockX = block.getBlockX();
+                for (RbdTreeNode child : children) {
+
+                    double selfBlockWidth = child.getBlockWidth() * descentWidth / block.getBlockWidth();
+                    child.setDescentWidth(selfBlockWidth);
+                    child.setBlockWidth(selfBlockWidth);
+                    if (lastIsSeries)
+                        child.setDescentHeight(descentHeight);
+                    else
+                        child.setDescentHeight(block.getBlockHeight());
+
+                    child.setBlockHeight(block.getBlockHeight() );
+                    child.setBlockY(block.getBlockY());
+                    child.setBlockX(subBlockX);
+                    calcPosition(rbdJsonArray, child, nodeMap,true);
+                    subBlockX = subBlockX + selfBlockWidth;
+                }
+            } else {
+                Double subBlockY = block.getBlockY() + (descentHeight - block.getObjectHeight())/ 2;
+                for (RbdTreeNode child : children) {
+                    child.setDescentWidth(block.getBlockWidth());
+                    child.setDescentHeight(block.getBlockHeight());
+
+                    if (!"vnode".equals(child.getNodeType())) {
+                        child.setBlockWidth(block.getBlockWidth());
+                    }
+
+                    child.setBlockX(block.getBlockX());
+                    child.setBlockY(subBlockY);
+                    calcPosition(rbdJsonArray, child, nodeMap, false);
+                    subBlockY = subBlockY + child.getBlockHeight();
+                }
+            }
+        }
+    }
+
+    private void setNodePositionXY(JSONArray rbdJsonArray, RbdTreeNode block, Map<String, RbdTreeNode> nodeMap) {
+        Double x = block.getBlockX() + (block.getBlockWidth() - block.getObjectWidth()) / 2;
+        Double y = block.getBlockY() + (block.getBlockHeight() - block.getObjectHeight()) / 2;
+        block.setX(x);
+        block.setY(y);
+        nodeMap.put(block.getPicId(), block);
+        setRbdNodePosition(rbdJsonArray, block.getPicId(), x, y);
+    }
+
+    private void setRbdNodePosition(JSONArray rbdJsonArray,
+                                    String id,
+                                    double x,
+                                    double y) {
+        for (int i = 0; i < rbdJsonArray.size(); i++) {
+            JSONObject jsonObject = rbdJsonArray.getJSONObject(i);
+            if (id.equals(jsonObject.get("id").toString())) {
+                JsonUtils2.setJsonValueByPath(jsonObject, "position/x".split("/"), x);
+                JsonUtils2.setJsonValueByPath(jsonObject, "position/y".split("/"), y);
+            }
+        }
+    }
+
+    private void setEdgeRouter(JSONArray rbdJsonArray, Map<String, RbdTreeNode> nodeMap) {
+        for (int i = 0; i < rbdJsonArray.size(); i++
+        ) {
+            JSONObject jsonObject = rbdJsonArray.getJSONObject(i);
+            if (jsonObject.get("shape").equals("edge")) {
+                String sourceId = JsonUtils2.getJsonValueByPath(jsonObject, "source/cell".split("/")).toString();
+                String targetId = JsonUtils2.getJsonValueByPath(jsonObject, "target/cell".split("/")).toString();
+                RbdTreeNode sourceNode = nodeMap.get(sourceId);
+                RbdTreeNode targetNode = nodeMap.get(targetId);
+                if (sourceNode != null) {
+                    if ("connect".equals(sourceNode.getNodeType()) && !"10000".equals(sourceId)) {
+                        if (sourceNode.getY() + sourceNode.getObjectHeight() / 2 == targetNode.getY() + targetNode.getObjectHeight() / 2) {
+                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/startDirections".split("/"), "right".split(","));
+                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/endDirections".split("/"), "left".split(","));
+                        } else {
+                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/startDirections".split("/"), "top,bottom".split(","));
+                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/endDirections".split("/"), "left".split(","));
+                        }
+                    }
+                }
+                if (targetNode != null) {
+                    if ("parallel,vote,switch,bridge".contains(targetNode.getNodeType())) {
+                        if (sourceNode.getY() + sourceNode.getObjectHeight() / 2 == targetNode.getY() + targetNode.getObjectHeight() / 2) {
+                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/startDirections".split("/"), "right".split(""));
+                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/endDirections".split("/"), "left".split(""));
+                        } else {
+                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/startDirections".split("/"), "right".split(""));
+                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/endDirections".split("/"), "top,bottom".split(""));
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private void calcLayoutSize(RbdTreeNode root) {
+        double childrenWidth = 0.0;
+        double childrenHeight = 0.0;
+        double lineWidth = 120;
+        double lineHeight = 90;
+        if (!"vnode".equals(root.getNodeType())) {
+            root.setBlockWidth(root.getObjectWidth() + lineWidth);
+            root.setBlockHeight(root.getObjectHeight() + lineHeight);
+        } else {
+            for (RbdTreeNode treeNode : root.getChildren()) {
+                calcLayoutSize(treeNode);
+                if ("series".equals(root.getAlgorithmType())) {
+                    childrenWidth += treeNode.getBlockWidth();
+                    childrenHeight = Math.max(childrenHeight, treeNode.getBlockHeight());
+                } else if ("parallel,switch,vote".contains(root.getAlgorithmType())) {
+                    childrenWidth = Math.max(childrenWidth, treeNode.getBlockWidth());
+                    childrenHeight += treeNode.getBlockHeight();
+                }
+            }
+            if ("bridge".equals(root.getAlgorithmType())) {
+                childrenWidth = Math.max(root.getChildren().get(0).getBlockWidth() + root.getChildren().get(1).getBlockWidth(),
+                        root.getChildren().get(2).getBlockWidth());
+                childrenWidth = Math.max(root.getChildren().get(3).getBlockWidth() + root.getChildren().get(4).getBlockWidth(),
+                        childrenWidth);
+                childrenHeight += Math.max(root.getChildren().get(0).getBlockHeight(), root.getChildren().get(1).getBlockHeight());
+                childrenHeight += root.getChildren().get(2).getBlockHeight();
+                childrenHeight += Math.max(root.getChildren().get(3).getBlockHeight(), root.getChildren().get(4).getBlockHeight());
+            }
+            root.setObjectWidth(childrenWidth);
+            root.setObjectHeight(childrenHeight);
+            root.setBlockWidth(childrenWidth);
+            root.setBlockHeight(childrenHeight);
+        }
     }
 
     private void getNodeAndLineFromRbd(Long modelId,
@@ -287,6 +366,12 @@
                     String productType = JsonUtils2.getJsonValueByPath(jsonObject, "data/productType".split("/")).toString();
                     productImg.setProductType(productType);
                     if ("product_sb".equals(productType)) {
+                        jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/deviceNo".split("/"));
+                        if (jsonValue != null && StringUtils.isNotBlank(jsonValue.toString())) {
+                            modelNode.setDeviceNo(Integer.valueOf(jsonValue.toString()));
+                        } else {
+                            modelNode.setDeviceNo(0);
+                        }
                         jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/reliabDistribType".split("/"));
                         if (jsonValue != null && StringUtils.isNotBlank(jsonValue.toString())) {
                             productImg.setReliabDistribType(Integer.valueOf(jsonValue.toString()));
@@ -357,7 +442,7 @@
     }
 
     private RbdTreeNode recognizeRbd(List<ModelNode> modelNodeList,
-                              List<ModelLine> modelLineList) {
+                                     List<ModelLine> modelLineList) {
         Map<String, Integer> vnodeCounter = new HashMap<>();
         vnodeCounter.put("vnodeCounter", 0);
         RbdTreeNode root = new RbdTreeNode();
@@ -377,8 +462,8 @@
         endNode.setNodeType("end");
         endNode.setPicId(end.getPicId());
         endNode.setPairStartNodeId(end.getPairStartNodeId());
-        endNode.setMyWidth(end.getWidth());
-        endNode.setMyHeight(end.getHeight());
+        endNode.setObjectWidth(end.getWidth());
+        endNode.setObjectHeight(end.getHeight());
         root.getChildren().add(endNode);
         ModelLine lineRight = modelLineList.stream().filter(item ->
                 item.getEndCell().equals(end.getPicId())).collect(Collectors.toList()).get(0);
@@ -393,13 +478,13 @@
     }
 
     private void recognizeOneBranch(RbdTreeNode parent,
-                                 ModelLine lineRight, // 涓茶仈鐨勮捣濮嬬嚎锛堝彸杈癸級
-                                 ModelLine lineLeft, // 涓茶仈鐨勭粨鏉熺嚎锛堝乏杈癸級
-                                 List<ModelNode> modelNodeList,
-                                 List<ModelLine> modelLineList,
-                                 Map<String, Integer> vnodeCounter) {
+                                    ModelLine lineRight, // 涓茶仈鐨勮捣濮嬬嚎锛堝彸杈癸級
+                                    ModelLine lineLeft, // 涓茶仈鐨勭粨鏉熺嚎锛堝乏杈癸級
+                                    List<ModelNode> modelNodeList,
+                                    List<ModelLine> modelLineList,
+                                    Map<String, Integer> vnodeCounter) {
         ModelLine inLine = lineRight;
-        for (;;) {
+        for (; ; ) {
             ModelLine searchLine = inLine;
             ModelNode node = modelNodeList.stream().filter(item ->
                     searchLine.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0);
@@ -410,8 +495,9 @@
                 treeNode.setNodeType(node.getNodeType());
                 treeNode.setPicId(node.getPicId());
                 treeNode.setDataId(node.getDataId());
-                treeNode.setMyWidth(node.getWidth());
-                treeNode.setMyHeight(node.getHeight());
+                treeNode.setDeviceNo(node.getDeviceNo());
+                treeNode.setObjectWidth(node.getWidth());
+                treeNode.setObjectHeight(node.getHeight());
                 parent.getChildren().add(treeNode);
                 inLine = modelLineList.stream().filter(item ->
                         item.getEndCell().equals(node.getPicId())).collect(Collectors.toList()).get(0);
@@ -421,8 +507,8 @@
                 treeNode.setName(node.getNodeType());
                 treeNode.setNodeType(node.getNodeType());
                 treeNode.setPicId(node.getPicId());
-                treeNode.setMyWidth(node.getWidth());
-                treeNode.setMyHeight(node.getHeight());
+                treeNode.setObjectWidth(node.getWidth());
+                treeNode.setObjectHeight(node.getHeight());
                 parent.getChildren().add(treeNode);
                 break;
             } else if ("connect".equals(node.getNodeType())) {
@@ -444,8 +530,8 @@
                 treeNode.setName(connect.getNodeType());
                 treeNode.setNodeType(connect.getNodeType());
                 treeNode.setPicId(connect.getPicId());
-                treeNode.setMyWidth(connect.getWidth());
-                treeNode.setMyHeight(connect.getHeight());
+                treeNode.setObjectWidth(connect.getWidth());
+                treeNode.setObjectHeight(connect.getHeight());
                 subNode.getChildren().add(treeNode);
                 RbdTreeNode subNodeOpe = new RbdTreeNode();
                 subNodeOpe.setAlgorithmType(node.getNodeType());
@@ -463,8 +549,8 @@
                 treeNode.setNodeType(node.getNodeType());
                 treeNode.setPicId(node.getPicId());
                 treeNode.setPairStartNodeId(node.getPairStartNodeId());
-                treeNode.setMyWidth(node.getWidth());
-                treeNode.setMyHeight(node.getHeight());
+                treeNode.setObjectWidth(node.getWidth());
+                treeNode.setObjectHeight(node.getHeight());
                 subNode.getChildren().add(treeNode);
                 recognizeOpeBlock(subNodeOpe,
                         node,
@@ -483,10 +569,10 @@
     }
 
     private void recognizeOpeBlock(RbdTreeNode parent,
-                                        ModelNode rightNode, // rbd涓殑鍙宠妭鐐癸紙鍖呮嫭end鍙�4绉嶈繍绠楃锛�
-                                        List<ModelNode> modelNodeList,
-                                        List<ModelLine> modelLineList,
-                                        Map<String, Integer> vnodeCounter) {
+                                   ModelNode rightNode, // rbd涓殑鍙宠妭鐐癸紙鍖呮嫭end鍙�4绉嶈繍绠楃锛�
+                                   List<ModelNode> modelNodeList,
+                                   List<ModelLine> modelLineList,
+                                   Map<String, Integer> vnodeCounter) {
         if ("parallel,vote,switch".contains(parent.getAlgorithmType())) {
             ModelNode searchNode = rightNode;
             List<ModelLine> lines = modelLineList.stream().filter(item ->
@@ -506,7 +592,7 @@
                     parent.getChildren().add(subNode);
                     recognizeOneBranch(subNode, line, null, modelNodeList, modelLineList, vnodeCounter);
                 } else {
-                    recognizeOneBranch(parent, line,null, modelNodeList, modelLineList, vnodeCounter);
+                    recognizeOneBranch(parent, line, null, modelNodeList, modelLineList, vnodeCounter);
                 }
             }
         } else if ("bridge".contains(parent.getAlgorithmType())) {
@@ -605,7 +691,7 @@
 
     /**
      * 鎸夎嚜涓婅�屼笅鐨勯『搴忔帓搴�
-      */
+     */
     private List<ModelLine> sortLine(List<ModelLine> lines,
                                      List<ModelNode> modelNodeList) {
         for (ModelLine line : lines) {
@@ -696,9 +782,9 @@
     }
 
     private void createAlgorithm(Long modelId,
-                                    RbdTreeNode root,
-                                    List<Algorithm> algorithmList,
-                                    List<ModelNode> modelNodeAndVnodeList) {
+                                 RbdTreeNode root,
+                                 List<Algorithm> algorithmList,
+                                 List<ModelNode> modelNodeAndVnodeList) {
         List<RbdTreeNode> children = root.getChildren();
         if (children.size() == 0) {
             ModelNode node = new ModelNode();
@@ -706,6 +792,7 @@
             node.setId(root.getId());
             node.setPicId(root.getPicId());
             node.setDataId(root.getDataId());
+            node.setDeviceNo(root.getDeviceNo());
             node.setNodeType(root.getNodeType());
             node.setName(root.getName());
             node.setVoteNum(root.getVoteNum());
@@ -743,14 +830,15 @@
      * 瀵规爲褰㈢粨鏋勮繘琛岄澶勭悊锛屽寘鎷細
      * 1锛夊皢root鐨刟lgorithmType鏇挎崲涓篹nd锛屽苟鍘绘帀start鍜宔nd鑺傜偣
      * 2锛塻tart涓巈nd闂村彧鏈�1涓�昏緫杩愮畻鍧楋紝鍒欏幓鎺夋渶澶栧眰鐨剆eries
+     *
      * @param root
      */
     private void deleteStartEnd(RbdTreeNode root) {
         root.setAlgorithmType("end");
         List<RbdTreeNode> children = root.getChildren();
-        children.remove(children.size()-1);
+        children.remove(children.size() - 1);
         children.remove(0);
-        if (children.size()>1 ||
+        if (children.size() > 1 ||
                 !"vnode".equals(children.get(0).getNodeType())) {
             RbdTreeNode subNode = new RbdTreeNode();
             subNode.setAlgorithmType("series");
@@ -766,7 +854,8 @@
 
     /**
      * 瀵规爲褰㈢粨鏋勮繘琛岄澶勭悊锛�
-     *      鍘绘帀閫昏緫杩愮畻鍧椾腑鐢ㄤ簬鎺掔増鐨勫灞俿eries
+     * 鍘绘帀閫昏緫杩愮畻鍧椾腑鐢ㄤ簬鎺掔増鐨勫灞俿eries
+     *
      * @param root
      */
     private void deleteSeriesForAutoArrange(RbdTreeNode root) {
@@ -782,50 +871,41 @@
         }
     }
 
-    private void setEdgeRouter(JSONArray rbdJsonArray, Map<String, RbdTreeNode> nodeMap) {
-        for (int i = 0; i < rbdJsonArray.size(); i++
-        ) {
-            JSONObject jsonObject = rbdJsonArray.getJSONObject(i);
-            if (jsonObject.get("shape").equals("edge")) {
-                String sourceId = JsonUtils2.getJsonValueByPath(jsonObject, "source/cell".split("/")).toString();
-                String targetId = JsonUtils2.getJsonValueByPath(jsonObject, "target/cell".split("/")).toString();
-                RbdTreeNode sourceNode = nodeMap.get(sourceId);
-                RbdTreeNode targetNode = nodeMap.get(targetId);
-                if (sourceNode != null) {
-                    if ("connect".equals(sourceNode.getNodeType()) && !"10000".equals(sourceId)){
-                        if (sourceNode.getY()+sourceNode.getMyHeight()/2 == targetNode.getY()+targetNode.getMyHeight()/2){
-                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/startDirections".split("/"),"right".split(","));
-                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/endDirections".split("/"),"left".split(","));
-                        }else{
-                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/startDirections".split("/"),"top,bottom".split(","));
-                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/endDirections".split("/"),"left".split(","));
-                        }
-                    }
-                }
-                if (targetNode != null) {
-                    if ("parallel,vote".contains(targetNode.getNodeType())){
-                        if (sourceNode.getY()+sourceNode.getMyHeight()/2 == targetNode.getY()+targetNode.getMyHeight()/2){
-                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/startDirections".split("/"),"right".split(""));
-                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/endDirections".split("/"),"left".split(""));
-                        }else{
-                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/startDirections".split("/"),"right".split(""));
-                            JsonUtils2.setJsonValueByPath(jsonObject, "router/args/endDirections".split("/"),"top,bottom".split(""));
-                        }
-                    }
-                }
+    /**
+     * 鐢ㄤ簬鑷姩鎺掔増锛氬皢妗ヨ仈杞崲涓�3鏀矾鐨勫苟鑱�
+     * @param root
+     * @return
+     */
+    private void convertBridgeToThreeBranchParallel(RbdTreeNode root) {
+        List<RbdTreeNode> children = root.getChildren();
+        for (RbdTreeNode treeNode : children) {
+            if ("bridge".equals(treeNode.getAlgorithmType())) {
+                treeNode.setAlgorithmType("parallel");
+                List<RbdTreeNode> list = new ArrayList<>();
+                RbdTreeNode subNode = new RbdTreeNode();
+                subNode.setAlgorithmType("series");
+                subNode.setId(UUIDUtil.generateId());
+                subNode.setName("v10000");
+                subNode.setNodeType("vnode");
+                subNode.getChildren().add(treeNode.getChildren().get(0));
+                subNode.getChildren().add(treeNode.getChildren().get(1));
+                list.add(subNode);
+                list.add(treeNode.getChildren().get(2));
+                subNode = new RbdTreeNode();
+                subNode.setAlgorithmType("series");
+                subNode.setId(UUIDUtil.generateId());
+                subNode.setName("v10001");
+                subNode.setNodeType("vnode");
+                subNode.getChildren().add(treeNode.getChildren().get(3));
+                subNode.getChildren().add(treeNode.getChildren().get(4));
+                list.add(subNode);
+                treeNode.setChildren(list);
             }
+            convertBridgeToThreeBranchParallel(treeNode);
         }
     }
 
-    private void setNodePositionXY(JSONArray rbdJsonArray, RbdTreeNode block, Map<String, RbdTreeNode> nodeMap) {
-        Double x = block.getBlockX() + (block.getBlockWidth() - block.getMyWidth()) / 2;
-        Double y = block.getBlockY() + (block.getBlockHeight() - block.getMyHeight()) / 2;
-        block.setX(x);
-        block.setY(y);
-        nodeMap.put(block.getPicId(),block);
-        setRbdNodePosition(rbdJsonArray, block.getPicId(), x, y);
-    }
-
+/*
     private void calcPosition(JSONArray rbdJsonArray, RbdTreeNode block, Map<String, RbdTreeNode> nodeMap) {
         if (block.getNodeType().equals("node")) {
             setNodePositionXY(rbdJsonArray, block,nodeMap);
@@ -870,8 +950,8 @@
 
                 // 璁剧疆connect鐨勪綅缃�
                 RbdTreeNode connectBlock = new RbdTreeNode();
-                connectBlock.setMyWidth(getRbdNodeInfo(rbdJsonArray, block.getPairStartNodeId(), "size/width"));
-                connectBlock.setMyHeight(getRbdNodeInfo(rbdJsonArray, block.getPairStartNodeId(), "size/height"));
+                connectBlock.setObjectWidth(getRbdNodeInfo(rbdJsonArray, block.getPairStartNodeId(), "size/width"));
+                connectBlock.setObjectHeight(getRbdNodeInfo(rbdJsonArray, block.getPairStartNodeId(), "size/height"));
                 connectBlock.setNodeType("connect");
                 connectBlock.setPicId(block.getPairStartNodeId());
                 connectBlock.setBlockX(block.getBlockX());
@@ -898,8 +978,8 @@
 
                 opeBlock.setPicId(block.getPicId());
                 opeBlock.setNodeType("parallel");
-                opeBlock.setMyWidth(getRbdNodeInfo(rbdJsonArray, block.getPicId(), "size/width"));
-                opeBlock.setMyHeight(getRbdNodeInfo(rbdJsonArray, block.getPicId(), "size/height"));
+                opeBlock.setObjectWidth(getRbdNodeInfo(rbdJsonArray, block.getPicId(), "size/width"));
+                opeBlock.setObjectHeight(getRbdNodeInfo(rbdJsonArray, block.getPicId(), "size/height"));
                 opeBlock.setBlockX(block.getBlockX() + blockWidth - LAYOUT_CELL_SIZE_X);
                 opeBlock.setBlockY(firstSubBlockY);
                 opeBlock.setBlockWidth(LAYOUT_CELL_SIZE_X);
@@ -909,435 +989,6 @@
         }
 
     }
-
-    private RbdTreeNode listToTree(String id,
-                                   List<Algorithm> algorithmList,
-                                   List<ModelNode> modelNodeAndVnodeList) {
-
-        List<Algorithm> algos = algorithmList.stream().filter(item ->
-                id.equals(item.getId().toString())).collect(Collectors.toList());
-
-        RbdTreeNode subNode = new RbdTreeNode();
-        subNode.setId(Convert.toLong(id));
-        ModelNode nd = modelNodeAndVnodeList.stream().filter(item ->
-                id.equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-        subNode.setName(nd.getName());
-        subNode.setNodeType(nd.getNodeType());
-        subNode.setPicId(nd.getPicId());
-
-        if (!"vnode".equals(nd.getNodeType())) {
-            subNode.setMyWidth(nd.getWidth());
-            subNode.setMyHeight(nd.getHeight());
-        }
-        subNode.setBlockWidthNum(nd.getVnodeCellNumX());
-        subNode.setBlockHeightNum(nd.getVnodeCellNumY());
-        subNode.setPairStartNodeId(nd.getPairStartNodeId());
-        subNode.setPairEndNodeId(nd.getPairEndNodeId());
-        if (algos.size() > 0) {
-            Algorithm algo = algos.get(0);
-            subNode.setAlgorithmType(algo.getAlgorithmType());
-            String str = algo.getComputerList();
-            String[] ids = str.split(",");
-            for (String subId : ids) {
-                subNode.getChildren().add(listToTree(subId, algorithmList, modelNodeAndVnodeList));
-            }
-        }
-        return subNode;
-    }
-
-    /*
-     */
-
-    /**
-     * 鏍规嵁椤跺眰RBD鐨勪綅缃紙x锛寉锛夛紝鑷《鍚戜笅閫掑綊璁$畻鍚勪釜鑺傜偣鐨勪綅缃紙x锛寉锛�
-     *
-     * @param modelRbd
-     * @param algorithmList
-     * @param modelNodeAndVnodeList
-     *//*
-
-    private void calcLayoutPosition(ModelRbd modelRbd,
-                                    List<Algorithm> algorithmList,
-                                    List<ModelNode> modelNodeAndVnodeList) {
-        String rbdsonStr = modelRbd.getContent();
-        JSONArray rbdJsonArray = new JSONObject(rbdsonStr).getJSONArray("cells");
-        Algorithm endAlgo = algorithmList.stream().filter(item ->
-                "end".equals(item.getAlgorithmType())).collect(Collectors.toList()).get(0);
-        ModelNode topNode = modelNodeAndVnodeList.stream().filter(item ->
-                endAlgo.getComputerList().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-        Algorithm topAlgo = algorithmList.stream().filter(item ->
-                endAlgo.getComputerList().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-        // 灏唗opNode鐨勫潗鏍囧畾涓篊ell(0锛�0)锛屽弽绠楁墍鏈夎妭鐐圭殑鍧愭爣
-        // 1. 璁$畻鑺傜偣鐨凜ell浣嶇疆
-        calcNodeLayoutPositionCell(rbdJsonArray, algorithmList, modelNodeAndVnodeList, topNode, topAlgo, 0, 0,
-                topNode.getVnodeCellNumX(), topNode.getVnodeCellNumY());
-        // 2. 璁$畻鑺傜偣鐨剎锛寉鍧愭爣浣嶇疆
-        calcNodeLayoutPosition(rbdJsonArray, algorithmList, modelNodeAndVnodeList, topNode, topAlgo);
-        // 3. 璁剧疆start鐨勪綅缃�
-        double distance = 200.0;
-        double y = (topNode.getPositionCellY() + topNode.getVnodeCellNumY() / 2) * LAYOUT_CELL_SIZE_Y + (LAYOUT_CELL_SIZE_Y - LAYOUT_START_END_SIZE_Y) / 2;
-        setRbdNodePosition(rbdJsonArray, "10000", 0 - distance, y);
-        // 4. 璁剧疆end鐨勪綅缃�
-        double x = topNode.getVnodeCellNumX() * LAYOUT_CELL_SIZE_X + distance - LAYOUT_START_END_SIZE_X;
-        setRbdNodePosition(rbdJsonArray, "20000", x, y);
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("cells", rbdJsonArray);
-        modelRbd.setContent(jsonObject.toString());
-    }
 */
 
-/*
-    // 閫掑綊鍑芥暟锛堣绠楀悇鑺傜偣鐨剎锛寉鍧愭爣浣嶇疆锛�
-    private void calcNodeLayoutPosition(JSONArray rbdJsonArray,
-                                        List<Algorithm> algorithmList,
-                                        List<ModelNode> modelNodeAndVnodeList,
-                                        ModelNode node,
-                                        Algorithm algo) {
-        // 鏈娇鐢ㄨ澶囩殑瀹為檯瀹姐�侀珮
-        double x;
-        double y;
-        if ("node".equals(node.getNodeType())) {
-            x = node.getPositionCellX() * LAYOUT_CELL_SIZE_X + (LAYOUT_CELL_SIZE_X - LAYOUT_DEVICE_NODE_SIZE_X) / 2;
-            y = node.getPositionCellY() * LAYOUT_CELL_SIZE_Y + (LAYOUT_CELL_SIZE_Y - LAYOUT_DEVICE_NODE_SIZE_Y) / 2;
-            node.setPositionX(x);
-            node.setPositionY(y);
-            setRbdNodePosition(rbdJsonArray, node.getPicId(), node.getPositionX(), node.getPositionY());
-        } else if ("vnode".equals(node.getNodeType())) {
-            String[] computerNodeListStr = algo.getComputerList().split(",");
-            switch (algo.getAlgorithmType()) {
-                case OPE_TYPE_SERIES:
-                case OPE_TYPE_PARALLEL:
-                case OPE_TYPE_SWITCH:
-                case OPE_TYPE_VOTE:
-                    for (String nodeStr : computerNodeListStr) {
-                        ModelNode childNode = modelNodeAndVnodeList.stream().filter(item ->
-                                nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                        List<Algorithm> childAlgos = algorithmList.stream().filter(item ->
-                                childNode.getId().equals(item.getId())).collect(Collectors.toList());
-                        Algorithm childAlgo = childAlgos.size() > 0 ? childAlgos.get(0) : null;
-                        calcNodeLayoutPosition(rbdJsonArray,
-                                algorithmList,
-                                modelNodeAndVnodeList,
-                                childNode,
-                                childAlgo);
-                    }
-                    if (OPE_TYPE_PARALLEL.equals(algo.getAlgorithmType())
-                            || OPE_TYPE_SWITCH.equals(algo.getAlgorithmType())
-                            || OPE_TYPE_VOTE.equals(algo.getAlgorithmType())) {
-                        // 璁剧疆connect鐨勪綅缃�
-                        x = node.getPositionCellX() * LAYOUT_CELL_SIZE_X + (LAYOUT_CELL_SIZE_X - LAYOUT_CONNECT_SIZE_X) / 2;
-                        y = (node.getPositionCellY() + node.getVnodeCellNumY() / 2) * LAYOUT_CELL_SIZE_Y + (LAYOUT_CELL_SIZE_Y - LAYOUT_CONNECT_SIZE_Y) / 2;
-                        setRbdNodePosition(rbdJsonArray, node.getPairStartNodeId(), x, y);
-                        // 璁剧疆杩愮畻绗︾殑浣嶇疆
-                        x = (node.getPositionCellX() + node.getVnodeCellNumX() - 1) * LAYOUT_CELL_SIZE_X + (LAYOUT_CELL_SIZE_X - LAYOUT_OPE_NODE_SIZE_X) / 2;
-                        y = (node.getPositionCellY() + node.getVnodeCellNumY() / 2) * LAYOUT_CELL_SIZE_Y + (LAYOUT_CELL_SIZE_Y - LAYOUT_OPE_NODE_SIZE_Y) / 2;
-                        setRbdNodePosition(rbdJsonArray, node.getPicId(), x, y);
-                    }
-                    break;
-                case OPE_TYPE_BRIDGE:
-                    break;
-                default:
-                    break;
-            }
-        }
-    }
-
-    // 閫掑綊鍑芥暟锛堣绠楀悇鑺傜偣鐨凜ell浣嶇疆锛屼互宸︿笂瑙掍负Cell浣嶇疆0锛�0锛�
-    private void calcNodeLayoutPositionCell(JSONArray rbdJsonArray,
-                                            List<Algorithm> algorithmList,
-                                            List<ModelNode> modelNodeAndVnodeList,
-                                            ModelNode node,
-                                            Algorithm algo,
-                                            double originCellX,
-                                            double originCellY,
-                                            double maxX,
-                                            double maxY) {
-        if ("node".equals(node.getNodeType())) {
-            //璁剧疆node锛堣澶囪妭鐐癸級Cell浣嶇疆
-            double width = LAYOUT_DEVICE_NODE_SIZE_X * maxX;
-            double hight = LAYOUT_DEVICE_NODE_SIZE_Y * maxY;
-            double x = originCellX + (width - LAYOUT_DEVICE_NODE_SIZE_X) / 2;
-            double y = originCellY + (hight - LAYOUT_DEVICE_NODE_SIZE_Y) / 2;
-            node.setPositionCellX(x);
-            node.setPositionCellY(y);
-        } else if ("vnode".equals(node.getNodeType())) {
-            String[] computerNodeListStr = algo.getComputerList().split(",");
-            switch (algo.getAlgorithmType()) {
-                case OPE_TYPE_SERIES:
-                case OPE_TYPE_PARALLEL:
-                case OPE_TYPE_SWITCH:
-                case OPE_TYPE_VOTE:
-                    double preNodeCellX = 0.0;
-                    double preNodeCellY = 0.0;
-                    for (String nodeStr : computerNodeListStr) {
-                        ModelNode childNode = modelNodeAndVnodeList.stream().filter(item ->
-                                nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                        List<Algorithm> childAlgos = algorithmList.stream().filter(item ->
-                                childNode.getId().equals(item.getId())).collect(Collectors.toList());
-                        Algorithm childAlgo = childAlgos.size() > 0 ? childAlgos.get(0) : null;
-                        if (OPE_TYPE_SERIES.equals(algo.getAlgorithmType())) {
-                            calcNodeLayoutPositionCell(rbdJsonArray,
-                                    algorithmList,
-                                    modelNodeAndVnodeList,
-                                    childNode,
-                                    childAlgo,
-                                    originCellX + preNodeCellX,
-                                    originCellY, node.getVnodeCellNumX(), node.getVnodeCellNumY()
-                            );
-                            preNodeCellX += childNode.getVnodeCellNumX();
-                        } else {
-                            calcNodeLayoutPositionCell(rbdJsonArray,
-                                    algorithmList,
-                                    modelNodeAndVnodeList,
-                                    childNode,
-                                    childAlgo,
-                                    originCellX + 1,
-                                    originCellY + preNodeCellY, node.getVnodeCellNumX(), node.getVnodeCellNumY());
-                            preNodeCellY += childNode.getVnodeCellNumY();
-                        }
-                    }
-*/
-/*
-                    // 璁剧疆杩愮畻绗︾殑Cell浣嶇疆
-                    if (OPE_TYPE_SERIES.equals(algo.getAlgorithmType())) {
-                        node.setPositionCellX(originCellX);
-                    } else {
-                        node.setPositionCellX(originCellX + node.getVnodeCellNumX() - 1);
-                    }
-                    node.setPositionCellY(originCellY + node.getVnodeCellNumY()/2);
-*//*
-
-                    // 闇�鑺傜偣浠h〃鏁翠釜閫昏緫鍗曞厓锛屽洜姝ゅ叾鍧愭爣涓簅riginCellX鍜宱riginCellX
-                    node.setPositionCellX(originCellX);
-                    node.setPositionCellY(originCellX);
-                    break;
-                case OPE_TYPE_BRIDGE:
-*/
-/*
-                    ModelNode node1 = modelNodeAndVnodeList.stream().filter(item ->
-                            computerNodeListStr[0].equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                    ModelNode node2 = modelNodeAndVnodeList.stream().filter(item ->
-                            computerNodeListStr[1].equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                    ModelNode node3 = modelNodeAndVnodeList.stream().filter(item ->
-                            computerNodeListStr[2].equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                    ModelNode node4 = modelNodeAndVnodeList.stream().filter(item ->
-                            computerNodeListStr[3].equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                    ModelNode node5 = modelNodeAndVnodeList.stream().filter(item ->
-                            computerNodeListStr[4].equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                    Algorithm algo1 = algorithmList.stream().filter(item ->
-                            node1.getId().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                    Algorithm algo2 = algorithmList.stream().filter(item ->
-                            node2.getId().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                    Algorithm algo3 = algorithmList.stream().filter(item ->
-                            node3.getId().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                    Algorithm algo4 = algorithmList.stream().filter(item ->
-                            node4.getId().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                    Algorithm algo5 = algorithmList.stream().filter(item ->
-                            node5.getId().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                    // 1锛岃绠椾笁琛岀殑鎬婚珮搴�
-                    // 1.1 璁$畻绗竴琛屼袱涓妭鐐圭殑楂樺害
-                    int firstRowCellNumY = Math.max(node1.getVnodeCellNumY(), node2.getVnodeCellNumY());
-                    // 1.2 璁$畻绗簩琛屾ˉ鑱旇妭鐐圭殑楂樺害
-                    int secondRowCellNumY = node3.getVnodeCellNumY();
-                    // 1.3 璁$畻绗笁琛屼袱涓妭鐐圭殑楂樺害
-                    int thirdRowCellNumY = Math.max(node4.getVnodeCellNumY(), node5.getVnodeCellNumY());
-//                    int totalCellNumY = firstRowCellNumY + secondRowCellNumY + thirdRowCellNumY;
-                    // 2. 璁$畻涓夎鍚勮妭鐐圭殑鍧愭爣
-                    // 2.1 璁$畻绗竴琛屼袱涓妭鐐圭殑鍧愭爣
-                    calcNodeLayoutPositionCell(rbdJsonArray,
-                            algorithmList,
-                            modelNodeAndVnodeList,
-                            node1,
-                            algo1,
-                            originCellX + 1,
-                            originCellY);
-                    calcNodeLayoutPositionCell(rbdJsonArray,
-                            algorithmList,
-                            modelNodeAndVnodeList,
-                            node2,
-                            algo2,
-                            originCellX + 1 + node1.getPositionCellX(),
-                            originCellY);
-                    // 2.2 璁$畻绗簩琛屾ˉ鑱旇妭鐐圭殑鍧愭爣
-                    calcNodeLayoutPositionCell(rbdJsonArray,
-                            algorithmList,
-                            modelNodeAndVnodeList,
-                            node3,
-                            algo3,
-                            originCellX + 1,
-                            originCellY + firstRowCellNumY);
-                    // 2.3 璁$畻绗笁琛屼袱涓妭鐐圭殑鍧愭爣
-                    calcNodeLayoutPositionCell(rbdJsonArray,
-                            algorithmList,
-                            modelNodeAndVnodeList,
-                            node4,
-                            algo4,
-                            originCellX + 1,
-                            originCellY + firstRowCellNumY + secondRowCellNumY);
-                    calcNodeLayoutPositionCell(rbdJsonArray,
-                            algorithmList,
-                            modelNodeAndVnodeList,
-                            node5,
-                            algo5,
-                            originCellX + 1 + node4.getPositionCellX(),
-                            originCellY + firstRowCellNumY + secondRowCellNumY);
-                    // 2.4 璁$畻妗ヨ仈杩愮畻绗︾殑鍧愭爣
-                    node.setPositionCellX(originCellX + 1);
-                    node.setPositionCellY(originCellY + node.getVnodeCellNumY()/2);
-*//*
-
-                    break;
-                default:
-                    break;
-            }
-        }
-    }
-*/
-    private void setRbdNodePosition(JSONArray rbdJsonArray,
-                                    String id,
-                                    double x,
-                                    double y) {
-        for (int i = 0; i < rbdJsonArray.size(); i++) {
-            JSONObject jsonObject = rbdJsonArray.getJSONObject(i);
-            if (id.equals(jsonObject.get("id").toString())) {
-                JsonUtils2.setJsonValueByPath(jsonObject, "position/x".split("/"), x);
-                JsonUtils2.setJsonValueByPath(jsonObject, "position/y".split("/"), y);
-            }
-        }
-    }
-
-    private Double getRbdNodeInfo(JSONArray rbdJsonArray,
-                                  String picId,
-                                  String path) {
-        for (int i = 0; i < rbdJsonArray.size(); i++) {
-            JSONObject jsonObject = rbdJsonArray.getJSONObject(i);
-            if (picId.equals(jsonObject.get("id").toString())) {
-                return Convert.toDouble(JsonUtils2.getJsonValueByPath(jsonObject, path.split("/")));
-            }
-        }
-        return null;
-    }
-
-    /**
-     * 鑷簳鍚戜笂閫掑綊鍚堣鍑烘暣涓猂BD鐨勫ぇ灏忥紙妯悜鍙婄旱鍚戞墍鍗犲崟鍏冩牸鐨勬暟閲忥級
-     *
-     * @param modelRbd
-     * @param algorithmList
-     * @param modelNodeAndVnodeList
-     */
-    private void calcLayoutSize(
-            ModelRbd modelRbd,
-            List<Algorithm> algorithmList,
-            List<ModelNode> modelNodeAndVnodeList) {
-        Algorithm endAlgo = algorithmList.stream().filter(item ->
-                "end".equals(item.getAlgorithmType())).collect(Collectors.toList()).get(0);
-        ModelNode topNode = modelNodeAndVnodeList.stream().filter(item ->
-                endAlgo.getComputerList().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-        Algorithm topAlgo = algorithmList.stream().filter(item ->
-                endAlgo.getComputerList().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-        calcNodeLayoutSize(algorithmList, modelNodeAndVnodeList, topNode, topAlgo);
-    }
-
-    // 閫掑綊鍑芥暟
-    private void calcNodeLayoutSize(List<Algorithm> algorithmList,
-                                    List<ModelNode> modelNodeAndVnodeList,
-                                    ModelNode node,
-                                    Algorithm algo) {
-        if ("node".equals(node.getNodeType())) {
-            //璁剧疆node锛堣澶囪妭鐐癸級甯冨眬淇℃伅
-//            node.setWidth(LAYOUT_DEVICE_NODE_SIZE_X);
-//            node.setHeight(LAYOUT_DEVICE_NODE_SIZE_Y);
-            node.setCellNumX(LAYOUT_CELL_NUM_NODE_X);
-            node.setCellNumY(LAYOUT_CELL_NUM_NODE_Y);
-            node.setVnodeCellNumX(node.getCellNumX());
-            node.setVnodeCellNumY(node.getCellNumY());
-        } else if ("vnode".equals(node.getNodeType())) {
-            // 1. 璁剧疆vnode锛堣繍绠楄妭鐐癸級甯冨眬淇℃伅锛堝叾瀹炰覆鑱旀病鏈夎繍绠楃锛屼笉闇�瑕佽缃紝浣嗘槸璁剧疆浜嗕篃娌℃湁鍧忓锛屾墍浠ヤ笉浣滃尯鍒嗭級
-//            node.setWidth(LAYOUT_OPE_NODE_SIZE_X);
-//            node.setHeight(LAYOUT_OPE_NODE_SIZE_Y);
-            node.setCellNumX(LAYOUT_CELL_NUM_NODE_X);
-            node.setCellNumY(LAYOUT_CELL_NUM_NODE_Y);
-
-            // 2. 璁剧疆铏氳妭鐐瑰竷灞�淇℃伅
-            // 2.1 璁剧疆铏氳妭鐐瑰唴鍚勮繍绠楀璞$殑甯冨眬淇℃伅
-            String[] computerNodeListStr = algo.getComputerList().split(",");
-            for (String nodeStr : computerNodeListStr) {
-                ModelNode childNode = modelNodeAndVnodeList.stream().filter(item ->
-                        nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                List<Algorithm> childAlgos = algorithmList.stream().filter(item ->
-                        childNode.getId().equals(item.getId())).collect(Collectors.toList());
-                Algorithm childAlgo = childAlgos.size() > 0 ? childAlgos.get(0) : null;
-                calcNodeLayoutSize(algorithmList,
-                        modelNodeAndVnodeList,
-                        childNode,
-                        childAlgo);
-            }
-            // 2.2 璁剧疆铏氳妭鐐规�荤殑甯冨眬淇℃伅鍒拌繍绠楄妭鐐逛腑
-            setVnodeLayoutNum(computerNodeListStr, modelNodeAndVnodeList, node, algo);
-        }
-    }
-
-    private void setVnodeLayoutNum(String[] computerNodeListStr,
-                                   List<ModelNode> modelNodeAndVnodeList,
-                                   ModelNode vnode,
-                                   Algorithm algo) {
-        int numX = 0;
-        int numY = 0;
-        // 1. 璁$畻涓层�佸苟銆佹梺鑱斻�佽〃鍐�
-        for (String nodeStr : computerNodeListStr) {
-            ModelNode childNode = modelNodeAndVnodeList.stream().filter(item ->
-                    nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-            switch (algo.getAlgorithmType()) {
-                case OPE_TYPE_SERIES:
-                    numX += childNode.getVnodeCellNumX();
-                    numY = childNode.getVnodeCellNumY() > numY ? childNode.getVnodeCellNumY() : numY;
-                    break;
-                case OPE_TYPE_PARALLEL:
-                case OPE_TYPE_SWITCH:
-                case OPE_TYPE_VOTE:
-                    numX = childNode.getVnodeCellNumX() > numX ? childNode.getVnodeCellNumX() : numX;
-                    numY += childNode.getVnodeCellNumY();
-                    break;
-                default:
-                    break;
-            }
-        }
-        if (OPE_TYPE_PARALLEL.equals(algo.getAlgorithmType())
-                || OPE_TYPE_SWITCH.equals(algo.getAlgorithmType())
-                || OPE_TYPE_VOTE.equals(algo.getAlgorithmType())) {
-            // 鍔犱笂connect鐨勫ぇ灏�
-            numX += LAYOUT_CELL_NUM_CONNECT_X;
-            numX += vnode.getCellNumX();
-        }
-        // 2. 璁$畻妗ヨ仈
-        if (OPE_TYPE_BRIDGE.equals(algo.getAlgorithmType())) {
-            // 妗ヨ仈鏀矾绠椾竴琛岋紝鏁翠釜妗ヨ仈鍏�3琛�
-            // 2.1 璁$畻绗竴琛�
-            ModelNode node1 = modelNodeAndVnodeList.stream().filter(item ->
-                    computerNodeListStr[0].equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-            ModelNode node2 = modelNodeAndVnodeList.stream().filter(item ->
-                    computerNodeListStr[1].equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-            ModelNode node3 = modelNodeAndVnodeList.stream().filter(item ->
-                    computerNodeListStr[2].equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-            ModelNode node4 = modelNodeAndVnodeList.stream().filter(item ->
-                    computerNodeListStr[3].equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-            ModelNode node5 = modelNodeAndVnodeList.stream().filter(item ->
-                    computerNodeListStr[4].equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-            int numX1 = node1.getCellNumX() + node2.getCellNumX();
-            int numY1 = node1.getCellNumY() > node2.getCellNumY() ? node1.getCellNumY() : node2.getCellNumY();
-            // 2.2 璁$畻绗簩琛岋紙妗ヨ仈鏀矾锛屾í鍚戠敾鍥撅級
-            int numX2 = node3.getCellNumX();
-            int numY2 = node3.getCellNumY();
-            // 2.3 璁$畻绗笁琛�
-            int numX3 = node4.getCellNumX() + node5.getCellNumX();
-            int numY3 = node4.getCellNumY() > node5.getCellNumY() ? node4.getCellNumY() : node5.getCellNumY();
-            numX = Math.max(Math.max(numX1, numX2), numX3);
-            numY = numY1 + numY2 + numY3;
-            // 2.4 鍔犱笂connect鐨勫ぇ灏�
-            numX += LAYOUT_CELL_NUM_CONNECT_X;
-            numX += vnode.getCellNumX();
-        }
-        vnode.setVnodeCellNumX(numX);
-        vnode.setVnodeCellNumY(numY);
-    }
 }

--
Gitblit v1.9.1