diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/controller/ModelerController.java b/laws-modules/src/main/java/com/jero/modules/activiti/controller/ModelerController.java index 765380f1..44f0956f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/controller/ModelerController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/controller/ModelerController.java @@ -298,7 +298,8 @@ public class ModelerController { .distinct() .collect(Collectors.toList()); Map startEventReplace = new HashMap<>(); - Map endEventReplace = new HashMap<>(); + Map> endEventReplace = new HashMap<>(); + //确定结束节点的连线 List removeNodeList = new ArrayList<>(); for (String subProcessId : subProcessIdList) { @@ -319,11 +320,41 @@ public class ModelerController { //subEndEventList.add(xmlNodeId); //通过target拿到线 ProcessModelNode flow = targetSourceMap.get(xmlNodeId); - endEventReplace.put(subProcessId,flow); + if (endEventReplace.containsKey(subProcessId)) { + List processModelNodes = endEventReplace.get(subProcessId); + processModelNodes.add(flow); + }else { + List processModelNodes = new ArrayList<>(); + processModelNodes.add(flow); + endEventReplace.put(subProcessId,processModelNodes); + } removeNodeList.add(flow); } } } + //把之前删除的结束节点更新后在加回来 + List addNodeList = new ArrayList<>(); + for (ProcessModelNode modelNode : nodeOriginList) { + String nodeType = modelNode.getNodeType(); + String nodeName = modelNode.getNodeName(); + String xmlSourceRef = modelNode.getXmlSourceRef(); + String xmlTargetRef = modelNode.getXmlTargetRef(); + if ("sequenceFlow".equals(nodeType)){ + if (endEventReplace.containsKey(xmlSourceRef)) { + List processModelNodes = endEventReplace.get(xmlSourceRef); + for (ProcessModelNode modelNode1 : processModelNodes) { + modelNode1.setXmlTargetRef(xmlTargetRef); + addNodeList.add(modelNode1); + } + + //modelNode.setXmlTargetRef(modelNode1.getXmlTargetRef()); + } + if (startEventReplace.containsKey(xmlTargetRef)) { + xmlTargetRef = startEventReplace.get(xmlTargetRef); + modelNode.setXmlTargetRef(xmlTargetRef); + } + } + } //删除结束节点的连线 nodeOriginList.removeAll(removeNodeList); //获得子流程之后的连线 @@ -332,26 +363,7 @@ public class ModelerController { .collect(Collectors.toList()); //获得子流程之后的连线map Map beforeSubProcessFlowMap = CollStreamUtil.toIdentityMap(beforeSubProcessFlowList, ProcessModelNode::getXmlSourceRef); - //把之前删除的结束节点更新后在加回来 - List addNodeList = new ArrayList<>(); - for (ProcessModelNode modelNode : nodeOriginList) { - String nodeType = modelNode.getNodeType(); - String nodeName = modelNode.getNodeName(); - String xmlSourceRef = modelNode.getXmlSourceRef(); - String xmlTargetRef = modelNode.getXmlTargetRef(); - if ("sequenceFlow".equals(nodeType)){ - if (endEventReplace.containsKey(xmlSourceRef)) { - ProcessModelNode modelNode1 = endEventReplace.get(xmlSourceRef); - modelNode1.setXmlTargetRef(xmlTargetRef); - addNodeList.add(modelNode1); - //modelNode.setXmlTargetRef(modelNode1.getXmlTargetRef()); - } - if (startEventReplace.containsKey(xmlTargetRef)) { - xmlTargetRef = startEventReplace.get(xmlTargetRef); - modelNode.setXmlTargetRef(xmlTargetRef); - } - } - } + //把之前删除的结束节点更新后在加回来 nodeOriginList.addAll(addNodeList); @@ -360,7 +372,7 @@ public class ModelerController { .filter(item -> "驳回".equals(item.getNodeName())) .collect(Collectors.toList()); //全部去除 - nodeOriginList.removeAll(rejectFlowList); + //nodeOriginList.removeAll(rejectFlowList); Map rejectSourceIdIsGatewayMap = CollStreamUtil.toIdentityMap(rejectFlowList, ProcessModelNode::getXmlSourceRef); //找到全部的通过线 List passFlowList = nodeOriginList.stream() @@ -397,14 +409,14 @@ public class ModelerController { edge.put("target",afterGatewayNodeId); edges.add(edge); //网关后的线 - //ProcessModelNode modelNode2 = rejectSourceIdIsGatewayMap.get(xmlTargetRef); + ProcessModelNode modelNode2 = rejectSourceIdIsGatewayMap.get(xmlTargetRef); ////网关后的节点id - //String afterGatewayNodeId1 = modelNode2.getXmlTargetRef(); - //Map edge2 = new HashMap<>(); - //edge2.put("label","驳回"); - //edge2.put("source", beforeGatewayNodeId); - //edge2.put("target",afterGatewayNodeId1); - //edges.add(edge2); + String afterGatewayNodeId1 = modelNode2.getXmlTargetRef(); + Map edge2 = new HashMap<>(); + edge2.put("label","驳回"); + edge2.put("source", beforeGatewayNodeId); + edge2.put("target",afterGatewayNodeId1); + edges.add(edge2); } //找到全部的审批网关(审批网关名字是null) List gatewayList = nodeOriginList.stream()