/** * Finds the Town model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param integer $id * @return Town the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = Town::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } }
public function run() { ini_set('max_execution_time', 0); //300 seconds = 5 minutes DB::table('areas')->delete(); DB::table('towns')->delete(); $regions = $this->api('database.getRegions', ['country_id' => 2]); foreach ($regions['response'] as $region) { $towns = $this->api('database.getCities', ['country_id' => 2, 'region_id' => $region['region_id'], 'count' => 1000]); foreach ($towns['response'] as $town) { $area = Area::firstOrCreate(['name' => isset($town['area']) ? $town['area'] : $town['title'], 'region_id' => isset(Region::where('name', '=', $town['region'])->first()->id) ? Region::where('name', '=', $town['region'])->first()->id : 0]); Town::create(['name' => $town['title'], 'area_id' => $area->id]); } sleep(10); } }
public static function getPaginateTowns($skip = NULL, $take = NULL, $orderBy = 'townName ASC') { $sortSplit = explode(' ', $orderBy); return Town::join('department', 'town.fk_town_department', '=', 'department.id')->select('town.created_at', 'town.updated_at', 'town.name as townName', 'town.status', 'town.id', 'department.id as departmentId', 'department.name as departmentName')->orderBy($sortSplit[0], $sortSplit[1])->skip($skip)->take($take)->get(); }
public function execute($parameters = []) { if (!isset($parameters['action'])) { $result = ['Result' => 'ERROR', 'Message' => 'Faltan parámetros']; return json_encode($result); } switch ($parameters['action']) { /* DEPARTMENTS*/ case 'department_list': $result = []; if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $jtStartIndex = isset($jtStartIndex) ? $jtStartIndex : 0; $jtPageSize = isset($jtPageSize) ? $jtPageSize : 10; $jtSorting = isset($jtSorting) ? $jtSorting : 'name ASC'; $result['Result'] = 'OK'; $result['Records'] = Department::getPaginateDepartments($jtStartIndex, $jtPageSize, $jtSorting); $result['TotalRecordCount'] = Department::getAllDepartmentsCount(); return $result; break; case 'department': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $result = []; $result['Result'] = Department::getDepartmentDetail($department); $result['Message'] = 'OK'; return $result; break; case 'department_create': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $result = []; $userId = User::getUserId(); $result['Record'] = Department::createDepartment($name, $status, $userId); $result['Result'] = 'OK'; return $result; break; case 'department_update': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } $tmpArray = $parameters; extract($parameters); $result = []; $result['Records'] = Department::updateDepartmentDetail($id, $name, $status); $result['Result'] = 'OK'; return $result; break; case 'department_delete': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $result = []; $result['Records'] = Department::deleteDepartmentDetail($id); $result['Result'] = 'OK'; return $result; break; /* TOWNS*/ /* TOWNS*/ case 'town_create': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $result = []; $userId = User::getUserId(); $result['Record'] = Town::createTown($townName, $status, $userId, $departmentId); $result['Result'] = 'OK'; return $result; break; case 'town_list': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $jtStartIndex = isset($jtStartIndex) ? $jtStartIndex : 0; $jtPageSize = isset($jtPageSize) ? $jtPageSize : 10; $jtSorting = isset($jtSorting) ? $jtSorting : 'departmentName ASC'; $result = []; $sort = isset($jtSorting) ? $jtSorting : ' ASC'; $result['Records'] = Town::getPaginateTowns($jtStartIndex, $jtPageSize, $jtSorting); $result['Result'] = 'OK'; $result['TotalRecordCount'] = Town::getTotal(); return $result; break; case 'town_update': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } $tmpArray = $parameters; extract($parameters); $result = []; $result['Records'] = Town::updateTownDetail($id, $townName, $departmentId, $status); $result['Result'] = 'OK'; return $result; break; case 'town_delete': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $result = []; $result['Record'] = Town::deleteTownDetail($id); $result['Result'] = 'OK'; return $result; break; /* RESPONSIBLES*/ /* RESPONSIBLES*/ case 'responsible_list': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $jtStartIndex = isset($jtStartIndex) ? $jtStartIndex : 0; $jtPageSize = isset($jtPageSize) ? $jtPageSize : 10; $jtSorting = isset($jtSorting) ? $jtSorting : 'name ASC'; $result = []; $result['Records'] = ResponsibleType::getPaginateResponsibles($jtStartIndex, $jtPageSize, $jtSorting); $result['Result'] = 'OK'; $result['TotalRecordCount'] = ResponsibleType::getTotal(); return $result; break; case 'responsible_create': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $result = []; $userId = User::getUserId(); $result['Record'] = ResponsibleType::createResponsibleType($name, $status); $result['Result'] = 'OK'; return $result; break; case 'responsible_update': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $result = []; $result['Records'] = ResponsibleType::updateResponsibleType($id, $name, $status); $result['Result'] = 'OK'; return $result; break; case 'responsible_delete': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $result = []; $result['Record'] = ResponsibleType::deleteResponsibleType($id); $result['Result'] = 'OK'; return $result; break; /* DISEASE*/ /* DISEASE*/ case 'disease_list': $result = []; if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $jtStartIndex = isset($jtStartIndex) ? $jtStartIndex : 0; $jtPageSize = isset($jtPageSize) ? $jtPageSize : 10; $jtSorting = isset($jtSorting) ? $jtSorting : 'name ASC'; $result['Records'] = DiseaseType::getPaginateDiseaseType($jtStartIndex, $jtPageSize, $jtSorting); $result['Result'] = 'OK'; $result['TotalRecordCount'] = DiseaseType::getTotal(); return $result; break; case 'disease_create': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $result = []; $userId = User::getUserId(); $result['Record'] = DiseaseType::createDiseaseType($name, $status, $userId); $result['Result'] = 'OK'; return $result; break; case 'disease_update': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $result = []; $result['Records'] = DiseaseType::updateDisease($id, $name, $status); $result['Result'] = 'OK'; return $result; break; case 'disease_delete': if (!User::isLogged()) { $result = ['Result' => 'ERROR', 'Message' => 'No esta loguedo']; } extract($parameters); $result = []; $result['Record'] = DiseaseType::deleteDiseaseType($id); $result['Result'] = 'OK'; return $result; break; default: $result = []; $result['Result'] = 'ERROR'; $result['Message'] = 'Acción no definida'; return json_encode($result); } }
?> <?php echo $form->field($model, 'amount')->textInput(); ?> <?php echo $form->field($model, 'latitude')->textInput(); ?> <?php echo $form->field($model, 'longitude')->textInput(); ?> <?php echo $form->field($model, 'source_id')->dropDownList(Town::getSourceList()); ?> <div class="form-group"> <?php echo Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']); ?> </div> <?php ActiveForm::end(); ?> </div>
/** * @return \yii\db\ActiveQuery */ public function getTowns() { return $this->hasMany(Town::className(), ['source_id' => 'id']); }
protected function parseTenders(Client $client, Crawler $crawler) { $repeatSensor = 0; $contractsNum = 0; $crawler->filter('div.registerBox')->each(function (Crawler $node, $i) use($client, &$repeatSensor, &$contractsNum) { $systemId = str_replace('№ ', '', trim($node->filter('td.descriptTenderTd > dl > dt > a')->text())); $organizationNode = $node->filter('dd.nameOrganization > a'); $organizationName = trim($organizationNode->text()); $organizationUrl = trim($organizationNode->attr('href')); //Log::info('Node data', [$node->html()]); $contractName = trim($node->filter('td.descriptTenderTd > dl > dd')->eq(1)->text()); $contractUrl = $node->filter('td.descriptTenderTd > dl > dt > a')->attr('href'); $contractType = trim($node->filter('td.tenderTd > dl > dt')->eq(0)->text()); $contractStatus = ''; /*Log::info('Обработка нового контракта', [ 'org_name' => $organizationName, 'org_url' => $organizationUrl, 'name' => $contractName, 'url' => $contractUrl ]);*/ $contract = Contract::where('system_id', $systemId)->first(); if (!$contract) { $repeatSensor = 0; // Search organization in database $organization = Organization::where('url', $organizationUrl)->first(); if (!$organization) { //Log::info('Организация не найдена, добавляем в базу.'); $organization = new Organization(); $organization->name = $organizationName; $organization->url = $organizationUrl; $this->info($organizationUrl); $organizationResponse = $client->get($organizationUrl); $organizationCrawler = new Crawler((string) $organizationResponse->getBody()); //Log::info('Информация по организации загружена.'); // Federal Law 223 if (preg_match("/223\\/ppa/", $organizationUrl)) { $organizationCrawler->filter('div.noticeTabBoxWrapper > table tr')->each(function (Crawler $row, $j) use(&$organization) { if ($row->children('td')->count() > 1) { $nameColumn = trim($row->children('td')->eq(0)->text()); $valueColumn = trim($row->children('td')->eq(1)->text()); if ($valueColumn) { switch ($nameColumn) { case 'Уровень организации': $organization->level = $valueColumn; break; case 'ИНН': $organization->inn = $valueColumn; break; case 'КПП': $organization->kpp = $valueColumn; break; case 'ОГРН': $organization->ogrn = $valueColumn; break; case 'ОКАТО': $organization->okato = $valueColumn; break; case 'Адрес (место нахождения)': $addresses = array_map(function ($value) { return trim($value); }, explode(',', $valueColumn)); $address = collect($addresses); $address->forget('Российская Федерация'); $organization->postal_code = $address[0]; $organization->country_id = 1; $country = Country::find(1); if (isset($address[3])) { $region = Region::where('name', $address[2])->where('country_id', $country->id)->first(); if (!$region) { $region = Region::create(['country_id' => $country->id, 'name' => $address[2]]); } $town = Town::where('name', $address[3])->where('region_id', $region->id)->first(); if (!$town) { $town = Town::create(['region_id' => $region->id, 'name' => $address[3]]); } $organization->region_id = $region->id; $organization->town_id = $town->id; } $organization->address = $valueColumn; break; case 'Телефон': $organization->contact_phone = $valueColumn; break; case 'Факс': $organization->contact_fax = $valueColumn; break; case 'Почтовый адрес': $organization->contact_address = $valueColumn; break; case 'Контактное лицо': $organization->contact_name = $valueColumn; break; case 'Адрес электронной почты для системных уведомлений': $organization->contact_email = $valueColumn; break; } } } }); } else { $organizationCrawler->filter('td.icePnlTbSetCnt table tr')->each(function (Crawler $row, $j) use($organization) { if ($row->children('td')->count() > 1) { $nameColumn = trim($row->children('td')->eq(0)->text()); $valueColumn = trim($row->children('td')->eq(1)->text()); if ($valueColumn) { switch ($nameColumn) { case 'Уровень организации': $organization->level = $valueColumn; break; case 'ИНН': $organization->inn = $valueColumn; break; case 'КПП': $organization->kpp = $valueColumn; break; case 'ОГРН': $organization->ogrn = $valueColumn; break; case 'ОКАТО': $organization->okato = $valueColumn; break; case 'Место нахождения': $address = array_map(function ($value) { return trim($value); }, explode(',', $valueColumn)); $this->info($valueColumn); $organization->postal_code = $address[1]; $country = Country::where('name', 'Российская Федерация')->first(); $region = Region::where('name', $address[2])->where('country_id', $country->id)->first(); if (!$region) { $region = Region::create(['country_id' => $country->id, 'name' => $address[2]]); } if (isset($address[3])) { $town = Town::where('name', $address[3])->where('region_id', $region->id)->first(); if (!$town) { $town = Town::create(['region_id' => $region->id, 'name' => $address[3]]); } } $organization->country_id = $country->id; $organization->region_id = $region->id; $organization->town_id = isset($town) ? $town->id : null; $organization->address = $valueColumn; break; case 'Телефон': $organization->contact_phone = $valueColumn; break; case 'Факс': $organization->contact_fax = $valueColumn; break; case 'Почтовый адрес': $organization->contact_address = $valueColumn; break; case 'Контактное лицо': $organization->contact_name = $valueColumn; break; case 'Контактный адрес электронной почты': $organization->contact_email = $valueColumn; break; } } } }); } //dd($organization); $organization->save(); //Log::info('Организация добавлена в базу.'); $this->info('Organization ' . $organizationName); } else { //Log::info('Организация найдена в базе.'); } //Log::info('Переходим на страницу контракта.'); $contractResponse = $client->get($contractUrl); $contractCrawler = new Crawler((string) $contractResponse->getBody()); //Log::info('Страница контракта загружена.'); $contract = new Contract(); $contract->organization_id = $organization->id; $contract->system_id = $systemId; $contract->name = $contractName; $contract->link = $contractUrl; $contract->status = $contractStatus; $contract->type = $contractType; $price = str_replace(',', '.', preg_replace("/([^0-9\\.\\,]*)/", '', trim($node->filter('td.tenderTd > dl > dd')->eq(1)->text()))); $contract->price = $price; // Federal Law 223 $contractCrawler->filter('div.noticeTabBoxWrapper > table tr')->each(function (Crawler $row, $j) use($contract, $contractUrl) { if ($row->filter('td')->count() > 1) { $nameColumn = trim($row->filter('td')->eq(0)->text()); $valueColumn = trim($row->filter('td')->eq(1)->text()); if (!$valueColumn) { return; } if (preg_match("/223\\/purchase/", $contractUrl)) { if (preg_match('/подачи заявок/i', $nameColumn)) { preg_match("/(\\d{2}\\.\\d{2}\\.\\d{4}\\sв\\s\\d{2}:\\d{2})/ui", $valueColumn, $date); if (!isset($date[1])) { return; } $valueColumn = str_replace('в', '', $date[1]); $finishDate = new Carbon($valueColumn); $contract->finished_at = $finishDate; } elseif (preg_match('/подведения итогов/i', $nameColumn)) { preg_match("/(\\d{2}[\\.]{1}\\d{2}[\\.]{1}\\d{4}[ ]{1}[в]{1}[ ]{1}\\d{2}:\\d{2})/ui", $valueColumn, $date); if (!isset($date[1])) { return; } $valueColumn = str_replace('в', '', $date[1]); $resultDate = new Carbon($valueColumn); $contract->results_at = $resultDate; } } else { if (preg_match('/Дата и время окончания подачи заявок/i', $nameColumn) || preg_match('/Дата и время окончания подачи котировочных заявок/i', $nameColumn)) { $valueColumn = str_replace('в', '', $valueColumn); $finishDate = new Carbon($valueColumn); $contract->finished_at = $finishDate; } elseif (preg_match('/Дата проведения аукциона в электронной форме/i', $nameColumn) || preg_match('/Дата и время вскрытия конвертов с заявками/i', $nameColumn)) { // Не ставим точную дату, так как скрипт проверять будет на следующий день $valueColumn = str_replace('в', '', $valueColumn); $resultDate = new Carbon($valueColumn); $contract->results_at = $resultDate; } } } }); $contract->save(); $contractsNum++; $this->info('Контракт ' . $systemId . ' ' . $contractName); Log::info('Контракт сохранен в базу.'); } else { $repeatSensor++; Log::info('Контракт найден в базе.'); } usleep(rand(200, 2000) * 1000); // sleep for random time }); return $contractsNum; }