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.
 
 
 
 
 
 

76 lines
2.6 KiB

<?php
/**
* Created by PhpStorm.
* User: user
* Date: 2018/8/16
* Time: 8:41
*/
class LogicNodeHandler
{
private $currentNode;
private $flowContext;
private $formData;
function __construct($node, FlowContext $Context, $formData)
{
$this->currentNode = $node;
$this->flowContext = $Context;
$this->formData = $formData;
}
/**
* 判断传入的assignStatus,在下层节点中找出含有该assignStatus的节点
*/
function doWork()
{
#停留在当前节点
if (
in_array($this->flowContext->assignStatus, AssignStatus::$same_level_status)
or in_array($this->flowContext->assignStatus, AssignStatus::$back_status)
) {
$flowHandler = new FlowNodeHandler($this->currentNode, $this->flowContext, $this->formData);
$flowHandler->doWork();
return;
}
$formKey = $this->flowContext->getFormKey();
#检查是否有下节点是否定routeMethod
$routeMethod = $this->currentNode->getRouteMethod();
$nextFlowCode = "";
$assignClass = $this->flowContext->getCurrentNode()->getAssignClass();
if (!empty($routeMethod)) {
$nextFlowCode = $routeMethod->invokeMethod($this->flowContext, $this->formData);
} else {
#根据下层节点的assign_status 匹配
$workFlowParser = $this->flowContext->getWorkFLowParser();
//解析下层节点\WorkFlowParser::getNextLevelNodes
$nextFlowNodes = $workFlowParser->getNextLevelNodes($this->currentNode->getNodeId());
foreach (Node::$nodeTypes as $type) {
if (!array_key_exists($type, $nextFlowNodes)) continue;
foreach ($nextFlowNodes[$type] as $node) {
if (method_exists($node, 'getAssignerList')) {
$assigner = $node->getAssignerList($workFlowParser);
$assign_status = $assigner[0][0];
if ($assign_status == $this->flowContext->getAssignStatus()) {
$nextFlowCode = $node->getFlowCode();
break 2;
}
}
}
}
}
#当前签核者
$currentAssignerId = $this->flowContext->getCurrentUser();
if ($this->flowContext->currentNode->checkTrust($assignClass, Employee::lead_code($currentAssignerId))) {
Flow::updateFlowCode($formKey, $nextFlowCode);
}
Subflow::updateCurrentUser($formKey, $this->flowContext->getNextAssigner());
}
}