forum.bitel.ru http://forum.bitel.ru/ |
|
Отказался работать скрипт в 5.1 (getStatusList) http://forum.bitel.ru/viewtopic.php?f=22&t=5397 |
Страница 1 из 1 |
Автор: | aiwbend [ 20 апр 2011, 15:34 ] |
Заголовок сообщения: | Отказался работать скрипт в 5.1 (getStatusList) |
Доброго времени суток. После обновления сервера с 4.6 на 5.1 перестал работать скрипт "Управление статусом договора по состоянию баланса" Сам код: Код: import bitel.billing.server.contract.bean.*; import bitel.billing.server.tariff.bean.*; import bitel.billing.server.script.event.*; import bitel.billing.server.service.bean.*; import bitel.billing.server.tariff.*; import bitel.billing.server.util.*; import bitel.billing.server.npay.*; import bitel.billing.server.task.bean.RunTaskData; import bitel.billing.server.task.bean.RunTaskDataManager; import java.util.*; import bitel.billing.common.KernelConst; import ru.bitel.bgbilling.server.util.ModuleSetup; import bitel.billing.server.contract.bean.ContractStatusManager; import bitel.billing.server.ipn.bean.*; import bitel.billing.server.npay.bean.ServiceObjectManager; import bitel.billing.server.npay.bean.ServiceObject; // Если это таймер на начало месяца, в п.1, иначе выход // соответственно не забываем добавить параметр запуска в задачу "flag=1" // (вместо 1 подставляем любое число, но оно же должно быть в следующем условии =) if (event.getFlag() != 6 ) { return; } // номер модуля NPAY NPAY_MID = 5; DateNow = new GregorianCalendar(); cid = event.getContractID(); cstm = new ContractStatusManager( con ); // округляем день (на 00:00:00) события egt = event.getGenerateTime(); df = egt.clone(); df.clear(); df.set(egt.get(Calendar.YEAR), egt.get(Calendar.MONTH), egt.get(Calendar.DAY_OF_MONTH)); // получаем день, предыдущий событию dt = df.clone(); dt.roll(Calendar.DAY_OF_YEAR, -1); db = df.clone(); db.roll(Calendar.MONTH, -2); print( df ); print( dt ); print( db ); // определяем текущий статус договора StatusContractList = cstm.getStatusList(cid, event.getGenerateTime()); if (StatusContractList.size() == 0) return; StatusContract = StatusContractList.get(0); print("StatusContract.getStatus():"+StatusContract.getStatus() ); contract = new ContractManager(con).getContractByID(cid); contract_groups = contract.getGroups(); print ("rpynna:"+contract_groups); print (1L); // выбираем только нужную группу договоров (нам нужна только 1 группа) if ((contract_groups & (1L<<1)) > 0) { internet = 1; } else { internet = 0; } print (internet); if( StatusContract.getStatus() == 0 && internet == 1) { // 1. определить нужно ли приостанавливать договор (если есть абонплата и баланс меньше лимита) // 1.1 определить баланс и лимит: если баланс > лимита - выход, если меньше, то см. п.1.2 ctm = new ContractTariffManager( con ); csm = new ContractServiceManager( con ); cu = new ContractUtils( con ); cm = new ContractManager( con ); cn = cm.getContractByID( cid ); tts = cm.getRealtimeTariffTreeSet( cid, df, "npay", NPAY_MID, true ); msu = new ModuleAndServiceUtils( con ); bu = new BalanceUtils( con ); tpm = new TariffPlanManager(con); // получаем текущий баланс (с учетом данного платежа) balance = bu.getBalance(event.getGenerateTime(), cid); limit = cn.getLimit(); fbm = cn.getFakeBalanceMode(); bm = cn.getBalanceMode(); print ( "balance = "+balance ); print ( "limit = "+limit ); print ( "fbm = "+fbm+"; bm = "+bm ); // 1.2 получить наработку для всех услуг типа "Абонплата" и если она больше 0, то в п.2 иначе выход totalCost = 0d; // получаем список услуг som = new ServiceObjectManager(con,NPAY_MID); serviceList = som.getServiceObjectList( cid, -1 , -1, -1); for( Iterator it = serviceList.iterator(); it.hasNext(); ) { service = (ServiceObject)it.next(); if ( TimeUtils.dateInRange( TimeUtils.convertCalendarToDate( egt ), service.getDate1(), service.getDate2() ) ) { sid = service.getServiceId(); // считаем сумму абонплаты // перебор тарифов в порядке позиций сначала персональных, потом глобальных 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 ); tree.processRequest( req ); cost = (Double) req.getResponseParam( "cost" ); print ( "cost:" + cost ); if( req.wasAccepted() && cost != null ) { print( cost ); totalCost += cost; break; } } } } print ("totalCost = "+totalCost); if ( totalCost <= 0 || balance-totalCost >= limit) { print ( "Все ОК!" ); return; } // 2. Приостановить договор. установить статус "Приостановлен" //newdate = DateNow; //newdate.set (2011,1,4); ContractStatus status = new ContractStatus(); status.setContractId( cid ); status.setDate1( DateNow); status.setDate2( null ); status.setStatus( KernelConst.CONTRACT_STATUS_SUSPENDED); status.setComment( "Недостаточно средств" ); cstm.changeStatus( status,0 ); //Закрываем шлюз modset = new ModuleSetup(con, 3); (new IPNContractStatusManager(con, 3, modset)).changeStatus(cid, 2, 0, true); StatusContract = cstm.getStatus(cid, df); // print("cm.getStatus("+df+"):"+StatusContract.getStatus() ); } Логи: ERROR [Thread-9] script - Eval error: Sourced file: Function [id:2; title:Блокировка статуса] : Error in method invocation: Method getStatusList( int, java.util.GregorianCalendar ) not found in class'bitel.billing.server.contract.bean.ContractStatusManager' : at Line: 55 : in file: Function [id:2; title:Блокировка статуса] : cstm .getStatusList ( cid , event .getGenerateTime ( ) ) Код: // определяем текущий статус договора StatusContractList = cstm.getStatusList(cid, event.getGenerateTime()); if (StatusContractList.size() == 0) return; StatusContract = StatusContractList.get(0); print("StatusContract.getStatus():"+StatusContract.getStatus() ); contract = new ContractManager(con).getContractByID(cid); contract_groups = contract.getGroups(); print ("rpynna:"+contract_groups); print (1L); Сам проблему решить не смог, надеюсь на вашу помощь. |
Автор: | dimOn [ 20 апр 2011, 15:39 ] |
Заголовок сообщения: | Re: Отказался работать скрипт в 5.1 (getStatusList) |
Код: public List<ContractStatus> getStatusList( int cid, java.util.Date date ) throws SQLException теперь дата там, а не календарь... |
Автор: | Phricker [ 20 апр 2011, 15:43 ] |
Заголовок сообщения: | Re: Отказался работать скрипт в 5.1 (getStatusList) |
aiwbend писал(а): ERROR [Thread-9] script - Eval error: Sourced file: Function [id:2; title:Блокировка статуса] : Error in method invocation: Method getStatusList( int, java.util.GregorianCalendar ) not found in class'bitel.billing.server.contract.bean.ContractStatusManager' : at Line: 55 : in file: Function [id:2; title:Блокировка статуса] : cstm .getStatusList ( cid , event .getGenerateTime ( ) ) Переделайте GregorianCalendar в дату |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |