From 6e5cfe44f7d621a64ced0121d8fcb499c1db5e89 Mon Sep 17 00:00:00 2001 From: xyc <jc_xiong@hotmail.com> Date: 星期六, 12 十月 2024 10:34:33 +0800 Subject: [PATCH] 修改RBD识别算法 --- modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java | 420 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 401 insertions(+), 19 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 9c74487..eac7dbb 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 @@ -8,14 +8,11 @@ import com.zt.common.utils.UUIDUtil; import com.zt.life.modules.mainPart.basicInfo.dao.ParamDataDao; import com.zt.life.modules.mainPart.basicInfo.dao.XhProductModelDao; -import com.zt.life.modules.mainPart.basicInfo.model.ParamData; import com.zt.life.modules.mainPart.basicInfo.model.ProductImg; -import com.zt.life.modules.mainPart.basicInfo.model.XhProductModel; 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.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -161,15 +158,17 @@ // 1. 瑙f瀽鍑鸿妭鐐逛笌杈� getNodeAndLineFromRbd(modelRbd.getId(), rbdJsonArray, modelNodeList, modelLineList, productImgList); - // 2. 瀵逛簬鏈夊鏍瑰叆鍙g嚎鐨勪骇鍝佽妭鐐癸紝灏嗗叾涓婄殑琛ㄥ喅銆佹梺鑱斿叧绯诲墺绂绘垚杩愮畻绗﹁妭鐐癸紝娣诲姞鍒拌鑺傜偣鐨勫墠闈紝骞舵坊鍔犵浉搴旂殑杈� - peelOperationFromProductNode(modelRbd.getId(), modelNodeList, modelLineList); - // 3. 璁$畻鎵�鏈夎妭鐐圭殑鍏ュ彛绾挎暟鍙婂嚭鍙g嚎鏁� + // 2. 璁$畻鎵�鏈夎妭鐐圭殑鍏ュ彛绾挎暟鍙婂嚭鍙g嚎鏁� calcInOutLineNumAllNode(modelNodeList, modelLineList); - // 4. 澶嶅埗浜у搧鑺傜偣(node)鍒發ist + + RbdTreeNode root = recognizeRbd(modelNodeList, modelLineList); + +/* + // 3. 澶嶅埗浜у搧鑺傜偣(node)鍒發ist List<ModelNode> modelNodeAndVnodeList = modelNodeList.stream().filter(item -> "node".equals(item.getNodeType())).collect(Collectors.toList()); - // 5. 涓嶆柇灏嗗熀鏈ā鍨嬶紙涓茶仈銆佸苟鑱斻�佹梺鑱斻�佽〃鍐炽�佹ˉ鑱旓級鏇挎崲涓鸿櫄鑺傜偣鑰岀畝鍖栧浘褰紝鐩磋嚦鏃犳硶绠�鍖栦负姝€�� - result = getAlgorithmFromRbd(modelRbd, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList); + // 4. 涓嶆柇灏嗗熀鏈ā鍨嬶紙涓茶仈銆佸苟鑱斻�佹梺鑱斻�佽〃鍐炽�佹ˉ鑱旓級鏇挎崲涓鸿櫄鑺傜偣鑰岀畝鍖栧浘褰紝鐩磋嚦鏃犳硶绠�鍖栦负姝€�� +// result = getAlgorithmFromRbd(modelRbd, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList); // 6. 閫掑綊璁$畻RBD鐨勫竷灞�绌洪棿澶у皬 calcLayoutSize(modelRbd, algorithmList, modelNodeAndVnodeList); @@ -193,7 +192,11 @@ // 7. 閫掑綊璁$畻RBD鐨勫竷灞�绌洪棿鍙傛暟锛坸銆亂鍧愭爣锛� root.setBlockX(0); root.setBlockY(0); - calcPosition(rbdJsonArray, root); + + Map<String, RbdTreeNode> nodeMap = new HashMap<>(); + calcPosition(rbdJsonArray, root, nodeMap); + setEdgeRouter(rbdJsonArray, nodeMap); + JSONObject jsonObject = new JSONObject(); jsonObject.put("cells", rbdJsonArray); modelRbd.setContent(jsonObject.toString()); @@ -203,19 +206,386 @@ // 鏇存柊RBD鏁版嵁 // modelRbd.setAutoLayoutContent("娴嬭瘯鏂囧瓧"); // modelRbdDao.updateById(modelRbd); +*/ return result; } - private void setNodePositionXY(JSONArray rbdJsonArray, RbdTreeNode block) { + private RbdTreeNode recognizeRbd(List<ModelNode> modelNodeList, + List<ModelLine> modelLineList) { + Map<String, Integer> vnodeCounter = new HashMap<>(); + vnodeCounter.put("vnodeCounter", 0); + RbdTreeNode root = new RbdTreeNode(); + root.setAlgorithmType("series"); + root.setId(UUIDUtil.generateId()); + int counter = vnodeCounter.get("vnodeCounter"); + root.setName("v" + counter); + counter++; + vnodeCounter.put("vnodeCounter", counter); + root.setNodeType("vnode"); + + ModelNode end = modelNodeList.stream().filter(item -> + "end".equals(item.getNodeType())).collect(Collectors.toList()).get(0); + RbdTreeNode endNode = new RbdTreeNode(); + endNode.setId(end.getId()); + endNode.setName("end"); + endNode.setNodeType("end"); + endNode.setPicId(end.getPicId()); + endNode.setPairStartNodeId(end.getPairStartNodeId()); + endNode.setMyWidth(end.getWidth()); + endNode.setMyHeight(end.getHeight()); + root.getChildren().add(endNode); + ModelLine lineRight = modelLineList.stream().filter(item -> + item.getEndCell().equals(end.getPicId())).collect(Collectors.toList()).get(0); + recognizeOneBranch(root, + lineRight, + null, + modelNodeList, + modelLineList, + vnodeCounter); + + return root; + } + + private void recognizeOneBranch(RbdTreeNode parent, + ModelLine lineRight, // 涓茶仈鐨勮捣濮嬬嚎锛堝彸杈癸級 + ModelLine lineLeft, // 涓茶仈鐨勭粨鏉熺嚎锛堝乏杈癸級 + List<ModelNode> modelNodeList, + List<ModelLine> modelLineList, + Map<String, Integer> vnodeCounter) { + ModelLine inLine = lineRight; + for (;;) { + ModelLine searchLine = inLine; + ModelNode node = modelNodeList.stream().filter(item -> + searchLine.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + if ("node".equals(node.getNodeType())) { + RbdTreeNode treeNode = new RbdTreeNode(); + treeNode.setId(node.getId()); + treeNode.setName(node.getName()); + treeNode.setNodeType(node.getNodeType()); + treeNode.setPicId(node.getPicId()); + treeNode.setMyWidth(node.getWidth()); + treeNode.setMyHeight(node.getHeight()); + parent.getChildren().add(treeNode); + inLine = modelLineList.stream().filter(item -> + item.getEndCell().equals(node.getPicId())).collect(Collectors.toList()).get(0); + } else if ("start".equals(node.getNodeType())) { + RbdTreeNode treeNode = new RbdTreeNode(); + treeNode.setId(node.getId()); + treeNode.setName(node.getNodeType()); + treeNode.setNodeType(node.getNodeType()); + treeNode.setPicId(node.getPicId()); + treeNode.setMyWidth(node.getWidth()); + treeNode.setMyHeight(node.getHeight()); + parent.getChildren().add(treeNode); + break; + } else if ("connect".equals(node.getNodeType())) { + break; + } else if ("parallel,vote,switch,bridge".contains(node.getNodeType())) { + RbdTreeNode subNode = new RbdTreeNode(); + subNode.setAlgorithmType("series"); + subNode.setId(UUIDUtil.generateId()); + int counter = vnodeCounter.get("vnodeCounter"); + subNode.setName("v" + counter); + counter++; + vnodeCounter.put("vnodeCounter", counter); + subNode.setNodeType("vnode"); + parent.getChildren().add(subNode); + ModelNode connect = modelNodeList.stream().filter(item -> + node.getPairStartNodeId().equals(item.getPicId())).collect(Collectors.toList()).get(0); + RbdTreeNode treeNode = new RbdTreeNode(); + treeNode.setId(connect.getId()); + treeNode.setName(connect.getNodeType()); + treeNode.setNodeType(connect.getNodeType()); + treeNode.setPicId(connect.getPicId()); + treeNode.setMyWidth(connect.getWidth()); + treeNode.setMyHeight(connect.getHeight()); + subNode.getChildren().add(treeNode); + RbdTreeNode subNodeOpe = new RbdTreeNode(); + subNodeOpe.setAlgorithmType(node.getNodeType()); + subNodeOpe.setId(UUIDUtil.generateId()); + counter = vnodeCounter.get("vnodeCounter"); + subNodeOpe.setName("v" + counter); + counter++; + vnodeCounter.put("vnodeCounter", counter); + subNodeOpe.setNodeType("vnode"); + subNode.getChildren().add(subNodeOpe); + treeNode = new RbdTreeNode(); + treeNode.setId(node.getId()); + treeNode.setName(node.getNodeType()); + treeNode.setNodeType(node.getNodeType()); + treeNode.setPicId(node.getPicId()); + treeNode.setPairStartNodeId(node.getPairStartNodeId()); + treeNode.setMyWidth(node.getWidth()); + treeNode.setMyHeight(node.getHeight()); + subNode.getChildren().add(treeNode); + recognizeOpeBlock(subNodeOpe, + node, + modelNodeList, + modelLineList, + vnodeCounter); + inLine = modelLineList.stream().filter(item -> + item.getEndCell().equals(connect.getPicId())).collect(Collectors.toList()).get(0); + } + + if (null != lineLeft) { + if (inLine.getPicId().equals(lineLeft.getPicId())) break; + } + } + if ("series".equals(parent.getAlgorithmType())) Collections.reverse(parent.getChildren()); + } + + private void recognizeOpeBlock(RbdTreeNode parent, + 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 -> + item.getEndCell().equals(searchNode.getPicId())).collect(Collectors.toList()); + List<ModelLine> sortedLines = sortLine(lines, modelNodeList); + for (ModelLine line : sortedLines) { + boolean isSeries = isSeriesBranch(rightNode, line, modelNodeList, modelLineList); + if (isSeries) { + RbdTreeNode subNode = new RbdTreeNode(); + subNode.setAlgorithmType("series"); + subNode.setId(UUIDUtil.generateId()); + int counter = vnodeCounter.get("vnodeCounter"); + subNode.setName("v" + counter); + counter++; + vnodeCounter.put("vnodeCounter", counter); + subNode.setNodeType("vnode"); + parent.getChildren().add(subNode); + recognizeOneBranch(subNode, line, null, modelNodeList, modelLineList, vnodeCounter); + } else { + recognizeOneBranch(parent, line,null, modelNodeList, modelLineList, vnodeCounter); + } + } + } else if ("bridge".contains(parent.getAlgorithmType())) { + ModelNode searchNode = rightNode; + List<ModelLine> linesRight = modelLineList.stream().filter(item -> + item.getEndCell().equals(searchNode.getPicId())).collect(Collectors.toList()); + List<ModelLine> sortedLinesRight = sortLine(linesRight, modelNodeList); + List<ModelLine> linesLeft = modelLineList.stream().filter(item -> + item.getBeginCell().equals(searchNode.getPairStartNodeId())).collect(Collectors.toList()); + List<ModelLine> sortedLinesLeft = sortLine(linesLeft, modelNodeList); + ModelLine lineTop = modelLineList.stream().filter(item -> + item.getPicId().equals(searchNode.getBridgeEdgeTopId())).collect(Collectors.toList()).get(0); + ModelLine lineBottom = modelLineList.stream().filter(item -> + item.getPicId().equals(searchNode.getBridgeEdgeBottomId())).collect(Collectors.toList()).get(0); + ModelLine verticalLineUpper = modelLineList.stream().filter(item -> + item.getBeginCell().equals(searchNode.getBridgeEdgeTopId())).collect(Collectors.toList()).get(0); + ModelLine verticalLineLower = modelLineList.stream().filter(item -> + item.getEndCell().equals(searchNode.getBridgeEdgeBottomId())).collect(Collectors.toList()).get(0); + // 妗ヨ仈鐨勭1涓敮璺� + if (isSeriesBranch(lineTop, sortedLinesLeft.get(0), modelNodeList, modelLineList)) { + RbdTreeNode subNode = new RbdTreeNode(); + subNode.setAlgorithmType("series"); + subNode.setId(UUIDUtil.generateId()); + int counter = vnodeCounter.get("vnodeCounter"); + subNode.setName("v" + counter); + counter++; + vnodeCounter.put("vnodeCounter", counter); + subNode.setNodeType("vnode"); + parent.getChildren().add(subNode); + recognizeOneBranch(subNode, lineTop, sortedLinesLeft.get(0), modelNodeList, modelLineList, vnodeCounter); + } else { + recognizeOneBranch(parent, lineTop, sortedLinesLeft.get(0), modelNodeList, modelLineList, vnodeCounter); + } + // 妗ヨ仈鐨勭2涓敮璺� + if (isSeriesBranch(sortedLinesRight.get(0), lineTop, modelNodeList, modelLineList)) { + RbdTreeNode subNode = new RbdTreeNode(); + subNode.setAlgorithmType("series"); + subNode.setId(UUIDUtil.generateId()); + int counter = vnodeCounter.get("vnodeCounter"); + subNode.setName("v" + counter); + counter++; + vnodeCounter.put("vnodeCounter", counter); + subNode.setNodeType("vnode"); + parent.getChildren().add(subNode); + recognizeOneBranch(subNode, sortedLinesRight.get(0), lineTop, modelNodeList, modelLineList, vnodeCounter); + } else { + recognizeOneBranch(parent, sortedLinesRight.get(0), lineTop, modelNodeList, modelLineList, vnodeCounter); + } + // 妗ヨ仈鐨勭3涓敮璺� + if (isSeriesBranch(verticalLineLower, verticalLineUpper, modelNodeList, modelLineList)) { + RbdTreeNode subNode = new RbdTreeNode(); + subNode.setAlgorithmType("series"); + subNode.setId(UUIDUtil.generateId()); + int counter = vnodeCounter.get("vnodeCounter"); + subNode.setName("v" + counter); + counter++; + vnodeCounter.put("vnodeCounter", counter); + subNode.setNodeType("vnode"); + parent.getChildren().add(subNode); + recognizeOneBranch(subNode, verticalLineLower, verticalLineUpper, modelNodeList, modelLineList, vnodeCounter); + } else { + recognizeOneBranch(parent, verticalLineLower, verticalLineUpper, modelNodeList, modelLineList, vnodeCounter); + } + // 妗ヨ仈鐨勭4涓敮璺� + if (isSeriesBranch(lineBottom, sortedLinesLeft.get(1), modelNodeList, modelLineList)) { + RbdTreeNode subNode = new RbdTreeNode(); + subNode.setAlgorithmType("series"); + subNode.setId(UUIDUtil.generateId()); + int counter = vnodeCounter.get("vnodeCounter"); + subNode.setName("v" + counter); + counter++; + vnodeCounter.put("vnodeCounter", counter); + subNode.setNodeType("vnode"); + parent.getChildren().add(subNode); + recognizeOneBranch(subNode, lineBottom, sortedLinesLeft.get(1), modelNodeList, modelLineList, vnodeCounter); + } else { + recognizeOneBranch(parent, lineBottom, sortedLinesLeft.get(1), modelNodeList, modelLineList, vnodeCounter); + } + // 妗ヨ仈鐨勭5涓敮璺� + if (isSeriesBranch(sortedLinesRight.get(1), lineBottom, modelNodeList, modelLineList)) { + RbdTreeNode subNode = new RbdTreeNode(); + subNode.setAlgorithmType("series"); + subNode.setId(UUIDUtil.generateId()); + int counter = vnodeCounter.get("vnodeCounter"); + subNode.setName("v" + counter); + counter++; + vnodeCounter.put("vnodeCounter", counter); + subNode.setNodeType("vnode"); + parent.getChildren().add(subNode); + recognizeOneBranch(subNode, sortedLinesRight.get(1), lineBottom, modelNodeList, modelLineList, vnodeCounter); + } else { + recognizeOneBranch(parent, sortedLinesRight.get(1), lineBottom, modelNodeList, modelLineList, vnodeCounter); + } + } + } + + /** + * 鎸夎嚜涓婅�屼笅鐨勯『搴忔帓搴� + */ + private List<ModelLine> sortLine(List<ModelLine> lines, + List<ModelNode> modelNodeList) { + for (ModelLine line : lines) { + ModelNode node = modelNodeList.stream().filter(item -> + line.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + line.setBeginY(node.getPositionY()); + } + lines.sort(Comparator.comparing(ModelLine::getBeginY)); + + return lines; + } + + private boolean isSingleNode(List<ModelNode> modelNodeList, + List<ModelLine> modelLineList) { + boolean result = false; + ModelNode start = modelNodeList.stream().filter(item -> + "start".equals(item.getNodeType())).collect(Collectors.toList()).get(0); + ModelNode end = modelNodeList.stream().filter(item -> + "end".equals(item.getNodeType())).collect(Collectors.toList()).get(0); + ModelLine line1 = modelLineList.stream().filter(item -> + item.getBeginCell().equals(start.getPicId())).collect(Collectors.toList()).get(0); + ModelNode node1 = modelNodeList.stream().filter(item -> + line1.getEndCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + ModelLine line2 = modelLineList.stream().filter(item -> + item.getEndCell().equals(end.getPicId())).collect(Collectors.toList()).get(0); + ModelNode node2 = modelNodeList.stream().filter(item -> + line2.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + if (node1.getPicId().equals(node2.getPicId()) && "node".equals(node1.getNodeType())) result = true; + + return result; + } + + private boolean isSeriesBranch(ModelNode rightNode, // rbd涓殑鍙宠妭鐐癸紙鍖呮嫭end鍙�4绉嶈繍绠楃锛� + ModelLine line, // 鍙宠妭鐐圭殑鍏ュ彛绾� + List<ModelNode> modelNodeList, + List<ModelLine> modelLineList) { + boolean result = false; + ModelNode node = modelNodeList.stream().filter(item -> + line.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + if ("node".equals(node.getNodeType())) { + ModelLine line1 = modelLineList.stream().filter(item -> + item.getEndCell().equals(node.getPicId())).collect(Collectors.toList()).get(0); + ModelNode node1 = modelNodeList.stream().filter(item -> + line1.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + result = !node1.getPicId().equals(rightNode.getPairStartNodeId()); + } else { + ModelNode node2 = modelNodeList.stream().filter(item -> + node.getPairStartNodeId().equals(item.getPicId())).collect(Collectors.toList()).get(0); + ModelLine line2 = modelLineList.stream().filter(item -> + item.getEndCell().equals(node2.getPicId())).collect(Collectors.toList()).get(0); + ModelNode node3 = modelNodeList.stream().filter(item -> + line2.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + result = !node3.getPicId().equals(rightNode.getPairStartNodeId()); + } + + return result; + } + + private boolean isSeriesBranch(ModelLine lineRight, // 涓茶仈鐨勮捣濮嬬嚎锛堝彸杈癸級 + ModelLine lineLeft, // 涓茶仈鐨勭粨鏉熺嚎锛堝乏杈癸級 + List<ModelNode> modelNodeList, + List<ModelLine> modelLineList) { + boolean result = false; + ModelNode node = modelNodeList.stream().filter(item -> + lineRight.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + if ("node".equals(node.getNodeType())) { + ModelLine line1 = modelLineList.stream().filter(item -> + item.getEndCell().equals(node.getPicId())).collect(Collectors.toList()).get(0); + result = !line1.getPicId().equals(lineLeft.getPicId()); + } else { + ModelNode node1 = modelNodeList.stream().filter(item -> + node.getPairStartNodeId().equals(item.getPicId())).collect(Collectors.toList()).get(0); + ModelLine line2 = modelLineList.stream().filter(item -> + item.getEndCell().equals(node1.getPicId())).collect(Collectors.toList()).get(0); + result = !line2.getPicId().equals(lineLeft.getPicId()); + } + + return result; + } + + 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("")); + } + } + } + } + } + } + + 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) { + private void calcPosition(JSONArray rbdJsonArray, RbdTreeNode block, Map<String, RbdTreeNode> nodeMap) { if (block.getNodeType().equals("node")) { - setNodePositionXY(rbdJsonArray, block); + setNodePositionXY(rbdJsonArray, block,nodeMap); } else { double blockWidth = block.getBlockWidthNum() * LAYOUT_CELL_SIZE_X; double blockHeight = block.getBlockHeightNum() * LAYOUT_CELL_SIZE_Y; @@ -246,25 +616,26 @@ child.setBlockY(block.getBlockY()); child.setBlockX(subBlockX); - calcPosition(rbdJsonArray, child); + calcPosition(rbdJsonArray, child, nodeMap); subBlockX = subBlockX + selfWidth; } } else { - Double subBlockY = block.getBlockY()+(descentHeight-blockHeight)/2; + Double subBlockY = block.getBlockY() + (descentHeight - blockHeight) / 2; Double firstSubBlockY = subBlockY; // 璁剧疆connect鐨勪綅缃� RbdTreeNode connectBlock = new RbdTreeNode(); connectBlock.setMyWidth(getRbdNodeInfo(rbdJsonArray, block.getPairStartNodeId(), "size/width")); connectBlock.setMyHeight(getRbdNodeInfo(rbdJsonArray, block.getPairStartNodeId(), "size/height")); + connectBlock.setNodeType("connect"); connectBlock.setPicId(block.getPairStartNodeId()); connectBlock.setBlockX(block.getBlockX()); connectBlock.setBlockY(firstSubBlockY); connectBlock.setBlockWidth(LAYOUT_CELL_SIZE_X); connectBlock.setBlockHeight(blockHeight); - setNodePositionXY(rbdJsonArray, connectBlock); + setNodePositionXY(rbdJsonArray, connectBlock, nodeMap); for (RbdTreeNode child : children) { child.setDescentWidth(block.getBlockWidth() - 2 * LAYOUT_CELL_SIZE_X); @@ -276,20 +647,21 @@ child.setBlockX(block.getBlockX() + LAYOUT_CELL_SIZE_X); child.setBlockY(subBlockY); subBlockY = subBlockY + child.getBlockHeightNum() * LAYOUT_CELL_SIZE_Y; - calcPosition(rbdJsonArray, child); + calcPosition(rbdJsonArray, child, nodeMap); } // 璁剧疆杩愮畻绗︾殑浣嶇疆 RbdTreeNode opeBlock = new RbdTreeNode(); opeBlock.setPicId(block.getPicId()); + opeBlock.setNodeType("parallel"); opeBlock.setMyWidth(getRbdNodeInfo(rbdJsonArray, block.getPicId(), "size/width")); opeBlock.setMyHeight(getRbdNodeInfo(rbdJsonArray, block.getPicId(), "size/height")); opeBlock.setBlockX(block.getBlockX() + blockWidth - LAYOUT_CELL_SIZE_X); opeBlock.setBlockY(firstSubBlockY); opeBlock.setBlockWidth(LAYOUT_CELL_SIZE_X); opeBlock.setBlockHeight(blockHeight); - setNodePositionXY(rbdJsonArray, opeBlock); + setNodePositionXY(rbdJsonArray, opeBlock, nodeMap); } } @@ -1756,7 +2128,17 @@ if (jsonValue != null && StringUtils.isNotBlank(jsonValue.toString())) { modelNode.setPairEndNodeId(jsonValue.toString()); } - if ("node".equals(modelNode.getNodeType())) { + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/edgeTopId".split("/")); + if (jsonValue != null && StringUtils.isNotBlank(jsonValue.toString())) { + modelNode.setBridgeEdgeTopId(jsonValue.toString()); + } + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/edgeBottomId".split("/")); + if (jsonValue != null && StringUtils.isNotBlank(jsonValue.toString())) { + modelNode.setBridgeEdgeBottomId(jsonValue.toString()); + } + if ("dashedBox".equals(modelNode.getNodeType())) { + modelNode.setNodeType("node"); + } else if ("node".equals(modelNode.getNodeType())) { ProductImg productImg = new ProductImg(); String dataId = JsonUtils2.getJsonValueByPath(jsonObject, "data/dataId".split("/")).toString(); modelNode.setDataId(Long.valueOf(dataId)); -- Gitblit v1.9.1