/** * @param Rule[] $fitRules * @param array $data * * @return array */ public function processSendResults($fitRules, $data) { $countFitRules = count($fitRules); Log::info("Найдено подходящих правил: {$countFitRules}"); //Проходим циклом по каждому правилу и отправляем результат foreach ($fitRules as $fitRule) { Log::info("Соответствующее правило: ", $fitRule->getAttributes()); $signalSid = $fitRule->signal->signal_sid; $resultSignal = new ResultSignal(); $resultSignal->newResultSignal($this->incomeEvent->id, $signalSid); Log::info("Запись в таблицу сигналов: id = {$resultSignal->id}"); //Отправляем результат по http $sendResults = App::make(SendResults::class); $url = $this->incomeEvent->terminal->url; if ($url != '') { $sendResults->sendHttp($url, $resultSignal->id, $data); } //Отправляем результат в очередь $queue = $this->incomeEvent->terminal->queue; if ($queue != '') { $sendResults->sendQueue($queue, $signalSid, $data); $resultSignal->setFlagQueueTrue(); } } return ['countFitRules' => $countFitRules]; }
/** * @param Job $job * @param array $data */ public function fire(Job $job, $data) { $signalId = $data['signalId']; $signalResult = ResultSignal::find($signalId); if ($signalResult == null) { $job->delete(); exit; } $url = $data['url']; $signalSid = $signalResult->signal_sid; $isSend = $this->makeCurl($url, $signalSid); //Если отправлен результат то удаляем задачу и ставим флаг if ($isSend) { $job->delete(); $signalResult->setFlagUrlTrue(); Log::info('Результат отправлен по http.'); } $cnt = $job->attempts(); if ($cnt > 50) { $job->delete(); Log::info('Выполнено ' . $cnt . ' попыток отправить curl. Задача удалена.', $data); exit; } Log::info('Перевыставлена задача, попытка номер ' . $cnt, $data); $job->release(60); }
public function setUp() { parent::setUp(); Config::set('termId', 1); IncomeEvent::truncate(); Event::truncate(); Terminal::truncate(); Rule::truncate(); ResultSignal::truncate(); Signal::truncate(); Terminal::create(array('name' => 'test', 'url' => 'http://test', 'queue' => 'queueTest', 'key' => 'key')); Event::create(array('terminal_id' => 1, 'name' => 'Хочу есть', 'event_sid' => 'im_hungry')); Signal::create(array('terminal_id' => 1, 'name' => 'Иди кушай', 'signal_sid' => 'go_eat')); Signal::create(array('terminal_id' => 1, 'name' => 'Жди', 'signal_sid' => 'wait')); Signal::create(array('terminal_id' => 1, 'name' => 'Терпи до дома', 'signal_sid' => 'endure')); Rule::create(array('terminal_id' => 1, 'name' => 'Иди кушай', 'event_id' => 1, 'rule' => 'time >= 13.00 AND time <= 14.00 AND have_money === true', 'signal_id' => 1, 'flag_active' => true)); Rule::create(array('terminal_id' => 1, 'name' => 'Жди', 'event_id' => 1, 'rule' => 'time < 13.00', 'signal_id' => 2, 'flag_active' => true)); Rule::create(array('terminal_id' => 1, 'name' => 'Терпи до дома', 'event_id' => 1, 'rule' => 'time > 14.00', 'signal_id' => 3, 'flag_active' => true)); }