forum.bitel.ru
http://forum.bitel.ru/

Универсальный конвертер в БГБ (dialup)
http://forum.bitel.ru/viewtopic.php?f=25&t=3529
Страница 1 из 1

Автор:  snark [ 03 фев 2010, 17:52 ]
Заголовок сообщения:  Универсальный конвертер в БГБ (dialup)

Суть такова ...
Как то надо было сконвертировать довольно большую базу юзеров из старого (не stasoft-овского!) nibs-а в БГБ, в результате чего и родился этот конвертер.
Почему "универсальный"? Потому что чуть поправив код можно конвертировать в БГБ практически все что угодно :)

Хочу предупредить сразу - это писалось и отработало для БГБ версии 4.5, поэтому если Вы решили использовать конвертер для свежеустановленной 4.6 или 5.0 - конвертер не сработает! Выхода 2: либо ставить 4.5, конвертировать и делайть апгрейд, либо править запросы в коде конвертера.

Итак, есть БД следующего вида:
Код:
-- таблица с тарифами
CREATE TABLE packets (
  gid smallint(5) unsigned NOT NULL auto_increment, # ID тарифа, на его основе
                                                    # тарифы будут приравнены к тарифам в БГБ
  -- ... --
  tos tinyint(1) NOT NULL default '0',              # комбинация двух этих полей
  do_with_tos tinyint(1) NOT NULL default '1',      # отвечает за "пред" и "пост" оплату
  -- ... --
) TYPE=MyISAM;

-- --------------------------------------------------------

-- таблица с юзерами
CREATE TABLE users (
  uid smallint(5) unsigned NOT NULL auto_increment, # ID пользователя
  gid smallint(5) unsigned NOT NULL default '1',    # тариф пользователя
  user varchar(64) NOT NULL default '',             # логин пользователя - в БГБ это номер (не id!) договора и алиас в dialup
  password varchar(64) NOT NULL default '',         # пароль - в БГБ это будет пароль на доступ к статистике и пароль логина/алиаса в dialup
  deposit double(12,6) NOT NULL default '0.000000', # деньги на счету - в БГБ это будет входящий остаток
  add_date date NOT NULL default '0000-00-00',      # дата создания логина - в БГБ это дата начала действия договора
  -- ... --
) TYPE=MyISAM;

которую надо конвертнуть в БГБ. Для этого в БГБ создаем минимум 2 шаблона для договоров - для "пред" и "пост" оплаты, т.е. с режимами "дебет и "кредит", в которых указываем услуги, тарифы и т.д. и т.п., т.е. делаем все так как будто никакого конвертера нет и в помине, т.к. конвертер сам будет брать юзера из нибса и создавать в БГБ договор на основе шаблона тем самым привязывая услуги, устанавливая тарифы и т.д. ... единственное что не будет делать конвертер - брать название договора из шаблона, т.к. названием договора будет служить логин из нибса. Почему? Нибс - это похаканный rlm_sql для FreeRADIUS, а там конвергенции - ноль, там юзер = логин. Итак, Вы все создали. Что дальше? Дальше надо в БД нибса создать таблицу которая будет служить стоп-краном останавливающим повторную конвертацию:
Код:
CREATE TABLE IF NOT EXISTS db_convert (
  done tinyint(1) unsigned NOT NULL default '0'
) ENGINE=MyISAM;

INSERT INTO db_convert VALUES (0);

После чего открываете convert.php и в нем:
  • редактируете параметры подключения к БД:
    Код:
    // БД старого биллинга
    define('OLD_DB_TYPE', 'mysql');
    define('OLD_DB_HOST', 'localhost');
    define('OLD_DB_NAME', 'nibs_bill');
    define('OLD_DB_USER', 'root');
    define('OLD_DB_PASS', '');

    // БД нового биллинга
    define('NEW_DB_TYPE', 'mysql');
    define('NEW_DB_HOST', 'localhost');
    define('NEW_DB_NAME', 'bgbilling');
    define('NEW_DB_USER', 'bill');
    define('NEW_DB_PASS', 'bgbilling');

    т.к. данные лежали в KOI8-R, а ложить их надо было в cp-1251, то появилось это:
    Код:
    $OLD_DB->query('SET NAMES koi8r');
    $NEW_DB->query('SET NAMES cp1251');

    поправьте кодировку старой БД под Ваши нужды, при этом кодировку для БГБ трогать не надо!
  • там есть такая хитрая "табличка" которая Вам ОЧЕНЬ нужна
    Код:
    if ($gid == 1)  $tpid = 7;
    if ($gid == 4)  $tpid = 8;
    if ($gid == 5)  $tpid = 8;
    if ($gid == 6)  $tpid = 10;
    if ($gid == 7)  $tpid = 4;
    if ($gid == 8)  $tpid = 9;
    if ($gid == 10) $tpid = 8;
    if ($gid == 11) $tpid = 7;
    if ($gid == 13) $tpid = 7;
    if ($gid == 14) $tpid = 6;
    if ($gid == 15) $tpid = 5;
    if ($gid == 16) $tpid = 11;

    она скажет конвертеру какой именно id старого тарифа является новым id тарифа в БГБ
  • еще там есть такой параметр
    Код:
    $date_convert = '2009-01-01';

    это дата которую конвертер проставляет в куче мест, уже и не упомню где именно :( посмотрите код - все увидите
После того как все сделано - заливаете конвертер на сервер где есть php с поддержкой mysql, а если такого нет - можно запросто воспользоваться Денвером, открываете в браузере http://some.site.ru/convert.php, немного ждете и ... и идете проверять чего получилось ;)

Замечания? Вопросы? Предложения? Пишите!

P.S. Код писался давно (все руки не доходили откоментить и выложить :() и на скорую руку, поэтому особо не судите за то что нет кнопочки "сконвертировать", т.к. писалось для одноразового использования, за то что я что-то забыл упомянуть, т.к. пропросту подзабыл ну или за что-то еще ...

Автор:  dimOn [ 03 фев 2010, 18:27 ]
Заголовок сообщения:  Re: Универсальный конвертер в БГБ (dialup)

Клёво! Но вот у нас таких "универсальных: подправил где надо и пользуй" конвертеров куча :) Многие из них лежат в вики. Пишется под каждого случая отдельно. Потому что конкретно очень сложно написать универсальное что-то, при этом более-менее функциональное. Пробовали :)

Автор:  snark [ 03 фев 2010, 19:05 ]
Заголовок сообщения:  Re: Универсальный конвертер в БГБ (dialup)

когда я писал "универсальный", я имел ввиду что он делает всего лишь одно - он может взять из А, положить в Б и все это несложно переделать под себя ... все довольно легко изменить прежде всего благодаря языку (пхп для освоения пороще чем ява будет), а т.к. там еще и либа для работы с БД сама решает что и как в БД ложить, то типизацией человек вообще может не забивать себе голову :)

Автор:  Fate [ 11 апр 2010, 16:48 ]
Заголовок сообщения:  Re: Универсальный конвертер в БГБ (dialup)

dimOn писал(а):
Клёво! Но вот у нас таких "универсальных: подправил где надо и пользуй" конвертеров куча :) Многие из них лежат в вики. Пишется под каждого случая отдельно. Потому что конкретно очень сложно написать универсальное что-то, при этом более-менее функциональное. Пробовали :)

А можно эту кучу посмотреть? На вики для 5.0 только один конвертер, и то в нем нет переноса баланса пользователя...

Автор:  dimOn [ 12 апр 2010, 12:35 ]
Заголовок сообщения:  Re: Универсальный конвертер в БГБ (dialup)

Fate писал(а):
А можно эту кучу посмотреть? На вики для 5.0 только один конвертер, и то в нем нет переноса баланса пользователя...
Ну так доделайте :roll: Перенос баланса - не самая сложная вещь.
Про "кучу" было упомянуто не в том смысле, что их много универсальных под все случаи и для каждого формата данных, а к тому, что под каждого клиента пишутся отдельные. Посмотреть скорее нельзя, потому что много смысла для вас не будет никакого, а выкладывать всё - это будет путано как-то.

Автор:  nolka4 [ 12 апр 2010, 16:20 ]
Заголовок сообщения:  Re: Универсальный конвертер в БГБ (dialup)

написали бы скрипт для переноса баланса из 4.5 в 4.6 ;)

Автор:  stark [ 12 апр 2010, 16:24 ]
Заголовок сообщения:  Re: Универсальный конвертер в БГБ (dialup)

nolka4 писал(а):
написали бы скрипт для переноса баланса из 4.5 в 4.6 ;)

написали что ? версия 4.5 и 4.6 обращается у одной и той же таблице .

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/