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
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;
|
|
}
|
|
|
|
}
|
|
|