getAllNode(Node::MERGE_NODE); if (count($mergeNodes) == 0) return $assigners; $subFlowNodes = $workFlowParser->getNextLevelNodes(parent::getNodeId(), Node::FLOW_NODE); if (count($subFlowNodes) == 0) return $assigners; foreach ($mergeNodes[Node::MERGE_NODE] as $mergeNode) { $pathLength[$mergeNode->getNodeId()] = 0; foreach ($subFlowNodes[Node::FLOW_NODE] as $flowNode) { $path = $workFlowParser->getMinLengthBetweenNode($mergeNode->getNodeId(), $flowNode->getNodeId()); if (count($path) == 0) { //不存在路径,设置为极大值 $pathLength[$mergeNode->getNodeId()] = PHP_INT_MAX; break; } $pathLength[$mergeNode->getNodeId()] += count($pathLength[$mergeNode->getNodeId()]) + 1; } } if (min($pathLength) == PHP_INT_MAX) return $assigners; $MinLengthPathNode = $workFlowParser->getNodeByNodeId(array_search(min($pathLength), $pathLength)); $SecondAssigners = $MinLengthPathNode->getAssignerList($workFlowParser); if (count($SecondAssigners) == 0) return $assigners; return $SecondAssigners; } /** * 1.检查逻辑节点下层节点,并获取下层节点的assigner * @param WorkFlowParser $workFlowParser * @return array */ function getSplitMembers(WorkFlowParser $workFlowParser) { $assigners = $this->getNextAssignerList($workFlowParser); foreach ($assigners as $key => $assigner) { $arr = explode('-', $assigner[1]); $_depart = Depart::depart_name(Employee::f_return_depart($arr[0])); $assigners[$key] = $_depart . '-' . $arr[1]; } return $assigners; } /** * @param WorkFlowParser $workFlowParser * @return array */ function getNextAssignerList(WorkFlowParser $workFlowParser) { $nodes = $workFlowParser->getNextLevelNodes(parent::getNodeId()); $assigners = array(); foreach (Node::$nodeTypes as $type) { if (!array_key_exists($type, $nodes)) continue; foreach ($nodes[$type] as $node) { if (method_exists($node, 'getAssignerList')) { $assigners = array_merge((array)$assigners, $node->getAssignerList($workFlowParser)); } } } return $assigners; } }