Выставляю на суд публики слегка переделаный скрипт, который должен переодически проверять наработку по трафику для всех договоров и выполнять действия, описанные блоксхемой выше.
Код:
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)