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)); }
/** * @param $data * * @return Rule[] */ public function CalcFitRules($data) { $eventData = json_decode($data['data'], true); if (json_last_error() != JSON_ERROR_NONE) { return ['error' => 'JSON error']; } //Записываем событие в базу $this->incomeEvent = new IncomeEvent(); $this->incomeEvent->newIncomeEvent($data['term'], $data['event'], $eventData); //Если не находим событие - отдаём ошибку $event = Event::getEvent($data['term'], $data['event']); if ($event == null) { Log::info('Правило ' . $data['event'] . ' не найдено'); return ['error' => 'Unknown event']; } //Получаем все правила теминала по событию $rules = Rule::getRules($data['term'], $event->id); $countRules = count($rules); Log::info("Всего найдено правил: {$countRules}"); //Определяем соответсвующие запросу правила $rulesHandler = new RulesHandler(); $fitRules = $rulesHandler->getFitRules($rules, $eventData); return $fitRules; }
/** * Получить все правила по номеру терминала и событию * * @param integer $term * @param string $eventId * * @return array */ public static function getRules($term, $eventId) { return Rule::whereTerminalId($term)->whereEventId($eventId)->whereFlagActive(true)->get()->all(); }
public function postAddDataRule() { $signal_id = Input::only('signal_id'); $sid = $signal_id['signal_id']; $input = Input::only('event_id', 'rule', 'name'); $input['terminal_id'] = $this->getTerminalId(); $errors = Rules::add($input); $data['terminal_id'] = $input['terminal_id']; foreach ($sid as $key => $value) { $data['signal_id'] = $value; $error = Rules::checkSignals($data); if ($error != null) { $errors['errors']['signal_id'][$key] = $error; } } if ($errors) { return $errors; } //Изменяем данные $message = 'Данные изменены'; foreach ($sid as $value) { $input['signal_id'] = $value; $rule = new Rule(); $rule->name = $input['name']; $rule->rule = $input['rule']; $rule->event_id = $input['event_id']; $rule->signal_id = $input['signal_id']; $rule->terminal_id = $input['terminal_id']; $rule->flag_active = 1; $rule->save(); } return array('message' => $message); }