From 42655cbb3b63d6af964c5350035e6db3ea9fadd5 Mon Sep 17 00:00:00 2001 From: xyc <jc_xiong@hotmail.com> Date: 星期四, 14 三月 2024 08:57:51 +0800 Subject: [PATCH] 优化RBD识别算法:并联、旁联的节点顺序 --- modules/mainPart/src/main/java/com/zt/life/modules/taskReliability/service/ModelLineService.java | 304 ++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 245 insertions(+), 59 deletions(-) diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/taskReliability/service/ModelLineService.java b/modules/mainPart/src/main/java/com/zt/life/modules/taskReliability/service/ModelLineService.java index 68d9e01..f6fe271 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/taskReliability/service/ModelLineService.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/taskReliability/service/ModelLineService.java @@ -5,15 +5,9 @@ import com.zt.common.service.BaseService; import com.zt.common.utils.JsonUtils2; import com.zt.common.utils.UUIDUtil; -import com.zt.life.modules.taskReliability.dao.AlgorithmDao; -import com.zt.life.modules.taskReliability.dao.ModelLineDao; -import com.zt.life.modules.taskReliability.dao.ModelNodeDao; -import com.zt.life.modules.taskReliability.dao.ModelRbdDao; +import com.zt.life.modules.taskReliability.dao.*; import com.zt.life.modules.taskReliability.dto.ModelLinePair; -import com.zt.life.modules.taskReliability.model.Algorithm; -import com.zt.life.modules.taskReliability.model.ModelLine; -import com.zt.life.modules.taskReliability.model.ModelNode; -import com.zt.life.modules.taskReliability.model.ModelRbd; +import com.zt.life.modules.taskReliability.model.*; import org.apache.commons.lang3.StringUtils; import org.checkerframework.checker.units.qual.C; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +35,8 @@ private ModelRbdDao modelRbdDao; @Autowired private AlgorithmDao algorithmDao; + @Autowired + private ModelNodeAlgorithmDao modelNodeAlgorithmDao; /** * 鍒嗛〉鏌ヨ @@ -68,8 +64,8 @@ @Transactional(rollbackFor = Exception.class) public void insert(ModelRbd modelRbd) { if (modelRbd==null) return; - if (modelRbd.getModelId()==null) return; - Long modelId = modelRbd.getModelId(); + if (modelRbd.getId()==null) return; + Long modelId = modelRbd.getId(); // 鍒犻櫎鏃㈡湁鏁版嵁 modelRbdDao.deleteByModelId(modelId); @@ -82,14 +78,12 @@ @Transactional(rollbackFor = Exception.class) public void update(ModelRbd modelRbd) { if (modelRbd==null) return; - if (modelRbd.getModelId()==null) return; - Long modelId = modelRbd.getModelId(); + if (modelRbd.getId()==null) return; + Long modelId = modelRbd.getId(); // 鍒犻櫎鏃㈡湁鏁版嵁 modelRbdDao.deleteByModelId(modelId); - // 鎻掑叆鏁版嵁 - modelRbd.setId(UUIDUtil.generateId()); modelRbdDao.insert(modelRbd); } @@ -97,22 +91,9 @@ public boolean analyze(ModelRbd modelRbd) { boolean result = true; if (modelRbd==null) return result; - if (modelRbd.getModelId()==null) return result; - Long modelId = modelRbd.getModelId(); - -// 妫�鏌ュ浘鐨勫悎鐞嗘�у苟鍖栫畝 -// checkRbd(modelRbd); - -// analyzeRbdAndSave(modelId, modelRbd.getContent(), true); + Long modelId = modelRbd.getId(); result = analyzeRbd(modelId, modelRbd.getContent(), true); - return result; - } - - public void checkRbd(ModelRbd modelRbd) { - if (modelRbd==null) return; - if (modelRbd.getModelId()==null) return; - Long modelId = modelRbd.getModelId(); } private boolean analyzeRbd(Long modelId, String content, boolean saveFlag) { @@ -138,7 +119,7 @@ result = getAlgorithmFromRbd(modelId, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList); // 5. 淇濆瓨妯″瀷 - if (saveFlag) saveModel(modelId, modelNodeList, modelLineList, algorithmList); + if (saveFlag) saveModel(modelId, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList); return result; } @@ -167,15 +148,11 @@ hasSimplified = false; hasSimplified = simplifySeries(modelId, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList, hasSimplified); hasSimplified = simplifyParallel(modelId, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList, hasSimplified); - hasSimplified = simplifyOperator("switch", modelId, modelNodeList, modelLineList, algorithmList, hasSimplified); - hasSimplified = simplifyOperator("vote", modelId, modelNodeList, modelLineList, algorithmList, hasSimplified); + hasSimplified = simplifyOperator("switch", modelId, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList, hasSimplified); + hasSimplified = simplifyOperator("vote", modelId, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList, hasSimplified); hasSimplified = simplifyBridge(modelId, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList, hasSimplified); isEnd = simplifyEnd(modelId, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList); } while (!isEnd && hasSimplified); - - // 鍚堝苟纰庣墖鍖栦簡鐨勪覆鑱� - - // 鍚堝苟纰庣墖鍖栦簡鐨勫苟鑱� return isEnd; } @@ -219,7 +196,7 @@ algorithm.setAlgorithmType(endNode.getNodeType()); algorithm.setComputerList(node.getId().toString()); algorithm.setObjectList(node.getName()); - algorithm.setStep(algorithmList.size()); + algorithm.setStep(algorithmList.size()==0 ? 0 : algorithmList.get(algorithmList.size()-1).getStep()+1); algorithmList.add(algorithm); // 鏂板缁撴潫鐨勮櫄鑺傜偣 @@ -256,17 +233,100 @@ if ("start,switch,vote".contains(endNode.getNodeType()) || endNode.getOutLineNum()!=1) { result.remove(endNode); } - List<ModelNode> seriesNodes = result.stream().filter(item -> + List<ModelNode> realSeriesNodes = result.stream().filter(item -> !"connect".equals(item.getNodeType())).collect(Collectors.toList()); - if (seriesNodes.size()<2) continue; - - // 鏇挎崲鎴愯櫄鑺傜偣 - replaceToVnodeSeries(modelId, modelNodeList, modelLineList, - algorithmList, modelNodeAndVnodeList, result, seriesNodes); + if (realSeriesNodes.size()<1) { + if (result.size() < 2) continue; + // 鏇挎崲鎴愯繛绾� + replaceToLineSeries(modelNodeList, modelLineList, result); + } else if (realSeriesNodes.size()==1) { + if (result.size() < 2) continue; // path涓婂彧鏈夎浜у搧鑺傜偣锛坣ode/vnode锛夎嚜宸憋紝鏃犻渶鍋氫粈涔� + // 灏唒ath鏇挎崲鎴愯鑺傜偣 + replaceToTheNodeSeries(modelNodeList, modelLineList, + result, realSeriesNodes.get(0)); + } else { + // 灏唒ath鏇挎崲鎴愯櫄鑺傜偣 + replaceToVnodeSeries(modelId, modelNodeList, modelLineList, + algorithmList, modelNodeAndVnodeList, result, realSeriesNodes); + } hasSimplified = true; } return hasSimplified; + } + + private void replaceToLineSeries(List<ModelNode> modelNodeList, + List<ModelLine> modelLineList, + List<ModelNode> path) { + // 鑾峰彇path鐨勮捣鐐圭殑鍑哄彛绾� + ModelNode finalNodeStart = path.get(0); + ModelNode finalNodeEnd = path.get(path.size()-1); + List<ModelLine> outLines = modelLineList.stream().filter(item -> + item.getBeginCell().equals(finalNodeStart.getPicId())).collect(Collectors.toList()); + + // 鍒犻櫎path涓婄殑鎵�鏈変腑闂磋繛绾垮強path鐨勭粨鏉熺偣浠ュ鐨勮妭鐐� + for (int i=0; i<path.size(); i++) { + ModelNode finalNode = path.get(i); + if (i < path.size() - 1) { + // 灏嗗叆鍙g嚎鍒犻櫎 + List<ModelLine> lines = modelLineList.stream().filter(item -> + item.getEndCell().equals(finalNode.getPicId())).collect(Collectors.toList()); + modelLineList.removeAll(lines); + // 鍒犻櫎鑺傜偣 + modelNodeList.remove(finalNode); + calcInOutLineNum(finalNode, modelLineList); + } + } + + // 灏唒ath鐨勮捣鐐圭殑鍑哄彛绾挎敼涓鸿繛鎺ュ埌path鐨勭粨鏉熺偣 + for (ModelLine line : outLines) { + line.setBeginCell(finalNodeEnd.getPicId()); + } + + calcInOutLineNum(finalNodeStart, modelLineList); + calcInOutLineNum(finalNodeEnd, modelLineList); + } + + private void replaceToTheNodeSeries(List<ModelNode> modelNodeList, + List<ModelLine> modelLineList, + List<ModelNode> path, + ModelNode theNode) { + // 鑾峰彇path鐨勮捣鐐圭殑鍑哄彛绾� + ModelNode finalNodeStart = path.get(0); + List<ModelLine> outLines = modelLineList.stream().filter(item -> + item.getBeginCell().equals(finalNodeStart.getPicId())).collect(Collectors.toList()); + // 鑾峰彇path鐨勭粨鏉熺偣鐨勫叆鍙g嚎 + ModelNode finalNodeEnd = path.get(path.size()-1); + List<ModelLine> inLines = modelLineList.stream().filter(item -> + item.getEndCell().equals(finalNodeEnd.getPicId())).collect(Collectors.toList()); + + // 鍒犻櫎path涓婄殑鎵�鏈変腑闂磋繛绾垮強theNode浠ュ鐨勮妭鐐� + for (int i=0; i<path.size(); i++) { + ModelNode finalNode = path.get(i); + if (i < path.size() - 1) { + // 灏嗗叆鍙g嚎鍒犻櫎 + List<ModelLine> lines = modelLineList.stream().filter(item -> + item.getEndCell().equals(finalNode.getPicId())).collect(Collectors.toList()); + modelLineList.removeAll(lines); + } + if (!finalNode.getId().equals(theNode.getId())) { + modelNodeList.remove(finalNode); + calcInOutLineNum(finalNode, modelLineList); + } + } + + // 灏唒ath鐨勮捣鐐圭殑鍑哄彛绾挎敼涓鸿繛鎺ュ埌theNode + for (ModelLine line : outLines) { + line.setBeginCell(theNode.getPicId()); + } + // 灏唒ath鐨勭粨鏉熺偣鐨勫叆鍙g嚎鏀逛负杩炴帴鍒皌heNode + for (ModelLine line : inLines) { + line.setEndCell(theNode.getPicId()); + } + + calcInOutLineNum(finalNodeStart, modelLineList); + calcInOutLineNum(finalNodeEnd, modelLineList); + calcInOutLineNum(theNode, modelLineList); } private void replaceToVnodeSeries(Long modelId, @@ -277,6 +337,7 @@ List<ModelNode> path, List<ModelNode> seriesNodes) { // 鏂板algorithm + List<String> computerList = createVnodeComputerList("series", algorithmList, modelNodeAndVnodeList, seriesNodes); Algorithm algorithm = new Algorithm(); Long id = UUIDUtil.generateId(); algorithm.setId(id); @@ -284,9 +345,9 @@ algorithm.setComputerId(id); algorithm.setModelType("series"); algorithm.setAlgorithmType("series"); - algorithm.setComputerList(joinNodeId(seriesNodes, ",")); - algorithm.setObjectList(joinNodeName(seriesNodes, ",")); - algorithm.setStep(algorithmList.size()); + algorithm.setComputerList(computerList.get(0)); + algorithm.setObjectList(computerList.get(1)); + algorithm.setStep(algorithmList.size()==0 ? 0 : algorithmList.get(algorithmList.size()-1).getStep()+1); algorithmList.add(algorithm); // 鏂板铏氳妭鐐� @@ -296,6 +357,8 @@ vnode.setModelId(modelId); vnode.setNodeType("vnode"); vnode.setName("v"+algorithm.getStep()); + vnode.setPositionX(path.get(0).getPositionX()); + vnode.setPositionY(path.get(0).getPositionY()); modelNodeList.add(vnode); modelNodeAndVnodeList.add(vnode); @@ -337,6 +400,92 @@ } calcInOutLineNum(vnode, modelLineList); + } + + private List<String> createVnodeComputerList(String type, + List<Algorithm> algorithmList, + List<ModelNode> modelNodeAndVnodeList, + List<ModelNode> nodes) { + // 璋冩暣鑺傜偣椤哄簭 + List<ModelNode> sortedNodes = null; + if ("bridge".equals(type)) { + if (nodes.get(1).getPositionY() < nodes.get(4).getPositionY()) { + sortedNodes = nodes; + } else { + sortedNodes = new ArrayList<>(); + sortedNodes.add(nodes.get(3)); + sortedNodes.add(nodes.get(4)); + sortedNodes.add(nodes.get(2)); + sortedNodes.add(nodes.get(0)); + sortedNodes.add(nodes.get(1)); + } + } else if ("parallel".equals(type)) { + // 鎶婅櫄鑺傜偣鍐呴儴鐨勫苟鑱旇妭鐐瑰叏閮ㄦ嬁鍑烘潵锛岃繘琛屽ぇ鎺掑簭 + sortedNodes = new ArrayList<>(); + for (ModelNode node : nodes) { + if ("node".equals(node.getNodeType())) { + sortedNodes.add(node); + } else { + // vnode + Algorithm algorithm = algorithmList.stream().filter(item -> + item.getId().equals(node.getId())).collect(Collectors.toList()).get(0); + if (type.equals(algorithm.getAlgorithmType())) { + String[] pNodesStrArr = algorithm.getComputerList().split(","); + for (String pNodeStr : pNodesStrArr) { + sortedNodes.add(modelNodeAndVnodeList.stream().filter(item -> + pNodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0)); + } + algorithmList.remove(algorithm); + modelNodeAndVnodeList.remove(node); + } else { + sortedNodes.add(node); + } + } + } + sortedNodes.sort(Comparator.comparing(ModelNode::getPositionY)); + } else { + sortedNodes = Arrays.asList(new ModelNode[nodes.size()]); + Collections.copy(sortedNodes, nodes); + if ("series".equals(type)) { + Collections.reverse(sortedNodes); + } else { + sortedNodes.sort(Comparator.comparing(ModelNode::getPositionY)); + } + } + + String computerIdList = ""; + String objectList = ""; + if ("parallel".equals(type)) { + for (ModelNode node : sortedNodes) { + objectList += "".equals(objectList) ? node.getName() : "," + node.getName(); + computerIdList += "".equals(computerIdList) ? node.getId().toString() : "," + node.getId().toString(); + } + } else { + for (ModelNode node : sortedNodes) { + if ("node".equals(node.getNodeType())) { + objectList += "".equals(objectList) ? node.getName() : "," + node.getName(); + computerIdList += "".equals(computerIdList) ? node.getId().toString() : "," + node.getId().toString(); + } else { + // vnode + Algorithm algorithm = algorithmList.stream().filter(item -> + item.getId().equals(node.getId())).collect(Collectors.toList()).get(0); + if ("series".equals(type) && type.equals(algorithm.getAlgorithmType())) { + objectList += "".equals(objectList) ? algorithm.getObjectList() : "," + algorithm.getObjectList(); + computerIdList += "".equals(computerIdList) ? algorithm.getComputerList() : "," + algorithm.getComputerList(); + algorithmList.remove(algorithm); + modelNodeAndVnodeList.remove(node); + } else { + objectList += "".equals(objectList) ? node.getName() : "," + node.getName(); + computerIdList += "".equals(computerIdList) ? node.getId().toString() : "," + node.getId().toString(); + } + } + } + } + + List<String> result = new ArrayList<>(); + result.add(computerIdList); + result.add(objectList); + return result; } private void seekPathSeries(List<ModelNode> modelNodeList, @@ -400,7 +549,7 @@ if ("connect".equals(startNode.getNodeType()) && pathOneGroup.size()==lines.size()) { // 鏇挎崲鎴愯櫄鑺傜偣 replaceToVnode("parallel", modelId, modelNodeList, modelLineList, - algorithmList, startNode, endNode, branchNodeList); + algorithmList, modelNodeAndVnodeList, startNode, endNode, branchNodeList); } else { // 鏂板铏氳妭鐐� ModelNode vnode = new ModelNode(); @@ -409,6 +558,11 @@ vnode.setPicId(id.toString()); vnode.setModelId(modelId); vnode.setNodeType("vnode"); + // 浣嶇疆璁剧疆涓哄苟鑱斾腑绗竴涓妭鐐圭殑浣嶇疆 + vnode.setPositionX(branchNodeList.get(0).getPositionX()); + vnode.setPositionY(branchNodeList.get(0).getPositionY()); +// vnode.setPositionX(startNode.getPositionX()); +// vnode.setPositionY(startNode.getPositionY()); modelNodeList.add(vnode); modelNodeAndVnodeList.add(vnode); ModelLine modelLineNew = new ModelLine(); @@ -420,7 +574,7 @@ modelLineNew.setEndCell(startNode.getPicId()); modelLineList.add(modelLineNew); replaceToVnode("parallel", modelId, modelNodeList, modelLineList, - algorithmList, vnode, endNode, branchNodeList); + algorithmList, modelNodeAndVnodeList, vnode, endNode, branchNodeList); calcInOutLineNum(startNode, modelLineList); } hasSimplified = true; @@ -587,10 +741,10 @@ branchNodeList.add(node4); branchNodeList.add(node5); - if ("connect".contains(startNode.getNodeType()) && startNode.getInLineNum()==2) { + if ("connect".equals(startNode.getNodeType()) && startNode.getInLineNum()==2) { // 鏇挎崲鎴愯櫄鑺傜偣 replaceToVnode("bridge", modelId, modelNodeList, modelLineList, - algorithmList, startNode, endNode, branchNodeList); + algorithmList, modelNodeAndVnodeList, startNode, endNode, branchNodeList); } else { // 鏂板铏氳妭鐐� ModelNode vnode = new ModelNode(); @@ -599,6 +753,11 @@ vnode.setPicId(id.toString()); vnode.setModelId(modelId); vnode.setNodeType("vnode"); + // 灏嗕綅缃缃负绗竴涓垎鏀殑 + vnode.setPositionX(node2.getPositionX()); + vnode.setPositionY(node2.getPositionY()); +// vnode.setPositionX(startNode.getPositionX()); +// vnode.setPositionY(startNode.getPositionY()); modelNodeList.add(vnode); modelNodeAndVnodeList.add(vnode); ModelLine modelLineNew = new ModelLine(); @@ -610,7 +769,7 @@ modelLineNew.setEndCell(startNode.getPicId()); modelLineList.add(modelLineNew); replaceToVnode("bridge", modelId, modelNodeList, modelLineList, - algorithmList, vnode, endNode, branchNodeList); + algorithmList, modelNodeAndVnodeList, vnode, endNode, branchNodeList); calcInOutLineNum(startNode, modelLineList); } @@ -651,6 +810,7 @@ List<ModelNode> modelNodeList, List<ModelLine> modelLineList, List<Algorithm> algorithmList, + List<ModelNode> modelNodeAndVnodeList, boolean hasSimplified) { List<ModelNode> opNodes = modelNodeList.stream().filter(item -> operator.equals(item.getNodeType())).collect(Collectors.toList()); @@ -679,7 +839,7 @@ } if (thisNodeSuccess) { replaceToVnode(opNode.getNodeType(), modelId, modelNodeList, modelLineList, - algorithmList, opNode, endNode, branchNodeList); + algorithmList, modelNodeAndVnodeList, opNode, endNode, branchNodeList); hasSimplified = true; } } @@ -692,10 +852,12 @@ List<ModelNode> modelNodeList, List<ModelLine> modelLineList, List<Algorithm> algorithmList, + List<ModelNode> modelNodeAndVnodeList, ModelNode startNode, ModelNode endNode, List<ModelNode> branchNodeList) { // 鏂板algorithm + List<String> computerList = createVnodeComputerList(type, algorithmList, modelNodeAndVnodeList, branchNodeList); Algorithm algorithm = new Algorithm(); Long id = UUIDUtil.generateId(); algorithm.setId(id); @@ -703,9 +865,9 @@ algorithm.setComputerId(id); algorithm.setModelType(type); algorithm.setAlgorithmType(type); - algorithm.setComputerList(joinNodeId(branchNodeList, ",")); - algorithm.setObjectList(joinNodeName(branchNodeList, ",")); - algorithm.setStep(algorithmList.size()); + algorithm.setComputerList(computerList.get(0)); + algorithm.setObjectList(computerList.get(1)); + algorithm.setStep(algorithmList.size()==0 ? 0 : algorithmList.get(algorithmList.size()-1).getStep()+1); algorithmList.add(algorithm); // 鏇挎崲涓鸿櫄鑺傜偣 @@ -775,16 +937,35 @@ modelNode.setModelId(modelId); modelNode.setPicId(jsonObject.get("id").toString()); modelNode.setNodeType(JsonUtils2.getJsonValueByPath(jsonObject, "data/nodeType".split("/")).toString()); + modelNode.setPositionX(Double.valueOf(JsonUtils2.getJsonValueByPath(jsonObject, "position/x".split("/")).toString())); + modelNode.setPositionY(Double.valueOf(JsonUtils2.getJsonValueByPath(jsonObject, "position/y".split("/")).toString())); if ("node".equals(modelNode.getNodeType())) { modelNode.setDataId(Long.valueOf(JsonUtils2.getJsonValueByPath(jsonObject, "data/dataId".split("/")).toString())); -// modelNode.setNodeTypeExt(JsonUtils2.getJsonValueByPath(jsonObject, "data/nodeTypeExt".split("/")).toString()); - Object label = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/label/textWrap/text".split("/")); - modelNode.setName(label==null ? "" : label.toString()); + modelNode.setNodeTypeExt(JsonUtils2.getJsonValueByPath(jsonObject, "data/nodeTypeExt".split("/")).toString()); + Object name = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/text".split("/")); + modelNode.setName(name==null ? "" : name.toString()); } modelNodeList.add(modelNode); } } +// calcLineSortAll(modelNodeList, modelLineList); } + +/* + private void calcLineSortAll(List<ModelNode> modelNodeList, + List<ModelLine> modelLineList) { + for (ModelNode node : modelNodeList) { + List<ModelLine> inLines = modelLineList.stream().filter(item -> + item.getEndCell().equals(node.getPicId())).collect(Collectors.toList()); + if (inLines.size() < 1) continue; + for (ModelLine line : inLines) { + ModelNode beginNode = modelNodeList.stream().filter(item -> + line.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); + line.setLineSort(beginNode.getPositionY()); + } + } + } +*/ private void analyzeRbdAndSave(Long modelId, String content, boolean saveFlag) { String diagramJsonStr = content; @@ -905,7 +1086,7 @@ } // end for } while (hasLeastOne); - if (saveFlag) saveModel(modelId, modelNodeList, modelLineList, algoList); +// if (saveFlag) saveModel(modelId, modelNodeList, modelLineList, algoList); } private void handleOneLine(List<ModelLine> modelLineList, @@ -1025,11 +1206,13 @@ private void saveModel(Long modelId, List<ModelNode> modelNodeList, List<ModelLine> modelLineList, - List<Algorithm> algoList) { + List<Algorithm> algoList, + List<ModelNode> modelNodeAndVnodeList) { // 鍒犻櫎鏃㈡湁鏁版嵁 modelNodeDao.deleteByModelId(modelId); modelLineDao.deleteByModelId(modelId); algorithmDao.deleteByModelId(modelId); + modelNodeAlgorithmDao.deleteByModelId(modelId); // 鎻掑叆鏁版嵁 for (ModelNode modelNode : modelNodeList) { @@ -1041,6 +1224,9 @@ for (Algorithm algorithm : algoList) { algorithmDao.insert(algorithm); } + for (ModelNode modelNode : modelNodeAndVnodeList) { + modelNodeAlgorithmDao.insert(ModelNodeAlgorithm.from(modelNode)); + } } } -- Gitblit v1.9.1