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