на тестовом сервере поднял 4.5 и решил его перевести на 4.6.
перевод осуществился легко, а вот со скриптами загвоздка.
сам скрипт
Код:
import java.sql.*;
import java.util.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.*;
import bitel.billing.server.util.*;
import bitel.billing.common.KernelConst;
// код услуги
sid = 6;
// код экземпляра модуля
mid = 2;
//Группа "Недостаточно средств"
GROUP_ERROR_BALANCE = 4;
if( event.getFlag() != 1 ) {
return;
};
cid = event.getContractID();
DateNow = new GregorianCalendar();
contract = new ContractManager(con).getContractByID(cid);
if (contract == null){
return;
};
BalanceMode = contract.getBalanceMode();
if (BalanceMode == 0){
//Пропускаем тех кто работает по факту
return;
};
contract_status_manager = new ContractStatusManager(con);
status = contract_status_manager.getStatus(cid, DateNow);
contract_status = KernelConst.CONTRACT_STATUS_ACTIVE;
if (status != null)
{
contract_status = status.getStatus();
}
if (contract_status == null)
{
contract_status = KernelConst.CONTRACT_STATUS_ACTIVE;
};
if (contract_status != KernelConst.CONTRACT_STATUS_ACTIVE)
{
//Пропускаем не активные договора
return;
};
date_str=TimeUtils.format(DateNow, "yyyy-MM-dd");
//Проверяем привязана ли услуга "абонплата"
abn_count = "0";
query_check_abn =
" SELECT npay_service_object_"+mid+".col"+
" FROM contract_service"+
" LEFT JOIN npay_service_object_"+mid+
" ON (contract_service.id=npay_service_object_"+mid+".csid)"+
" WHERE (contract_service.date1 is NULL OR contract_service.date1<='"+date_str+"') AND"+
" (contract_service.date2 is NULL OR contract_service.date2>='"+date_str+"') AND"+
" contract_service.sid='"+sid+"' AND contract_service.cid='"+cid+"'";
re_check_abn = con.prepareStatement(query_check_abn);
rs_check_abn = re_check_abn.executeQuery();
while (rs_check_abn.next())
{
if (rs_check_abn.getString(1) == null)
{
abn_count = "1";
}
else
{
abn_count = rs_check_abn.getString(1);
};
};
abn_count = Double.parseDouble(abn_count);
if (abn_count == 0)
{
//Услуга не найдена.
return;
};
day_str=TimeUtils.format(DateNow, "dd");
day = Double.parseDouble(day_str);
cost = null;
cost_type = null;
calc_mode = null;
calc_type = null;
// поиск параметров абонплаты
tts = new ContractManager( con ).getRealtimeTariffTreeSet( cid, DateNow, "npay", mid, true );
for( TariffModuleTree tree : tts.getTreeList( DateNow ) )
{
req_cost = new TariffRequest();
req_cost.setRequestParam( "action", "calculate" );
req_cost.setRequestParam( "sid", sid );
req_cost.setRequestParam( "month_days", 1 );
req_cost.setRequestParam( "period_days", 1 );
req_cost.setRequestParam( "time", DateNow);
tree.processRequest( req_cost );
cost = (Double)req_cost.getResponseParam( "cost" );
cost_type = req_cost.getResponseParam( "cost_type" );
req_calc_mode = new TariffRequest();
req_calc_mode.setRequestParam( "action", "reset" );
req_calc_mode.setRequestParam( "sid", sid );
req_calc_mode.setRequestParam( "time", DateNow);
tree.processRequest( req_calc_mode );
calc_mode = (String)req_calc_mode.getResponseParam( "calc_mode" );
calc_type = req_calc_mode.getResponseParam( "calc_type" );
};
if (cost == null || calc_mode == null)
{
error ("Параметры абонплаты не найдены");
return;
};
if (calc_mode.indexOf("month") != -1 && day != 1)
{
//абонплату за месяц снимаем только 1-ого числа
return;
};
if (cost == 0)
{
return;
};
cost = cost*abn_count;
print ("cid="+cid);
balance = new BalanceUtils(con);
contract_balance = balance.getBalance (date.getTime(), cid); <-----135 line
contract_limit = contract.getBalanceLimit();
print ("contract_balance="+contract_balance);
print ("contract_limit="+contract_limit);
print ("contract_abn="+cost);
contract_balance_new = contract_balance - cost;
print ("contract_balance_new="+contract_balance_new);
if (contract_balance_new >= contract_limit)
{
print ("Balance OK");
}
else
{
print ("Balance error");
contract_groups = contract.getGroups();
contract_groups = contract_groups | 1L<<GROUP_ERROR_BALANCE;
query = "UPDATE contract SET gr=? WHERE id=?";
psUpdate = con.prepareStatement( query );
psUpdate.setLong( 1, contract_groups );
psUpdate.setInt( 2, cid );
psUpdate.executeUpdate();
ContractStatus status = new ContractStatus();
status.setContractId( cid );
status.setDate1( DateNow );
status.setDate2( null );
status.setStatus( KernelConst.CONTRACT_STATUS_SUSPENDED );
status.setComment( "Недостаточно средств. Нехватило: " + contract_balance_new);
status.setUserId( 0 ); <---165 line
contract_status_manager.changeStatus( status );
};
ошибка
Код:
GENERATE_TIME: 01.05.10 00:06:07
EXECUTION_STOP_TIME: 01.05.10 00:06:46
PROCESS_TIME: 132
OUT:
cid=7342
contract_balance=-1090.33
contract_limit=0.00
contract_abn=770.0
contract_balance_new=-1860.33
Balance error
ERROR:
EXCEPTIONS:
Sourced file: Function [id:11; title:таймер_снятия] : Error in method invocation: Method setUserId( int ) not found in class'bitel.billing.server.contract.bean.ContractStatus' : at Line: 165 : in file: Function [id:11; title:таймер_снятия] : status .setUserId ( 0 )
java.util.concurrent.ExecutionException: Sourced file: Function [id:11; title:таймер_снятия] : Error in method invocation: Method setUserId( int ) not found in class'bitel.billing.server.contract.bean.ContractStatus' : at Line: 165 : in file: Function [id:11; title:таймер_снятия] : status .setUserId ( 0 )
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232)
at java.util.concurrent.FutureTask.get(FutureTask.java:91)
at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine.runScriptImpl(ScriptMachine.java:359)
at bitel.billing.server.script.bean.ScriptMachine.runScript(ScriptMachine.java:128)
at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:239)
at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:182)
at bitel.billing.server.script.bean.event.EventProcessor.run(EventProcessor.java:140)
Caused by: Sourced file: Function [id:11; title:таймер_снятия] : Error in method invocation: Method setUserId( int ) not found in class'bitel.billing.server.contract.bean.ContractStatus' : at Line: 165 : in file: Function [id:11; title:таймер_снятия] : status .setUserId ( 0 )
at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHBlock.evalBlock(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHIfStatement.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.eval(ScriptInstance.java:310)
at bitel.billing.server.script.bean.ScriptMachine$SimpleScriptRunner.runScript(ScriptMachine.java:69)
at bitel.billing.server.script.bean.ScriptMachine.runScriptImpl(ScriptMachine.java:219)
at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine.access$0(ScriptMachine.java:1)
at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine$1.call(ScriptMachine.java:349)
at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine$1.call(ScriptMachine.java:1)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
WARNINGS:
в логах планировщика еще есть такое
Код:
scheduler 04-30/23:55:04 ERROR [pool-2-thread-1] Calculator - Contract 4729 sid=8 calcMode=null
scheduler 04-30/23:55:04 ERROR [pool-2-thread-1] Calculator - Contract 4729 sid=11 calcMode=null
scheduler 04-30/23:55:04 ERROR [pool-2-thread-1] Calculator - Contract 4730 sid=8 calcMode=null
scheduler 04-30/23:55:04 ERROR [pool-2-thread-1] Calculator - Contract 4730 sid=11 calcMode=null
scheduler 04-30/23:55:04 ERROR [pool-2-thread-1] Calculator - Contract 4731 sid=8 calcMode=null
scheduler 04-30/23:55:04 ERROR [pool-2-thread-1] Calculator - Contract 4731 sid=11 calcMode=null
scheduler 04-30/23:55:04 ERROR [pool-2-thread-1] Calculator - Contract 4734 sid=8 calcMode=null
scheduler 04-30/23:55:04 ERROR [pool-2-thread-1] Calculator - Contract 4734 sid=11 calcMode=null
scheduler 04-30/23:55:04 ERROR [pool-2-thread-1] Calculator - Contract 4736 sid=8 calcMode=null
а в server.log такое
Код:
script 05-01/00:06:46 ERROR [Thread-7] script - Eval error: Sourced file: Function [id:11; title:таймер_снятия] : Attempt to resolve method: getTime() on undefined variable or class name: date : at Line: 135 : in file: Function [id:11; title:таймер_снятия] : date .getTime ( )
java.util.concurrent.ExecutionException: Sourced file: Function [id:11; title:таймер_снятия] : Attempt to resolve method: getTime() on undefined variable or class name: date : at Line: 135 : in file: Function [id:11; title:таймер_снятия] : date .getTime ( )
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232)
at java.util.concurrent.FutureTask.get(FutureTask.java:91)
at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine.runScriptImpl(ScriptMachine.java:359)
at bitel.billing.server.script.bean.ScriptMachine.runScript(ScriptMachine.java:128)
at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:239)
at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:182)
at bitel.billing.server.script.bean.event.EventProcessor.run(EventProcessor.java:140)
Caused by: Sourced file: Function [id:11; title:таймер_снятия] : Attempt to resolve method: getTime() on undefined variable or class name: date : at Line: 135 : in file: Function [id:11; title:таймер_снятия] : date .getTime ( )
at bsh.UtilEvalError.toEvalError(Unknown Source)
at bsh.UtilEvalError.toEvalError(Unknown Source)
at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHArguments.getArguments(Unknown Source)
at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHAssignment.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.eval(ScriptInstance.java:310)
at bitel.billing.server.script.bean.ScriptMachine$SimpleScriptRunner.runScript(ScriptMachine.java:69)
at bitel.billing.server.script.bean.ScriptMachine.runScriptImpl(ScriptMachine.java:219)
at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine.access$0(ScriptMachine.java:1)
at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine$1.call(ScriptMachine.java:349)
at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine$1.call(ScriptMachine.java:1)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
на даты не смотрите, специально перевел на след месяц чтобы посмотреть как снимать будет.