forum.bitel.ru http://forum.bitel.ru/ |
|
TariffRequest http://forum.bitel.ru/viewtopic.php?f=19&t=3656 |
Страница 1 из 1 |
Автор: | dale [ 28 фев 2010, 12:54 ] |
Заголовок сообщения: | TariffRequest |
Если можно хотелось бы получить более детальную информацию по данному классу, т.к. он часто используем а в доках о нем кажется вообще ничего нет. Стандартная задача с отключением абонентов при достижении нуля. Но у меня используются разные тарифы. В одном тарифе абонплата снимается за месяц безусловно. В другом тарифе абонплата снимается посуточно и цена указана за сутки. В третьем тарифе абонплата снимается посуточно но цена указана за месяц. Возможно из за моего недопонимания как работать с классом TariffRequest мне приходится в первом случае сделать скрипт который выполняется раз в месяц. Во втором случае скрипт выполняется ежесуточно но при этом: Код: for( TariffModuleTree tree : tts.getTreeList( df ) ) { req = new TariffRequest(); req.setRequestParam( "action", "calculate" ); req.setRequestParam( "sid", sid ); // считаем абонплату пропорционально количеству дней до конца месяца(действует для тарифов "Пропорционально периоду") // всего дней в месяце req.setRequestParam( "month_days",1); // всего дней до конца месяца req.setRequestParam( "period_days", 1); req.setRequestParam( "time", df); tree.processRequest( req ); cost = (Double) req.getResponseParam( "cost" ); cost_type = req.getResponseParam( "cost_type" ); print ( "cost: " + cost ); print ( "cost: " + cost_type ); if( req.wasAccepted() && cost != null ) { print( cost ); totalCost += cost; break; } } ну и в третьем случае. Код: for( TariffModuleTree tree : tts.getTreeList( df ) ) { req = new TariffRequest(); req.setRequestParam( "action", "calculate" ); req.setRequestParam( "sid", sid ); // считаем абонплату пропорционально количеству дней до конца месяца(действует для тарифов "Пропорционально периоду") // всего дней в месяце req.setRequestParam( "month_days",1); // всего дней до конца месяца req.setRequestParam( "period_days", 1); req.setRequestParam( "time", df); tree.processRequest( req ); cost = (Double) req.getResponseParam( "cost" ); if (cost != null) cost = cost /df.getActualMaximum(Calendar.DAY_OF_MONTH); cost_type = req.getResponseParam( "cost_type" ); print ( "cost: " + cost ); print ( "cost: " + cost_type ); if( req.wasAccepted() && cost != null ) { print( cost ); totalCost += cost; break; } } Самое что не догоняю это параметры month_days, period_days для чего служат. Я экспериментировал с ними однако в результате все равно одно вычисляется полная абонплата за месяц. Хотелось бы сделать все это одним скриптом!! А не 3 скрипта для разных тарифов использовать. |
Автор: | Amir [ 01 мар 2010, 14:14 ] |
Заголовок сообщения: | Re: TariffRequest |
Версия какая? |
Автор: | dale [ 01 мар 2010, 23:53 ] |
Заголовок сообщения: | Re: TariffRequest |
Amir писал(а): Версия какая? 4.6 |
Автор: | snark [ 16 май 2010, 22:20 ] |
Заголовок сообщения: | Re: TariffRequest |
dale писал(а): Если можно хотелось бы получить более детальную информацию по данному классу, т.к. он часто используем а в доках о нем кажется вообще ничего нет. +1 тоже очень хотелось бы подробностей |
Автор: | Cromeshnic [ 17 май 2010, 06:29 ] |
Заголовок сообщения: | Re: TariffRequest |
Хотелось бы знать, какие обязательные параметры нужны в запросах на тарификацию для разных модулей. Делал для pppoe и ipn - подбирал вручную. |
Автор: | snark [ 26 май 2010, 18:42 ] |
Заголовок сообщения: | Re: TariffRequest |
апну столь полезную тему |
Автор: | ra81 [ 28 ноя 2010, 10:57 ] |
Заголовок сообщения: | Re: TariffRequest |
У кого нибудь таки появилась документация по данному классу? Какие параметры передавать в TariffRequest??? Для чего они служат. Неужели нет ни у кого? Проблема частая как я понимаю. Использую описанную схему определения размера абонплаты. Все как в примере. Получаю Ноды внутри цикла. Код: for( TariffModuleTree tree : tts.getTreeList( DateNow ) ) { req_cost = new TariffRequest(); req_cost.setRequestParam( "action", "calculate" ); req_cost.setRequestParam( "sid", sid ); req_cost.setRequestParam( "month_days", 1 ); req_cost.setRequestParam( "period_days", 1 ); req_cost.setRequestParam( "time", DateNow); tree.processRequest( req_cost ); cost = (Double)req_cost.getResponseParam( "cost" ); cost_type = req_cost.getResponseParam( "cost_type" ); print(cost); print(cost_type); print("TreeId: " + tree.getTreeId()); print("MidId: " + tree.getMid()); } То есть вижу что данные получаются. По базе проверил, ID нода выдается верный. Но запрос цены выдает null и тип цены тоже null. Кругом нул нул. Ничего не понимаю. Опять же методы классов приходится ковырять через Eclipse, поскольку в документации даже намека нет на столь важные и нужные классы. |
Автор: | Cromeshnic [ 28 ноя 2010, 22:40 ] |
Заголовок сообщения: | Re: TariffRequest |
Посмотрите как делается в ru.bitel.bgbilling.modules.npay.server.task.DebetStatusManageLocker ![]() |
Автор: | ra81 [ 29 ноя 2010, 10:18 ] |
Заголовок сообщения: | Re: TariffRequest |
Cromeshnic писал(а): Посмотрите как делается в ru.bitel.bgbilling.modules.npay.server.task.DebetStatusManageLocker ![]() Если вы предлагаете посмотреть в декомпилированный код, то для меня это слишком (я посмотрел в код). Я конечно могу разобраться в SQL запросе и написать похожий, но это уже будет далеко не API биллинга. Не хочется изобретать велосипед. |
Автор: | Cromeshnic [ 29 ноя 2010, 10:50 ] |
Заголовок сообщения: | Re: TariffRequest |
Нене, там как раз пример использования TariffRequest для вычисления суммы абонплат. А официального API нет ![]() |
Автор: | Администратор [ 30 ноя 2010, 14:40 ] |
Заголовок сообщения: | Re: TariffRequest |
http://wiki.bgbilling.ru/index.php/%D0% ... 1%82%D1%8B У кого есть доступ к исходникам - киньте письмо. Откроем этот класс. Вытаскивайте код и пользуйтесь. TariffRequest - слишком универсальный класс, по сути он передаёт атрибуты тарифного запроса и возвращает результат. Постепенно будем публиковать для каждого модуля как строить запросы для получения стоимости услуги в том или ином модуле. |
Автор: | skyb [ 30 ноя 2010, 15:26 ] |
Заголовок сообщения: | Re: TariffRequest |
Администратор писал(а): http://wiki.bgbilling.ru/index.php/%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%B0_%D0%B0%D0%B1%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%81%D0%BA%D0%BE%D0%B9_%D0%BF%D0%BB%D0%B0%D1%82%D1%8B У кого есть доступ к исходникам - киньте письмо. Откроем этот класс. Вытаскивайте код и пользуйтесь. TariffRequest - слишком универсальный класс, по сути он передаёт атрибуты тарифного запроса и возвращает результат. Постепенно будем публиковать для каждого модуля как строить запросы для получения стоимости услуги в том или ином модуле. Зачет, давно пора !!! |
Автор: | Cromeshnic [ 30 ноя 2010, 19:04 ] |
Заголовок сообщения: | Re: TariffRequest |
В dialup и ipn есть ещё узел "конфигурация тарифа", куда можно запихивать любые пары "параметр=значение" и выдёргивать их через TariffRequest. Очень прикольная штука, пользуемся. ![]() Вообще, подход тарифных деревьев - большой плюс BGBilling имхо. |
Автор: | zaruba [ 03 дек 2010, 20:29 ] |
Заголовок сообщения: | Re: TariffRequest |
А каким образом с помощью TariffRequest можно получить информацию о структуре TariffRequest? Задача получить информацию по тарифу в XML для выгрузки во внешнюю систему. Есть ли примеры? |
Автор: | skyb [ 03 дек 2010, 20:50 ] |
Заголовок сообщения: | Re: TariffRequest |
ещё класс неоткрыт, а получение скорей всего будет нечто того же как и всегда --- get set ![]() |
Автор: | ra81 [ 24 дек 2010, 18:07 ] |
Заголовок сообщения: | Re: TariffRequest |
Администратор писал(а): http://wiki.bgbilling.ru/index.php/%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%B0_%D0%B0%D0%B1%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%81%D0%BA%D0%BE%D0%B9_%D0%BF%D0%BB%D0%B0%D1%82%D1%8B У кого есть доступ к исходникам - киньте письмо. Откроем этот класс. Вытаскивайте код и пользуйтесь. TariffRequest - слишком универсальный класс, по сути он передаёт атрибуты тарифного запроса и возвращает результат. Постепенно будем публиковать для каждого модуля как строить запросы для получения стоимости услуги в том или ином модуле. спасибо за обновления Вики. Но нашел таки ошибку и в ней ![]() Код: NPayTariffContext ctx = new NPayTariffContext( Setup.getSetup().getModuleSetup( mid ), con, mid, startMonth, endMonth, String.valueOf( cid ), null ); Вполне логично что на этом коде биллинг затыкается. Разобрал пакет и там увидел что должен быть ЕЩЕ один параметр а именно CurrentTime. Переписал строку в виде Код: NPayTariffContext ctx = new NPayTariffContext( Setup.getSetup().getModuleSetup( mid ), con, mid, startMonth, endMonth, currTime, String.valueOf( cid ), null ); и все заработало. Правда результат получается в странном виде Код: NPayServiceCost [serviceId: 4; date1: 01.12.2010; date2: 31.12.2010; serviceStart: 01.12.2010; serviceEnd: 31.12.2010; accountingPeriodDays: 31; amount: 1; cost: 270.96774193548387096774193548387096; addCost: null; periodAmount: null; monthAmount: null] посмотрю что с этим можно сделать ![]() |
Автор: | ra81 [ 25 дек 2010, 22:12 ] |
Заголовок сообщения: | Re: TariffRequest |
было бы очень круто если б кто нить выложил доки по классу "AbstractTariffRequest" с описаловом функций. А то совсем ничего не понятно что и куда и откуда. Получил я абонплату для услуги у которой начисление абонплаты идет подневная. А вот получить абонплату для CerberCrypt модуля где снимается сразу за месяц не могу. Простое изменение cid, sid не работает. Код: // код договора
cid = 6077;//event.getContractID(); // на какой момент смотреть тариф time = new GregorianCalendar(); // код услуги sid = 11; // код экземпляра модуля mid = 7; Calendar startMonth = TimeUtils.getStartMonth( time ); Calendar endMonth = TimeUtils.getEndMonth( time ); int daysInMonth = startMonth.getActualMaximum( Calendar.DAY_OF_MONTH ); NPayTariffContext ctx = new NPayTariffContext( Setup.getSetup().getModuleSetup( mid ), con, mid, startMonth, endMonth, endMonth, String.valueOf( cid ), null ); TariffTreeSet result = TariffTreeBuilder.getInstance().getRealtimeTariffTreeSet( con, cid, startMonth, "npay", mid, 0, 0 ); for( TariffModuleTree tariffPeriod : result.getTreeList( time ) ) { NPayTariffRequest req = new NPayTariffRequest( mid, cid, sid ); req.setInfoEnable( true ); req.setConnection( con ); req.setAccountingMonthDays( daysInMonth ); // эта дата нужна, если режимы тарификации помещены в период req.setTime( startMonth ); req.setServiceCost( sid, Collections.singletonList( new NPayServiceCost( sid, startMonth, endMonth, startMonth, endMonth, 1 ) ) ); tariffPeriod.execute( req, ctx ); if( req.isAccepted() ) { for( NPayServiceCost cost : req.getServiceCost().get( sid ) ) { if( cost.cost != null ) { print( Math.round(cost.cost.doubleValue()) ); print (cost); print("yes"); break; } } } else { print("not"); } } |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |