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 | 121 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 120 insertions(+), 1 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 776f168..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 @@ -363,7 +363,96 @@ } } } else if ("bridge".contains(parent.getAlgorithmType())) { - // 灏嗘ˉ鑱旂湅鎴�2鏀矾骞惰仈+妗ユ帴鏀矾鐨勭粍鍚� + 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); + } } } @@ -423,6 +512,28 @@ 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; @@ -2017,6 +2128,14 @@ if (jsonValue != null && StringUtils.isNotBlank(jsonValue.toString())) { modelNode.setPairEndNodeId(jsonValue.toString()); } + 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())) { -- Gitblit v1.9.1