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

Как сменить правила на шлюзе MANAD FreeBSD при смене тарифа
http://forum.bitel.ru/viewtopic.php?f=7&t=2691
Страница 1 из 1

Автор:  fkost [ 06 авг 2009, 09:32 ]
Заголовок сообщения:  Как сменить правила на шлюзе MANAD FreeBSD при смене тарифа

У нас стоит BGbilling 4.5
Модули : NPAY, IPN, REPORTS.
Шлюз на FreeBSD 6.2
правила прорисаны:
speed=64000
speed=128000
speed=256000
speed=512000
speed=1024000

Команды шлюза:
[DEFAULT]
<LOOP>
pipe {P0} config bw ${speed}
pipe {P1} config bw ${speed}
add {N0} pipe {P0} ip from any to {A} in via em0
add {N0} pipe {P1} ip from {A} to any out via em0
add {N1} allow ip from any to {A} in via em0
add {N1} skipto 60000 ip from {A} to any out via em0
</LOOP>
[/DEFAULT]

К тарифам привязаны правила
К договору привязан шлюз, а к шлюзу привязано правило.

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

Вложения:
Комментарий к файлу: Тариф
Tarif.jpg
Tarif.jpg [ 14.55 КБ | Просмотров: 3199 ]

Автор:  stark [ 06 авг 2009, 18:35 ]
Заголовок сообщения: 

в 5.0 мы эту проблему решим,надеюсь ..а пока только скриптовыми шлюзами . Вот тут предлагают вариант:
http://bgbilling.ru/forum/viewtopic.php ... highlight=

Автор:  fkost [ 07 авг 2009, 12:27 ]
Заголовок сообщения: 

Возникла необходимость при смене тарифа через WEB помещать договора в отдельную группу. Я написал вот такой скрипт:

import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.server.service.bean.*;
import bitel.billing.server.tariff.*;
import bitel.billing.server.util.*;
import bitel.billing.server.npay.*;
import bitel.billing.server.task.bean.RunTaskData;
import bitel.billing.server.task.bean.RunTaskDataManager;
import java.util.*;

cid = event.getContractID();
cstm = new ContractStatusManager( con );

// определяем текущий статус договора и выход если не установлен или не активный
StatusContractList = cstm.getStatusList(cid, event.getGenerateTime());
if (StatusContractList.size() == 0)
{
print("Статус договора не установлен");
return;
}
StatusContract = StatusContractList.get(0);
print("StatusContract.getStatus():"+StatusContract.getStatus() );
if( StatusContract.getStatus() != 0)
{
print("Договор не активен");
return;
}

// выбираем только нужную группу договоров (нам нужна только 1 группа -"Интернет")
contract = new ContractManager(con).getContractByID(cid);
contract_groups = contract.getGroups();
if ((contract_groups & (1L)) > 0)
{
print("Группа договора="+contract_groups);
} else
{
print("Договор не на интернет");
return;
}
// Добавляем договору группу 2 - "Смено тарифа через WEB"
contract.setGroups(contract_groups | 2);
contract_groups = contract.getGroups();
print("Новая группа договора="+contract_groups);

В логах све нормально пишет что с уст группа 3 (1+2), а в договоре галочек нет.
Где я сделал не так?

Автор:  stark [ 07 авг 2009, 12:47 ]
Заголовок сообщения: 

вы забыли записать это в базу
new ContractManager(con).update( contact )

Автор:  fkost [ 07 авг 2009, 13:23 ]
Заголовок сообщения: 

Чегото я не догоняю. На вставил. получил следующую ошибку

Sourced file: inline evaluation of: ``import bitel.billing.server.contract.bean.*; import bitel.billing.server.tariff . . . '' : reflection error: bsh.ReflectError: Method update( bitel.billing.server.contract.bean.Contract ) not found in class'bitel.billing.server.contract.bean.ContractManager'Sourced file: inline evaluation of: ``import bitel.billing.server.contract.bean.*; import bitel.billing.server.tariff . . . '' : reflection error: bsh.ReflectError: Method update( bitel.billing.server.contract.bean.Contract ) not found in class'bitel.billing.server.contract.bean.ContractManager' : at Line: 44 : in file: inline evaluation of: ``import bitel.billing.server.contract.bean.*; import bitel.billing.server.tariff . . . '' : .update ( contract )

at bsh.BSHPrimarySuffix.doSuffix(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHAssignment.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bitel.billing.server.script.bean.ScriptMachine.runScript(ScriptMachine.java:158)
at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:248)
at bitel.billing.server.script.bean.event.EventProcessor.run(EventProcessor.java:163)

А в документации API такого метода вобще нет.

Автор:  stark [ 07 авг 2009, 14:33 ]
Заголовок сообщения: 

а. у вас 4.5... там нет этого метода в api Обновить договр можно только ко с помощью sql-запроса :
query = "UPDATE contract SET gr=gr|(1<<?) WHERE id=?";

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