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