| | |
| | | modelRbdDao.insert(modelRbd); |
| | | } |
| | | |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void update(ModelRbd modelRbd) { |
| | | if (modelRbd==null) return; |
| | |
| | | |
| | | // 1. 解析出节点与边 |
| | | getNodeAndLineFromRbd(modelRbd.getId(), rbdJsonArray, modelNodeList, modelLineList, productImgList); |
| | | // 2. 计算所有节点的入口线数及出口线数 |
| | | // 2. 对于有多根入口线的产品节点,将其上的表决、旁联关系剥离成运算符节点,添加到该节点的前面,并添加相应的边 |
| | | peelOperationFromProductNode(modelRbd.getId(), modelNodeList, modelLineList); |
| | | // 3. 计算所有节点的入口线数及出口线数 |
| | | calcInOutLineNumAllNode(modelNodeList, modelLineList); |
| | | // 3. 复制产品节点(node)到list |
| | | // 4. 复制产品节点(node)到list |
| | | List<ModelNode> modelNodeAndVnodeList = modelNodeList.stream().filter(item -> |
| | | "node".equals(item.getNodeType())).collect(Collectors.toList()); |
| | | // 4. 不断将基本模型(串联、并联、旁联、表决、桥联)替换为虚节点而简化图形,直至无法简化为止。 |
| | | // 5. 不断将基本模型(串联、并联、旁联、表决、桥联)替换为虚节点而简化图形,直至无法简化为止。 |
| | | result = getAlgorithmFromRbd(modelRbd, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList); |
| | | |
| | | // 5. 转换为算法库接口XML |
| | | // 6. 转换为算法库接口XML |
| | | if (result) { |
| | | result = createIfXmlFromRbd(modelRbd, algorithmList, modelNodeAndVnodeList); |
| | | } |
| | | |
| | | // 6. 保存模型 |
| | | // 7. 保存模型 |
| | | if (saveFlag) saveModel(modelRbd, modelNodeList, modelLineList, algorithmList, modelNodeAndVnodeList); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | private void peelOperationFromProductNode(Long modelId, |
| | | List<ModelNode> modelNodeList, |
| | | List<ModelLine> modelLineList) { |
| | | List<ModelNode> nodesToAdd = new ArrayList<>(); |
| | | List<ModelLine> linesToAdd = new ArrayList<>(); |
| | | for (ModelNode node: modelNodeList) { |
| | | List<ModelLine> inLineList = modelLineList.stream().filter(item -> |
| | | item.getEndCell().equals(node.getPicId())).collect(Collectors.toList()); |
| | | if ("node".equals(node.getNodeType()) && |
| | | StringUtils.isNotBlank(node.getNodeTypeExt()) && |
| | | inLineList.size() > 1) { |
| | | // 旁联or表决 |
| | | ModelNode nodeNew = new ModelNode(); |
| | | Long nodeNewId = UUIDUtil.generateId(); |
| | | nodeNew.setId(nodeNewId); |
| | | nodeNew.setPicId(nodeNewId.toString()); |
| | | nodeNew.setModelId(modelId); |
| | | nodeNew.setNodeType(node.getNodeTypeExt()); |
| | | nodeNew.setName(node.getNodeTypeExt()); |
| | | nodeNew.setVoteNum(node.getVoteNum()); |
| | | nodeNew.setPositionX(node.getPositionX()); |
| | | nodeNew.setPositionY(node.getPositionY()); |
| | | nodesToAdd.add(nodeNew); |
| | | |
| | | ModelLine lineNew = new ModelLine(); |
| | | Long lineNewId = UUIDUtil.generateId(); |
| | | lineNew.setId(lineNewId); |
| | | lineNew.setPicId(lineNewId.toString()); |
| | | lineNew.setModelId(modelId); |
| | | lineNew.setBeginCell(nodeNewId.toString()); |
| | | lineNew.setEndCell(node.getPicId()); |
| | | linesToAdd.add(lineNew); |
| | | |
| | | for(ModelLine line: inLineList){ |
| | | line.setEndCell(nodeNewId.toString()); |
| | | } |
| | | } |
| | | } |
| | | modelNodeList.addAll(nodesToAdd); |
| | | modelLineList.addAll(linesToAdd); |
| | | } |
| | | |
| | | private boolean createIfXmlFromRbd(ModelRbd modelRbd, |
| | |
| | | StringWriter writer = new StringWriter(); |
| | | xmlWriter = new XMLWriter(writer, format); |
| | | xmlWriter.write(document); |
| | | modelRbd.setIfXml(writer.toString()); |
| | | modelRbd.setPublishedXml(writer.toString()); |
| | | } finally { |
| | | if (xmlWriter!=null) xmlWriter.close(); |
| | | } |
| | |
| | | } |
| | | |
| | | // 更新RBD数据 |
| | | modelRbd.setPublishedContent(modelRbd.getContent()); |
| | | modelRbdDao.updateById(modelRbd); |
| | | } |
| | | |