BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 20 июн 2025, 23:25

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: TariffRequest
СообщениеДобавлено: 28 фев 2010, 12:54 
Не в сети

Зарегистрирован: 04 апр 2008, 13:13
Сообщения: 87
Карма: 0
Если можно хотелось бы получить более детальную информацию по данному классу, т.к. он часто используем а в доках о нем кажется вообще ничего нет.

Стандартная задача с отключением абонентов при достижении нуля.
Но у меня используются разные тарифы.
В одном тарифе абонплата снимается за месяц безусловно.
В другом тарифе абонплата снимается посуточно и цена указана за сутки.
В третьем тарифе абонплата снимается посуточно но цена указана за месяц.

Возможно из за моего недопонимания как работать с классом 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 скрипта для разных тарифов использовать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 01 мар 2010, 14:14 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Версия какая?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 01 мар 2010, 23:53 
Не в сети

Зарегистрирован: 04 апр 2008, 13:13
Сообщения: 87
Карма: 0
Amir писал(а):
Версия какая?

4.6


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 16 май 2010, 22:20 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
dale писал(а):
Если можно хотелось бы получить более детальную информацию по данному классу, т.к. он часто используем а в доках о нем кажется вообще ничего нет.

+1
тоже очень хотелось бы подробностей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 17 май 2010, 06:29 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Хотелось бы знать, какие обязательные параметры нужны в запросах на тарификацию для разных модулей. Делал для pppoe и ipn - подбирал вручную.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 26 май 2010, 18:42 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
апну столь полезную тему


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 28 ноя 2010, 10:57 
Не в сети

Зарегистрирован: 10 сен 2010, 11:06
Сообщения: 6
Карма: 0
У кого нибудь таки появилась документация по данному классу? Какие параметры передавать в 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, поскольку в документации даже намека нет на столь важные и нужные классы.

_________________
cerbercrypt вер. 5.0 сборка 221
dialup вер. 5.0 сборка 243
ipn вер. 5.0 сборка 259
npay вер. 5.0 сборка 227
reports вер. 5.0 сборка 197


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 28 ноя 2010, 22:40 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Посмотрите как делается в ru.bitel.bgbilling.modules.npay.server.task.DebetStatusManageLocker
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 29 ноя 2010, 10:18 
Не в сети

Зарегистрирован: 10 сен 2010, 11:06
Сообщения: 6
Карма: 0
Cromeshnic писал(а):
Посмотрите как делается в ru.bitel.bgbilling.modules.npay.server.task.DebetStatusManageLocker
Изображение

Если вы предлагаете посмотреть в декомпилированный код, то для меня это слишком (я посмотрел в код). Я конечно могу разобраться в SQL запросе и написать похожий, но это уже будет далеко не API биллинга. Не хочется изобретать велосипед.

_________________
cerbercrypt вер. 5.0 сборка 221
dialup вер. 5.0 сборка 243
ipn вер. 5.0 сборка 259
npay вер. 5.0 сборка 227
reports вер. 5.0 сборка 197


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 29 ноя 2010, 10:50 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Нене, там как раз пример использования TariffRequest для вычисления суммы абонплат.

А официального API нет :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 30 ноя 2010, 14:40 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
http://wiki.bgbilling.ru/index.php/%D0% ... 1%82%D1%8B
У кого есть доступ к исходникам - киньте письмо. Откроем этот класс. Вытаскивайте код и пользуйтесь.
TariffRequest - слишком универсальный класс, по сути он передаёт атрибуты тарифного запроса и возвращает результат. Постепенно будем публиковать для каждого модуля как строить запросы для получения стоимости услуги в том или ином модуле.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 30 ноя 2010, 15:26 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Администратор писал(а):
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 - слишком универсальный класс, по сути он передаёт атрибуты тарифного запроса и возвращает результат. Постепенно будем публиковать для каждого модуля как строить запросы для получения стоимости услуги в том или ином модуле.

Зачет, давно пора !!!

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 30 ноя 2010, 19:04 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
В dialup и ipn есть ещё узел "конфигурация тарифа", куда можно запихивать любые пары "параметр=значение" и выдёргивать их через TariffRequest. Очень прикольная штука, пользуемся. :)
Вообще, подход тарифных деревьев - большой плюс BGBilling имхо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 03 дек 2010, 20:29 
Не в сети

Зарегистрирован: 03 дек 2010, 20:24
Сообщения: 1
Карма: 0
А каким образом с помощью TariffRequest можно получить информацию о структуре TariffRequest?
Задача получить информацию по тарифу в XML для выгрузки во внешнюю систему.

Есть ли примеры?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 03 дек 2010, 20:50 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
ещё класс неоткрыт, а получение скорей всего будет нечто того же как и всегда --- get set :)

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 24 дек 2010, 18:07 
Не в сети

Зарегистрирован: 10 сен 2010, 11:06
Сообщения: 6
Карма: 0
Администратор писал(а):
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]

посмотрю что с этим можно сделать :).

_________________
cerbercrypt вер. 5.0 сборка 221
dialup вер. 5.0 сборка 243
ipn вер. 5.0 сборка 259
npay вер. 5.0 сборка 227
reports вер. 5.0 сборка 197


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TariffRequest
СообщениеДобавлено: 25 дек 2010, 22:12 
Не в сети

Зарегистрирован: 10 сен 2010, 11:06
Сообщения: 6
Карма: 0
было бы очень круто если б кто нить выложил доки по классу "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");
   }
}

_________________
cerbercrypt вер. 5.0 сборка 221
dialup вер. 5.0 сборка 243
ipn вер. 5.0 сборка 259
npay вер. 5.0 сборка 227
reports вер. 5.0 сборка 197


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.051s | 49 Queries | GZIP : On ]