В 5.1 у нас был такой скрипт поведения на изменения статуса договора:
Код:
import bitel.billing.server.contract.bean.*;
import java.util.*;
import ru.bitel.billing.server.util.*;
import java.math.BigDecimal;
import bitel.billing.common.KernelConst;
import bitel.billing.common.TimeUtils.*;
import java.text.SimpleDateFormat;
public void onEvent( event, setup, con, conSlave ) {
print( "Sobytie izmenenija statusa dogovora" );
int cid = event.getContractId();
Calendar now = Calendar.getInstance();
cm = new ContractManager( con );
cstm = new ContractStatusManager( con );
c = cm.getContractById( cid );
int newStatus = event.getStatus().getStatus();
print("status: " + status+"\n");
print("Tekushhij status: " + c.getStatus());
print("Novyj status: " + newStatus+"\n");
if (!c.isSuper()){
print("Dogovor javljaetsja subdogovorom => nichego ne delaem");
return;
}
String contracts = c.getDependSubList();
print ("Subdogovora: "+c.getDependSubList());
List cid_list = Arrays.asList(contracts.split(","));
List statusList,newstatusList;
dateFormat = new SimpleDateFormat("dd.MM.yyyy");
for(String current_cid : cid_list) {
c = cm.getContractById( Integer.parseInt(current_cid) );
print("\nProverjam kontrakt "+c.getTitle());
if (c.isIndependSub()) {
print("Dogovor s nezavisimym balansom - propuskaem");
continue;
}
statusList = cstm.getStatusList(Integer.parseInt(current_cid));
newstatusList = new ArrayList();
// for (ContractStatus s : statusList) {
scstm = new ContractStatusManager( con );
sstatusList = scstm.getStatusList(Integer.parseInt(current_cid));
int stest=sstatusList.size()-2;
s=((ContractStatus)statusList.get(stest));
cStatus=((ContractStatus)statusList.get(stest)).getStatus();
cdate=((ContractStatus)statusList.get(stest)).getDateFrom();
ccomment=((ContractStatus)statusList.get(stest)).getComment();
if( cStatus == 4 ){
s.setStatus(4);
Date date = bitel.billing.common.TimeUtils.convertCalendarToDate(now);
if(s.getDateFrom().before(date)){s.setDateFrom(cdate);
s.setDateTo(null);}
s.setComment(ccomment);
newstatusList.add(s);
}
Date date1 = bitel.billing.common.TimeUtils.convertCalendarToDate(now);
print("Status: "+cStatus+" Next status: "+s.getStatus()+" "+cdate );
print("Menjaem statusy v sootvetstvii s novym spiskom statusov");
for (ContractStatus s2 : newstatusList){
cstm.changeStatus(s2,0,true);
}
}
print("Done");
}
В 6.1 он ругается на
Код:
cid;time;title;data
51269;2015-04-06 11:42:07.0;?????? ???????? ???????;GENERATE_TIME: 06.04.15 11:42:07
EXECUTION_STOP_TIME: 06.04.15 11:42:07
PROCESS_TIME: 96
OUT:
Sobytie izmenenija statusa dogovora
status: void
Tekushhij status: 0
Novyj status: 0
Subdogovora: 51270
Proverjam kontrakt 16818_3
sstatus_listsize:1
EXCEPTIONS:
java.security.PrivilegedActionException: Method Invocation statusList.get : at Line: 75 : in file: Function [id:5; title:?????? ???????? ???????] : statusList .get ( stest )
Target exception: java.lang.ArrayIndexOutOfBoundsException: -1
java.util.concurrent.ExecutionException: java.security.PrivilegedActionException: Method Invocation statusList.get : at Line: 75 : in file: Function [id:5; title:?????? ???????? ???????] : statusList .get ( stest )
Target exception: java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:202)
at ru.bitel.bgbilling.kernel.script.server.ScriptEventListener$ThreadedScriptEventListener.runScript(ScriptEventListener.java:466)
at ru.bitel.bgbilling.kernel.script.server.ScriptEventListener.runScript(ScriptEventListener.java:310)
at ru.bitel.bgbilling.kernel.script.server.ScriptEventListener.notify(ScriptEventListener.java:277)
at ru.bitel.bgbilling.kernel.event.LocalEventProcessor.request(LocalEventProcessor.java:240)
at ru.bitel.bgbilling.kernel.event.EventProcessor.request(EventProcessor.java:894)
at ru.bitel.bgbilling.kernel.event.EventProcessor.request(EventProcessor.java:863)
at bitel.billing.server.contract.bean.ContractStatusManager.changeStatus(ContractStatusManager.java:555)
at bitel.billing.server.contract.bean.ContractStatusManager.changeStatus(ContractStatusManager.java:347)
at ru.bitel.bgbilling.kernel.contract.status.server.service.ContractStatusMonitorServiceImpl.changeContractStatus(ContractStatusMonitorServiceImpl.java:117)
at sun.reflect.GeneratedMethodAccessor87.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at ru.bitel.bgbilling.kernel.container.service.server.ServiceInfo.invoke(ServiceInfo.java:101)
at ru.bitel.bgbilling.kernel.container.ws.server.AbstractJaxWsHandler.invoke0(AbstractJaxWsHandler.java:195)
at ru.bitel.bgbilling.kernel.container.ws.server.AbstractJaxWsHandler.access$0(AbstractJaxWsHandler.java:169)
at ru.bitel.bgbilling.kernel.container.ws.server.AbstractJaxWsHandler$1.run(AbstractJaxWsHandler.java:242)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at ru.bitel.bgbilling.kernel.container.ws.server.AbstractJaxWsHandler.invoke(AbstractJaxWsHandler.java:236)
at ru.bitel.bgbilling.kernel.container.ws.server.JaxWsHandler.invoke(JaxWsHandler.java:315)
at ru.bitel.bgbilling.kernel.container.ws.server.AbstractJaxWsHandler$ServiceInstanceResolver$1.invoke(AbstractJaxWsHandler.java:335)
at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:150)
at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:261)
at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:100)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:641)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:600)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:585)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:482)
at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:314)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:608)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:259)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:162)
at ru.bitel.bgbilling.kernel.container.ws.server.JaxWSAdapter.handle(JaxWSAdapter.java:288)
at bitel.billing.server.Executer.doPost(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.security.PrivilegedActionException: Method Invocation statusList.get : at Line: 75 : in file: Function [id:5; title:?????? ???????? ???????] : statusList .get ( stest )
Target exception: java.lang.ArrayIndexOutOfBoundsException: -1
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at ru.bitel.bgbilling.kernel.script.server.ScriptEventListener$ThreadedScriptEventListener$1.call(ScriptEventListener.java:442)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:46)
Caused by: Method Invocation statusList.get : at Line: 75 : in file: Function [id:5; title:?????? ???????? ???????] : statusList .get ( stest )
Target exception: java.lang.ArrayIndexOutOfBoundsException: -1
at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:97)
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
at bsh.BSHCastExpression.eval(BSHCastExpression.java:60)
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
at bsh.BSHAssignment.eval(BSHAssignment.java:77)
at bsh.BSHBlock.evalBlock(BSHBlock.java:131)
at bsh.BSHBlock.eval(BSHBlock.java:81)
at bsh.BSHBlock.eval(BSHBlock.java:47)
at bsh.BSHEnhancedForStatement.eval(BSHEnhancedForStatement.java:79)
at bsh.BSHBlock.evalBlock(BSHBlock.java:131)
at bsh.BSHBlock.eval(BSHBlock.java:81)
at bsh.BshMethod.invokeImpl(BshMethod.java:362)
at bsh.BshMethod.invoke(BshMethod.java:258)
at bsh.BshMethod.invoke(BshMethod.java:186)
at bsh.This.invokeMethod(This.java:255)
at bsh.This.invokeMethod(This.java:174)
at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.invoke(ScriptInstance.java:390)
at ru.bitel.bgbilling.kernel.script.server.ScriptEventListener$Invoker.runScriptImpl(ScriptEventListener.java:116)
at ru.bitel.bgbilling.kernel.script.server.ScriptEventListener.runScript(ScriptEventListener.java:353)
at ru.bitel.bgbilling.kernel.script.server.ScriptEventListener$ThreadedScriptEventListener.access$0(ScriptEventListener.java:1)
at ru.bitel.bgbilling.kernel.script.server.ScriptEventListener$ThreadedScriptEventListener$1$1.run(ScriptEventListener.java:448)
... 8 more
Что курнуть что бы разобраться?)))
Заменил int stest=sstatusList.size()-2; на int stest=0; стало выполнятся, но не перетирает статус, после повторного выполнения в sstatusList следующее содержимое(на договоре статус приостановлен):
Код:
sstatusList:[
bitel.billing.server.contract.bean.ContractStatus@[id=281476;contractId=51270;status=4;dateFrom=2015-02-28;dateTo=null;comment=123;]@514073a9, bitel.billing.server.contract.bean.ContractStatus@[id=281475;contractId=51270;status=0;dateFrom=2015-04-05;dateTo=null;comment=;]@5e6985eb]
Код:
Клиент: вер. 6.1.818 / 22.12.2014 22:04:39
os: Mac OS X; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_71
Сервер: вер. 6.1.1018 / 25.12.2014 18:48:07
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_71