BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 18 июн 2025, 04:46

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 29 ] 
Автор Сообщение
СообщениеДобавлено: 06 апр 2015, 07:48 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
В 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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 10:44 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
А что именно делал этот скрипт и для чего был предназначен?

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 11:12 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
Phricker писал(а):
А что именно делал этот скрипт и для чего был предназначен?

В случае перетирания статуса субдоговора со статуса приостановлен на любой другой возвращает приостановлен) К примеру при поступлении платежа на супердоговор он автоматом активирует данный договор, данный скрипт не дает ему это делать. т.е. сменить статус у субдоговора со статусом приостановлен можно только изменив статус этого субдоговора
скрипт вешается на супердоговор.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 11:20 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
У меня кредитная система оплаты, отключение производится через монитор статуса, имеем супердоговор и допустим 3 субдоговора, 2 суба старых в статусе активен, так же активен супер договор. 3 субдоговор абонент заключил вчера у него ставится статус приостановлен пока его не подключат по факту и не щелкнут активен. Бывают случаи ктогда абонент заключил договор вчера, а сегодня отключение и у него есть долг, при отключении через монитор статуса - в закрыт уходит супер и тянет за собой все суб договора включая новое подключение, абонент сразу оплачивает и уходит в плюс, и у него активируются сразу все 3 субдоговора. этот скрипт повторно ставил статус приостановлен на новом договоре


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 11:36 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
SeGa писал(а):
Заменил int stest=sstatusList.size()-2; на int stest=0; стало выполнятся, но не перетирает статус, после повторного выполнения в sstatusList следующее содержимое(на договоре статус приостановлен):


значит у вас нет такого статуса..например если создать договор и не менять ему статус, то у него будет только один статус в списке и sstatusList.size()-2 вернет -1. Это неправильно написанный скрипт ..Почему именно -2? Если нужно взчять последний то так, sstatusList.size() -1 . А sыtatusList.size()-2 это предпоследний и он не всегда может быть, надо проверять это случай. Вы покажите таблицу статусов для этого договора.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 11:42 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
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]

Изображение


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 12:06 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
как именно? статусы с открытыми периодами?
вероятно потому что во время установки статуса что-то упало в сервере и оно нормально не отработало до конца.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 12:08 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
dimOn писал(а):
как именно? статусы с открытыми периодами?
вероятно потому что во время установки статуса что-то упало в сервере и оно нормально не отработало до конца.

Такое постоянно когда отрабатывает этот скрипт.
По логам все чисто


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 12:12 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
А вы логику перетирания статусов скриптом не подменяли ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 12:18 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
stark писал(а):
А вы логику перетирания статусов скриптом не подменяли ?

Нет, но я возможно понял в чем проблема, изначально я скрипт поставил на событие изменение статуса договора, потом переставил на статус договора изменен, возможно в этом косяк, через пару часов рестартану биллинг - проверю


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 14:33 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
1)Перезагрузка не помогла, так же получаю 2 статуса с открытой датой
2)Похоже я что то не догоняю, скрипт висит на событие "статус договора измене" т.е. на момент его выполнения уже должен был установится статус который только что установил, но его нету при запросе статуса( в sstatusList только один статус который был изначально установлен на договор)
По логике и как было в 5.1 int stest=sstatusList.size()-2; - верно получал статус который был до текущего(а текущий это тот что я только что установил)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 14:42 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Цитата:
Похоже я что то не догоняю, скрипт висит на событие "статус договора измене" т.е. на момент его выполнения уже должен был установится статус который только что установил
какое именно событие скажите точно? там их несколько.
если это синхронное, то разумеется это не так.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 14:44 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
Скрин


Вложения:
Снимок экрана 2015-04-06 в 18.43.37.png
Снимок экрана 2015-04-06 в 18.43.37.png [ 298.43 КБ | Просмотров: 13967 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 14:50 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Это событие асинхронное ..Изменения эти в базу еще не попали на момент срабатывания скрипта. В 5.1 это проблемы не было, так как у нас там все изменения комитились в базу, до события. А тут не так. Тут они могут быть, а могут и не быть - как повезет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 14:55 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
а хотя нет..Тут изменения тоже комитятся в базу до события , не должно быть такого.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 14:59 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
а не из-за этого случайно получается что оба статуса с открытой датой?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 15:06 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
Сейчас еще одну копию биллинга замучу и попробую обновить до последней(((


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 15:07 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
SeGa писал(а):
а не из-за этого случайно получается что оба статуса с открытой датой?


пока не ясно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 15:08 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
SeGa писал(а):
Сейчас еще одну копию биллинга замучу и попробую обновить до последней(((


да, попробуйте, если повториться - будем разбираться.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 15:08 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
cstm.changeStatus(s2,0,true);
скорее всего здесь нужно false, потому что вообще непонятно что будет с true, мне не хочется даже думать об этом. если вы это поставили не специально, попробуйте здесь false сделать

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 15:15 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
dimOn писал(а):
cstm.changeStatus(s2,0,true);
скорее всего здесь нужно false, потому что вообще непонятно что будет с true, мне не хочется даже думать об этом. если вы это поставили не специально, попробуйте здесь false сделать

Ничего не поменялось)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 15:52 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
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

проблема осталась ((


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 15:54 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Скрипт просто странен, строчка через одну вызывает вопросы.

Код:
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 и рассылаются события)

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 15:55 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
В итоге тут всё странно и непонятно, пишите в HD - будем разбираться у вас ошибка или в биллинге.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 16:37 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
В общем на сколько я понял надо писать скрипт для субдоговоров т.к. событие смены статуса на субдоговора уходит после события "статус договора изменен" супердоговора и в субдоговора прилетает 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");
}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 16:49 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
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");
}


Т.е проблема только у субдоговоров ? Вы пытаетесь в скрипте на главном договоре в отдельной транзакции поменять статус субдоговора, в это же время субдоговор ловит событие о своем изменении и тоже его меняет в своее транзакции, при этом изменений первой транзакции он еще не видит и поэтому помещает туда еще один статус.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 16:51 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
Да, именно так. Потому как если эту проверку сделать на субдоговоре - он не даст его активировать стандартным способом, надо будет какое то условие делать что бы он дал активировать его (


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 апр 2015, 17:00 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
суть в том, что что-либо с субдоговорами в БД начинает делаться уже после того, как отправлены все события на родительском договоре.
потому когда вы пытаетесь что-то читать - там этого нету даже. или наоборот уже появляется - а вы затёрли.
оно и раньше было так, просто незаметно было чаще всего (но глюк мог быть на самом деле, в зависимости от того что первее произойдёт - вызов скрипта на событии или выполнится код обработки субдоговоров)

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 апр 2015, 17:35 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
Может кому пригодится мой кривой костыль, вроде работает.Скрипт поведения на событии статус договора изменен вешается на субдоговор
Часть кода может быть лишней :)
Код:
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");
}


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.071s | 76 Queries | GZIP : On ]