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.
141 lines
4.7 KiB
141 lines
4.7 KiB
<?php
|
|
/**
|
|
* User: user
|
|
* Date: 2018/9/10
|
|
* Time: 12:03
|
|
* @
|
|
*/
|
|
|
|
class CounterSignSubtaskHandler
|
|
{
|
|
private $formData;
|
|
private $flowContext;
|
|
private $currentNode;
|
|
const DEFAULT_MERGE_OPTION = "AND";
|
|
|
|
function __construct(FlowContext $flowContext, $formData = array())
|
|
{
|
|
$this->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);
|
|
|
|
}
|
|
}
|