forum.bitel.ru
http://forum.bitel.ru/

Связка тарифного плана и шлюза
http://forum.bitel.ru/viewtopic.php?f=22&t=270
Страница 1 из 1

Автор:  Lavrenov_Sergey [ 13 июн 2007, 19:53 ]
Заголовок сообщения:  Связка тарифного плана и шлюза

Клиенту даем доступ в интернет с ограничением по скорости 128 кб/с. В договоре прописываем тарифный план и в модуле IPN с помощью шлюза типа Manad ограничиваем скорость до 128 кб/с. Если клиент через Web-интерфейс изменяет свой тарифный план (например на 256 кб/с), как автоматически изменить и шлюз, чтобы ограничение стало 256 кб/с?

Автор:  Администратор [ 14 июн 2007, 00:19 ]
Заголовок сообщения: 

Необходимо встроить в скрипт смены тарифа. Обязательное требование - правила манада должны быть типизированы, т.е. не вбиты вручную в каждом договоре. Если нет - то нужно править само правило, вытаскивать адреса. Установку типа правила нужно делать в зависимости от нового тарифа. Попробуйте, будут проблемы - пишите.

Код:
import bitel.billing.server.ipn.bean.*;

// вместо mid поставьте код вашего модуля IPN
ugrm = new UserGateRuleManager( con, mid )

rule = ugrm.getUserGateRules( cid ).get( 0 );
rule.setRuleTypeId( <новый тип правила> );
ugrm.updateUserGateRule( String.valueOf( rule.getId() ), rule ) ;

// обновление правила на манаде
csm = new ContractStatusManager( con, mid );

status =  csm.getContractStatus( cid );
// открытие и закрытие шлюза
csm.changeStatus( cid, 1, userID.intValue(), true );
csm.changeStatus( cid, status, userID.intValue(), true );

Автор:  msh [ 13 апр 2008, 22:15 ]
Заголовок сообщения: 

как узнать Id типа правила? у меня в клиенте под linux в модули->IPN-> типы правил Ctrl-i не работает

Автор:  stark [ 14 апр 2008, 16:30 ]
Заголовок сообщения: 

msh писал(а):
как узнать Id типа правила? у меня в клиенте под linux в модули->IPN-> типы правил Ctrl-i не работает

Там эта функция не поддерживалась , модуль ipn для версии 4.4 обновлен

Автор:  msh [ 19 апр 2008, 21:00 ]
Заголовок сообщения: 

вот написал скрипт смены тарифа по заданию пользователя с изменением типа шлюза
Код:
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.server.ipn.bean.*;
import java.util.*;

cid = event.getContractID();
task = event.getTask();

ctm =  new ContractTariffManager(  con );

// текущий тарифный план
currentTariff = ctm.getContractTariff( cid, task.getFromDate() );
if( currentTariff == null )
{
 error( "Current tariff not found" );
 return;
}

// закрываем старый тариф днем ранее
endDate = (Calendar)task.getFromDate().clone();
endDate.add( Calendar.DAY_OF_YEAR, -1 );

currentTariff.setDate2( endDate );
ctm.updateContractTariff( String.valueOf( currentTariff.getID() ), currentTariff  );


// вносим новый тариф
newPlan = new  ContractTariff();
newPlan.setContractID( cid );
newPlan.setTariffPlanID( task.getTariffPlanID());
newPlan.setDate1( task.getFromDate() );
newPlan.setComment( "Смена тарифа через Web" );
ctm.updateContractTariff( "new", newPlan );

// получаем ID нового тарифного плана - по нему будем определять правило шлюза
newPlanID=task.getTariffPlanID();

switch ( newPlanID ){
   case 4:
      // план тестовый 256кбит/с
      ruleTypeID=11;
   break;
   case 3:
      // план базовый 1 Мбит/с
      ruleTypeID=1;
   default:
      // 64 кбит/с
      ruleTypeID=14;
}

// выставляем тип правила шлюза для данного тарифа
// вместо mid поставьте код вашего модуля IPN
ugrm = new UserGateRuleManager( con, 3 )
rule = ugrm.getUserGateRules( cid ).get( 0 );

rule.setRuleTypeId(ruleTypeID);
ugrm.updateUserGateRule( String.valueOf( rule.getId() ), rule ) ;

// обновление правила на манаде
csm = new ContractStatusManager( con, 3 );

status =  csm.getContractStatus( cid );
// открытие и закрытие шлюза
csm.changeStatus( cid, 1, userID.intValue(), true );
csm.changeStatus( cid, status, userID.intValue(), true );


возникли вследующие вопросы:
1)как проверить его работу не дожидаясь первого мая и не меняя время на сервере
2)зачем в последних 2х строчках скрипта (а они взяты из рекомендвции Администратора) сначала производится открытие шлюза а затем закрытие? по идее было бы логично наоборот
3)очень тяжко прописавать в скипте соответствие между ID тарифа и ID правила шлюза - может добавить возможность присваивать в тарифе свои параметры, а потом читать их в скрипте?

Автор:  Администратор [ 21 апр 2008, 11:53 ]
Заголовок сообщения: 

1. Там есть в группе тарифов свойство "Исполнять переход за.. часов".
Поставьте побольше, сразу отработает.
2. Да, нужно сначала закрыть, потом открыть. Чего-то я не то сказал, наверное.
3. Пока ничем помочь не можем, в перспективе будем делать в биллинге завязку тарифов с правилами, так что промежуточные действия нам не особо интересны.

Автор:  msh [ 27 апр 2008, 01:00 ]
Заголовок сообщения: 

в 4.4 теперь надо так обновление правил делать?
метода csm.getContractStatus в 4.4 больше нет
почему-то csm.getStatus возвращает null
Код:
// обновление правила на манаде
cid = event.getContractID();
time = event.getGenerateTime();
csm = new ContractStatusManager( con);

status =  csm.getStatus( cid, time);
if (status == null){
   error("no status");
   return;
}
// закрытие  и открытие шлюза (1-шлюз закрыт)
status.setStatus(1);
csm.changeStatus( status);
status =  csm.getStatus( cid, time);
csm.changeStatus( status);

Автор:  Администратор [ 28 апр 2008, 13:13 ]
Заголовок сообщения: 

Класс ContractStatusManager переименован в IPNContractStatusManager, функция осталась.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/