xyc
2024-10-12 6e5cfe44f7d621a64ced0121d8fcb499c1db5e89
修改RBD识别算法
2个文件已修改
129 ■■■■■ 已修改文件
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelNode.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 = "桥联上边线ID")
    @TableField(exist = false)
    private String bridgeEdgeTopId;
    @ApiModelProperty(value = "桥联下边线ID")
    @TableField(exist = false)
    private String bridgeEdgeBottomId;
    @ApiModelProperty(value = "x")
    @TableField(exist = false)
    private Double vnodePositionX;
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())) {