You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

87 lines
2.9 KiB

<?php
class SplitNode extends Node
{
/**
*返回节点类型
* @param $param
*/
function __construct($param)
{
parent::__construct($param);
}
public function getAssignerList(WorkFlowParser $workFlowParser)
{
$str_next_user = "00000-各部门,";
$assigners = array();
array_push($assigners, array(
"C1", #assign_status
$str_next_user
));
$pathLength = array();
$mergeNodes = $workFlowParser->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;
}
}