BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 28 мар 2024, 22:55

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: 03 фев 2010, 17:52 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
Суть такова ...
Как то надо было сконвертировать довольно большую базу юзеров из старого (не 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. Код писался давно (все руки не доходили откоментить и выложить :() и на скорую руку, поэтому особо не судите за то что нет кнопочки "сконвертировать", т.к. писалось для одноразового использования, за то что я что-то забыл упомянуть, т.к. пропросту подзабыл ну или за что-то еще ...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 фев 2010, 18:27 
Не в сети
Аватара пользователя

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

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 фев 2010, 19:05 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
когда я писал "универсальный", я имел ввиду что он делает всего лишь одно - он может взять из А, положить в Б и все это несложно переделать под себя ... все довольно легко изменить прежде всего благодаря языку (пхп для освоения пороще чем ява будет), а т.к. там еще и либа для работы с БД сама решает что и как в БД ложить, то типизацией человек вообще может не забивать себе голову :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 апр 2010, 16:48 
Не в сети

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 апр 2010, 12:35 
Не в сети
Аватара пользователя

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

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 апр 2010, 16:20 
Не в сети

Зарегистрирован: 17 ноя 2009, 08:47
Сообщения: 215
Откуда: krsn
Карма: 48
написали бы скрипт для переноса баланса из 4.5 в 4.6 ;)

_________________
Изображение
using billingClient.BGB 4.6;
using server.Ubuntu server 9.10;
using server.Java "1.6.0_15";
using client.Ubuntu 10.04;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 апр 2010, 16:24 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
nolka4 писал(а):
написали бы скрипт для переноса баланса из 4.5 в 4.6 ;)

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.109s | 32 Queries | GZIP : On ]