BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 19 апр 2024, 08:02

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




Начать новую тему Ответить на тему  [ Сообщений: 91 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Смена тарифного плана
СообщениеДобавлено: 21 ноя 2014, 15:59 
Не в сети

Зарегистрирован: 21 ноя 2014, 15:11
Сообщения: 393
Карма: 0
Здравствуйте, такая проблема:
Для личного кабинета надо сделать смену тарифного плана. Делаю это таким образом: sql Запросом в таблице contract_tariff происходит закрытие даты2 и открытие нового периода с дата2 равной null. При этом тарифный план сменяется, но не меняется скорость интернет-соединения у абонента. Версия биллинга 6.1. Если делать это через биллинг, то все работает. В чем может быть причина? Как сменить тарифный план sql Запросом?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 21 ноя 2014, 16:17 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
sql-запросом никак. Нужно бросить событие для биллинга об изменении тарифного плана. Лучше делать это из нашего java-скрипта. И желательно через наше api.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 21 ноя 2014, 17:39 
Не в сети

Зарегистрирован: 21 ноя 2014, 15:11
Сообщения: 393
Карма: 0
Создал скрипт BGBS и привязал к договору. Как бросить событие из личного кабинета?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 21 ноя 2014, 18:06 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Inspire писал(а):
Создал скрипт BGBS и привязал к договору. Как бросить событие из личного кабинета?

Вот тут было про это. Только я не понял причем тут личный кабинет ? Вы это событие можете бросить из глобального скрипта (и запустить его руками) или скрипта обработки какого-то события в биллинге. У вас какая задача?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 21 ноя 2014, 18:24 
Не в сети

Зарегистрирован: 21 ноя 2014, 15:11
Сообщения: 393
Карма: 0
Задача стоит сделать, чтобы абонент мог сменить тариф из личного кабинета


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 21 ноя 2014, 18:37 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Inspire писал(а):
Задача стоит сделать, чтобы абонент мог сменить тариф из личного кабинета


так он итак может сменить его из личного кабинета если настроить тарифную группу и добавить на договор. При чем тут sql-скрипты и bgbs?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 21 ноя 2014, 18:39 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
http://bgbilling.ru/v6.1/doc/ch01s21s07.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 21 ноя 2014, 18:52 
Не в сети

Зарегистрирован: 21 ноя 2014, 15:11
Сообщения: 393
Карма: 0
Да, есть такая тема. Проблема в том, что используется свой личный кабинет, а не этот :( Поэтому встал вопрос, как запустить обработку события смены тарифного плана из своего личного кабинета.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 21 ноя 2014, 19:03 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Inspire писал(а):
Да, есть такая тема. Проблема в том, что используется свой личный кабинет, а не этот :( Поэтому встал вопрос, как запустить обработку события смены тарифного плана из своего личного кабинета.

Тогда вам лучше послать http-запрос такой, какой уходит из клиента при смене тарифного плана . Запустите клиента в режиме debug(отдельный запускаемые файл там со словом debug)., тогда он все запросы будет в log-файл писать. Там будет
Код:
&action=UpdateContractTariffPlan

Вроде бы еще на web-сервисы не перевели эту часть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 21 ноя 2014, 19:11 
Не в сети

Зарегистрирован: 21 ноя 2014, 15:11
Сообщения: 393
Карма: 0
Спасибо, буду пробовать


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 14:45 
Не в сети

Зарегистрирован: 02 сен 2009, 12:10
Сообщения: 12
Карма: 0
stark писал(а):
http://bgbilling.ru/v6.1/doc/ch01s21s07.html

Здесь сказано как сменить тарифный план. А если абонент из ЛК (у нас штатный 6.0) захочет добавить ещё один тариф? Ну скажем подключить ещё один новый пакет цифрового ТВ, не отключая старый. Есть такая возможность?


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

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Цитата:
Ну скажем подключить ещё один новый пакет цифрового ТВ, не отключая старый. Есть такая возможность?
какое вообще отношение имеет подключение пакетов в ТВ к смене тарифа? Это вообще никак не связанные задачи, делаются в разных местах и разными частями системы.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 15:17 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
В своё время реализовывали ТВ через модуль Inet (тогда ещё не было TV). Чтобы можно было нормально изменять наборы тарифов со всеми зависимостями между ними, пришлось писать свою страничку в ЛК. Стандартная смена ТП через личный кабинет в нашем случаем совершенно не подходила.

Гемора много, зато теперь работает как нужно.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 15:53 
Не в сети

Зарегистрирован: 02 сен 2009, 12:10
Сообщения: 12
Карма: 0
dimOn писал(а):
Цитата:
Ну скажем подключить ещё один новый пакет цифрового ТВ, не отключая старый. Есть такая возможность?
какое вообще отношение имеет подключение пакетов в ТВ к смене тарифа? Это вообще никак не связанные задачи, делаются в разных местах и разными частями системы.

Начинали в 2009 году на 5.1 поэтому все пакеты у нас это просто тарифы, то есть связь в нашем случае прямая и жёсткая, как и отношение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 16:20 
Не в сети

Зарегистрирован: 21 ноя 2014, 15:11
Сообщения: 393
Карма: 0
bad_bot писал(а):
stark писал(а):
http://bgbilling.ru/v6.1/doc/ch01s21s07.html

Здесь сказано как сменить тарифный план. А если абонент из ЛК (у нас штатный 6.0) захочет добавить ещё один тариф? Ну скажем подключить ещё один новый пакет цифрового ТВ, не отключая старый. Есть такая возможность?

Там сказано, как сменить тп из ихнего web-сервиса.
При смене тарифа, отправляется такой гет запрос
http://сайт?module=contract&mid=0&action=ChangeTariff&command=change&tariff_group=1&step=1&to_tariff=14&from_date=01.12.2014&GUID16414177724087=

Но тут не указан contractId. В общем если просто вставить эту строку в браузер, то будет не понятно у кого будет меняться тариф :)

когда ввожу эту строку в браузере, то открывается форма ввода логина/пароля. В общем, не понятно, как сделать смену тарифа в своем лк


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 16:39 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
пакеты ТВ - это имеется в виду услуги в npay что ли?

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 16:45 
Не в сети

Зарегистрирован: 21 ноя 2014, 15:11
Сообщения: 393
Карма: 0
Пакеты тв тут не причем. Мне сейчас нужно просто сменить тариф на интернет из своего личного кабинета. Когда это делаешь из web-формы биллинга, то там делается:
1) пост запрос (когда логинишься)
2) гет запрос, когда выбираешь вкладку сменить тариф:
http://сайт/bgbilling/webexecuter?action=ChangeTariff&mid=0&module=contract&contractId=9
3) гет запрос, когда выбираешь новую дату:
http://сайт/bgbilling/webexecuter?module=contract&mid=0&action=ChangeTariff&command=change&tariff_group=1&step=0&to_tariff=14&GUID16414177724088=
3) гет запрос (когда нажимаешься кнопку сменить тариф):
http://сайт/bgbilling/webexecuter?module=contract&mid=0&action=ChangeTariff&command=change&tariff_group=1&step=1&to_tariff=14&from_date=01.12.2014&GUID16414177724087=

Т.е. мне в моем личном кабинете нужно вызвать метод changeTariff и передать в него все эти параметры. Как я понял из wiki код этого метода представлен здесь:

Код:
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.*;
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.common.*;
import ru.bitel.common.*;
import java.util.*;
import java.math.*;
 
int RSCM_MID = 2;
int RSCM_SID = 30;
 
public void onEvent( event, setup, con, conSlave )
{
   int cid = event.getContractId();
 
   BalanceUtils bu = new BalanceUtils( con );
   ChargeManager chm = new ChargeManager( con );
   ContractManager contractManager = new ContractManager( conSlave );
 
   Date dt = new Date();
   Calendar date = TimeUtils.convertDateToCalendar( dt );
 
   // цена смены
   BigDecimal changeCost = new BigDecimal( 100 );
 
   TariffTreeSet tts = contractManager.getRealtimeTariffTreeSet( cid, date, "rscm", RSCM_MID, true );
   TariffModuleTree tree = tts.getTree( date );
 
   if( tree != null )
   {
      TariffRequest req = new TariffRequest();
      req.setRequestParam( "sid", RSCM_SID );
      req.setRequestParam( "time", date );
 
      tree.processRequest( req );
 
      Float cost = req.getResponseParam( "cost" );
      Long divisor = req.getResponseParam( "divisor" );
 
      if( !req.wasAccepted() || cost == null || divisor == null  || divisor <= 0 )
      {
         error( "Incorrect result tariff RSCM request. cost: " + cost + "; devisor: " + devisor );
      }
      else
      {
         changeCost = Utils.roundBigDecimalSumm( new BigDecimal( cost / divisor ) );
 
         print( "Change cost: " + changeCost );
      }
   }
 
   // текущий баланс
   BigDecimal balance = bu.getBalance( dt, cid );
   if( balance.compareTo( changeCost ) < 0 )
   {
      // установка флага обработанности скриптом прервет стандартную смне тарифа
      event.setProcessed( true );
      event.setError( "Недостаточно средств для смены тарифа" );
      return;
   }
 
   // заносим расход
   Charge charge = new Charge();
   charge.setContractID( cid );
   charge.setChargeDate( dt );
   charge.setChargeTypeID( 4 );
   charge.setComment( "Смена тарифа через Web" );
   charge.setSumma( changeCost );
 
   chm.updateCharge( charge );
 
   // обновляем баланс
   bu.updateBalance( dt, cid );
 
   event.setMessage( "За смену тарифного плана с вас было удержано " + changeCost.toPlainString() + " руб." );
}

Но че за параметры ( event, setup, con, conSlave) не понятно. И почему у этих переменных такие исходные значения int RSCM_MID = 2; int RSCM_SID = 30;
Как мне это сделать смену тарифного плана в своем личном кабинете?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 16:55 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Inspire писал(а):
bad_bot писал(а):
stark писал(а):
http://bgbilling.ru/v6.1/doc/ch01s21s07.html

Здесь сказано как сменить тарифный план. А если абонент из ЛК (у нас штатный 6.0) захочет добавить ещё один тариф? Ну скажем подключить ещё один новый пакет цифрового ТВ, не отключая старый. Есть такая возможность?

Там сказано, как сменить тп из ихнего web-сервиса.
При смене тарифа, отправляется такой гет запрос
http://сайт?module=contract&mid=0&action=ChangeTariff&command=change&tariff_group=1&step=1&to_tariff=14&from_date=01.12.2014&GUID16414177724087=

Но тут не указан contractId. В общем если просто вставить эту строку в браузер, то будет не понятно у кого будет меняться тариф :)

когда ввожу эту строку в браузере, то открывается форма ввода логина/пароля. В общем, не понятно, как сделать смену тарифа в своем лк

Если запрос на /executer( то что пишется в логах клиента)там надо передавать user/pswd оператора и cid(код договора).
Если запрос на /webexecuter, то добавить user/pswd договора, cid и midAuth . Пример для захода на assist сразу с авторизацией:
Код:
http://127.0.0.1:8080/bgbilling/webexecuter?action=Pay&mid=130&module=assist&contractId=455&user=123456&pswd=123456&midAuth=10&summ=1


где user - это либо номер договора либо что-то еще (зависит от midAuth и ваших настроек).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 16:58 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Лучше все делайте через executer по возможности, там проще. Только там вроде нет отдельного action-а для смены тарифа, оператор сам вручную закрывает старый тариф и открывает новый. Вы так же можете делать 2 действия.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 17:09 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Inspire писал(а):
Т.е. мне в моем личном кабинете нужно вызвать метод changeTariff и передать в него все эти параметры. Как я понял из wiki код этого метода представлен здесь:
...
Но че за параметры ( event, setup, con, conSlave) не понятно. И почему у этих переменных такие исходные значения int RSCM_MID = 2; int RSCM_SID = 30;
Как мне это сделать смену тарифного плана в своем личном кабинете?


Нет, это не код этого метода. changeTariff меняет тариф, а потом бросает событие на смену тарифа. И это пример обработчика этого события. Он пытается узнать цену за смену тарифа из модуля rscm и повесить расход зачем-то(не знаю зачем, вешать расход, а не просто добавлять услугу rscm). Это просто чья-то конкретная реализация обработчика события, преследующая его конкретные цели( снять деньги за смену тарифа, а если денег нет, то не менять - не уверен что это работает).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 17:36 
Не в сети

Зарегистрирован: 21 ноя 2014, 15:11
Сообщения: 393
Карма: 0
stark писал(а):
Inspire писал(а):
Т.е. мне в моем личном кабинете нужно вызвать метод changeTariff и передать в него все эти параметры. Как я понял из wiki код этого метода представлен здесь:
...
Но че за параметры ( event, setup, con, conSlave) не понятно. И почему у этих переменных такие исходные значения int RSCM_MID = 2; int RSCM_SID = 30;
Как мне это сделать смену тарифного плана в своем личном кабинете?


Нет, это не код этого метода. changeTariff меняет тариф, а потом бросает событие на смену тарифа. И это пример обработчика этого события. Он пытается узнать цену за смену тарифа из модуля rscm и повесить расход зачем-то(не знаю зачем, вешать расход, а не просто добавлять услугу rscm). Это просто чья-то конкретная реализация обработчика события, преследующая его конкретные цели( снять деньги за смену тарифа, а если денег нет, то не менять - не уверен что это работает).

Спасибо за помощь. Походу, вот этот метод меняет тариф:
Код:
import bitel.billing.server.contract.bean.*;   
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.script.event.*;
import java.util.*;
import bitel.billing.common.*;
import bitel.billing.server.npay.bean.*;
import bitel.billing.server.admin.eventbus.event.*;
import bitel.billing.server.admin.eventbus.*;
 
private getPrevDate( date )
{
   Calendar result = new GregorianCalendar();   
   result.setTime( date );
   result.add( Calendar.DAY_OF_YEAR, -1 );
   return result;      
}
 
private void setTariff( cid, tariffId, date )
{
   ctm =  new ContractTariffManager(  con );
   cm = new ContractManager( con );
 
   t = null;
 
   //пытаемся найти на текущий момент тариф
   list = ctm.getContractTariffList(cid, date);
   if ( list.size() > 0)
   {
      t = list.get(0);
   }
 
 
   //Если нашли , то закрываем предыдушим днем
   createNew = true;
   changed = false;
     if ( t != null)
   {
      if ( t.getDate1() == null || t.getDate1().getTime().compareTo( date ) < 0 )
      {
         print ("close tariff..");
         changed = true;
         Calendar stopDate = getPrevDate( date) ;
         t.setDate2(  stopDate );
         ctm.updateContractTariff(  t );      
      }
      //если открыт сегодняшним числом  - ничего не делаем
      else if ( t.getDate1().getTime().compareTo( date ) == 0 )
      {
         print ("update tariff ");
         createNew = false;                  
         changed = true;
         t.setTariffPlanID( tariffId );
         t.setComment( "создан автоматически" );
         ctm.updateContractTariff( t );      
 
      }
   }
 
 
   // создаем новый
   if ( createNew )
   {
      print ("add new tariff..");
      changed = true;   
      t = new ContractTariff();
      t.setContractID( cid );
      t.setTariffPlanID( tariffId );
      t.setPos( 0 );
      t.setDate1(  TimeUtils.convertDateToCalendar( date ) );
      t.setDate2(  null );
      t.setComment( "создан автоматически" );               
      ctm.updateContractTariff(  t );      
   }
 
   if ( changed )
   {
      BillingEventBus.publish( new TariffChangedEvent( cid ) );
   }
}
 
private addNpayModule()
{
   ContractModuleManager manager = new ContractModuleManager( con );
   modules = manager.getContractModuleSet( cid );
   if ( !modules.contains( NPAY_MID ) )
   {
      ContractModule module = new ContractModule();
      module.setContractId( cid );
      module.setModuleId(    NPAY_MID );
      manager.addContractModule( module );
   }
}
 
private addNPayService( date )
{
   addNpayModule();
 
   ServiceObjectManager som = new ServiceObjectManager( con, NPAY_MID ) ;
 
 
   services = som.getServiceObjectList( cid, 0, 0, 0 );
   object = null;
 
   //TODO - переделать так чтобы искал в нужно врменном отрезке, а не последнюю незакрытую
   if ( services.size() > 0)
   {
      //ищем последнюю не закрытую .. 
      Date maxdate = new Date (0 );
      for ( ServiceObject  o : services )
      {
         if ( o.getDate2() == null && o.getDate1().compareTo( maxdate) >= 0   )
         {
            maxdate = o.getDate1();
            object = o;
         }
      }
 
   }   
 
 
   createNew = true;
   //Если нашли , то закрываем предыдушим днем
   if ( object != null)
   {
 
      if ( object.getDate1().compareTo( date ) < 0 )
      {
         print ("close pay service...");
         Calendar stopDate = getPrevDate( date) ;
 
         object.setDate2( stopDate.getTime() );
         print ("object.Date2=" + object.getDate2() );
 
         som.updateServiceObject( object );
      }
      //если открыт сегодняшним числом  - ничего не делаем
      else  if ( object.getDate1().compareTo( date ) == 0 )
      {
         print ("update pay service...");
         createNew = false;                  
         object.setComment( "Установлена скриптом" );
         som.updateServiceObject( object );
 
      }
   }
 
 
   if ( createNew )
   {
      // установка абонплаты
      print ("add pay service...");   
      object = new ServiceObject();
      object.setContractId( cid );
      object.setServiceId( PAY_SERVICE );
      object.setDate1( date );
      object.setComment( "Установлена скриптом" );
      som.updateServiceObject( object );
   }
 
}
 
private void setStatus( cid, date, statusId )
{
   status = new ContractStatus();
   status.setContractId( cid );
   status.setStatus( statusId );
   status.setDate1( TimeUtils.convertDateToCalendar( date ) );
   status.setComment( "установлен скриптом " );   
   sm = new ContractStatusManager( con );
   sm.changeStatus( status.clone(), USER_ID );   
}
 
//id услуги абонплат
PAY_SERVICE = 1;
NPAY_MID = 1;
 
 
TARIFF_BASE_ID = 103315;
TARIFF_LOCAL_ID = 103317;
TARIFF_EFIR_ID = 103316;
TARIFF_SERVICE_ID = 103312;
 
//id пользователя от имени которого будет изменяться статус договора
USER_ID = 0;
 
 
service = event.getContractService();
serviceId = service.getServiceId();
cid = event.getContractID();
print ("serviceId=" + serviceId);
date = service.getDate().getTime();
 
switch(serviceId)
 
{
//Подключение к сети КТВ на Базовый тариф (стоимость 330 рублей) – начинала начисляться абонплата и у абонента появлялся Базовый тариф.
case 5: setTariff(cid, TARIFF_BASE_ID, date); addNPayService( date );  break;
//Подключение к сети КТВ на Эфирный тариф (стоимость 330 рублей) – начинала начисляться абонплата и у абонента появлялся Эфирный тариф.
case 6: setTariff(cid, TARIFF_EFIR_ID, date); addNPayService( date ); break;
//Подключение к сети КТВ на Локальный тариф (стоимость 330 рублей) – начинала начисляться абонплата и у абонента появлялся Локальный тариф.
case 23: setTariff(cid, TARIFF_LOCAL_ID, date); addNPayService( date ); break;
//Подключение к сети КТВ на Служебный тариф (стоимость 0 рублей) – начинала начисляться абонплата и у абонента появлялся Служебный тариф.
case 7:  setTariff(cid, TARIFF_SERVICE_ID, date); addNPayService( date ); break;
//Льготное подключение к сети КТВ на Базовый тариф (0) – начинала начисляться абонплата и у абонента появлялся Базовый тариф.
case 8: setTariff(cid, TARIFF_BASE_ID, date); addNPayService( date );  break;
//Льготное подключение к сети КТВ на Эфирный тариф (0) – начинала начисляться абонплата и у абонента появлялся Эфирный тариф.
case 9:  setTariff(cid, TARIFF_EFIR_ID, date); addNPayService( date ); break;
//Льготное подключение к сети КТВ на Локальный тариф (0) – начинала начисляться абонплата и у абонента появлялся Локальный тариф.
case 10:  setTariff(cid, TARIFF_LOCAL_ID, date); addNPayService( date ); break;
//50 % подключение к сети КТВ на Базовый тариф (165) – начинала начисляться абонплата и у абонента появлялся Базовый тариф.
case 11:  setTariff(cid, TARIFF_BASE_ID, date); addNPayService( date ); break;
//50 % подключение к сети КТВ на Эфирный тариф (165) – начинала начисляться абонплата и у абонента появлялся Эфирный тариф.
case 12:  setTariff(cid, TARIFF_EFIR_ID, date); addNPayService( date ); break;
//50 % подключение к сети КТВ на Локальный тариф (165) – начинала начисляться абонплата и у абонента появлялся Локальный тариф.
case 13:  setTariff(cid, TARIFF_LOCAL_ID, date); addNPayService( date ); break;
//Повторное подключение к сети КТВ (100 рублей)  состояние переходит в активен
case 14:  setStatus(cid, date, KernelConst.CONTRACT_STATUS_ACTIVE); break;
//Бесплатное повторное подключение к сети КТВ (0 рублей) - состояние переходит в активен
case 15: setStatus(cid, date, KernelConst.CONTRACT_STATUS_ACTIVE); break;
//Переключение на Эфирный тариф (150) – у абонента вместо какого-либо тарифа появлялся Эфирный тариф.
case 16: setTariff(cid, TARIFF_EFIR_ID, date); break;
//Бесплатное переключение на Эфирный тариф (0) – у абонента вместо какого-либо тарифа появлялся Эфирный тариф.
case 17: setTariff(cid, TARIFF_EFIR_ID, date); break;
//Переключение на Базовый тариф (0) – у абонента вместо какого-либо тарифа появлялся Базовый тариф.
case 18: setTariff(cid, TARIFF_BASE_ID, date); break;
//Переключение на Локальный тариф (0) – у абонента вместо какого-либо тарифа появлялся Локальный тариф.
case 19: setTariff(cid, TARIFF_LOCAL_ID, date); break;
//Переключение на Служебный тариф (0) – у абонента вместо какого-либо тарифа появлялся Служебный тариф.
case 20: setTariff(cid, TARIFF_SERVICE_ID, date); break;
//Приостановление действия договора (0) –  статус абонента переводился в «приостановлен».
case 21: setStatus(cid, date, KernelConst.CONTRACT_STATUS_SUSPENDED); break;
//Расторжение договора (0) - статус абонента переводился в «закрыт».
case 22: setStatus(cid, date, KernelConst.CONTRACT_STATUS_CLOSED); break;
}


Т.е. мне надо сделать так, чтобы при нажатии кнопки сменить тариф, сработал этот метод?


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

Зарегистрирован: 21 ноя 2014, 15:11
Сообщения: 393
Карма: 0
Сейчас просто создал скрипт поведения, который связал с событием смены тарифа и авторизации в web.
Метод называется dotest. Код метода :
Код:
import bitel.billing.server.util.*;

public void onEvent( event, setup, con, conSlave )
{
   print( "Hello, world!" );
}


В браузере после авторизации пишу http://сайт/bgbilling/webexecuter?action=dotest
В веб форме ничего не происходит.
Куда он выводит этот хеллоу ворлд?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 18:39 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Inspire писал(а):
Сейчас просто создал скрипт поведения, который связал с событием смены тарифа и авторизации в web.
Метод называется dotest. Код метода :
Код:
import bitel.billing.server.util.*;

public void onEvent( event, setup, con, conSlave )
{
   print( "Hello, world!" );
}


В браузере после авторизации пишу http://сайт/bgbilling/webexecuter?action=dotest
В веб форме ничего не происходит.
Куда он выводит этот хеллоу ворлд?

а скрипт поведения на договор добавили?
И яне понял что такое doTest и почему оно должно вызывать этот скрипт ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 18:46 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Inspire писал(а):
stark писал(а):
Inspire писал(а):
Т.е. мне в моем личном кабинете нужно вызвать метод changeTariff и передать в него все эти параметры. Как я понял из wiki код этого метода представлен здесь:
...
Но че за параметры ( event, setup, con, conSlave) не понятно. И почему у этих переменных такие исходные значения int RSCM_MID = 2; int RSCM_SID = 30;
Как мне это сделать смену тарифного плана в своем личном кабинете?


Нет, это не код этого метода. changeTariff меняет тариф, а потом бросает событие на смену тарифа. И это пример обработчика этого события. Он пытается узнать цену за смену тарифа из модуля rscm и повесить расход зачем-то(не знаю зачем, вешать расход, а не просто добавлять услугу rscm). Это просто чья-то конкретная реализация обработчика события, преследующая его конкретные цели( снять деньги за смену тарифа, а если денег нет, то не менять - не уверен что это работает).

Спасибо за помощь. Походу, вот этот метод меняет тариф:
Код:
import bitel.billing.server.contract.bean.*;   
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.script.event.*;
import java.util.*;
import bitel.billing.common.*;
import bitel.billing.server.npay.bean.*;
import bitel.billing.server.admin.eventbus.event.*;
import bitel.billing.server.admin.eventbus.*;
 
private getPrevDate( date )
{
   Calendar result = new GregorianCalendar();   
   result.setTime( date );
   result.add( Calendar.DAY_OF_YEAR, -1 );
   return result;      
}
 
private void setTariff( cid, tariffId, date )
{
   ctm =  new ContractTariffManager(  con );
   cm = new ContractManager( con );
 
   t = null;
 
   //пытаемся найти на текущий момент тариф
   list = ctm.getContractTariffList(cid, date);
   if ( list.size() > 0)
   {
      t = list.get(0);
   }
 
 
   //Если нашли , то закрываем предыдушим днем
   createNew = true;
   changed = false;
     if ( t != null)
   {
      if ( t.getDate1() == null || t.getDate1().getTime().compareTo( date ) < 0 )
      {
         print ("close tariff..");
         changed = true;
         Calendar stopDate = getPrevDate( date) ;
         t.setDate2(  stopDate );
         ctm.updateContractTariff(  t );      
      }
      //если открыт сегодняшним числом  - ничего не делаем
      else if ( t.getDate1().getTime().compareTo( date ) == 0 )
      {
         print ("update tariff ");
         createNew = false;                  
         changed = true;
         t.setTariffPlanID( tariffId );
         t.setComment( "создан автоматически" );
         ctm.updateContractTariff( t );      
 
      }
   }
 
 
   // создаем новый
   if ( createNew )
   {
      print ("add new tariff..");
      changed = true;   
      t = new ContractTariff();
      t.setContractID( cid );
      t.setTariffPlanID( tariffId );
      t.setPos( 0 );
      t.setDate1(  TimeUtils.convertDateToCalendar( date ) );
      t.setDate2(  null );
      t.setComment( "создан автоматически" );               
      ctm.updateContractTariff(  t );      
   }
 
   if ( changed )
   {
      BillingEventBus.publish( new TariffChangedEvent( cid ) );
   }
}
 
private addNpayModule()
{
   ContractModuleManager manager = new ContractModuleManager( con );
   modules = manager.getContractModuleSet( cid );
   if ( !modules.contains( NPAY_MID ) )
   {
      ContractModule module = new ContractModule();
      module.setContractId( cid );
      module.setModuleId(    NPAY_MID );
      manager.addContractModule( module );
   }
}
 
private addNPayService( date )
{
   addNpayModule();
 
   ServiceObjectManager som = new ServiceObjectManager( con, NPAY_MID ) ;
 
 
   services = som.getServiceObjectList( cid, 0, 0, 0 );
   object = null;
 
   //TODO - переделать так чтобы искал в нужно врменном отрезке, а не последнюю незакрытую
   if ( services.size() > 0)
   {
      //ищем последнюю не закрытую .. 
      Date maxdate = new Date (0 );
      for ( ServiceObject  o : services )
      {
         if ( o.getDate2() == null && o.getDate1().compareTo( maxdate) >= 0   )
         {
            maxdate = o.getDate1();
            object = o;
         }
      }
 
   }   
 
 
   createNew = true;
   //Если нашли , то закрываем предыдушим днем
   if ( object != null)
   {
 
      if ( object.getDate1().compareTo( date ) < 0 )
      {
         print ("close pay service...");
         Calendar stopDate = getPrevDate( date) ;
 
         object.setDate2( stopDate.getTime() );
         print ("object.Date2=" + object.getDate2() );
 
         som.updateServiceObject( object );
      }
      //если открыт сегодняшним числом  - ничего не делаем
      else  if ( object.getDate1().compareTo( date ) == 0 )
      {
         print ("update pay service...");
         createNew = false;                  
         object.setComment( "Установлена скриптом" );
         som.updateServiceObject( object );
 
      }
   }
 
 
   if ( createNew )
   {
      // установка абонплаты
      print ("add pay service...");   
      object = new ServiceObject();
      object.setContractId( cid );
      object.setServiceId( PAY_SERVICE );
      object.setDate1( date );
      object.setComment( "Установлена скриптом" );
      som.updateServiceObject( object );
   }
 
}
 
private void setStatus( cid, date, statusId )
{
   status = new ContractStatus();
   status.setContractId( cid );
   status.setStatus( statusId );
   status.setDate1( TimeUtils.convertDateToCalendar( date ) );
   status.setComment( "установлен скриптом " );   
   sm = new ContractStatusManager( con );
   sm.changeStatus( status.clone(), USER_ID );   
}
 
//id услуги абонплат
PAY_SERVICE = 1;
NPAY_MID = 1;
 
 
TARIFF_BASE_ID = 103315;
TARIFF_LOCAL_ID = 103317;
TARIFF_EFIR_ID = 103316;
TARIFF_SERVICE_ID = 103312;
 
//id пользователя от имени которого будет изменяться статус договора
USER_ID = 0;
 
 
service = event.getContractService();
serviceId = service.getServiceId();
cid = event.getContractID();
print ("serviceId=" + serviceId);
date = service.getDate().getTime();
 
switch(serviceId)
 
{
//Подключение к сети КТВ на Базовый тариф (стоимость 330 рублей) – начинала начисляться абонплата и у абонента появлялся Базовый тариф.
case 5: setTariff(cid, TARIFF_BASE_ID, date); addNPayService( date );  break;
//Подключение к сети КТВ на Эфирный тариф (стоимость 330 рублей) – начинала начисляться абонплата и у абонента появлялся Эфирный тариф.
case 6: setTariff(cid, TARIFF_EFIR_ID, date); addNPayService( date ); break;
//Подключение к сети КТВ на Локальный тариф (стоимость 330 рублей) – начинала начисляться абонплата и у абонента появлялся Локальный тариф.
case 23: setTariff(cid, TARIFF_LOCAL_ID, date); addNPayService( date ); break;
//Подключение к сети КТВ на Служебный тариф (стоимость 0 рублей) – начинала начисляться абонплата и у абонента появлялся Служебный тариф.
case 7:  setTariff(cid, TARIFF_SERVICE_ID, date); addNPayService( date ); break;
//Льготное подключение к сети КТВ на Базовый тариф (0) – начинала начисляться абонплата и у абонента появлялся Базовый тариф.
case 8: setTariff(cid, TARIFF_BASE_ID, date); addNPayService( date );  break;
//Льготное подключение к сети КТВ на Эфирный тариф (0) – начинала начисляться абонплата и у абонента появлялся Эфирный тариф.
case 9:  setTariff(cid, TARIFF_EFIR_ID, date); addNPayService( date ); break;
//Льготное подключение к сети КТВ на Локальный тариф (0) – начинала начисляться абонплата и у абонента появлялся Локальный тариф.
case 10:  setTariff(cid, TARIFF_LOCAL_ID, date); addNPayService( date ); break;
//50 % подключение к сети КТВ на Базовый тариф (165) – начинала начисляться абонплата и у абонента появлялся Базовый тариф.
case 11:  setTariff(cid, TARIFF_BASE_ID, date); addNPayService( date ); break;
//50 % подключение к сети КТВ на Эфирный тариф (165) – начинала начисляться абонплата и у абонента появлялся Эфирный тариф.
case 12:  setTariff(cid, TARIFF_EFIR_ID, date); addNPayService( date ); break;
//50 % подключение к сети КТВ на Локальный тариф (165) – начинала начисляться абонплата и у абонента появлялся Локальный тариф.
case 13:  setTariff(cid, TARIFF_LOCAL_ID, date); addNPayService( date ); break;
//Повторное подключение к сети КТВ (100 рублей)  состояние переходит в активен
case 14:  setStatus(cid, date, KernelConst.CONTRACT_STATUS_ACTIVE); break;
//Бесплатное повторное подключение к сети КТВ (0 рублей) - состояние переходит в активен
case 15: setStatus(cid, date, KernelConst.CONTRACT_STATUS_ACTIVE); break;
//Переключение на Эфирный тариф (150) – у абонента вместо какого-либо тарифа появлялся Эфирный тариф.
case 16: setTariff(cid, TARIFF_EFIR_ID, date); break;
//Бесплатное переключение на Эфирный тариф (0) – у абонента вместо какого-либо тарифа появлялся Эфирный тариф.
case 17: setTariff(cid, TARIFF_EFIR_ID, date); break;
//Переключение на Базовый тариф (0) – у абонента вместо какого-либо тарифа появлялся Базовый тариф.
case 18: setTariff(cid, TARIFF_BASE_ID, date); break;
//Переключение на Локальный тариф (0) – у абонента вместо какого-либо тарифа появлялся Локальный тариф.
case 19: setTariff(cid, TARIFF_LOCAL_ID, date); break;
//Переключение на Служебный тариф (0) – у абонента вместо какого-либо тарифа появлялся Служебный тариф.
case 20: setTariff(cid, TARIFF_SERVICE_ID, date); break;
//Приостановление действия договора (0) –  статус абонента переводился в «приостановлен».
case 21: setStatus(cid, date, KernelConst.CONTRACT_STATUS_SUSPENDED); break;
//Расторжение договора (0) - статус абонента переводился в «закрыт».
case 22: setStatus(cid, date, KernelConst.CONTRACT_STATUS_CLOSED); break;
}


Т.е. мне надо сделать так, чтобы при нажатии кнопки сменить тариф, сработал этот метод?



Вы бы ссылку на wiki чтоли дали, откуда он, там хоть описание наверное есть. Я не знаю где этот код вызывается . По самому коду это сложно определить, это просто методы, которые кто-то вызывает, скорее всего из какого-то обработчика события.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 18:51 
Не в сети

Зарегистрирован: 21 ноя 2014, 15:11
Сообщения: 393
Карма: 0
Вот ссылка на вики http://wiki.bitel.ru/index.php/%D0%9E%D ... 1%82%D1%83

Да, добавил на договор. При смене тарифа сработал, в логах договора появился dotest. Там в out - hello world.
doTest - Название созданного мною скрипта поведения, который срабатывает при авторизации в веб (но почему-то не срабатывает) или при смене тарифа пользователем (тут сработал).
Я просто пытаюсь на простых примерах понять, как мне самому можно вызвать срабатывание этого скрипта, чтобы в дальнейшем заменить его скриптом смены тарифного плана из своего личного кабинета. Т.е. мне надо, чтобы doTest срабатывал, например, если я в браузере пропишу http://сайт/bgbilling/webexecuter?action=doTest. Тогда я смогу заменить его на смену тарифного плана (если найду реализацию этого метода на вики) и буду счастлив. Вы писали, что через executer проще. Через executer работает сам биллинг, там вообще без понятия как команды передавать ему из личного кабинета потому что нигде нет шаблона команд.


Короче, кажется, я осознал, что смена тарифного плана - это не скрипт поведения, а событие. т.е. мне нужно из личного кабинета запустить событие смены тп. А скрипт поведения максимум может реагировать на это, но никак не делать смену тп. Если я правильно разобрался, то у меня вопрос, как запустить событие смены тп с передачей в него параметров из своего лк?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 21:11 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Смена тарифа - это экшен, соответственно, это не событие и не скрипт поведения. Напишите лучше, как у вас работает свой личный кабинет. Если он у вас реализован биллингом, то это одно, если это внешний сервер, то это другое. Решать задачу можно разными способами.

Для меня самый простой способ - написать свой веб-экшен с помощью динамического кода и в конфиге сервера связать свой код с конкретным действием в личном кабинете. Плюс поменять пару файликов типа js, css, xml на сервере биллинга.

Вот ссылка, по которой у меня загружается страничка со сменой пароля:
Код:
http://xxx/bgbilling/webexecuter?action=ChangeTariffPlan&mid=contract&contractId=yyy

Вот конфиг, который привязывает эту ссылку к динамическому коду:
Код:
# Смена тарифных планов
dynaction:contract.web.ActionChangeTariffPlan=ru.bbb.contract.action.web.ActionChangeTariffPlan


В классе динамического кода примерно следующее:
Код:
package ru.bbb.contract.action.web;
public class ActionChangeTariffPlan extends ActionBase {
   @Override
   public void doAction() throws Exception {
      // Делаем полезное
   }
}


Добавить новый тариф можно примерно так:
Код:
            ContractTariff newTariff = new ContractTariff();
            TariffGroup tariffGroup = getTariffGroup(inetId);
            
            newTariff.setContractId(cid);
            newTariff.setDate1(TimeUtils.convertDateToCalendar(fromDate));
            newTariff.setComment("Смена тарифного плана через Web");
            newTariff.setPos(tariffGroup.getPos());
            newTariff.setTariffPlanId(inetId);
            
            contractTariffManager.updateContractTariff(newTariff);
            
            this.context.publishAfterCommit(new ContractTariffChangedEvent(this.cid));
            this.context.publishAfterCommit(new ContractTariffUpdateEvent(userID, cid, newTariff, true));

Ещё проще закрытие тарифа датой или удаление.

Надеюсь, я вас правильно понял. Если нет, то пишите конкретнее, что у вас есть и что вы хотите видеть в итоге.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 24 ноя 2014, 21:13 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Да, для версии 6.1 всё может работать по-другому - у нас пока 6.0.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 25 ноя 2014, 11:22 
Не в сети

Зарегистрирован: 21 ноя 2014, 15:11
Сообщения: 393
Карма: 0
Кажется это то, что мне нужно. Мои личный кабинет написан на php на сервере apache. У себя на странице смены тарифа я загружаю из бд список доступных тарифов. Пользователь выбирает новый тариф из этого списка и выбирает с какого числа будет действовать новый тариф, и нажимает кнопку сменить тариф. При наступлении этой даты, новый тариф должен вступить в силу. Вот что я пытаюсь сделать.
А этот конфиг прописывается, как я понял, в конфиге биллинга (сервис->настройка->конфигурация)?
Код:
# Смена тарифных планов
dynaction:contract.web.ActionChangeTariffPlan=ru.bbb.contract.action.web.ActionChangeTariffPlan

На счет динамического кода: он должен быть в глобальном скрипте поведения или привязан к событийной модели, т.е. неглобальный?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 25 ноя 2014, 12:48 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Цитата:
А этот конфиг прописывается, как я понял, в конфиге биллинга (сервис->настройка->конфигурация)?
да

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена тарифного плана
СообщениеДобавлено: 25 ноя 2014, 12:49 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Цитата:
На счет динамического кода: он должен быть в глобальном скрипте поведения или привязан к событийной модели, т.е. неглобальный?
он вообще никакого отношения к любым скриптам поведения и событиям не должен иметь, это просто класс в дин.коде.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 91 ]  На страницу 1, 2, 3, 4  След.

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


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

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


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

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