Скрипт миграции со Stargazer

Форум для размещения материалов по реализации различных схем использования ПО, решению частых проблем и предупреждению частых ошибок
Закрыто
Аватара пользователя
XoRe
Сообщения: 458
Зарегистрирован: Ср янв 10, 2007 16:04

Скрипт миграции со Stargazer

Сообщение XoRe »

Есть такая биллинговая система, Stargazer ( http://stg.dp.ua )

Перешли с неё на UTM, отконвертировав юзеров из одной системы в другую.
Конвертация производилась сим скриптом.
Может кому пригодится, чтобы взять за основу.
Имхо, может пригодиться при переходе с других систем.

Имеется несколько групп юзеров, one .. ten.
Каждый юзер сидит в какой-то группе.
На каждую группу приходится по тарифу, включающему в себя услугу ип-траффик.
В некоторые тарифы ещё входит периодическая услуга в лице абонплаты.
Группы, услуги, тарифы и учетные периоды заводятся заранее.
А потом ниже в соответствии всему этому указываются номера.

Скрипт выполняется или при выключенной utm5_core или при вклюенной, но после отработки скрипта надо будет сделать killall -HUP utm5_core.
В любом случае после отработки скрипта при запуске utm5_core нужно будет глянуть, не появился ли verificator.log.

Код: Выделить всё

#!/usr/bin/perl

## Подготовка

# Инициализация используемых модулев

use DBD::mysql;
use DBI();
use Time::Local;
use Socket;

# Инициализация системных переменных

$stgdir = '/usr/local/stargazer/users';
$, = ' ';
$debug = 0;

$ids{'услуга, трафик, 7'} = 22;
$ids{'услуга, абонплата, 7'} = 21;
$ids{'услуга, трафик, 8'} = 23;
$ids{'услуга, абонплата, 8'} = 24;
$ids{'услуга, трафик, 10'} = 25;
$ids{'услуга, абонплата, 10'} = 26;
$ids{'услуга, трафик, 11'} = 27;
$ids{'услуга, абонплата, 11'} = 0;
$ids{'услуга, трафик, 12'} = 28;
$ids{'услуга, абонплата, 12'} = 0;
$ids{'Тариф, one'} = 7;
$ids{'Тариф, two'} = 8;
$ids{'Тариф, three'} = 8;
$ids{'Тариф, four'} = 10;
$ids{'Тариф, fife'} = 11;
$ids{'Тариф, six'} = 11;
$ids{'Тариф, seven'} = 11;
$ids{'Тариф, eight'} = 11;
$ids{'Тариф, nine'} = 12;
$ids{'Тариф, ten'} = 12;
$ids{'Временной диапазон, All day'} = 1;
$ids{'Расчетный период, ежедневный'} = 1;
$ids{'Расчетный период, ежемесячный'} = 3;
$ids{'admin'} = -1;
$ids{'Группа, one'} = 1001;
$ids{'Группа, two'} = 1002;
$ids{'Группа, three'} = 1004;
$ids{'Группа, four'} = 1003;
$ids{'Группа, fife'} = 1005;
$ids{'Группа, six'} = 1009;
$ids{'Группа, seven'} = 1006;
$ids{'Группа, eight'} = 1007;
$ids{'Группа, nine'} = 1008;

($day, $month, $year) = (localtime)[3,4,5];
$year += 1900;
$month++;
$month = '0'.int&#40;$month&#41; if &#40;$month < 10&#41;;
$day = '0'.int&#40;$day&#41; if &#40;$day < 10&#41;;
$date = "$year.$month.$day";

# Инициализация переменных UTM
open &#40;CONFIG, "/netup/utm5/utm5.cfg"&#41;;
@config = <CONFIG>;
close &#40;CONFIG&#41;;
foreach $line &#40;@config&#41; &#123;
  if &#40;$line =~ m/^&#40;&#91;^#&#93;.+?&#41;=&#40;.*&#41;$/&#41; &#123;
    $$1 = $2;
  &#125;;
&#125;;

# Подключение к БД
if &#40;$database_type eq "mysql"&#41; &#123;
$DBI_data="DBI&#58;$database_type&#58;database=$database;host=$database_host;mysql_socket=$database_sock_path;";
&#125; elsif &#40;$database_type eq "postgres"&#41; &#123;
$DBI_data="DBI&#58;$database_type&#58;dbname=$database";
&#125; else &#123;
print "Unknown database $database_type! Stopped. \n";
exit &#40;1&#41;;
&#125;;
$dbh = DBI->connect&#40;"$DBI_data","$database_login","$database_password",&#123;'RaiseError' => 1&#125;&#41;;

# Обработка всех имеющихся юзеров

opendir USERS, $stgdir or die "$!";
@users = readdir USERS;
closedir USERS;

foreach $user &#40;@users&#41;
&#123;

undef %b;
undef %l;
undef %a;
undef %p;
undef %m;
undef %c;
undef %t;
undef %f;
undef %n;
undef %g;
undef %r;
undef %h;
undef %o;
undef %i;
undef %w;
undef %j;
undef %x;
undef %q;
undef %k;
undef %y;
undef %z;
undef %s;
undef %d;

next if &#40;$user eq '.' or $user eq '..'&#41;;
next unless &#40; -d "$stgdir/$user"&#41;;

# Чтение данных о юзере

undef %conf;
undef %stat;

open CONF, "iconv -f koi8-r -t utf-8 < $stgdir/$user/conf |" or die "$!";
while &#40;$line=<CONF>&#41;
&#123;
chomp $line;
&#40;$name, $value&#41; = split /=/, $line, 2;
$conf&#123;$name&#125; = $value;
&#125;
close CONF;

open STAT, "< $stgdir/$user/stat" or die "$!";
while &#40;$line=<STAT>&#41;
&#123;
chomp $line;
&#40;$name, $value&#41; = split /=/, $line, 2;
$stat&#123;$name&#125; = $value;
&#125;
close STAT;

## Создание лицевого счёта

# accounts

$b&#123;'BALANCE'&#125;           =       $stat&#123;'Cash'&#125;;
$b&#123;'COMMENTS'&#125;          =       'Account from STG';
$b&#123;'CREDIT'&#125;            =       $conf&#123;'Credit'&#125;;
$b&#123;'PERIOD_ID'&#125;         =       $ids&#123;'Расчетный период, ежемесячный'&#125;;
$b&#123;'ONLINE'&#125;		=	$conf&#123;'AlwaysOnline'&#125;;

$l&#123;'balance'&#125;           =       $b&#123;'BALANCE'&#125;;          # Бабки
$l&#123;'account_name'&#125;      =       $b&#123;'COMMENTS'&#125;;         # Необязательное имя
$l&#123;'credit'&#125;            =       $b&#123;'CREDIT'&#125;;           # Кредит
$l&#123;'flags'&#125;             =       $b&#123;'PERIOD_ID'&#125;;        # id учетного периода
$l&#123;'discount_period_id'&#125;=       '0';                    # Вроде должен этот быть
$l&#123;'is_blocked'&#125;        =       '0';
$l&#123;'dealer_account_id'&#125; =       '0';
$l&#123;'comission_coef'&#125;    =       '0';
$l&#123;'default_comission_value'&#125; = '0';
$l&#123;'is_dealer'&#125;         =       '0';
$l&#123;'vat_rate'&#125;          =       '0';
$l&#123;'sale_tax_rate'&#125;     =       '0';
$l&#123;'int_status'&#125;        =       $b&#123;'ONLINE'&#125;;
$l&#123;'dont_charge_if_block'&#125; =    '0';
$l&#123;'block_recalc_abon'&#125; =       '0';
$l&#123;'block_recalc_prepaid'&#125; =    '0';
$l&#123;'unlimited'&#125;         =       '0';
$l&#123;'is_deleted'&#125;        =       '0';

#get $l&#123;'id'&#125; with last_insert_id&#40;&#41;

$table = 'accounts';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$order_into = '';
$order_values = '';
while &#40;&#40;$tmp1, $tmp2&#41; = each %l&#41;
&#123;
$order_into .= "$tmp1, ";
$order_values .= "'$tmp2', ";
&#125;
$order_into =~ s/, $//;
$order_values =~ s/, $//;

$query = "INSERT INTO $table &#40;$order_into&#41; VALUES &#40;$order_values&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->do&#40;$query&#41;;

$query = "SELECT last_insert_id&#40;&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$l&#123;'id'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
print "ID&#58; $l&#123;'id'&#125;\n" if &#40;$debug&#41;;

## Создание учётной записи абонента

# users

$a&#123;'LOGIN'&#125;		=	$user;
$a&#123;'PASSWORD'&#125;		=	$conf&#123;'Password'&#125;;
$a&#123;'ACCOUNT_ID'&#125;	=	$l&#123;'id'&#125;;
$a&#123;'BLOCK'&#125;		=	'0';
$a&#123;'PERIOD_ID'&#125;		=	$ids&#123;'Расчетный период, ежемесячный'&#125;;# id учетного периода
$a&#123;'FULL_NAME'&#125;		=	$conf&#123;'RealName'&#125;;
$a&#123;'JUR_ADDR'&#125;		=	$conf&#123;'Address'&#125;;
$a&#123;'ACT_ADDR'&#125;		=	$conf&#123;'Address'&#125;;
$a&#123;'PHONE'&#125;		=	$conf&#123;'Phone'&#125;;
$a&#123;'EMAIL'&#125;		=	$conf&#123;'Email'&#125;;

$p&#123;'login'&#125;		=	$a&#123;'LOGIN'&#125;;
$p&#123;'password'&#125;		=	$a&#123;'PASSWORD'&#125;;
$p&#123;'basic_account'&#125;	=	$a&#123;'ACCOUNT_ID'&#125;;
$p&#123;'is_blocked'&#125;	=	$a&#123;'BLOCK'&#125;;
$p&#123;'discount_period_id'&#125; =	'1';
$p&#123;'advance_payment'&#125;	=	'1';			# Работа по предоплате
$p&#123;'create_date'&#125;	=	time;
$p&#123;'last_change_date'&#125;	=	time;
$p&#123;'who_create'&#125;	=	$ids&#123;'admin'&#125;;		# system user init
$p&#123;'who_change'&#125;	=	$ids&#123;'admin'&#125;;		# system user init
$p&#123;'is_juridical'&#125;	=	'0';			# Юридическое ли лицо
$p&#123;'full_name'&#125;		=	$a&#123;'FULL_NAME'&#125;;
$p&#123;'juridical_address'&#125;	=	$a&#123;'JUR_ADDR'&#125;;
$p&#123;'actual_address'&#125;	=	$a&#123;'ACT_ADDR'&#125;;
$p&#123;'work_telephone'&#125;	=	'';
$p&#123;'home_telephone'&#125;	=	$a&#123;'PHONE'&#125;;
$p&#123;'mobile_telephone'&#125;	=	'';
$p&#123;'web_page'&#125;		=	'';
$p&#123;'icq_number'&#125;	=	'';
$p&#123;'tax_number'&#125;	=	'';
$p&#123;'kpp_number'&#125;	=	'';
$p&#123;'bank_id'&#125;		=	'0';
$p&#123;'bank_account'&#125;	=	'';
$p&#123;'email'&#125;		=	$a&#123;'EMAIL'&#125;;
$p&#123;'house_id'&#125;		=	'0';
$p&#123;'flat_number'&#125;	=	'';
$p&#123;'entrance'&#125;		=	'';
$p&#123;'floor'&#125;		=	'';
$p&#123;'district'&#125;		=	'';
$p&#123;'building'&#125;		=	'';
$p&#123;'passport'&#125;		=	'';
$p&#123;'comments'&#125;		=	'';
$p&#123;'personal_manager'&#125;	=	'';
$p&#123;'connect_date'&#125;	=	'-43200';
$p&#123;'remote_switch_id'&#125;	=	'0';
$p&#123;'port_number'&#125;	=	'0';
$p&#123;'personal_currency_coef'&#125; =	'1';
$p&#123;'binded_currency_code'&#125; =	'810';
$p&#123;'is_deleted'&#125;	=	'0';
$p&#123;'is_send_invoice'&#125;	=	'0';

#get $p&#123;'id'&#125; with last_insert_id&#40;&#41;

$table = 'users';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$order_into = '';
$order_values = '';

while &#40;&#40;$tmp1, $tmp2&#41; = each %p&#41;
&#123;
$order_into .= "$tmp1, ";
$order_values .= "'$tmp2', ";
&#125;
$order_into =~ s/, $//;
$order_values =~ s/, $//;

$query = "INSERT INTO $table &#40;$order_into&#41; VALUES &#40;$order_values&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->do&#40;$query&#41;;
$query = "SELECT last_insert_id&#40;&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$p&#123;'id'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
print "ID&#58; $p&#123;'id'&#125;\n" if &#40;$debug&#41;;

# users_accounts

$m&#123;'uid'&#125;		=	$p&#123;'id'&#125;;		# id юзера
$m&#123;'account_id'&#125;	=	$l&#123;'id'&#125;;		# id лицевого счета
$m&#123;'is_deleted'&#125;	=	'0';

#get $m&#123;'id'&#125; with last_insert_id&#40;&#41;

$table = 'users_accounts';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$order_into = '';
$order_values = '';
while &#40;&#40;$tmp1, $tmp2&#41; = each %m&#41;
&#123;
$order_into .= "$tmp1, ";
$order_values .= "'$tmp2', ";
&#125;
$order_into =~ s/, $//;
$order_values =~ s/, $//;

$query = "INSERT INTO $table &#40;$order_into&#41; VALUES &#40;$order_values&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->do&#40;$query&#41;;

$query = "SELECT last_insert_id&#40;&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$m&#123;'id'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
print "ID&#58; $m&#123;'id'&#125;\n" if &#40;$debug&#41;;

# users_groups_link

$d&#123;'USER_ID'&#125;		=	$p&#123;'id'&#125;;
$d&#123;'GROUP_ID'&#125;		=	$ids&#123;"Группа, $conf&#123;Group&#125;"&#125;;

$s&#123;'user_id'&#125;		=	$d&#123;'USER_ID'&#125;;
$s&#123;'group_id'&#125;		=	$d&#123;'GROUP_ID'&#125;;

#get $s&#123;'id'&#125; with last_insert_id&#40;&#41;

$table = 'users_groups_link';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$order_into = '';
$order_values = '';
while &#40;&#40;$tmp1, $tmp2&#41; = each %s&#41;
&#123;
$order_into .= "$tmp1, ";
$order_values .= "'$tmp2', ";
&#125;
$order_into =~ s/, $//;
$order_values =~ s/, $//;

$query = "INSERT INTO $table &#40;$order_into&#41; VALUES &#40;$order_values&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->do&#40;$query&#41;;

$query = "SELECT last_insert_id&#40;&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$s&#123;'id'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
print "ID&#58; $s&#123;'id'&#125;\n" if &#40;$debug&#41;;

## Привязка тарифного плана к лицевому счёту абонента

# account_tariff_link

$c&#123;'TARIFF_ID'&#125;		=	$ids&#123;"Тариф, $conf&#123;Group&#125;"&#125;;		# id тарифного плана
$c&#123;'PERIOD_ID'&#125;		=	$ids&#123;'Расчетный период, ежемесячный'&#125;;# id расчётного периода

$t&#123;'account_id'&#125;	=	$l&#123;'id'&#125;;
$t&#123;'tariff_id'&#125;		=	$c&#123;'TARIFF_ID'&#125;;
$t&#123;'next_tariff_id'&#125;	=	$c&#123;'TARIFF_ID'&#125;;
$t&#123;'discount_period_id'&#125;=	$c&#123;'PERIOD_ID'&#125;;
$t&#123;'is_deleted'&#125;	=	'0';
$t&#123;'link_date'&#125;		=	time;

#get $t&#123;'id'&#125; with last_insert_id&#40;&#41;

$table = 'account_tariff_link';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$order_into = '';
$order_values = '';
while &#40;&#40;$tmp1, $tmp2&#41; = each %t&#41;
&#123;
$order_into .= "$tmp1, ";
$order_values .= "'$tmp2', ";
&#125;
$order_into =~ s/, $//;
$order_values =~ s/, $//;

$query = "INSERT INTO $table &#40;$order_into&#41; VALUES &#40;$order_values&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->do&#40;$query&#41;;

$query = "SELECT last_insert_id&#40;&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$t&#123;'id'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
print "ID&#58; $t&#123;'id'&#125;\n" if &#40;$debug&#41;;

## Привязка услуги передачи IP-трафика из тарифного плана к лицевому счету

# service_links

$table = 'service_links';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$query = "SELECT max&#40;id&#41; from $table;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$f&#123;'SLINK_ID'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
$f&#123;'SLINK_ID'&#125; ++;
print "IP-traffic SLINK_ID&#58; $f&#123;'SLINK_ID'&#125;\n" if &#40;$debug&#41;;

$f&#123;'SERVICE_ID'&#125;	=	$ids&#123;"услуга, трафик, $c&#123;'TARIFF_ID'&#125;"&#125;;	# id услуги

$n&#123;'id'&#125;		=	$f&#123;'SLINK_ID'&#125;;		# SLINK_ID
$n&#123;'user_id'&#125;           =       $p&#123;'id'&#125;;               # id юзера
$n&#123;'account_id'&#125;        =       $l&#123;'id'&#125;;               # id лицевого счета
$n&#123;'service_id'&#125;        =       $f&#123;'SERVICE_ID'&#125;;
$n&#123;'tariff_link_id'&#125;    =       $t&#123;'id'&#125;;
$n&#123;'is_deleted'&#125;        =       '0';

#get $n&#123;'id'&#125; with last_insert_id&#40;&#41;

$table = 'service_links';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$order_into = '';
$order_values = '';
while &#40;&#40;$tmp1, $tmp2&#41; = each %n&#41;
&#123;
$order_into .= "$tmp1, ";
$order_values .= "'$tmp2', ";
&#125;
$order_into =~ s/, $//;
$order_values =~ s/, $//;

$query = "INSERT INTO $table &#40;$order_into&#41; VALUES &#40;$order_values&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->do&#40;$query&#41;;

$query = "SELECT last_insert_id&#40;&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$n&#123;'id'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
print "ID&#58; $n&#123;'id'&#125;\n" if &#40;$debug&#41;;

# periodic_service_links

$g&#123;'PERIOD_ID'&#125;		=	$ids&#123;'Расчетный период, ежемесячный'&#125;;# id расчётного периода
$g&#123;'SLINK_ID'&#125;		=	$f&#123;'SLINK_ID'&#125;;

$r&#123;'id'&#125;		=	$g&#123;'SLINK_ID'&#125;;
$r&#123;'is_blocked'&#125;        =       '0';
$r&#123;'discount_period_id'&#125;=       $g&#123;'PERIOD_ID'&#125;;
$r&#123;'discounted_in_curr_period'&#125;='0';
$r&#123;'start_date'&#125;        =       '1167566400';           # 1.01.2007
$r&#123;'is_planned'&#125;        =       '0';
$r&#123;'expire_date'&#125;       =       '2130706431';           # очень нескоро
$r&#123;'need_del'&#125;          =       '0';
$r&#123;'unabon_period'&#125;     =       '0';
$r&#123;'unprepay_period'&#125;   =       '0';
$r&#123;'start_block_unabon'&#125;=       '0';
$r&#123;'start_block_unprepay'&#125; =    '0';
$r&#123;'is_deleted'&#125;        =       '0';

#get $r&#123;'id'&#125; with last_insert_id&#40;&#41;

$table = 'periodic_service_links';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$order_into = '';
$order_values = '';
while &#40;&#40;$tmp1, $tmp2&#41; = each %r&#41;
&#123;
$order_into .= "$tmp1, ";
$order_values .= "'$tmp2', ";
&#125;
$order_into =~ s/, $//;
$order_values =~ s/, $//;

$query = "INSERT INTO $table &#40;$order_into&#41; VALUES &#40;$order_values&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->do&#40;$query&#41;;

$query = "SELECT last_insert_id&#40;&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$r&#123;'id'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
print "ID&#58; $r&#123;'id'&#125;\n" if &#40;$debug&#41;;

# ip_groups

$table = 'ip_groups';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$query = "SELECT max&#40;ip_group_id&#41; from $table;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$h&#123;'IP_GROUP_ID'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
$h&#123;'IP_GROUP_ID'&#125; ++;
print "IP_GROUP_ID&#58; $h&#123;'IP_GROUP_ID'&#125;\n" if &#40;$debug&#41;;

$h&#123;'IP'&#125;		=	$conf&#123;'IP'&#125;;            # ip-адрес клиента В ПЕРЕДЕЛАННОМ ВИДЕ
$h&#123;'IP'&#125;		=	unpack&#40;"N",inet_aton&#40;$h&#123;'IP'&#125;&#41;&#41;;
$h&#123;'IP'&#125;		=	$h&#123;'IP'&#125; > 2147483647 ? &#40;$h&#123;'IP'&#125; - 0xFFFFFFFF - 1&#41;&#58;$h&#123;'IP'&#125;;
$h&#123;'LOGIN'&#125;		=	$user;                  # login юзера
$h&#123;'PASSWORD'&#125;		=	$conf&#123;'Password'&#125;;      # pass юзера
$h&#123;'MAC'&#125;		=	$conf&#123;'Userdata0'&#125;;
$h&#123;'MAC'&#125;		=~	s/-/&#58;/;
$h&#123;'MAC'&#125;		=	lc $h&#123;'MAC'&#125;;

$o&#123;'ip_group_id'&#125;       =       $h&#123;'IP_GROUP_ID'&#125;;
$o&#123;'ip'&#125;                =       $h&#123;'IP'&#125;;
$o&#123;'mask'&#125;              =       '-1';                   # маска подсети клиента
$o&#123;'uname'&#125;             =       $h&#123;'LOGIN'&#125;;
$o&#123;'upass'&#125;             =       $h&#123;'PASSWORD'&#125;;
$o&#123;'mac'&#125;               =       $h&#123;'MAC'&#125;;
$o&#123;'allowed_cid'&#125;       =       '';
$o&#123;'ip_type'&#125;           =       '1';
$o&#123;'router_id'&#125;         =       '1';
$o&#123;'create_date'&#125;       =       time;
$o&#123;'delete_date'&#125;       =       '0';
$o&#123;'is_deleted'&#125;        =       '0';

#get $o&#123;'id'&#125; with last_insert_id&#40;&#41;

$order_into = '';
$order_values = '';
while &#40;&#40;$tmp1, $tmp2&#41; = each %o&#41;
&#123;
$order_into .= "$tmp1, ";
$order_values .= "'$tmp2', ";
&#125;
$order_into =~ s/, $//;
$order_values =~ s/, $//;

$query = "INSERT INTO $table &#40;$order_into&#41; VALUES &#40;$order_values&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->do&#40;$query&#41;;

$query = "SELECT last_insert_id&#40;&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$o&#123;'id'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
print "ID&#58; $o&#123;'id'&#125;\n" if &#40;$debug&#41;;

# downloaded

$table = 'downloaded';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$query = "SELECT max&#40;downloaded_id&#41; from $table;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$i&#123;'DOWNLOADED_ID'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
$i&#123;'DOWNLOADED_ID'&#125; ++;
print "DOWNLOADED_ID&#58; $i&#123;'DOWNLOADED_ID'&#125;\n" if &#40;$debug&#41;;

$w&#123;'downloaded_id'&#125;	=	$i&#123;'DOWNLOADED_ID'&#125;;
$w&#123;'tclass_id'&#125;		=	'0';

#get $w&#123;'id'&#125; with last_insert_id&#40;&#41;

$order_into = '';
$order_values = '';
while &#40;&#40;$tmp1, $tmp2&#41; = each %w&#41;
&#123;
$order_into .= "$tmp1, ";
$order_values .= "'$tmp2', ";
&#125;
$order_into =~ s/, $//;
$order_values =~ s/, $//;

$query = "INSERT INTO $table &#40;$order_into&#41; VALUES &#40;$order_values&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->do&#40;$query&#41;;

$query = "SELECT last_insert_id&#40;&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$w&#123;'id'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
print "ID&#58; $w&#123;'id'&#125;\n" if &#40;$debug&#41;;

# iptraffic_service_links

$j&#123;'SLINK_ID'&#125;		=	$f&#123;'SLINK_ID'&#125;;
$j&#123;'IP_GROUP_ID'&#125;	=	$h&#123;'IP_GROUP_ID'&#125;;                                 # id группы ip-адреса клиента
$j&#123;'DOWNLOADED_ID'&#125;	=	$i&#123;'DOWNLOADED_ID'&#125;;

$x&#123;'id'&#125;		=	$j&#123;'SLINK_ID'&#125;;
$x&#123;'ip_group_id'&#125;	=	$j&#123;'IP_GROUP_ID'&#125;;
$x&#123;'downloaded_id'&#125;	=	$j&#123;'DOWNLOADED_ID'&#125;;
$x&#123;'recalc_type'&#125;	=	'0';
$x&#123;'is_deleted'&#125;        =       '0';
$x&#123;'flags'&#125;		=       '0';

#get $x&#123;'id'&#125; with last_insert_id&#40;&#41;

$table = 'iptraffic_service_links';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$order_into = '';
$order_values = '';
while &#40;&#40;$tmp1, $tmp2&#41; = each %x&#41;
&#123;
$order_into .= "$tmp1, ";
$order_values .= "'$tmp2', ";
&#125;
$order_into =~ s/, $//;
$order_values =~ s/, $//;

$query = "INSERT INTO $table &#40;$order_into&#41; VALUES &#40;$order_values&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->do&#40;$query&#41;;

$query = "SELECT last_insert_id&#40;&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$x&#123;'id'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
print "ID&#58; $x&#123;'id'&#125;\n" if &#40;$debug&#41;;

if&#40;$ids&#123;"услуга, абонплата, $c&#123;'TARIFF_ID'&#125;"&#125;&#41;
&#123;

## Привязка периодической услуги из тарифного плана к лицевому счёту

# service_links

$table = 'service_links';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$query = "SELECT max&#40;id&#41; from $table;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$q&#123;'SLINK_ID'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
$q&#123;'SLINK_ID'&#125; ++;
print "abon SLINK_ID&#58; $q&#123;'SLINK_ID'&#125;\n" if &#40;$debug&#41;;

$q&#123;'SERVICE_ID'&#125;	=	$ids&#123;"услуга, абонплата, $c&#123;'TARIFF_ID'&#125;"&#125;;     # id услуги

$k&#123;'id'&#125;		=	$q&#123;'SLINK_ID'&#125;;
$k&#123;'user_id'&#125;           =       $p&#123;'id'&#125;;               # id юзера
$k&#123;'account_id'&#125;        =       $l&#123;'id'&#125;;               # id лицевого счета
$k&#123;'service_id'&#125;        =       $q&#123;'SERVICE_ID'&#125;;
$k&#123;'tariff_link_id'&#125;    =       $t&#123;'id'&#125;;
$k&#123;'is_deleted'&#125;        =       '0';

#get $k&#123;'id'&#125; with last_insert_id&#40;&#41;

$table = 'service_links';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$order_into = '';
$order_values = '';
while &#40;&#40;$tmp1, $tmp2&#41; = each %k&#41;
&#123;
$order_into .= "$tmp1, ";
$order_values .= "'$tmp2', ";
&#125;
$order_into =~ s/, $//;
$order_values =~ s/, $//;

$query = "INSERT INTO $table &#40;$order_into&#41; VALUES &#40;$order_values&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->do&#40;$query&#41;;

$query = "SELECT last_insert_id&#40;&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$k&#123;'id'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
print "ID&#58; $k&#123;'id'&#125;\n" if &#40;$debug&#41;;

# periodic_service_links

$y&#123;'PERIOD_ID'&#125;		=	$ids&#123;'Расчетный период, ежемесячный'&#125;;# id расчётного периода
$y&#123;'SLINK_ID'&#125;		=	$q&#123;'SLINK_ID'&#125;;

$z&#123;'id'&#125;		=	$y&#123;'SLINK_ID'&#125;;
$z&#123;'is_blocked'&#125;        =       '0';
$z&#123;'discount_period_id'&#125;=       $y&#123;'PERIOD_ID'&#125;;
$z&#123;'discounted_in_curr_period'&#125;='0';
$z&#123;'start_date'&#125;        =       '1167566400';           # 1.01.2007
$z&#123;'is_planned'&#125;        =       '0';
$z&#123;'expire_date'&#125;       =       '2130706431';           # очень нескоро
$z&#123;'need_del'&#125;          =       '0';
$z&#123;'unabon_period'&#125;     =       '0';
$z&#123;'unprepay_period'&#125;   =       '0';
$z&#123;'start_block_unabon'&#125;=       '0';
$z&#123;'start_block_unprepay'&#125; =    '0';
$z&#123;'is_deleted'&#125;        =       '0';

#get $z&#123;'id'&#125; with last_insert_id&#40;&#41;

$table = 'periodic_service_links';
print "\nTABLE&#58; $table\n" if &#40;$debug&#41;;
$order_into = '';
$order_values = '';
while &#40;&#40;$tmp1, $tmp2&#41; = each %z&#41;
&#123;
$order_into .= "$tmp1, ";
$order_values .= "'$tmp2', ";
&#125;
$order_into =~ s/, $//;
$order_values =~ s/, $//;

$query = "INSERT INTO $table &#40;$order_into&#41; VALUES &#40;$order_values&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->do&#40;$query&#41;;

$query = "SELECT last_insert_id&#40;&#41;;";
print $query."\n" if &#40;$debug&#41;;
$sth = $dbh->prepare&#40;$query&#41;;
$rv = $sth->execute&#40;&#41;;
$z&#123;'id'&#125; = &#40;$sth->fetchrow_array&#41;&#91;0&#93;;
print "ID&#58; $z&#123;'id'&#125;\n" if &#40;$debug&#41;;

&#125;

&#125;
Последний раз редактировалось XoRe Вт сен 18, 2007 13:46, всего редактировалось 2 раза.

Andrey Zentavr
Сообщения: 9
Зарегистрирован: Вт фев 28, 2006 02:21

Re: Скрипт миграции со Stargazer

Сообщение Andrey Zentavr »

Взялся за сей скрипт. В принципе, респект автору, легко переписывается под другие системы, но в процессе эскплуатации я встретил некоторые хитрости
XoRe писал(а):

Код: Выделить всё

.......
$l&#123;'is_blocked'&#125;        =       &#40;&#40; $conf&#123;'Passive'&#125; == 1 &#41; or &#40; $conf&#123;'Down'&#125; == 1 &#41;&#41; ? 768 &#58; &#40; $stat&#123;'Cash'&#125; + $conf&#123;'Credit'&#125; <= 0 &#41; ? 48 &#58; 0;
.........
$a&#123;'BLOCK'&#125;		=	&#40;&#40; $conf&#123;'Passive'&#125; == 1 &#41; or &#40; $conf&#123;'Down'&#125; == 1 &#41;&#41; ? 768 &#58; &#40; $stat&#123;'Cash'&#125; + $conf&#123;'Credit'&#125; <= 0 &#41; ? 48 &#58; 0;
.........
Считаю что $l{'is_blocked'} и $a{'BLOCK'} должно быть приравнено к 0.
Верные метки биллинг расставит сам.
У меня после импортирования этим скриптом пользователей у всех должников проставился флаг 48, после чего с них не снималась абонплата, которая была подключена в тарифном плане как периодическая услуга.
Пришлось руками менять флаги в базе на работающем биллинге и травить на него верификатор. Проблема исчезла.

Аватара пользователя
XoRe
Сообщения: 458
Зарегистрирован: Ср янв 10, 2007 16:04

Сообщение XoRe »

Учел комментарий, отредактировал первый пост )

Закрыто