• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/queue/evenly.php
  • Класс: BitrixImOpenLinesQueueEvenly
  • Вызов: Evenly::getOperatorsQueue
public function getOperatorsQueue($currentOperator = 0): array
{
	$queueTime = $this->getQueueTime();

	$result = [
		'RESULT' => false,
		'OPERATOR_ID' => 0,
		'OPERATOR_LIST' => [],
		'DATE_QUEUE' => (new DateTime())->add($queueTime . ' SECONDS'),
		'QUEUE_HISTORY' => [],
	];

	$operators = [];
	$queueHistory = $this->session['QUEUE_HISTORY'];
	$fullCountOperators = 0;

	$select = [
		'ID',
		'USER_ID'
	];

	$filter = ['=CONFIG_ID' => $this->config['ID']];
	$order = [
		'LAST_ACTIVITY_DATE' => 'asc',
		'LAST_ACTIVITY_DATE_EXACT' => 'asc'
	];

	$res = ImOpenLinesQueue::getList([
		'select' => $select,
		'filter' => $filter,
		'order' => $order
	]);

	while($queueUser = $res->fetch())
	{
		$fullCountOperators++;
		if($this->isOperatorAvailable($queueUser['USER_ID'], $currentOperator))
		{
			$operators[$queueUser['USER_ID']] = $queueUser;
		}
	}

	$this->processingEmptyQueue($this->config['ID'], $fullCountOperators);

	if(!empty($operators))
	{
		$operatorId = reset($operators)['USER_ID'];

		$queueHistory[$operatorId] = true;

		if ($operators[$operatorId] > 0)
		{
			QueueTable::update($operators[$operatorId]['ID'], ['LAST_ACTIVITY_DATE' => new DateTime(), 'LAST_ACTIVITY_DATE_EXACT' => microtime(true) * 10000]);
		}

		$result = [
			'RESULT' => true,
			'OPERATOR_ID' => $operatorId,
			'OPERATOR_LIST' => [$operatorId],
			'DATE_QUEUE' => (new DateTime())->add($queueTime . ' SECONDS'),
			'QUEUE_HISTORY' => $queueHistory,
		];
	}

	return $result;
}