From 195194eaa2f8e643ce6b1d696e6288404f1a06cd Mon Sep 17 00:00:00 2001 From: xyc <jc_xiong@hotmail.com> Date: 星期五, 28 六月 2024 15:48:44 +0800 Subject: [PATCH] 修改模型识别算法,以适应界面上新的画图方法。 --- modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java | 121 ++++++++++++++++++++++++++++++++++++++-- 1 files changed, 115 insertions(+), 6 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 24ca30a..fa2ec41 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 @@ -89,6 +89,7 @@ modelRbdDao.insert(modelRbd); } + @Transactional(rollbackFor = Exception.class) public void update(ModelRbd modelRbd) { if (modelRbd==null) return; @@ -339,7 +340,8 @@ do { hasSimplified = false; hasSimplified = simplifySeries(modelRbd.getId(), modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList, hasSimplified); - hasSimplified = simplifyParallel(modelRbd.getId(), modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList, hasSimplified); +// hasSimplified = simplifyParallel(modelRbd.getId(), modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList, hasSimplified); + hasSimplified = simplifyOperator("parallel", modelRbd.getId(), modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList, hasSimplified); hasSimplified = simplifyOperator("switch", modelRbd.getId(), modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList, hasSimplified); hasSimplified = simplifyOperator("vote", modelRbd.getId(), modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList, hasSimplified); hasSimplified = simplifyBridge(modelRbd.getId(), modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList, hasSimplified); @@ -422,7 +424,7 @@ if (result.size()<2) continue; ModelNode endNode = result.get(result.size()-1); - if ("start,switch,vote".contains(endNode.getNodeType()) || endNode.getOutLineNum()!=1) { + if ("start,parallel,switch,vote,bridge".contains(endNode.getNodeType()) || endNode.getOutLineNum()!=1) { result.remove(endNode); } List<ModelNode> realSeriesNodes = result.stream().filter(item -> @@ -686,12 +688,37 @@ List<ModelNode> result) { ModelLine inLine = modelLineList.stream().filter(item -> item.getEndCell().equals(startNode.getPicId())).collect(Collectors.toList()).get(0); - ModelNode pathNode = modelNodeList.stream().filter(item -> - inLine.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + if (isBridgeUpperLine(inLine, modelLineList) || isBridgeLowerLine(inLine, modelLineList)) return; + List<ModelNode> nodes = modelNodeList.stream().filter(item -> + inLine.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()); + if (0==nodes.size()) return; // 鍒版ˉ鑱斾腑闂磋妭鐐圭殑绾跨殑璧风偣涓嶆槸Node锛岃�屾槸Line锛屾墍浠ヨ幏鍙栫殑璧风偣鏁板彲鑳戒负0 + ModelNode pathNode = nodes.get(0); result.add(pathNode); if (pathNode.getOutLineNum()!=1 || pathNode.getInLineNum()!=1) return; - if ("switch,vote".contains(pathNode.getNodeType())) return; + if ("parallel,switch,vote,bridge".contains(pathNode.getNodeType())) return; seekPathSeries(modelNodeList, modelLineList, pathNode, result); + } + + private boolean isBridgeUpperLine(ModelLine line, List<ModelLine> modelLineList) { + boolean result = false; + for (ModelLine ln : modelLineList) { + if (ln.getBeginCell().equals(line.getPicId())) { + result = true; + break; + } + } + return result; + } + + private boolean isBridgeLowerLine(ModelLine line, List<ModelLine> modelLineList) { + boolean result = false; + for (ModelLine ln : modelLineList) { + if (ln.getEndCell().equals(line.getPicId())) { + result = true; + break; + } + } + return result; } private boolean simplifyParallel(Long modelId, @@ -830,7 +857,7 @@ boolean hasSimplified) { boolean hasSimplifiedMe = false; List<ModelNode> startNodes = modelNodeList.stream().filter(item -> - "node,vnode,connect,end".contains(item.getNodeType())).collect(Collectors.toList()); + "bridge".equals(item.getNodeType())).collect(Collectors.toList()); if (startNodes.size()==0) return hasSimplified; for (ModelNode startNode : startNodes) { @@ -863,6 +890,9 @@ ModelNode node3 = null; ModelNode node4 = null; ModelNode node5 = null; + ModelLine line1To2 = null; + ModelLine line4To5 = null; +/* ModelNode nodeTmp1 = modelNodeList.stream().filter(item -> linePair.getLine1().getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); ModelNode nodeTmp2 = modelNodeList.stream().filter(item -> @@ -927,6 +957,79 @@ lineTo4.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); if (!nodeTmp1.getId().equals(nodeTmp2.getId())) return false; ModelNode endNode = nodeTmp1; +*/ + ModelNode nodeTmp1 = modelNodeList.stream().filter(item -> + linePair.getLine1().getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + ModelNode nodeTmp2 = modelNodeList.stream().filter(item -> + linePair.getLine2().getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + if (nodeTmp1.getInLineNum()!=1 || nodeTmp1.getOutLineNum()!=1) return false; + if (nodeTmp2.getInLineNum()!=1 || nodeTmp2.getOutLineNum()!=1) return false; + ModelNode finalNode = nodeTmp1; + ModelLine lineToNodeTmp1 = modelLineList.stream().filter(item -> + item.getEndCell().equals(finalNode.getPicId())).collect(Collectors.toList()).get(0); + ModelNode finalNode1 = nodeTmp2; + ModelLine lineToNodeTmp2 = modelLineList.stream().filter(item -> + item.getEndCell().equals(finalNode1.getPicId())).collect(Collectors.toList()).get(0); + ModelNode nodeTmp3 = modelNodeList.stream().filter(item -> + lineToNodeTmp1.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + ModelNode nodeTmp4 = modelNodeList.stream().filter(item -> + lineToNodeTmp2.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + if (nodeTmp3.getId().equals(nodeTmp4.getId())) return false; + boolean isBridgeUpperLine1 = isBridgeUpperLine(lineToNodeTmp1, modelLineList); + boolean isBridgeUpperLine2 = isBridgeUpperLine(lineToNodeTmp2, modelLineList); + if (!isBridgeUpperLine1 && !isBridgeUpperLine2) return false; + if (isBridgeUpperLine1 && isBridgeUpperLine2) return false; + boolean isBridgeLowerLine1 = isBridgeLowerLine(lineToNodeTmp1, modelLineList); + boolean isBridgeLowerLine2 = isBridgeLowerLine(lineToNodeTmp2, modelLineList); + if (!isBridgeLowerLine1 && !isBridgeLowerLine2) return false; + if (isBridgeLowerLine1 && isBridgeLowerLine2) return false; + if (isBridgeUpperLine1) { + line1To2 = lineToNodeTmp1; + line4To5 = lineToNodeTmp2; + node2 = nodeTmp1; + node5 = nodeTmp2; + } else { + line1To2 = lineToNodeTmp2; + line4To5 = lineToNodeTmp1; + node2 = nodeTmp2; + node5 = nodeTmp1; + } + ModelLine finalLine = line1To2; + ModelLine lineTo3 = modelLineList.stream().filter(item -> + item.getBeginCell().equals(finalLine.getPicId())).collect(Collectors.toList()).get(0); + ModelLine finalLine1 = line4To5; + ModelLine lineFrom3 = modelLineList.stream().filter(item -> + item.getEndCell().equals(finalLine1.getPicId())).collect(Collectors.toList()).get(0); + ModelLine finalLine2 = lineTo3; + ModelNode node3Candidate1 = modelNodeList.stream().filter(item -> + finalLine2.getEndCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + ModelLine finalLine3 = lineFrom3; + ModelNode node3Candidate2 = modelNodeList.stream().filter(item -> + finalLine3.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + if (!node3Candidate1.getId().equals(node3Candidate2.getId())) return false; + node3 = node3Candidate1; + if (node3.getInLineNum()!=1 || node3.getOutLineNum()!=1) return false; + ModelLine finalLine4 = line1To2; + node1 = modelNodeList.stream().filter(item -> + finalLine4.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + if (node1.getInLineNum()!=1 || node1.getOutLineNum()!=1) return false; + ModelLine finalLine5 = line4To5; + node4 = modelNodeList.stream().filter(item -> + finalLine5.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + if (node4.getInLineNum()!=1 || node4.getOutLineNum()!=1) return false; + ModelNode finalNode3 = node1; + ModelLine lineTo1 = modelLineList.stream().filter(item -> + item.getEndCell().equals(finalNode3.getPicId())).collect(Collectors.toList()).get(0); + ModelNode finalNode4 = node4; + ModelLine lineTo4 = modelLineList.stream().filter(item -> + item.getEndCell().equals(finalNode4.getPicId())).collect(Collectors.toList()).get(0); + nodeTmp1 = modelNodeList.stream().filter(item -> + lineTo1.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + nodeTmp2 = modelNodeList.stream().filter(item -> + lineTo4.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + if (!nodeTmp1.getId().equals(nodeTmp2.getId())) return false; + ModelNode endNode = nodeTmp1; + List<ModelNode> branchNodeList = new ArrayList<>(); branchNodeList.add(node1); branchNodeList.add(node2); @@ -934,6 +1037,11 @@ branchNodeList.add(node4); branchNodeList.add(node5); + modelNodeAndVnodeList.add(startNode); + replaceToVnode("bridge", modelId, modelNodeList, modelLineList, + algorithmList, modelNodeAndVnodeList, startNode, endNode, branchNodeList); + +/* if ("connect".equals(startNode.getNodeType()) && startNode.getInLineNum()==2) { // 鏇挎崲鎴愯櫄鑺傜偣 modelNodeAndVnodeList.add(startNode); @@ -966,6 +1074,7 @@ algorithmList, modelNodeAndVnodeList, vnode, endNode, branchNodeList); calcInOutLineNum(startNode, modelLineList); } +*/ return true; } -- Gitblit v1.9.1