formData = $formData; $this->flowContext = $flowContext; $parser = $flowContext->getWorkFLowParser(); $this->currentNode = $parser->getNodeByCode($flowContext->getFlowCode()); } /** * 1,根据签核状态变更workflow_sublow reply_flag Y:同意; N:不同意; NULL:未回复 */ public function doWork() { $flow = new Flow ($this->flowContext->getFormKey()); $sm = new SubflowManager(new Flow($flow->getParentKey())); #是否同意标志 $flag = $this->flowContext->getAssignStatus() == AssignStatus::ACCEPT_STATUS ? 'Y' : 'N'; SubflowManager::updateReplyFlag($this->flowContext->getFormKey(), $flag); SubflowManager::updateReplyComment($this->flowContext->getFormKey(), $this->flowContext->getAssignOpinion()); $unReplyCount = $sm->getUnReplyCount(SubflowManager::getSeqByFormKey($this->flowContext->formKey)); if ($unReplyCount == 0) { $mergeOption = $this->currentNode->getMergeOption(); $mergeOption = empty($mergeOption) ? self::DEFAULT_MERGE_OPTION : $mergeOption; $function = "cond" . strtoupper($mergeOption); $this->$function($sm); } #关闭任务 $task = new NodeTask(); $task->setFormKey($this->flowContext->getFormKey()) ->setFlowCode($this->flowContext->getCurrentNode()->getFlowCode()) ->setState("OPEN") ->setTaskType("COUNTER_SIGN_SUBTASK") ->setPhase("SUBMIT"); $tasks = TaskManager::getTasks($task); foreach ($tasks as $task) { $task->setState(NodeTask::TASK_FINISH_STATE)->update(); } } /** * 同意一个即可 */ private function condOR($sm) { $cnt = $sm->getAcceptOpinionCount(SubflowManager::getSeqByFormKey($this->flowContext->formKey)); if ($cnt >= 1) { $this->nextAssign(); } else { $this->backAssign(); } } /** * 全部同意 */ private function condAND($sm) { $cnt = $sm->getRejectOpinionCount(SubflowManager::getSeqByFormKey($this->flowContext->formKey)); if ($cnt == 0) { $this->nextAssign(); } else { $this->backAssign(); } } /** *同意的占多数 */ private function condVOTE($sm) { $reject = $sm->getRejectOpinionCount(SubflowManager::getSeqByFormKey($this->flowContext->formKey)); $accept = $sm->getAcceptOpinionCount(SubflowManager::getSeqByFormKey($this->flowContext->formKey)); if ($accept >= $reject) { $this->nextAssign(); } else { $this->backAssign(); } } private function backAssign() { $currentFlow = new Flow($this->flowContext->getFormKey()); $parentKey = $currentFlow->getParentKey(); $prevNodes = $this->flowContext->getWorkFLowParser()->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($parentKey, $backFlowCode); if (empty($backFlowCode)) continue; Flow::updateFlowCode($parentKey, $backAssign['flow_code']); Subflow::updateCurrentUser($parentKey, $backAssign['assigner']); } } private function nextAssign() { $nextFlowNodes = $this->flowContext->getWorkFLowParser()->getNextLevelNodes($this->currentNode->getNodeId()); $nextFlowCode = ""; foreach (Node::$nodeTypes as $type) { if (!array_key_exists($type, $nextFlowNodes)) continue; foreach ($nextFlowNodes[$type] as $node) { $nextFlowCode = $node->getFlowCode(); $nextAssigners = $node->getAssignerList($this->flowContext->getWorkFLowParser()); break 2; } } //array(1) { [0]=> array(2) { [0]=> string(2) "F1" [1]=> string(29) "00017-贺正时 协理特助," } } $nextAssigner = substr($nextAssigners[0][1], 0, 5); $currentFlow = new Flow($this->flowContext->getFormKey()); Flow::updateFlowCode($currentFlow->getParentKey(), $nextFlowCode); Subflow::updateCurrentUser($currentFlow->getParentKey(), $nextAssigner); } }