forum.bitel.ru http://forum.bitel.ru/ |
|
проблема со скриптом после перехода на 6.1 http://forum.bitel.ru/viewtopic.php?f=19&t=10370 |
Страница 1 из 1 |
Автор: | SeGa [ 06 апр 2015, 07:48 ] |
Заголовок сообщения: | проблема со скриптом после перехода на 6.1 |
В 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 |
Автор: | Phricker [ 06 апр 2015, 10:44 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
А что именно делал этот скрипт и для чего был предназначен? |
Автор: | SeGa [ 06 апр 2015, 11:12 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
Phricker писал(а): А что именно делал этот скрипт и для чего был предназначен? В случае перетирания статуса субдоговора со статуса приостановлен на любой другой возвращает приостановлен) К примеру при поступлении платежа на супердоговор он автоматом активирует данный договор, данный скрипт не дает ему это делать. т.е. сменить статус у субдоговора со статусом приостановлен можно только изменив статус этого субдоговора скрипт вешается на супердоговор. |
Автор: | SeGa [ 06 апр 2015, 11:20 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
У меня кредитная система оплаты, отключение производится через монитор статуса, имеем супердоговор и допустим 3 субдоговора, 2 суба старых в статусе активен, так же активен супер договор. 3 субдоговор абонент заключил вчера у него ставится статус приостановлен пока его не подключат по факту и не щелкнут активен. Бывают случаи ктогда абонент заключил договор вчера, а сегодня отключение и у него есть долг, при отключении через монитор статуса - в закрыт уходит супер и тянет за собой все суб договора включая новое подключение, абонент сразу оплачивает и уходит в плюс, и у него активируются сразу все 3 субдоговора. этот скрипт повторно ставил статус приостановлен на новом договоре |
Автор: | stark [ 06 апр 2015, 11:36 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
SeGa писал(а): Заменил int stest=sstatusList.size()-2; на int stest=0; стало выполнятся, но не перетирает статус, после повторного выполнения в sstatusList следующее содержимое(на договоре статус приостановлен): значит у вас нет такого статуса..например если создать договор и не менять ему статус, то у него будет только один статус в списке и sstatusList.size()-2 вернет -1. Это неправильно написанный скрипт ..Почему именно -2? Если нужно взчять последний то так, sstatusList.size() -1 . А sыtatusList.size()-2 это предпоследний и он не всегда может быть, надо проверять это случай. Вы покажите таблицу статусов для этого договора. |
Автор: | SeGa [ 06 апр 2015, 11:42 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
stark писал(а): SeGa писал(а): Заменил int stest=sstatusList.size()-2; на int stest=0; стало выполнятся, но не перетирает статус, после повторного выполнения в sstatusList следующее содержимое(на договоре статус приостановлен): значит у вас нет такого статуса..например если создать договор и не менять ему статус, то у него будет только один статус в списке и sstatusList.size()-2 вернет -1. Это неправильно написанный скрипт ..Почему именно -2? Если нужно взчять последний то так, sstatusList.size() -1 . А sыtatusList.size()-2 это предпоследний и он не всегда может быть, надо проверять это случай. Вы покажите таблицу статусов для этого договора. С ошибкой разобрался(я ставил скрипт на событие изменение статуса договора, а надо было на статус договора изменен) если ставить на событие статус договора изменен то должно быть -2 т.к. нужно брыть не предыдущий статус(который только что установился) а тот что был до него Меня больше интересует на данный момент как так получилось: 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] ![]() |
Автор: | dimOn [ 06 апр 2015, 12:06 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
как именно? статусы с открытыми периодами? вероятно потому что во время установки статуса что-то упало в сервере и оно нормально не отработало до конца. |
Автор: | SeGa [ 06 апр 2015, 12:08 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
dimOn писал(а): как именно? статусы с открытыми периодами? вероятно потому что во время установки статуса что-то упало в сервере и оно нормально не отработало до конца. Такое постоянно когда отрабатывает этот скрипт. По логам все чисто |
Автор: | stark [ 06 апр 2015, 12:12 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
А вы логику перетирания статусов скриптом не подменяли ? |
Автор: | SeGa [ 06 апр 2015, 12:18 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
stark писал(а): А вы логику перетирания статусов скриптом не подменяли ? Нет, но я возможно понял в чем проблема, изначально я скрипт поставил на событие изменение статуса договора, потом переставил на статус договора изменен, возможно в этом косяк, через пару часов рестартану биллинг - проверю |
Автор: | SeGa [ 06 апр 2015, 14:33 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
1)Перезагрузка не помогла, так же получаю 2 статуса с открытой датой 2)Похоже я что то не догоняю, скрипт висит на событие "статус договора измене" т.е. на момент его выполнения уже должен был установится статус который только что установил, но его нету при запросе статуса( в sstatusList только один статус который был изначально установлен на договор) По логике и как было в 5.1 int stest=sstatusList.size()-2; - верно получал статус который был до текущего(а текущий это тот что я только что установил) |
Автор: | dimOn [ 06 апр 2015, 14:42 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
Цитата: Похоже я что то не догоняю, скрипт висит на событие "статус договора измене" т.е. на момент его выполнения уже должен был установится статус который только что установил какое именно событие скажите точно? там их несколько.если это синхронное, то разумеется это не так. |
Автор: | SeGa [ 06 апр 2015, 14:44 ] | ||
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 | ||
Скрин
|
Автор: | stark [ 06 апр 2015, 14:50 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
Это событие асинхронное ..Изменения эти в базу еще не попали на момент срабатывания скрипта. В 5.1 это проблемы не было, так как у нас там все изменения комитились в базу, до события. А тут не так. Тут они могут быть, а могут и не быть - как повезет. |
Автор: | stark [ 06 апр 2015, 14:55 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
а хотя нет..Тут изменения тоже комитятся в базу до события , не должно быть такого. |
Автор: | SeGa [ 06 апр 2015, 14:59 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
а не из-за этого случайно получается что оба статуса с открытой датой? |
Автор: | SeGa [ 06 апр 2015, 15:06 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
Сейчас еще одну копию биллинга замучу и попробую обновить до последней((( |
Автор: | stark [ 06 апр 2015, 15:07 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
SeGa писал(а): а не из-за этого случайно получается что оба статуса с открытой датой? пока не ясно. |
Автор: | stark [ 06 апр 2015, 15:08 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
SeGa писал(а): Сейчас еще одну копию биллинга замучу и попробую обновить до последней((( да, попробуйте, если повториться - будем разбираться. |
Автор: | dimOn [ 06 апр 2015, 15:08 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
cstm.changeStatus(s2,0,true); скорее всего здесь нужно false, потому что вообще непонятно что будет с true, мне не хочется даже думать об этом. если вы это поставили не специально, попробуйте здесь false сделать |
Автор: | SeGa [ 06 апр 2015, 15:15 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
dimOn писал(а): cstm.changeStatus(s2,0,true); скорее всего здесь нужно false, потому что вообще непонятно что будет с true, мне не хочется даже думать об этом. если вы это поставили не специально, попробуйте здесь false сделать Ничего не поменялось) |
Автор: | SeGa [ 06 апр 2015, 15:52 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
stark писал(а): SeGa писал(а): Сейчас еще одну копию биллинга замучу и попробую обновить до последней((( да, попробуйте, если повториться - будем разбираться. Обновился до Код: Информация о версии: Клиент: вер. 6.1.842 / 31.03.2015 18:02:43 os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_75 Сервер: вер. 6.1.1061 / 03.04.2015 15:11:09 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_71 проблема осталась (( |
Автор: | dimOn [ 06 апр 2015, 15:54 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
Скрипт просто странен, строчка через одну вызывает вопросы. Код: cstm = new ContractStatusManager( con ); .... statusList = cstm.getStatusList(Integer.parseInt(current_cid)); .... // ??? scstm = new ContractStatusManager( con ); sstatusList = scstm.getStatusList(Integer.parseInt(current_cid)); int stest=sstatusList.size()-2; // далее ни sstatusList ни scstm не используется. Код: newstatusList = new ArrayList(); никогда не используется как список, там в лучшем случае один статус. причём в нём вы сами явно ставите: s.setDateTo(null); зачем? почему? при том, что там if(s.getDateFrom().before(date)) как раз срабатывает судя по картинке вашей же (оба статуса на раньше установлены чем действие это произошло). так в чём вопрос то тогда с пустой датой. ну итд на момент срабатывания асинхронного ContractStatusChangedEvent для этого договора всё должно быть уже в БД. (хотя для его субдоговоров уже потом делается change и рассылаются события) |
Автор: | dimOn [ 06 апр 2015, 15:55 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
В итоге тут всё странно и непонятно, пишите в HD - будем разбираться у вас ошибка или в биллинге. |
Автор: | SeGa [ 06 апр 2015, 16:37 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
В общем на сколько я понял надо писать скрипт для субдоговоров т.к. событие смены статуса на субдоговора уходит после события "статус договора изменен" супердоговора и в субдоговора прилетает 2 события на смену статуса и поэтому они оба с открытой датой. На то что в скрипте есть непонятки - это потому что он изначально делал немного другое, и куски старого кода не выпилины до конца, но сути это не меняет. Выполнив этот код становится понятно что статус субдоговора на данный момент не изменился, хотя логика данного скрипта подразумевает что он должен был уже поменяться( в 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(); cm = new ContractManager( con ); c = cm.getContractById( cid ); String contracts = c.getDependSubList(); List cid_list = Arrays.asList(contracts.split(",")); List statusList; for(String current_cid : cid_list) { scstm = new ContractStatusManager( con ); sstatusList = scstm.getStatusList(Integer.parseInt(current_cid)); print("sstatusList:"+sstatusList); } print("Done"); } |
Автор: | stark [ 06 апр 2015, 16:49 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
SeGa писал(а): В общем на сколько я понял надо писать скрипт для субдоговоров т.к. событие смены статуса на субдоговора уходит после события "статус договора изменен" супердоговора и в субдоговора прилетает 2 события на смену статуса и поэтому они оба с открытой датой. На то что в скрипте есть непонятки - это потому что он изначально делал немного другое, и куски старого кода не выпилины до конца, но сути это не меняет. Выполнив этот код становится понятно что статус субдоговора на данный момент не изменился, хотя логика данного скрипта подразумевает что он должен был уже поменяться( в 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(); cm = new ContractManager( con ); c = cm.getContractById( cid ); String contracts = c.getDependSubList(); List cid_list = Arrays.asList(contracts.split(",")); List statusList; for(String current_cid : cid_list) { scstm = new ContractStatusManager( con ); sstatusList = scstm.getStatusList(Integer.parseInt(current_cid)); print("sstatusList:"+sstatusList); } print("Done"); } Т.е проблема только у субдоговоров ? Вы пытаетесь в скрипте на главном договоре в отдельной транзакции поменять статус субдоговора, в это же время субдоговор ловит событие о своем изменении и тоже его меняет в своее транзакции, при этом изменений первой транзакции он еще не видит и поэтому помещает туда еще один статус. |
Автор: | SeGa [ 06 апр 2015, 16:51 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
Да, именно так. Потому как если эту проверку сделать на субдоговоре - он не даст его активировать стандартным способом, надо будет какое то условие делать что бы он дал активировать его ( |
Автор: | dimOn [ 06 апр 2015, 17:00 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.1 |
суть в том, что что-либо с субдоговорами в БД начинает делаться уже после того, как отправлены все события на родительском договоре. потому когда вы пытаетесь что-то читать - там этого нету даже. или наоборот уже появляется - а вы затёрли. оно и раньше было так, просто незаметно было чаще всего (но глюк мог быть на самом деле, в зависимости от того что первее произойдёт - вызов скрипта на событии или выполнится код обработки субдоговоров) |
Автор: | SeGa [ 07 апр 2015, 17:35 ] |
Заголовок сообщения: | Re: проблема со скриптом после перехода на 6.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 ) { 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"); List statusList,newstatusList; dateFormat = new SimpleDateFormat("dd.MM.yyyy"); print ("CID:" +cid); statusList = cstm.getStatusList(cid); scstm = new ContractStatusManager( con ); sstatusList = scstm.getStatusList(cid); newstatusList = new ArrayList(); print("sstatusList:"+sstatusList); int stest=sstatusList.size()-2; int stest2=sstatusList.size()-1; if (sstatusList.size()>1){ s=((ContractStatus)statusList.get(stest)); cStatus=((ContractStatus)statusList.get(stest)).getStatus(); cdate=((ContractStatus)statusList.get(stest)).getDateFrom(); ccomment=((ContractStatus)statusList.get(stest)).getComment(); s2=((ContractStatus)statusList.get(stest2)); cStatus2=((ContractStatus)statusList.get(stest2)).getStatus(); cdate2=((ContractStatus)statusList.get(stest2)).getDateFrom(); ccomment2=((ContractStatus)statusList.get(stest2)).getComment(); print("ccomment:"+ccomment2); if( cStatus == 4 && ccomment2.equals("") && cStatus2!=4){ print("STATUS 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"); } |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |