Утилита (скрипт) для импортирование пользователей в utm
Утилита (скрипт) для импортирование пользователей в utm
Видел где-то скрипт который предназначен для импорта юзеров в базу utm из любой доругой (требуется правка скрипта) . Есть ли такой скрипт для utm 5.2.1-005?
"Для осуществления переноса данных об учетных записях пользователей, тарифах, списаниях служит
утилита to_utm.pl. Утилита написана на языке Perl и поставляется в исходном коде. Благодаря этому имеется
возможность перенести данные практически из любой системы, исправив код скрипта согласно структуре базы
данных, из которой осуществляется перенос. "
как я понял должен быть официальный скрипт to_utm.pl
утилита to_utm.pl. Утилита написана на языке Perl и поставляется в исходном коде. Благодаря этому имеется
возможность перенести данные практически из любой системы, исправив код скрипта согласно структуре базы
данных, из которой осуществляется перенос. "
как я понял должен быть официальный скрипт to_utm.pl
Тогда:
search.php
И поискать слово "to_utm" )
Как я понял, её надо искать в дистрибутивах версии примерно 5.1.10.
Если вам нужен точный ответ на ваш вопрос, то нет.
Такой утилиты нет под utm 5.2.1-005.
И под utm 5.2.1-004 её нету.
Похоже её убрали из дистрибутива, начиная с версииutm 5.2.1.
search.php
И поискать слово "to_utm" )
Как я понял, её надо искать в дистрибутивах версии примерно 5.1.10.
Если вам нужен точный ответ на ваш вопрос, то нет.
Такой утилиты нет под utm 5.2.1-005.
И под utm 5.2.1-004 её нету.
Похоже её убрали из дистрибутива, начиная с версииutm 5.2.1.
Немного "причёсанный" вариант того же скрипта. Переносил из Кинз'а в utm5-2.1.005.
Предполагается что у пользователя два IP один в LAN, другой который будет назначен на пользовательскую сторону при создании туннеля.
Тариф состоит из одной услуги передачи трафика и двух периодических: абонентской платы и плата за аренду реальника если таковой есть.
Предполагается что у пользователя два IP один в LAN, другой который будет назначен на пользовательскую сторону при создании туннеля.
Тариф состоит из одной услуги передачи трафика и двух периодических: абонентской платы и плата за аренду реальника если таковой есть.
Код: Выделить всё
#!/usr/local/bin/perl
use Switch;
use DBD::mysql;
use DBI();
use Time::Local;
use Socket;
#Преобразование адреса
sub IP_TO_N {
my ($Ip) = @_;
$Ip = unpack("N",inet_aton($Ip));
$Ip = $Ip > 2147483647 ? ($Ip - 0xFFFFFFFF - 1):$Ip;
return $Ip;
}
# "Разворачиваем" и выполняем запрос, возвращаем autoinc
sub DO_QUERY {
my ($Cfg, $Query, $Href) = @_;
my ($Field, $Values, $Into, $Sth, $AutoInc);
while (($Field, $Value) = each (%$Href)) {
$Into .= "$Field, ";
$Values .= "'$Value', ";
}
$Into =~ s/, $//;
$Values =~ s/, $//;
$Query = "$Query ($Into) VALUES ($Values);";
# print $Query."\n\n";
$$Cfg{'Utm5Db'}->do($Query);
$Sth = $$Cfg{'Utm5Db'}->prepare("SELECT last_insert_id();");
$Sth->execute();
$AutoInc = ($Sth->fetchrow_array)[0];
$Sth->finish;
return $AutoInc;
}
#Создание лицевого счета
sub ADD_ACCOUNT {
my ( $Cfg, $UsrInfo ) = @_ ;
my ( %Acnt ) = () ;
$Acnt{'balance'} = $$UsrInfo{'balance'};
$Acnt{'account_name'} = 'auto create account';
$Acnt{'credit'} = '0';
$Acnt{'flags'} = '3';
$Acnt{'discount_period_id'} = '0';
$Acnt{'dealer_account_id'} = '0';
$Acnt{'comission_coef'} = '0';
$Acnt{'default_comission_value'} = '0';
$Acnt{'is_dealer'} = '0';
$Acnt{'int_status'} = '0';
$Acnt{'block_recalc_abon'} = '0';
$Acnt{'block_recalc_prepaid'} = '0';
$AcntId = DO_QUERY ( $Cfg, "INSERT INTO accounts", \%Acnt );
return $AcntId;
}
#Cоздание пользователя (созданый лицевой счет записываем сразу как основной)
sub ADD_USER {
my ($Cfg, $AcntId, $UsrInfo) = @_;
my (%UsrAdd, $Query, $UsrId);
$UsrAdd{'login'} = $$UsrInfo{'login'};
$UsrAdd{'password'} = $$UsrInfo{'password'};
$UsrAdd{'basic_account'} = $AcntId;
$UsrAdd{'is_blocked'} = '0';
$UsrAdd{'discount_period_id'} = '0';
$UsrAdd{'create_date'} = $$Cfg{'UnixTimeStamp'};
$UsrAdd{'last_change_date'} = $$Cfg{'UnixTimeStamp'};
$UsrAdd{'who_create'} = $$Cfg{'SysUsrId'};
$UsrAdd{'who_change'} = $$Cfg{'SysUsrId'};
$UsrAdd{'is_juridical'} = '0';
$UsrAdd{'full_name'} = $$UsrInfo{'full_name'};
$UsrAdd{'juridical_address'} = '';
$UsrAdd{'actual_address'} = $$UsrInfo{'actual_address'};
$UsrAdd{'flat_number'} = $$UsrInfo{'flat_number'};
$UsrAdd{'entrance'} = '';
$UsrAdd{'floor'} = '';
$UsrAdd{'district'} = '';
$UsrAdd{'building'} = $$UsrInfo{'building'};
$UsrAdd{'passport'} = '';
$UsrAdd{'work_telephone'} = '';
$UsrAdd{'home_telephone'} = '';
$UsrAdd{'mobile_telephone'} = $$UsrInfo{'mobile_telephone'};
$UsrAdd{'web_page'} = '';
$UsrAdd{'icq_number'} = '';
$UsrAdd{'tax_number'} = '';
$UsrAdd{'kpp_number'} = '';
$UsrAdd{'email'} = '';
$UsrAdd{'bank_id'} = '0';
$UsrAdd{'bank_account'} = '';
$UsrAdd{'comments'} = $$UsrInfo{'comments'};
$UsrAdd{'house_id'} = '0';
$UsrAdd{'is_send_invoice'} = '0';
$UsrAdd{'advance_payment'} = '0';
$UsrAdd{'personal_manager'} = '';
$UsrAdd{'connect_date'} = $$UsrInfo{'created'};
$UsrId = DO_QUERY ($Cfg, "INSERT INTO users", \%UsrAdd);
#Добавляем лицевой счет в список лицевых счетов
$Query = "INSERT into users_accounts (uid, account_id) VALUES ($UsrId, $AcntId)";
# print $Query."\n";
$UTM5_DB->do($Query);
return $UsrId;
}
#Привязка к лицевому счету тарифного плана
sub LINK_TARIFF_TO_ACCOUNT {
my ( $Cfg, $AcntId, $Tariff ) = @_;
my ( %TpAdd, $TarifLinkId);
$TpAdd{'account_id'} = $AcntId;
$TpAdd{'tariff_id'} = $$Tariff{'Id'};
$TpAdd{'next_tariff_id'} = $$Tariff{'Id'};
$TpAdd{'discount_period_id'} = $$Cfg{'DiscPerId'};
$TpAdd{'link_date'} = $$Cfg{'UnixTimeStamp'};
$TarifLinkId = DO_QUERY ($Cfg, "INSERT INTO account_tariff_link", \%TpAdd);
return $TarifLinkId ;
}
#Добавление сервисной связки в список связок
sub ADD_SVR_LNK_TO_LIST {
my ( $Cfg, $SvrId, $UsrId, $AcntId, $TarLinkId) = @_;
my ( %SvrLink, $SvrLinkId);
$SvrLink{'user_id'} = $UsrId;
$SvrLink{'account_id'} = $AcntId;
$SvrLink{'service_id'} = $SvrId;
$SvrLink{'tariff_link_id'} = $TarLinkId;
$SvrLinkId = DO_QUERY ($Cfg, "INSERT INTO service_links", \%SvrLink);
return $SvrLinkId;
}
#Добавление связки периодической услуги
sub ADD_PERIOD_SVR_LNK{
my ( $Cfg, $SvrLnkId) = @_;
my ( %PrdSvrLink);
$PrdSvrLink{'id'} = $SvrLnkId;
$PrdSvrLink{'discount_period_id'} = $$Cfg{'DiscPerId'};
$PrdSvrLink{'discounted_in_curr_period'} = '0';
$PrdSvrLink{'start_date'} = $$Cfg{'UnixTimeStamp'};
$PrdSvrLink{'is_planned'} = '0';
$PrdSvrLink{'expire_date'} = $$Cfg{'ExpireDate'};
$PrdSvrLink{'need_del'} = '0';
$PrdSvrLink{'unprepay_period'} = '0';
#Значение ниже указывает за какой период не списывать средства за
#переодическую услугу с начала расчетного периода (секунды). Эквивалентно галке
#"не списывать абонентскую плату" при подключении периодической услуги
$PrdSvrLink{'unabon_period'} = $$Cfg {'UnixTimeStamp'} - $$Cfg{'DiscBegin'} ;
$PrdSvrLink {'is_invoice_set'} = '0';
DO_QUERY ($Cfg, "INSERT INTO periodic_service_links", \%PrdSvrLink);
}
#Создание IP группы
sub CREATE_IP_GOUPS {
my ( $Cfg, $Usr) = @_;
my ( $IpGroupID, $Query, %IpAdd, $Ip);
$Query = "SELECT max(ip_group_id) from ip_groups;";
$UTM5_Sth = $UTM5_DB->prepare($Query);
$UTM5_Sth->execute();
$IpGroupID = ($UTM5_Sth->fetchrow_array)[0];
$IpGroupID++;
$UTM5_Sth->finish;
#VPN
$IpAdd{'ip_group_id'} = $IpGroupID;
$IpAdd{'ip'} = IP_TO_N($$Usr {'vpnip'});
$IpAdd{'mask'} = '-1';
$IpAdd{'uname'} = $$Usr {'vpnlogin'};
$IpAdd{'upass'} = $$Usr {'vpnpswd'};
#$IpAdd{'mac'} = '';
#$IpAdd {'allowed_cid'}= '';
$IpAdd{'create_date'}= $$Cfg {'UnixTimeStamp'};;
$IpAdd{'ip_type'} = '0';
$IpAdd{'router_id'} = '0';
DO_QUERY ($Cfg, "INSERT INTO ip_groups", \%IpAdd);
#LAN
$IpAdd{'ip'} = IP_TO_N($$Usr {'lanip'});
$IpAdd{'ip_type'} = '1';
delete $IpAdd{'uname'};
delete $IpAdd{'upass'};
DO_QUERY ($Cfg, "INSERT INTO ip_groups", \%IpAdd);
return $IpGroupID;
}
# downloaded
sub ADD_DNLD {
my ($Cfg, $Usr) = @_;
my (%Dnl, $DnlId);
$Query = "SELECT max(downloaded_id) from downloaded;";
$UTM5_Sth = $UTM5_DB->prepare($Query);
$UTM5_Sth->execute();
$DnlId = ($UTM5_Sth->fetchrow_array)[0];
$DnlId++;
$UTM5_Sth->finish;
$Dnl{'tclass_id'} = '0';
$Dnl{'downloaded_id'} = $DnlId;
DO_QUERY ($Cfg, "INSERT INTO downloaded", \%Dnl);
if ( $$Usr{'CustomPrepay'} != 0 ) {
$Dnl{'tclass_id'} = 200; #200 - класс трафика (например входящий Iternet)
$Dnl{'downloaded_id'} = $DnlId;
$Dnl{'custom_prepay'} = $$Usr{'CustomPrepay'};
DO_QUERY ($Cfg, "INSERT INTO downloaded", \%Dnl);
}
return $DnlId;
}
#Связка услуги пердачи трафика
sub ADD_IPTRAFF_SVR_LNK {
my ( $Cfg, $SvrLnkId, $IpGrpID, $DnlId) = @_;
my ( %IpTrafLnk );
$IpTrafLnk{'id'} = $SvrLnkId;
$IpTrafLnk{'ip_group_id'} = $IpGrpID;
$IpTrafLnk{'downloaded_id'} = $DnlId;
$IpTrafLnk{'flags'} = 0;
DO_QUERY ($Cfg,"INSERT INTO iptraffic_service_links", \%IpTrafLnk);
}
#Добавления пользователя и привязки тарифного плана
sub CREATE_USER {
my ($Config, $UserInfo, $Tariff) = @_;
my ($AccountId, $UserId, $TarifLinkId, $ServiceLnkId);
#Создание лицевого счета
$AccountId = ADD_ACCOUNT ($Config, $UserInfo);
#Cоздание пользователя
$UserId = ADD_USER ($Config, $AccountId, $UserInfo);
#Привязка к лицевому счету тарифного плана
$TarifLinkId = LINK_TARIFF_TO_ACCOUNT ($Config, $AcntId, $Tariff);
#Создание сервесной связки переодической соcтовляющей услуги пердачи трафика
$ServiceLnkId = ADD_SVR_LNK_TO_LIST ($Config, $$Tariff{'IpTraf'}, $UserId, $AccountId, $TarifLinkId);
ADD_PERIOD_SVR_LNK ($Config, $ServiceLnkId );
#Создание IP группы
$IpGroupID = CREATE_IP_GOUPS ($Config, $UserInfo);
# downloaded
$DownloadId = ADD_DNLD( $Config, $UserInfo );
#Связка услуги пердачи трафика
ADD_IPTRAFF_SVR_LNK ($Config, $ServiceLnkId, $IpGroupID, $DownloadId);
#Обонетская плата
$ServiceLnkId = ADD_SVR_LNK_TO_LIST ($Config, $$Tariff{'Sharge'}, $UserId, $AccountId, $TarifLinkId);
ADD_PERIOD_SVR_LNK ( $Config, $ServiceLnkId );
#Выделенный IP
#Т.е определяем кому подключать эту услугу буковки надо заменить на циферки :)
if ($$UserInfo{'vpnip'} =~ /^A\.B\.C[DE]\.\d{1,3}/){
$ServiceLnkId = ADD_SVR_LNK_TO_LIST ($Config, $$Tariff{'RealIp'}, $UserId, $AccountId, $TarifLinkId);
ADD_PERIOD_SVR_LNK ( $Config, $SvrLnkId );
}
print(CrtUsrLog "$UserId\t$AccountId\t$$UserInfo{'balance'}\t$$UserInfo{'lanip'}\t$$UserInfo{'vpnip'}\n");
}
#################################################################################################################################################
#################################################################################################################################################
sub DO_SELECT {
my ($Result, $Query) = @_;
my ($Tmp);
$FROM_Sth=$FROM_DB->prepare($Query);
$FROM_Sth->execute();
$Tmp = $FROM_Sth->fetchrow_hashref;
%$Result = %$Tmp;
$FROM_Sth->finish;
}
sub TARIFF_DETECT {
my ($UsrInf, $Tariff) = @_;
#Здесь устанавливается соответствие между
#тарифами старой билинговой системой и UTM .
#Предполагается что тариф состоит из одной услуги
#передачи трафика одной абонентской платы и еще
#одной услуги - "выделенный внешний IP", которая
#подключена у части пользователей, здесь же вычисляем
#предоплаченный трафик, который будет добавлен к _уже_
#_начисленному_ в _полном_объёме_ предоплаченному трафику
#за месяц.
#реализация функции TARIFF_DETECT не показана
$$Tariff{'Id'} = 1; #ID тарифного плана
$$Tariff{'Sharge'} = 4 #Абонентка
$$Tariff{'RealIp'} = 5; #выделенный внешний IP
$$Tariff{'IpTraf'} = 6; #передача трафика
$$UsrInf{'CustomPrepay'} = 0; #предоплаченный трафик
}
#Глобальные настройки
$GLOBAL_CONFIG{'Utm5Db'} = '';
$GLOBAL_CONFIG{'SysUsrId'} = -1;
$GLOBAL_CONFIG{'DiscPerId'} = 34; #ID текущего расчетного периода
$GLOBAL_CONFIG{'DiscBegin'} = NNNNNNNNNNN; #время начала текущего расчетного периода
$GLOBAL_CONFIG{'ExpireDate'} = 2130523200;
$GLOBAL_CONFIG{'UnixTimeStamp'} = '';
$FROM_DB_HOST="A.B.С.D"; #откуда берем инфу
$FROM_DB_NAME="billing";
$FROM_DB_USR="XXXXXXXXXXXXXXXXX";
$FROM_DB_PASWD="YYYYYYYYYYYYYYY";
$UTM5_DB_HOST="E.F.G.H"; #MySQL c UTM
$UTM5_DB_NAME="UTM5";
$UTM5_DB_USR="XXXXXXXXXXXX";
$UTM5_DB_PASWD="YYYYYYYYYY";
$FROM_DB = DBI->connect("DBI:mysql:$FROM_DB_NAME:$FROM_DB_HOST", $FROM_DB_USR, $FROM_DB_PASWD);
$GLOBAL_CONFIG{'Utm5Db'} = $UTM5_DB = DBI->connect("DBI:mysql:$UTM5_DB_NAME:$UTM5_DB_HOST", $UTM5_DB_USR, $UTM5_DB_PASWD);
open (CrtUsrLog,"> CrtUsr.log");
$GLOBAL_CONFIG{'Utm5Db'}->do("SET NAMES cp1251");
$UTM5_Sth = $GLOBAL_CONFIG{'Utm5Db'}->prepare("select UNIX_TIMESTAMP()");
$UTM5_Sth->execute();
$GLOBAL_CONFIG{'UnixTimeStamp'} = ($UTM5_Sth->fetchrow_array) [0];
$UTM5_Sth->finish;
#
#Пример реализации переноса пользователей из блинга Кинз'а
#
#пример запроса
$Query = "select id from clients WHERE ip LIKE \"192.168.%\" AND ip NOT LIKE \"192.168.100.%\" ORDER BY id;";
print "$Query\n";
$FROM_Sth=$FROM_DB->prepare($Query);
$FROM_Sth->execute();
while ($UsrId = $FROM_Sth->fetchrow_array ) {
push @UsrIdList, $UsrId;
}
$FROM_Sth->finish;
foreach $UsrId (@UsrIdList){
%UserInfo = ();
%NetPrice = ();
%Tariff = ();
$Query = "SELECT firstname,lastname,
street, house AS building, flat AS flat_number, phone AS mobile_telephone, description AS comments,
ip AS lanip, login, decode(password,'123') AS password,
vpnip, vpnlogin, decode(vpnpassword,'123') AS vpnpswd,
monthly_traffic, prepaid_traff, prepaid_traff_bonus, shaper,
monthly_pay, cur_balance AS balance, UNIX_TIMESTAMP(created) AS created
from clients WHERE id=${UsrId};";
# print "$Query\n";
DO_SELECT (\%UserInfo, $Query);
$Query = "select in_price from net_price WHERE userid=${UsrId} and net_id=0 ORDER BY modified DESC LIMIT 1;";
DO_SELECT (\%NetPrice, $Query);
$UserInfo{'full_name'} = "$UserInfo{'lastname'} $UserInfo{'firstname'}";
$UserInfo{'actual_address'} = "улица $UserInfo{'street'} дом $UserInfo{'building'} квартира $UserInfo{'flat_number'}";
$UserInfo{'comments'} = "$UserInfo{'comments'} трафик: бонус $UserInfo{'prepaid_traff_bonus'}; предоплаченный $UserInfo{'prepaid_traff'}; за месяц $UserInfo{'monthly_traffic'}";
#Дифолтный тариф на который будет посажен пользователь, если функция TARIFF_DETECT
#не сможет определить тариф.
$Tariff{'Id'} = 17; $Tariff{'Sharge'} = 52; $Tariff{'RealIp'} = 53; $Tariff{'IpTraf'} = 54; $Tariff{'PrepayTraff'} = '';
TARIFF_DETECT (\%UserInfo, \%Tariff);
CREATE_USER (\%GLOBAL_CONFIG, \%UserInfo, \%Tariff);
}
$FROM_DB->disconnect;
$GLOBAL_CONFIG{'Utm5Db'}>disconnect;
close(CrtUsrLog);
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23