Биллинговая система Nodeny

Главная категория => Nodeny Plus => Тема начата: Dimasik от 07 Декабря 2016, 00:49:12



Название: Вопрос по разработке доп.плюшек....
Отправлено: Dimasik от 07 Декабря 2016, 00:49:12
Вопрос к Стасу(переавторизируй уже меня в скайпе), но может кто-то тоже знает:
вот к примеру меняем мы напрямую в БД какието параметры юзера - разрешаем ему доступ или услугу подключаем или параметры услуги меняем.
а надо ли запускать какие-то процедуры в биллинге(которые на перле) для того чтобы эти изменения начали работать?
что-то типа перезапуск ядра или команда перечитать настройки? или изменений в БД достаточно а биллинг сам периодически(какой период?) перечитывает данные и засылает обновления в саттелиты?


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: Tooreagen от 07 Декабря 2016, 08:32:59
Менял услугу на другую, с той же стоимостью. Проблем не было.


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: Pa4ka от 07 Декабря 2016, 09:17:18
изменения напрямую в БД делал по услугам
perl noserver.pl перечитывает их постоянно и все верно работает


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: Dimasik от 07 Декабря 2016, 16:43:08
т.е. достаточно менять данные в БД и биллинг сам все подхватит?


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: Pa4ka от 07 Декабря 2016, 17:31:48
т.е. достаточно менять данные в БД и биллинг сам все подхватит?
зависит от того что менять


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: Dimasik от 07 Декабря 2016, 18:43:07
т.е. достаточно менять данные в БД и биллинг сам все подхватит?
зависит от того что менять
а где почитать про эти зависимости?


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: Pa4ka от 08 Декабря 2016, 08:52:50
т.е. достаточно менять данные в БД и биллинг сам все подхватит?
зависит от того что менять
а где почитать про эти зависимости?
ну что именно вас интересует мож подскажут


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: Dimasik от 08 Декабря 2016, 12:04:47
т.е. достаточно менять данные в БД и биллинг сам все подхватит?
зависит от того что менять
а где почитать про эти зависимости?
ну что именно вас интересует мож подскажут
цепочка событий такая: создание нового юзера - добавление тарифа - добавление оплаты - активация доступа


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: Tooreagen от 09 Декабря 2016, 10:01:33
т.е. достаточно менять данные в БД и биллинг сам все подхватит?
зависит от того что менять
а где почитать про эти зависимости?
ну что именно вас интересует мож подскажут
цепочка событий такая: создание нового юзера - добавление тарифа - добавление оплаты - активация доступа


Почему бы это не сделать стандартным способом? Слишком много таблиц затронет данная процедура. Тут я думаю нужно вам код изучать, что и как происходит во время добавления клиента.


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: pala от 09 Декабря 2016, 19:52:59
Здравствуйте, делали подобный скрипт для перевода людей  с Абилса на Nodeny. Используются запросы к базе слейдущего характера: (Фрагмент скрипта касающийся запросов)

######Создаем пользователя
$STHnodeny = $DBnodeny->prepare("insert into users (name, passwd, grp, contract, contract_date, block_if_limit, fio, discount) values ('Логин', AES_ENCRYPT('пароль', 'Слово шифрования по дефолту из мануала - hardpass'), 1, 'Номер договора', unix_timestamp('дата контракта'), 1, 'ФИО абонента', 'Скидка')");
$STHnodeny->execute;

#### Ищем его UID по созданому нами логину
$STHnodeny = $DBnodeny->prepare("select id from users where name='Логин'");
$STHnodeny->execute;

#Заполняем доп поля

$STHnodeny = $DBnodeny->prepare("insert into data0 (uid, _adr_house, _adr_room, _adr_telefon, и т. д.) values ('Uid абона', 'Адрес дома', 'Квартира', 'Телефон' 'и т.д.' )
 $STHnodeny->execute;

####Cоздаем запись такого вида для нашого ЮЗВЕРЯ - необходимо что-бы считался трафик
$STHnodeny = $DBnodeny->prepare("INSERT INTO users_trf SET uid=Uid абона");
$STHnodeny->execute;

Переводим ip нашего деятеля-админа от чеево имени будет все это крутится в формат для записи в mysql
my $ipaddr = $ENV{'REMOTE_ADDR'};
my $int_ip =  unpack('N', pack('C4', split /\./, $ipaddr));

### Пишем события в историю. В нашем случае пишется просто Transfer from Abills system;
$STHnodeny = $DBnodeny->prepare("INSERT INTO pays SET category=Категория по которой будет идти обработка билингом. (Можно посмотреть в разделе платежи нажав кнопку Info. Меняется в зависимости от типа записи), mid=Uid абона, time=UNIX_TIMESTAMP(), creator_id=2, reason=1, comment='Transfer from Abills system', creator_ip=$int_ip");
$STHnodeny->execute;

### Вешаем услугу с названием Transfer 100. В нашем случае 100 мб за 0 грн. (Пока менеджеры не сделают коректировки чтоб народ не отваливался от инета)
$STHnodeny = $DBnodeny->prepare("INSERT INTO users_services SET uid=Uid абонента, service_id=7, next_service_id=7, tm_start=UNIX_TIMESTAMP(), tm_end=UNIX_TIMESTAMP(),  pay_id='0', tags=',inet,speed,'");
$STHnodeny->execute;


Как то так. Косяков не наблюдалось Все работает корректно. Может вам чем-то и пригодится.

По поводу добавления оплат в Mysql вы можете почитать тут              хттп_две точки_два слеша app.nodeny-plus.com.ua/docs/develop/calls.pm.html


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: sever от 14 Декабря 2016, 19:28:47
Здравствуйте, делали подобный скрипт для перевода людей  с Абилса на Nodeny. Используются запросы к базе слейдущего характера: (Фрагмент скрипта касающийся запросов)


А полный скрипт можно? это на перле?


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: pala от 18 Декабря 2016, 20:08:04
Здравствуйте, делали подобный скрипт для перевода людей  с Абилса на Nodeny. Используются запросы к базе слейдущего характера: (Фрагмент скрипта касающийся запросов)


А полный скрипт можно? это на перле?

Да написано все на перле. Впринципе могу сбросить. Логика всей работы и сообственно говоря процеса перевода.

Есть полностью рабочий сателит на Абилсе, тип авторизации PPPoE. Так же на этом сателите поднят АПАЧ. Есть Влан 10 по которому авторизируются клиенты.

И допустим мы решаем сегодня переводить какой-то определенный район Мы загоняем этот 10 влан на тот район и ставим его нативным на клиентов. При попытке зайти на любой http ресурс их редиректит на АПАЧ того же самого сателита. он видит надпись Типо бла бла Перенастройте ваше оборудование на DHCP и инструкции как это делать и кнопка ОЗНАКОМЛЕН. При нажатии на эту кнопку Его автоматом отрубает из Абилса с тэгом "отключено" и создает аккаунт на NoDeny+ И переносит все данные абона. Также ставит ему тарифный План С абонплатой в 0 грн. Что-бы до момента денежных коректировок у него не пропал интернет.   Также Настроено логирование. Видно какой абонент нажал на кнопку И все ли хорошо в двух билингах по поводу этого абонента. И как только в лог-файле появились записи, мы сходу меняем влан с 10 на Влан сателита Nodeny. Абонент переведен))

Если Вам данная реализация пойдет то сброшу в ЛС. Или Вы хотите всю базу скопом перевести ?


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: sever от 19 Декабря 2016, 09:04:13

Если Вам данная реализация пойдет то сброшу в ЛС. Или Вы хотите всю базу скопом перевести ?
В идеале перевести всю базу. В абиллисе 127 таблиц, в nodeny - 37, сопоставить бы всё это...


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: pala от 19 Декабря 2016, 11:55:48
Мы переносим только аккаунт, всю историю по аккаунту переносить не стали. Все старые платежи и история остаются на абиллсе.


Название: Re: Вопрос по разработке доп.плюшек....
Отправлено: sever от 28 Декабря 2016, 13:46:08
Как переносил я абонентов из abills в nodeny+
Т.к. в базе abills uid абонентов пересекались с id в базе нодени, то для новых абонентов я выставлял id+5000
Ибо в abills была привязка id к платежам, так 10 абонент в абиллс имеет id 5010 в nodeny.
В abills улицы были назначены по группам, в nodeny мне не нужно было чтобы каждая улица записывалась в отдельную группу, поэтому используется функция select_street - выбор улиц из групп abills и сопоставление их с _adr_street в nodeny.
Выборка по балансу также есть, но в nodeny его не заносил, не было необходимости.

Код:
#!/usr/bin/env bash

# Func connect to mysql abills
connect_abills () {
mysql -D abills -u root -pPASSWORD -Bse "$1" 2>/dev/null
}

# Func connect to mysql nodeny
connect_nodeny () {
mysql -D nodeny -u root -pPASSWORD -Bse "$1" 2>/dev/null
}

# For new NoDeny+ clients id is (id + 5000)
new_id () {
let add=$1+5000
echo $add
}

# Replace date in mysql format
replace_date () {
connect_nodeny "SELECT UNIX_TIMESTAMP('$1')" 2>/dev/null
}

# Date now in mysql format
time_now () {
connect_nodeny "SELECT UNIX_TIMESTAMP(NOW())" 2>/dev/null
}

uid_enabled="/SCRIPTS/tmp/uid.enabled.txt"
uid_disabled="/SCRIPTS/tmp/uid.disabled.txt"

# Выбор пользователей с активными услугами
connect_abills "SELECT users.uid
       FROM users
       LEFT JOIN users_pi ON (users.uid = users_pi.uid)
       WHERE users.disable=0" > $uid_enabled

# Выбор пользователей, которые уже не получают услуги / отключены физически
connect_abills "SELECT users.uid
       FROM users
       LEFT JOIN users_pi ON (users.uid = users_pi.uid)
       WHERE users.disable=1" > $uid_disabled

# Func выбор улиц из групп abills и сопостовление их с data0 _adr_street в nodeny
select_street () {

STREET=$1

if [ "$STREET" == "Артековская" ]; then
   nd_adr_street="284"
     echo "$nd_adr_street";
elif [ "$STREET" == "Гоголя" ]; then
   nd_adr_street="286"
     echo "$nd_adr_street";
elif [ "$STREET" == "Исполкомовская" ]; then
   nd_adr_street="288"
     echo "$nd_adr_street";
elif [ "$STREET" == "пр. Гагарина" ]; then
   nd_adr_street="306"
     echo "$nd_adr_street";
elif [ "$STREET" == "И т.д. для нужного кол-ва улиц" ]; then
   nd_adr_street="299"
     echo "$nd_adr_street";
   else
   nd_adr_street=""
     echo $nd_adr_street;
fi

}

# Для всех uid которые разрешены
for nodeny_id in $(cat $uid_enabled)
do

# Table users
nd_id=$(connect_abills "select uid from users where uid=${nodeny_id}")
nd_name=$(connect_abills "select id from users where uid=${nodeny_id}")
nd_passwd=`connect_abills "select decode(password,'secret_key') from users where uid=${nodeny_id}"`
nd_grp="5"  # Отдельная группа и её id 5
nd_contract=$(connect_abills "select contract_id from users_pi where uid=${nodeny_id}")
nd_contract_date=$(connect_abills "select contract_date from users_pi where uid=${nodeny_id}")
nd_new_contract_date="$(replace_date $nd_contract_date)"
nd_state="on"
nd_fio="$(connect_abills "select fio from users_pi where uid=${nodeny_id}")"
nd_balance="$(connect_abills "select deposit from bills where uid=${nodeny_id}")"
nd_time_now=$(time_now)

# Table data0
nd_uid="$(connect_abills "select uid from users_pi where uid=${nodeny_id}")"
tmpl_adr_street="$(connect_abills "select address_street from users_pi where uid=${nodeny_id}")"
nd_adr_house="$(connect_abills "select address_build from users_pi where uid=${nodeny_id}")"
nd_adr_room="$(connect_abills "select address_flat from users_pi where uid=${nodeny_id}")"
nd_adr_telefon="$(connect_abills "select phone from users_pi where uid=${nodeny_id}")"
nd_provider="3" # Отдельный провайдер с id=3 в доп поле
nd_new_street=$(select_street $nd_adr_street)

select_street "$tmpl_adr_street"

# Заполняем таблицы в nodeny.
connect_nodeny "
    INSERT into users SET modify_time=UNIX_TIMESTAMP(),
        id='$(new_id $nd_id)',
        name='$nd_name',
        lstate='0',
        limit_balance='0',
        contract='$nd_contract',
        contract_date='$nd_new_contract_date',
        fio='$nd_fio',
        cstate='6',
        grp='5',
        block_if_limit='1',
        state='on',
        cstate_time='$nd_time_now',
        comment='',
        passwd=AES_ENCRYPT('$nd_passwd', 'password key - hardpass');

    DELETE FROM data0 WHERE uid='$(new_id $nd_id)';
    DELETE FROM users_trf WHERE uid='$(new_id $nd_id)';
    DELETE FROM auth_log WHERE uid='$(new_id $nd_id)';
    DELETE FROM users_services WHERE uid='$(new_id $nd_id)';
    DELETE FROM pays WHERE mid='$(new_id $nd_id)';

    INSERT INTO users_trf SET uid='$(new_id $nd_id)',traf4='0';
    UPDATE users SET name='$(new_id $nd_id)1' WHERE id='$(new_id $nd_id)' LIMIT 1;"

# Заполняем таблицу data0 под свои нужды
connect_nodeny "INSERT into data0 (uid, _adr_street,
                           _adr_house, _adr_room,
                           _adr_telefon, _gorod,
                           _adr_place, Sw_port,
                           _olt_numb, _olt_port ,
                           _onu_id, _vlan_custom,
                           _master_id,_provide,
                           _staic_ip,_qinq_vlan)
                        VALUES ( '$(new_id $nd_uid)', '$nd_adr_street',
                                 '$nd_adr_house', '$nd_adr_room' ,
                                 '$nd_adr_telefon',
                                 '12', '',
                                 '', '25',
                                 'newprov','',
                                 '610','master',
                                 '$nd_provider','','3003');"

# Устанавливаем коментарий что это Transfer from Abills, можно не делать
connect_nodeny "INSERT INTO pays (mid,time,creator,creator_id,reason,comment,category,creator_ip)
      VALUES ( '$(new_id $nd_uid)', $(time_now), 'admin' ,'11', 'Transfer from Abills', 'Transfer from Abills','495','3239309826')"

done