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

Определение размера абонентской платы
http://forum.bitel.ru/viewtopic.php?f=19&t=5014
Страница 1 из 1

Автор:  lacost [ 20 янв 2011, 20:53 ]
Заголовок сообщения:  Определение размера абонентской платы

Необходимо определить размер абонплаты у конкретного пользователя.

Беру из wiki пример

http://wiki.bgbilling.ru/index.php/%D0% ... 1%82%D1%8B

Фрагмент скрипта, для определения размера абонентской платы по определенной услуге. API тарифов значительно поменялось для Npay в версии 5.0 рабочий вариант

Сразу ошибка в конструкторе NPayTariffContext

надо так:
NPayTariffContext ctx = new NPayTariffContext( setup.getModuleSetup( mid ), con, mid, startMonth, endMonth, startMonth, String.valueOf(cid), String.valueOf(sid) );

(не совсем уверен в последнем параметре. нужен он или нет?)

- Дальше вроде компилится - но результат не считает.
возвращает
req.toString()=accepted => false

Прошу разработчиков подсказать - что изменилось в 5.1 что перестал работать данный скрипт.

Автор:  Администратор [ 21 янв 2011, 11:42 ]
Заголовок сообщения:  Re: Определение размера абонентской платы

Выкладывайте скрин тарифа открытого, полный код скрипта в части получения абонплаты.

Автор:  lacost [ 21 янв 2011, 14:16 ]
Заголовок сообщения:  Re: Определение размера абонентской платы

Код:
import java.sql.Connection;
import java.util.Calendar;
import java.util.Collections;
import java.util.GregorianCalendar;
 
import bitel.billing.common.TimeUtils;
 
import ru.bitel.bgbilling.kernel.tariff.tree.server.TariffModuleTree;
import ru.bitel.bgbilling.kernel.tariff.tree.server.TariffTreeBuilder;
import ru.bitel.bgbilling.kernel.tariff.tree.server.TariffTreeSet;
import ru.bitel.bgbilling.modules.npay.tariff.server.NPayTariffContext;
import ru.bitel.bgbilling.modules.npay.tariff.server.NPayTariffRequest;
import ru.bitel.bgbilling.modules.npay.tariff.server.NPayTariffRequest.NPayServiceCost;
import ru.bitel.bgbilling.server.util.Setup;
 
public void main(setup, con, conSlave) {
   // код договора
   cid = 796;
   // на какой момент смотреть тариф
   time = new GregorianCalendar();
   // код услуги
   sid = 79;
   // код экземпляра модуля
   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.getModuleSetup( mid ), con, mid, startMonth, endMonth, startMonth, String.valueOf(cid), String.valueOf(sid) );
   //public NPayTariffContext(ModuleSetup moduleSetup, Connection con, int mid, Calendar startMonth, Calendar endMonth, Calendar currentDay, String cids, String serviceList)

   TariffTreeSet result = TariffTreeBuilder.getInstance().getRealtimeTariffTreeSet( con, cid, startMonth, "npay", mid, 0, 0 );

   for( TariffModuleTree tariffPeriod : result.getTreeList( time ) ) {
      
      print ("tariffPeriod=" + tariffPeriod);
      print("mid=" + tariffPeriod.getMid());
      print("module=" + tariffPeriod.getModule());
      print("treeId=" + tariffPeriod.getTreeId());


      NPayTariffRequest req = new NPayTariffRequest( mid, cid,  0); //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 ) ) );
      print ("before:: req.toString()=" + req);
      code = tariffPeriod.execute( req, ctx );
      if(req.getErrors().length()>0) {
         print("req.errors() = " + req.getErrors());
      }
      print ("after:: req.toString()=" + req);
      
      if( req.isAccepted() ) {
         for( NPayServiceCost cost : req.getServiceCost().get( sid ) ) {
            if( cost.cost != null ) {
               print( cost );
               break;
            }
         }
      }
   }
}


результат:
Код:
COMPLETE_TIME: 21.01.11 11:15:37
PROCESS_TIME: 37

OUT:
tariffPeriod=ru.bitel.bgbilling.kernel.tariff.tree.server.TariffModuleTree@4e2095[Unlocked]
mid=7
module=npay
treeId=12
before:: req.toString()=accepted => false
PARAMS: mid: 7; cid: 796
NPayServiceCost [serviceId: 79; date1: 01.01.2011; date2: 31.01.2011; serviceStart: 01.01.2011; serviceEnd: 31.01.2011; accountingPeriodDays: 31; amount: 1; cost: null; addCost: null; periodAmount: null; monthAmount: null]
HIST:
after:: req.toString()=accepted => false
PARAMS: mid: 7; cid: 796
NPayServiceCost [serviceId: 79; date1: 01.01.2011; date2: 31.01.2011; serviceStart: 01.01.2011; serviceEnd: 31.01.2011; accountingPeriodDays: 31; amount: 1; cost: null; addCost: null; periodAmount: null; monthAmount: null]
HIST:


Вложения:
st.gif
st.gif [ 8.1 КБ | Просмотров: 3695 ]

Автор:  lacost [ 26 янв 2011, 12:54 ]
Заголовок сообщения:  Re: Определение размера абонентской платы

up

Автор:  lacost [ 31 янв 2011, 13:02 ]
Заголовок сообщения:  Re: Определение размера абонентской платы

Вопрос к разработчикам:

Приведенный в wiki пример кода - работает правильно и ошибка у меня? или в 5.1 что-то изменилось, и данный код не работает?

Автор:  lacost [ 07 фев 2011, 12:24 ]
Заголовок сообщения:  Re: Определение размера абонентской платы

up

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