Биллинговая система Nodeny
14 Мая 2024, 10:29:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Вопрос по разработке доп.плюшек....  (Прочитано 4647 раз)
Dimasik
Пользователь
**

Карма: -1
Offline Offline

Сообщений: 64


Просмотр профиля
« : 07 Декабря 2016, 00:49:12 »

Вопрос к Стасу(переавторизируй уже меня в скайпе), но может кто-то тоже знает:
вот к примеру меняем мы напрямую в БД какието параметры юзера - разрешаем ему доступ или услугу подключаем или параметры услуги меняем.
а надо ли запускать какие-то процедуры в биллинге(которые на перле) для того чтобы эти изменения начали работать?
что-то типа перезапуск ядра или команда перечитать настройки? или изменений в БД достаточно а биллинг сам периодически(какой период?) перечитывает данные и засылает обновления в саттелиты?
Записан
Tooreagen
Старожил
****

Карма: -7
Offline Offline

Сообщений: 257


Просмотр профиля Email
« Ответ #1 : 07 Декабря 2016, 08:32:59 »

Менял услугу на другую, с той же стоимостью. Проблем не было.
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #2 : 07 Декабря 2016, 09:17:18 »

изменения напрямую в БД делал по услугам
perl noserver.pl перечитывает их постоянно и все верно работает
Записан
Dimasik
Пользователь
**

Карма: -1
Offline Offline

Сообщений: 64


Просмотр профиля
« Ответ #3 : 07 Декабря 2016, 16:43:08 »

т.е. достаточно менять данные в БД и биллинг сам все подхватит?
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #4 : 07 Декабря 2016, 17:31:48 »

т.е. достаточно менять данные в БД и биллинг сам все подхватит?
зависит от того что менять
Записан
Dimasik
Пользователь
**

Карма: -1
Offline Offline

Сообщений: 64


Просмотр профиля
« Ответ #5 : 07 Декабря 2016, 18:43:07 »

т.е. достаточно менять данные в БД и биллинг сам все подхватит?
зависит от того что менять
а где почитать про эти зависимости?
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #6 : 08 Декабря 2016, 08:52:50 »

т.е. достаточно менять данные в БД и биллинг сам все подхватит?
зависит от того что менять
а где почитать про эти зависимости?
ну что именно вас интересует мож подскажут
Записан
Dimasik
Пользователь
**

Карма: -1
Offline Offline

Сообщений: 64


Просмотр профиля
« Ответ #7 : 08 Декабря 2016, 12:04:47 »

т.е. достаточно менять данные в БД и биллинг сам все подхватит?
зависит от того что менять
а где почитать про эти зависимости?
ну что именно вас интересует мож подскажут
цепочка событий такая: создание нового юзера - добавление тарифа - добавление оплаты - активация доступа
Записан
Tooreagen
Старожил
****

Карма: -7
Offline Offline

Сообщений: 257


Просмотр профиля Email
« Ответ #8 : 09 Декабря 2016, 10:01:33 »

т.е. достаточно менять данные в БД и биллинг сам все подхватит?
зависит от того что менять
а где почитать про эти зависимости?
ну что именно вас интересует мож подскажут
цепочка событий такая: создание нового юзера - добавление тарифа - добавление оплаты - активация доступа


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

Карма: 0
Offline Offline

Сообщений: 21


Просмотр профиля Email
« Ответ #9 : 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
Записан
sever
Пользователь
**

Карма: 1
Offline Offline

Сообщений: 82


Просмотр профиля
« Ответ #10 : 14 Декабря 2016, 19:28:47 »

Здравствуйте, делали подобный скрипт для перевода людей  с Абилса на Nodeny. Используются запросы к базе слейдущего характера: (Фрагмент скрипта касающийся запросов)


А полный скрипт можно? это на перле?
Записан
pala
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 21


Просмотр профиля Email
« Ответ #11 : 18 Декабря 2016, 20:08:04 »

Здравствуйте, делали подобный скрипт для перевода людей  с Абилса на Nodeny. Используются запросы к базе слейдущего характера: (Фрагмент скрипта касающийся запросов)


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

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

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

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

Если Вам данная реализация пойдет то сброшу в ЛС. Или Вы хотите всю базу скопом перевести ?
« Последнее редактирование: 18 Декабря 2016, 20:46:15 от pala » Записан
sever
Пользователь
**

Карма: 1
Offline Offline

Сообщений: 82


Просмотр профиля
« Ответ #12 : 19 Декабря 2016, 09:04:13 »


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

Карма: 0
Offline Offline

Сообщений: 21


Просмотр профиля Email
« Ответ #13 : 19 Декабря 2016, 11:55:48 »

Мы переносим только аккаунт, всю историю по аккаунту переносить не стали. Все старые платежи и история остаются на абиллсе.
Записан
sever
Пользователь
**

Карма: 1
Offline Offline

Сообщений: 82


Просмотр профиля
« Ответ #14 : 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
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!