Скрипт заполнения домов в UTM5

Вопросы по сопутствующим продуктам производства партнеров
Ответить
lovestocode
Сообщения: 8
Зарегистрирован: Вт дек 01, 2015 14:12

Скрипт заполнения домов в UTM5

Сообщение lovestocode »

меня в понедельник попросили написать скрипт который бы заполнил таблицу houses и применил бы houses.id к users.house_id, а так же удалил users.actual_address. Может кому-то понабиться. Ссылка на гит: <br />
https://github.com/rasskazovaleksey/Utm ... ideUpdater

sunrise
Сообщения: 5
Зарегистрирован: Вт июл 12, 2016 17:26

Сообщение sunrise »

Сделал по инструкции, адреса в справочник заносит, но не соотносит их с пользователями. Можете помочь?

sunrise
Сообщения: 5
Зарегистрирован: Вт июл 12, 2016 17:26

Сообщение sunrise »

Адреса в билинге записаны в таком виде:

г. Михайловск, ул. Полеводческая, д. 6
г. Михайловск, ул. Почтовая, д. 79 А
г. Михайловск, ул. Почтовая, д. 79А

Как правильно их записать в adresses.cvs, чтобы они соотносились с пользователями?

lovestocode
Сообщения: 8
Зарегистрирован: Вт дек 01, 2015 14:12

Сообщение lovestocode »

А что в логах пишет? Если в Config::$debug выставить true; как я понимаю запросов

Код: Выделить всё

" UPDATE users SET house_id=" . $house->getId&#40;&#41; . " WHERE is_deleted=0 AND id=" . $user->getId&#40;&#41; . ";";"
нет потому что нет точного совпадения

Код: Выделить всё

users.actual_adress и $var1 = $house->getStreet&#40;&#41; . " " . $house->getNumber&#40;&#41; . $house->getBuilding&#40;&#41;;
На примере предыдущего, (могу только предположить) что сравнивается строка

Код: Выделить всё

"Полеводческая 6" со строкой "г. Михайловск, ул. Полеводческая, д. 6"
что естественно не равно, поэтому самым простым вариантом в Processor::matchUserAdressWithHouseId() просто подправить сравнение под ваши нужды.

sunrise
Сообщения: 5
Зарегистрирован: Вт июл 12, 2016 17:26

Сообщение sunrise »

Что нужно изменить? Мы предоставляем услуги в нескольких городах и нам нужно соответствие не только по улицам, но и по городам. Еще есть проблема, которая заключается в тои, что к номеру дома добавлена где-то "д", где-то "д.", где-то "д. ", а где-то "дом". А так же литеры домов тоже записаны по разному, где через "/", где-то через пробел, где-то просто слитно с адресом? В общем, каждый менеджер вносил свою лепту.

lovestocode
Сообщения: 8
Зарегистрирован: Вт дек 01, 2015 14:12

Сообщение lovestocode »

Проблема в не статичном написании адресов в таблице users (у нас такого с "новыми" пользователями такого не было, потому простое сравнение сработало на ура). Самым простом вариантом я могу предложить переписать метод Processor::matchUserAdressWithHouseId($house, $user) который бы покрыл большинство вариантов раздразни в написании user.actuall_adress к примеру так

Код: Выделить всё

public static function matchUserAdressWithHouseId&#40;$house, $user&#41; &#123;
        $var1 = "г." . $house->getCity&#40;&#41; . ", ул. " . $house->getStreet&#40;&#41; . ", д.  " . $house->getNumber&#40;&#41; . $house->getBuilding&#40;&#41;;
        $var2 = "г." . $house->getCity&#40;&#41; . ", ул. " . $house->getStreet&#40;&#41; . ", д.  " . $house->getNumber&#40;&#41; . " " . $house->getBuilding&#40;&#41;;
        $var3 = "г." . $house->getCity&#40;&#41; . ", ул. " . $house->getStreet&#40;&#41; . ", дом  " . $house->getNumber&#40;&#41; . " " . $house->getBuilding&#40;&#41;;
//etc
        $old_address = $user->getActualAddress&#40;&#41;;
        if &#40;strcasecmp&#40;$var1, $old_address&#41; == 0 || strcasecmp&#40;$var2, $old_address&#41; == 0 || strcasecmp&#40;$var1, $old_address&#41; == 0&#41; &#123;
            Logger&#58;&#58;log&#40;"DEBUG&#58; user " . print_r&#40;$user, true&#41; . " is leaving in $var2"&#41;;
            return true;
        &#125;



        return false;
    &#125;
все что совсем не форматно, поправил бы в БД руками. Резюмируя, мой совет просто немного переписать под большинство вариантов написания метод Processor::matchUserAdressWithHouseId($house, $user)

lovestocode
Сообщения: 8
Зарегистрирован: Вт дек 01, 2015 14:12

Сообщение lovestocode »

Если вы напишите варианты написания адресов из user.acctual_adresses я перепишу метод сравнения для вас. Но поймите правильно, я писал скрипт под стандартизацию, для удаления девиаций, поэтому остатки все равно придется править руками. Покройте, вариантами описаний сравнений хотя бы 90%. Спасибо за внимание, вариации можно в личку.

sunrise
Сообщения: 5
Зарегистрирован: Вт июл 12, 2016 17:26

Сообщение sunrise »

Спасибо, сработало. Сам поправил. Если у кого есть такая проблема, могу скинуть варианты. У меня их получилось - 27.

torrus
Сообщения: 73
Зарегистрирован: Чт фев 02, 2012 16:10
Откуда: Александров
Контактная информация:

Сообщение torrus »

За скрипт спасибо большое. Вот только ещё вопрос есть. Как сделать,чтобы совпадение было по номедома/корпус? Т.е фактический адрес так выглядит : г.Нск, ул.Иванова д.51/2 .Вот дом 51 корпус 2 никак не могу допетрить,как сделать чтобы совпадало и пользователь соотносился к этому адресу?

lovestocode
Сообщения: 8
Зарегистрирован: Вт дек 01, 2015 14:12

Сообщение lovestocode »

Как я понимаю в users.actual_address запись стоит г.Нск, ул.Иванова д.51/2. В файле для парсинга 111111;Россия;Нская;Нск;Иванова;51;2;1466512032;1;0
если я прав то проблема такая же и прошлом случае и решений 2
1) поправить Processor::matchUserAdressWithHouseId($house, $user) под свои нужды, приблизительно так

Код: Выделить всё

$varN = "г." . $house->getCity&#40;&#41; . ", ул. " . $house->getStreet&#40;&#41; . " д." . $house->getNumber&#40;&#41; . "/" . $house->getBuilding&#40;&#41;; 

и потом в if&#40;..code ||strcasecmp&#40;$varN, $old_address&#41; == 0|| code.. &#41;
2) или если таких вариантов не много(а вариантов домов с дробью немного априори) просто сделать запись в ручную в houses и исправить users.house_id

Ответить