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.
 
 
 
 
 
 

227 lines
7.8 KiB

<?php
class FlowNodeHandler
{
private $currentNode;
private $flowContext;
private $formData;
function __construct($node, FlowContext $flowContext, $formData)
{
$this->currentNode = $node;
$this->flowContext = $flowContext;
$this->formData = $formData;
}
/**
* 根据传入FlowNode节点的中的Code 更新Flow表
*/
function doWork()
{
$this->flowContext->getCurrentNode()->setFlow($this->flowContext);
$this->flowContext->getCurrentNode()->setformData($this->formData);
$function = "processAssignStatus" . $this->flowContext->getAssignStatus();
// echo $function ;
if (!method_exists('FlowNodeHandler', $function)) {
echo self::processUndefined($function);
exit();
}
#调用对应的处理函数
$this->$function();
}
/**
*
*处理AssignStatus=F1 同意 流程进入下个节点
*
*/
private function processAssignStatusF1()
{
$assignClass = $this->flowContext->getCurrentNode()->getAssignClass();
$currentAssigner = Subflow::getCurrentUser($this->flowContext->getFormKey());
$nextFlowCode = $this->currentNode->getFlowCode();
$formKey = $this->flowContext->getFormKey();
$currentFlowCode = $this->flowContext->getFlowCode();
#符合条件,变更流程码,否则停在当前环节
if ($this->flowContext->getCurrentNode()->checkTrust($assignClass, Employee::lead_code($currentAssigner))) {
#节点附加的任务
$task = new NodeTask();
$task->setFormKey($this->flowContext->formKey)
->setFlowCode($currentFlowCode)
->setState("OPEN")
->setPhase("SUBMIT");
$tasks = TaskManager::getTasks($task);
if (count($tasks) > 0) {
foreach ($tasks as $task) {
$handlerClass = NodeTask::$handlerClasses[constant("NodeTask::" . $task->getTaskType())];
$handler = new $handlerClass($this->flowContext, $this->formData);
$handler->doWork();
}
}
Flow::updateFlowCode($formKey, $nextFlowCode);
#关闭当前节点上的所有任务
$task = new NodeTask();
$task->setFormKey($this->flowContext->getFormKey())
->setFlowCode($currentFlowCode)
->setState("OPEN");
$closeTasks = TaskManager::getTasks($task);
foreach ($closeTasks as $task) {
$task->delete();
}
}
Subflow::updateCurrentUser($formKey, $this->flowContext->getNextAssigner());
}
/**
* 申请人申请S
*/
private function processAssignStatusS()
{
$this->processAssignStatusF1();
}
/***
* 转工程科处理
*/
private function processAssignStatusGC()
{
$this->processAssignStatusF1();
}
/***
* 会签不同意
*/
private function processAssignStatusY1()
{
$this->processAssignStatusF1();
}
/**
*处理AssignStatus=FH 指派 流程还停留在当前节点
* 在LOAD阶段需要添加一个任务,使得被指派人选择下位签核者时,既能呈核,也能指派
*
*/
private function processAssignStatusFH()
{
#生成任务
// echo "processAssignStatusFH";
$currentAssigner = new Employee(Subflow::getCurrentUser($this->flowContext->getFormKey()));
$nextUser = new Employee($this->flowContext->getNextAssigner());
// var_dump( $this->flowContext->getFormKey());
$task = new NodeTask();
$task->setFormKey($this->flowContext->getFormKey())
->setFlowCode($this->flowContext->getFlowCode())
->setState("OPEN")
->setTaskType("FH_TASK")
->setNecessary('Y')
->setPhase("LOAD")
->setWfCondition("SAME")
->setJoinRole("select 'F6' assign_status, concat(
'" . $currentAssigner->employee_no . "' , '-','" . $currentAssigner->name . "' ) assigner_string from dual
union select 'FH' assign_status,concat(employee_no,'-',name) assigner_string from employee where
depart_no like '" . rtrim($nextUser->depart_no, 0) . "%'
and employee_no!='" . $nextUser->employee_no . "'
and lead_code >'" . $nextUser->lead_code . "'")
->setRoleType('SQL')
->setCreator($currentAssigner->employee_no)
->setCreateCode($this->flowContext->getFlowCode());
TaskManager::insertTask($task);
Subflow::updateCurrentUser($this->flowContext->getFormKey(), $this->flowContext->getNextAssigner());
}
/**
* 处理AssignStatus=F6 呈核 流程还停留在当前节点,如果下位签核者,是
*/
private function processAssignStatusF6()
{
#生成任务
$task = new NodeTask();
$task->setFormKey($this->flowContext->getFormKey())
->setFlowCode($this->flowContext->getCurrentNode()->getFlowCode())
->setState("OPEN")
->setTaskType("FH_TASK")
->setPhase("LOAD");
$tasks = TaskManager::getTasks($task);
// var_dump($task);
foreach ($tasks as $task) {
$taskCreator = $task->getCreator();
// var_dump($this->flowContext->getNextAssigner() );
// var_dump($taskCreator);
if ($taskCreator == $this->flowContext->getNextAssigner()) {
$task->setState(NodeTask::TASK_FINISH_STATE)->update();
}
}
Subflow::updateCurrentUser($this->flowContext->getFormKey(), $this->flowContext->getNextAssigner());
}
/**
* 处理AssignStatus=B4 退回上一个节点
*/
private function processAssignStatusB4()
{
$formKey = $this->flowContext->getFormKey();
$prevNodes = $this->flowContext->workFlowParser->getPrevLevelNodes(
$this->flowContext->getCurrentNode()->getNodeId(),
[Node::FLOW_NODE, Node::LOGIC_NODE]
);
foreach ($prevNodes as $key => $prevNode) {
$tmpNode = $prevNode[0];
$backFlowCode = $tmpNode->getFlowCode();
$backAssign = Assign::get_lastest_record($formKey, $backFlowCode);
if (empty($backFlowCode)) continue;
Flow::updateFlowCode($formKey, $backAssign['flow_code']);
}
Subflow::updateCurrentUser($formKey, $this->flowContext->getNextAssigner());
}
/**
* 处理AssignStatus=B7 退回申请人
*/
private function processAssignStatusB7()
{
$formKey = $this->flowContext->getFormKey();
#删除当前节点上的所有任务
$task = new NodeTask();
$task->setFormKey($formKey)
->setFlowCode($this->flowContext->getCurrentNode()->getFlowCode())
->setState("OPEN");
$closeTasks = TaskManager::getTasks($task);
foreach ($closeTasks as $task) {
$task->setState(NodeTask::TASK_FINISH_STATE)->update();
}
$startNode = $this->flowContext->getWorkFLowParser()->getFirstNode();
Flow::updateFlowCode($formKey, $startNode->getFlowCode());
Subflow::updateCurrentUser($formKey, $this->flowContext->getNextAssigner());
}
private function processAssignStatusF4()
{
$formKey = $this->flowContext->getFormKey();
Flow::updateFlowCode($formKey, $this->currentNode->getFlowCode());
Subflow::updateCurrentUser($formKey, $this->flowContext->getNextAssigner());
}
/**
* 处理异常
* @param $function
* @return string
*/
private function processUndefined($function)
{
return "调用的不存在方法" . $function;
}
}