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/model/ModelNode.java | 8 ++
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java | 121 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 128 insertions(+), 1 deletions(-)
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelNode.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelNode.java
index b6cf7b5..c7bae6a 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelNode.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelNode.java
@@ -106,6 +106,14 @@
@TableField(exist = false)
private String pairEndNodeId;
+ @ApiModelProperty(value = "妗ヨ仈涓婅竟绾縄D")
+ @TableField(exist = false)
+ private String bridgeEdgeTopId;
+
+ @ApiModelProperty(value = "妗ヨ仈涓嬭竟绾縄D")
+ @TableField(exist = false)
+ private String bridgeEdgeBottomId;
+
@ApiModelProperty(value = "x")
@TableField(exist = false)
private Double vnodePositionX;
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