Выставляю на суд публики слегка переделаный скрипт, который должен переодически проверять наработку по трафику для всех договоров и выполнять действия, описанные блоксхемой выше.
Код:
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.ipn.bean.*;
import java.util.*;
import java.text.*; 
//номер контракта 
cid = event.getContractID(); 
//получение названия нужной таблици с траффиком 
evdate=event.getGenerateTime();
datefrm = new SimpleDateFormat("yyyyMM");
evyear=datefrm.format(evdate.getTime()).toString(); 
//получение траффика пользователя в данном отчетном периоде
ps = con.prepareStatement("SELECT SUM(amount) FROM ipn_contract_data_3_"+evyear+" WHERE cid=? AND sid=1");
ps.setInt( 1, cid);
rs = ps.executeQuery();
rs.first();
traffic = rs.getLong(1)/1073741824; //в гигабайтах 
//получение текущего типа шлюза пользователя 
ugrm = new UserGateRuleManager( con, 3 );
rules = ugrm.getUserGateRules( cid );
for( Iterator it = rules.iterator(); it.hasNext(); ){
   currule = it.next();
   if (currule.getGateID() == 1){ //gate IPN
      ruletypeID=currule.getRuleTypeId();
      break;
   }
   print("gates="+currule.getGateID());
} 
currentTariffID=chTariff.getTariffPlanID(); // получение id тарифного плана, в которых описаны лимиты по наработке
csm = new IPNContractStatusManager( con, 3 ); 
status =  csm.getContractStatus( cid );
userID=1; //admin 
switch ( currentTariffID ){
case 1:  // id=1 - тариф с наработкой 2 Гб до закрытия шлюза
      if ((traffic>2)&&(status=1)){
        csm.changeStatus( cid, 1, userID.intValue(), true ); //закрыт
    }else{
        If traffic<2{
   csm.changeStatus( cid, 2, userID.intValue(), true ); //открыт
   }else{
   csm.changeStatus( cid, 1, userID.intValue(), true ); //закрыт
   }
   }
    break;
case 2:  // id=2 - тариф с наработкой 2 Гб до закрытия шлюза
      if ((traffic>2)&&(status=2)){
        csm.changeStatus( cid, 1, userID.intValue(), true ); //закрыт
    }else{
        If traffic<2{
   csm.changeStatus( cid, 2, userID.intValue(), true ); //открыт
   }else{
   csm.changeStatus( cid, 1, userID.intValue(), true ); //закрыт
   }
   }
    break;
}
Скрипт пока не опробован, прошу проверить правильность синтаксиса beanshell и еще пара вопросов:
1. При закрытии шлюза необходимо передать в csm.changeStatus параметр "1", а при открытии? "2" или "0"?
2. В параметрах условного оператора if правильно ли я указал "&&" если имелось в виду "логическое И" (AND)