From fe295552e5a3b010b5a6a60a1e2a94bc39b49d68 Mon Sep 17 00:00:00 2001 From: jinlin <jinlin> Date: 星期二, 06 八月 2024 15:37:09 +0800 Subject: [PATCH] 修改 --- modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java | 298 +++++++++++++++++++++++++++++------------------------------ 1 files changed, 145 insertions(+), 153 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..9836118 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; @@ -137,7 +138,7 @@ // 6. 杞崲涓虹畻娉曞簱鎺ュ彛XML if (result) { - result = createIfXmlFromRbd(modelRbd, algorithmList, modelNodeAndVnodeList); +// result = createIfXmlFromRbd(modelRbd, algorithmList, modelNodeAndVnodeList); } // 7. 淇濆瓨妯″瀷 @@ -188,134 +189,6 @@ modelLineList.addAll(linesToAdd); } - private boolean createIfXmlFromRbd(ModelRbd modelRbd, - List<Algorithm> algorithmList, - List<ModelNode> modelNodeAndVnodeList) { - boolean result = true; - - try { - Document document = DocumentHelper.createDocument(); - // 娣诲姞root鑺傜偣 - Element root = document.addElement("DES"); - root.addAttribute("Name", "A System"); - // 娣诲姞terminal鑺傜偣鍒皉oot1 - Element terminal = root.addElement("Node"); - terminal.addAttribute("Name", "Terminal"); - terminal.addAttribute("Type", "NODE"); - - // 灏嗘ā鍨嬭浆鎹负DOM锛屾坊鍔犲埌root - Algorithm endAlgo = algorithmList.stream().filter(item -> - "end".equals(item.getAlgorithmType())).collect(Collectors.toList()).get(0); - ModelNode computerNode = modelNodeAndVnodeList.stream().filter(item -> - endAlgo.getComputerList().equals(item.getId().toString())).collect(Collectors.toList()).get(0); - node2DOM(algorithmList, modelNodeAndVnodeList, computerNode, root); - - // 娣诲姞start鑺傜偣鍒皉oot - Element start = root.addElement("Node"); - start.addAttribute("Name", "Start"); - start.addAttribute("Type", "NODE"); - // 娣诲姞link锛堣矾寰勶級鍒皉oot - Element link = root.addElement("Link"); - Element block = link.addElement("Block"); - block.addAttribute("Name", "Terminal"); - block = link.addElement("Block"); - block.addAttribute("Name", computerNode.getId().toString()); - block = link.addElement("Block"); - block.addAttribute("Name", "Start"); - -// document.setXMLEncoding("UTF-8"); -// String xmlString = document.asXML(); - // 杈撳嚭鏍煎紡鍖杧ml - XMLWriter xmlWriter = null; - try { - OutputFormat format = OutputFormat.createPrettyPrint(); - format.setEncoding("UTF-8"); - StringWriter writer = new StringWriter(); - xmlWriter = new XMLWriter(writer, format); - xmlWriter.write(document); - modelRbd.setPublishedXml(writer.toString()); - } finally { - if (xmlWriter!=null) xmlWriter.close(); - } - } catch (Exception e) { - e.printStackTrace(); - result = false; - } - - return result; - } - - // 閫掑綊鍑芥暟 - private void node2DOM(List<Algorithm> algorithmList, - List<ModelNode> modelNodeAndVnodeList, - ModelNode node, - Element parent) { - if ("node".equals(node.getNodeType())) { - Long dataId = node.getDataId(); - XhProductModel xhProductModel = xhProductModelDao.getById(dataId); - if (xhProductModel == null) return; - if ("1".equals(xhProductModel.getProductType())) { - // 璁惧 - ParamData paramData = paramDataDao.getParamData(dataId, "expect"); - if (paramData == null) return; - Element element = parent.addElement("Node"); - element.addAttribute("Name", dataId.toString()); - element.addAttribute("Type", "NODE"); - Element failureTag = element.addElement("Failure"); - failureTag.addAttribute("Dist", "EXP"); // TODO:闇�璁句负鍏蜂綋鐨勫垎甯� - Element argsTag = failureTag.addElement("Args"); - Double value = new Double(paramData.getTaskMtbcfRegulate()); - value = 1.0/value; - argsTag.addAttribute("value", value.toString()); - if (1==paramData.getRepairable()) { - Element repairTag = element.addElement("Repair"); - repairTag.addAttribute("Dist", "EXP"); // TODO:闇�璁句负鍏蜂綋鐨勫垎甯� - argsTag = repairTag.addElement("Args"); - value = new Double(paramData.getRepairMttcr()); - value = 1.0/value; - argsTag.addAttribute("value", value.toString()); - Element repairTimeLimitTag = element.addElement("RepairTimeLimit"); - repairTimeLimitTag.setText(paramData.getRepairMttcr()); - } - } else if ("10".equals(xhProductModel.getProductType())) { - // 铏氬崟浣� - ModelRbd rbdXDY = modelRbdDao.getDiagramOfXDY(dataId); - if (rbdXDY == null) return; - List<Algorithm> algorithmListXDY = algorithmDao.getListByModelId(rbdXDY.getId()); - List<ModelNode> modelNodeAndVnodeListXDY =modelNodeAlgorithmDao.getListByModelId(rbdXDY.getId()); - Algorithm endAlgo = algorithmListXDY.stream().filter(item -> - "end".equals(item.getAlgorithmType())).collect(Collectors.toList()).get(0); - ModelNode computerNode = modelNodeAndVnodeListXDY.stream().filter(item -> - endAlgo.getComputerList().equals(item.getId().toString())).collect(Collectors.toList()).get(0); - node2DOM(algorithmListXDY, modelNodeAndVnodeListXDY, computerNode, parent); - } - } else { - // vnode锛堣繍绠楄妭鐐癸級 - Algorithm algo = algorithmList.stream().filter(item -> - node.getId().equals(item.getId())).collect(Collectors.toList()).get(0); - Element element = parent.addElement("Logic"); - element.addAttribute("Name", algo.getId().toString()); - if ("series".equals(algo.getAlgorithmType())) { - element.addAttribute("Type", "SERIES"); - } else if ("parallel".equals(algo.getAlgorithmType())) { - element.addAttribute("Type", "PARALLEL"); - } else if ("vote".equals(algo.getAlgorithmType())) { - element.addAttribute("Type", "VOTE"); - element.addAttribute("VoteValue", algo.getVoteNum().toString()); - } else if ("switch".equals(algo.getAlgorithmType())) { - element.addAttribute("Type", "STANDBY"); - } else if ("bridge".equals(algo.getAlgorithmType())) { - element.addAttribute("Type", "BRIDGE"); - } - String[] computerNodeListStr = algo.getComputerList().split(","); - for (String nodeStr : computerNodeListStr) { - ModelNode nd = modelNodeAndVnodeList.stream().filter(item -> - nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0); - node2DOM(algorithmList, modelNodeAndVnodeList, nd, element); - } - } - } - private boolean getAlgorithmFromRbd(ModelRbd modelRbd, List<ModelNode> modelNodeList, List<ModelLine> modelLineList, @@ -339,7 +212,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 +296,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 +560,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 +729,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 +762,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 +829,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 +909,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 +946,7 @@ algorithmList, modelNodeAndVnodeList, vnode, endNode, branchNodeList); calcInOutLineNum(startNode, modelLineList); } +*/ return true; } @@ -1117,6 +1098,7 @@ List<ModelNode> modelNodeList, List<ModelLine> modelLineList, List<ProductImg> productImgList) { + Object jsonValue = null; for (int i = 0; i < rbdJsonArray.size(); i++) { JSONObject jsonObject = rbdJsonArray.getJSONObject(i); String shape = jsonObject.get("shape").toString(); @@ -1136,39 +1118,49 @@ 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())); - Object voteNum = JsonUtils2.getJsonValueByPath(jsonObject, "data/voteNum".split("/")); - if (voteNum!=null && StringUtils.isNotBlank(voteNum.toString())) { - modelNode.setVoteNum(Integer.valueOf(voteNum.toString())); + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/voteNum".split("/")); + if (jsonValue!=null && StringUtils.isNotBlank(jsonValue.toString())) { + modelNode.setVoteNum(Integer.valueOf(jsonValue.toString())); } if ("node".equals(modelNode.getNodeType())) { ProductImg productImg = new ProductImg(); String dataId = JsonUtils2.getJsonValueByPath(jsonObject, "data/dataId".split("/")).toString(); modelNode.setDataId(Long.valueOf(dataId)); modelNode.setNodeTypeExt(JsonUtils2.getJsonValueByPath(jsonObject, "data/nodeTypeExt".split("/")).toString()); - Object name = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/text".split("/")); - modelNode.setName(name==null ? "" : name.toString()); + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/text".split("/")); + modelNode.setName(jsonValue==null ? "" : jsonValue.toString()); productImg.setDataId(dataId); String productType = JsonUtils2.getJsonValueByPath(jsonObject, "data/productType".split("/")).toString(); productImg.setProductType(productType); if ("product_sb".equals(productType)) { - Object obj = JsonUtils2.getJsonValueByPath(jsonObject, "data/reliabDistribType".split("/")); - if (obj != null && StringUtils.isNotBlank(obj.toString())) { - productImg.setReliabDistribType(Integer.valueOf(obj.toString())); + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/reliabDistribType".split("/")); + if (jsonValue != null && StringUtils.isNotBlank(jsonValue.toString())) { + productImg.setReliabDistribType(Integer.valueOf(jsonValue.toString())); } - productImg.setTaskMtbcf(JsonUtils2.getJsonValueByPath(jsonObject, "data/taskMtbcf".split("/")).toString()); - productImg.setTaskMtbcfOther(JsonUtils2.getJsonValueByPath(jsonObject, "data/taskMtbcfOther".split("/")).toString()); - obj = JsonUtils2.getJsonValueByPath(jsonObject, "data/isRepair".split("/")); - if (obj != null && StringUtils.isNotBlank(obj.toString())) { - productImg.setIsRepair(Integer.valueOf(obj.toString())); + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/taskMtbcf".split("/")); + if (null != jsonValue) productImg.setTaskMtbcf(jsonValue.toString()); + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/taskMtbcfOtherParams2".split("/")); + if (null != jsonValue) productImg.setTaskMtbcfOtherParams2(jsonValue.toString()); + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/taskMtbcfOtherParams3".split("/")); + if (null != jsonValue) productImg.setTaskMtbcfOtherParams3(jsonValue.toString()); + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/isRepair".split("/")); + if (jsonValue != null && StringUtils.isNotBlank(jsonValue.toString()) && !"null".equals(jsonValue.toString())) { + productImg.setIsRepair(Integer.valueOf(jsonValue.toString())); + } else { + productImg.setIsRepair(0); } if (1 == productImg.getIsRepair()) { - obj = JsonUtils2.getJsonValueByPath(jsonObject, "data/repairDistribType".split("/")); - if (obj != null && StringUtils.isNotBlank(obj.toString())) { - productImg.setRepairDistribType(Integer.valueOf(obj.toString())); + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/repairDistribType".split("/")); + if (jsonValue != null && StringUtils.isNotBlank(jsonValue.toString())) { + productImg.setRepairDistribType(Integer.valueOf(jsonValue.toString())); } - productImg.setRepairMttcr(JsonUtils2.getJsonValueByPath(jsonObject, "data/repairMttcr".split("/")).toString()); - productImg.setRepairMttcrOther(JsonUtils2.getJsonValueByPath(jsonObject, "data/repairMttcrOther".split("/")).toString()); + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/repairMttcr".split("/")); + if (null != jsonValue) productImg.setRepairMttcr(jsonValue.toString()); + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/repairMttcrOtherParams2".split("/")); + if (null != jsonValue) productImg.setRepairMttcrOtherParams2(jsonValue.toString()); + jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/repairMttcrOtherParams3".split("/")); + if (null != jsonValue) productImg.setRepairMttcrOtherParams3(jsonValue.toString()); } } productImgList.add(productImg); -- Gitblit v1.9.1