Скрипт заполнения домов в UTM5
-
- Сообщения: 8
- Зарегистрирован: Вт дек 01, 2015 14:12
Скрипт заполнения домов в UTM5
меня в понедельник попросили написать скрипт который бы заполнил таблицу houses и применил бы houses.id к users.house_id, а так же удалил users.actual_address. Может кому-то понабиться. Ссылка на гит: <br />
https://github.com/rasskazovaleksey/Utm ... ideUpdater
https://github.com/rasskazovaleksey/Utm ... ideUpdater
-
- Сообщения: 8
- Зарегистрирован: Вт дек 01, 2015 14:12
А что в логах пишет? Если в Config::$debug выставить true; как я понимаю запросов нет потому что нет точного совпадения На примере предыдущего, (могу только предположить) что сравнивается строка что естественно не равно, поэтому самым простым вариантом в Processor::matchUserAdressWithHouseId() просто подправить сравнение под ваши нужды.
Код: Выделить всё
" UPDATE users SET house_id=" . $house->getId() . " WHERE is_deleted=0 AND id=" . $user->getId() . ";";"
Код: Выделить всё
users.actual_adress и $var1 = $house->getStreet() . " " . $house->getNumber() . $house->getBuilding();
Код: Выделить всё
"Полеводческая 6" со строкой "г. Михайловск, ул. Полеводческая, д. 6"
Что нужно изменить? Мы предоставляем услуги в нескольких городах и нам нужно соответствие не только по улицам, но и по городам. Еще есть проблема, которая заключается в тои, что к номеру дома добавлена где-то "д", где-то "д.", где-то "д. ", а где-то "дом". А так же литеры домов тоже записаны по разному, где через "/", где-то через пробел, где-то просто слитно с адресом? В общем, каждый менеджер вносил свою лепту.
-
- Сообщения: 8
- Зарегистрирован: Вт дек 01, 2015 14:12
Проблема в не статичном написании адресов в таблице users (у нас такого с "новыми" пользователями такого не было, потому простое сравнение сработало на ура). Самым простом вариантом я могу предложить переписать метод Processor::matchUserAdressWithHouseId($house, $user) который бы покрыл большинство вариантов раздразни в написании user.actuall_adress к примеру так
все что совсем не форматно, поправил бы в БД руками. Резюмируя, мой совет просто немного переписать под большинство вариантов написания метод Processor::matchUserAdressWithHouseId($house, $user)
Код: Выделить всё
public static function matchUserAdressWithHouseId($house, $user) {
$var1 = "г." . $house->getCity() . ", ул. " . $house->getStreet() . ", д. " . $house->getNumber() . $house->getBuilding();
$var2 = "г." . $house->getCity() . ", ул. " . $house->getStreet() . ", д. " . $house->getNumber() . " " . $house->getBuilding();
$var3 = "г." . $house->getCity() . ", ул. " . $house->getStreet() . ", дом " . $house->getNumber() . " " . $house->getBuilding();
//etc
$old_address = $user->getActualAddress();
if (strcasecmp($var1, $old_address) == 0 || strcasecmp($var2, $old_address) == 0 || strcasecmp($var1, $old_address) == 0) {
Logger::log("DEBUG: user " . print_r($user, true) . " is leaving in $var2");
return true;
}
return false;
}
-
- Сообщения: 8
- Зарегистрирован: Вт дек 01, 2015 14:12
Если вы напишите варианты написания адресов из user.acctual_adresses я перепишу метод сравнения для вас. Но поймите правильно, я писал скрипт под стандартизацию, для удаления девиаций, поэтому остатки все равно придется править руками. Покройте, вариантами описаний сравнений хотя бы 90%. Спасибо за внимание, вариации можно в личку.
-
- Сообщения: 8
- Зарегистрирован: Вт дек 01, 2015 14:12
Как я понимаю в users.actual_address запись стоит г.Нск, ул.Иванова д.51/2. В файле для парсинга 111111;Россия;Нская;Нск;Иванова;51;2;1466512032;1;0
если я прав то проблема такая же и прошлом случае и решений 2
1) поправить Processor::matchUserAdressWithHouseId($house, $user) под свои нужды, приблизительно так
2) или если таких вариантов не много(а вариантов домов с дробью немного априори) просто сделать запись в ручную в houses и исправить users.house_id
если я прав то проблема такая же и прошлом случае и решений 2
1) поправить Processor::matchUserAdressWithHouseId($house, $user) под свои нужды, приблизительно так
Код: Выделить всё
$varN = "г." . $house->getCity() . ", ул. " . $house->getStreet() . " д." . $house->getNumber() . "/" . $house->getBuilding();
и потом в if(..code ||strcasecmp($varN, $old_address) == 0|| code.. )