Определение размера абонентской платы
Материал из BiTel WiKi
(Различия между версиями)
Leon (Обсуждение | вклад) (Изменение API для версии 5.0) |
Admin (Обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
- | + | Для версии 5.0, 5.1 Предтарификация с определением стоимости абонплат за будущий месяц. | |
- | + | ||
- | + | ||
<source lang="java"> | <source lang="java"> | ||
- | import java. | + | import java.math.*; |
- | import | + | import bitel.billing.server.npay.Calculator; |
+ | import bitel.billing.common.TimeUtils; | ||
- | + | public void main(setup, con, conSlave) | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
{ | { | ||
- | + | Calendar dt = new GregorianCalendar(); | |
- | + | dt.set(Calendar.DAY_OF_MONTH ,31); | |
- | + | ||
- | + | Calculator calculator = new Calculator(); | |
- | + | print(TimeUtils.convertCalendarToDateString(dt)); | |
- | + | calculator.setExecutingTime(dt); | |
- | + | calculator.setPreCalc(); | |
- | + | calculator.initTask(setup, 0, "mid=16"); | |
- | + | calculator.setCids("12345"); | |
- | + | calculator.startTask(); | |
- | + | ||
- | + | if (!calculator.isCalcErrors()) | |
- | + | { | |
- | + | BigDecimal planAccount = BigDecimal.ZERO; | |
- | + | Map planAccountMap = calculator.getCostCache().getContractAccounts(); | |
- | + | for (Integer contractId : ru.bitel.common.Utils.stringToIntegerList("12345")) | |
+ | { | ||
+ | if(planAccountMap.get(contractId)!=null){ | ||
+ | planAccount = planAccount.add((BigDecimal)planAccountMap.get(contractId)); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | print(planAccount); | ||
+ | } | ||
} | } | ||
</source> | </source> | ||
+ | http://forum.bgbilling.ru/viewtopic.php?f=16&t=4076 | ||
- | + | ||
+ | Фрагмент скрипта, для определения размера абонентской платы по определенной услуге. | ||
API тарифов значительно поменялось для Npay в версии 5.0 | API тарифов значительно поменялось для Npay в версии 5.0 | ||
рабочий вариант | рабочий вариант | ||
Строка 107: | Строка 101: | ||
} | } | ||
} | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | Для версии 4.6. Работает при простых абонплатах. | ||
+ | |||
+ | <source lang="java"> | ||
+ | import java.sql.*; | ||
+ | import java.util.*; | ||
+ | |||
+ | import bitel.billing.server.contract.bean.*; | ||
+ | import bitel.billing.server.tariff.*; | ||
+ | import bitel.billing.server.util.*; | ||
+ | |||
+ | // код договора | ||
+ | cid = 455; | ||
+ | // на какой момент смотреть тариф | ||
+ | time = new GregorianCalendar(); | ||
+ | // код услуги | ||
+ | sid = 79; | ||
+ | // код экземпляра модуля | ||
+ | mid = 66; | ||
+ | |||
+ | tts = new ContractManager( con ).getRealtimeTariffTreeSet( cid, time, "npay", mid, true ); | ||
+ | // перебор тарифов в порядке позиций сначала персональных, потом глобальных | ||
+ | for( TariffModuleTree tree : tts.getTreeList( time ) ) | ||
+ | { | ||
+ | req = new TariffRequest(); | ||
+ | req.setRequestParam( "action", "calculate" ); | ||
+ | req.setRequestParam( "sid", sid ); | ||
+ | // считаем как будто абонплата подключена весь месяц | ||
+ | req.setRequestParam( "month_days", 1 ); | ||
+ | req.setRequestParam( "period_days", 1 ); | ||
+ | |||
+ | tree.processRequest( req ); | ||
+ | |||
+ | cost = (Float)req.getResponseParam( "cost" ); | ||
+ | if( req.wasAccepted() && | ||
+ | cost != null ) | ||
+ | { | ||
+ | print( cost ); | ||
+ | break; | ||
+ | } | ||
} | } | ||
</source> | </source> |
Версия 10:51, 29 июля 2010
Для версии 5.0, 5.1 Предтарификация с определением стоимости абонплат за будущий месяц.
import java.math.*; import bitel.billing.server.npay.Calculator; import bitel.billing.common.TimeUtils; public void main(setup, con, conSlave) { Calendar dt = new GregorianCalendar(); dt.set(Calendar.DAY_OF_MONTH ,31); Calculator calculator = new Calculator(); print(TimeUtils.convertCalendarToDateString(dt)); calculator.setExecutingTime(dt); calculator.setPreCalc(); calculator.initTask(setup, 0, "mid=16"); calculator.setCids("12345"); calculator.startTask(); if (!calculator.isCalcErrors()) { BigDecimal planAccount = BigDecimal.ZERO; Map planAccountMap = calculator.getCostCache().getContractAccounts(); for (Integer contractId : ru.bitel.common.Utils.stringToIntegerList("12345")) { if(planAccountMap.get(contractId)!=null){ planAccount = planAccount.add((BigDecimal)planAccountMap.get(contractId)); } } print(planAccount); } }
http://forum.bgbilling.ru/viewtopic.php?f=16&t=4076
Фрагмент скрипта, для определения размера абонентской платы по определенной услуге.
API тарифов значительно поменялось для Npay в версии 5.0
рабочий вариант
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; // код договора cid = 455; // на какой момент смотреть тариф time = new GregorianCalendar(); // код услуги sid = 79; // код экземпляра модуля mid = 66; 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, 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( cost ); break; } } } }
Для версии 4.6. Работает при простых абонплатах.
import java.sql.*; import java.util.*; import bitel.billing.server.contract.bean.*; import bitel.billing.server.tariff.*; import bitel.billing.server.util.*; // код договора cid = 455; // на какой момент смотреть тариф time = new GregorianCalendar(); // код услуги sid = 79; // код экземпляра модуля mid = 66; tts = new ContractManager( con ).getRealtimeTariffTreeSet( cid, time, "npay", mid, true ); // перебор тарифов в порядке позиций сначала персональных, потом глобальных for( TariffModuleTree tree : tts.getTreeList( time ) ) { req = new TariffRequest(); req.setRequestParam( "action", "calculate" ); req.setRequestParam( "sid", sid ); // считаем как будто абонплата подключена весь месяц req.setRequestParam( "month_days", 1 ); req.setRequestParam( "period_days", 1 ); tree.processRequest( req ); cost = (Float)req.getResponseParam( "cost" ); if( req.wasAccepted() && cost != null ) { print( cost ); break; } }