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/