forum.bitel.ru
http://forum.bitel.ru/

Текущий статус договора в скрипте
http://forum.bitel.ru/viewtopic.php?f=22&t=5439
Страница 1 из 2

Автор:  mikos [ 29 апр 2011, 22:41 ]
Заголовок сообщения:  Текущий статус договора в скрипте

Добрый вечер.
Подскажите пожалуйста, что я не так делаю? Хочу сделать скрипт, который при изменении статуса договора будет группы договоров разные ставить. Все бы хорошо, но не могу текущий статус договора взять:
Код:
   cpu = new ContractParamUtils( con );
 
   cid = event.getContractId();
   DateNow = new GregorianCalendar();
   now = DateNow.getTime();
 
   csm  = new ContractStatusManager(con);
   StatusContract = csm.getStatus(cid,now);

   if (StatusContract == null)
   {
      print("Не удалось получить статус договора");
      return;
   }


StatusContract всегда null. Список статусов тоже пытался брать - та же фигня -- ни одного статуса не возвращается.
Что не так?

Автор:  Phricker [ 30 апр 2011, 01:00 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

http://wiki.bgbilling.ru/index.php/Добавление_группы_и_снятие_в_зависимости_от_статуса
Спасибо пожалуйста :D

Автор:  skn [ 30 апр 2011, 02:04 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

может доки почитать? (http://www.bgbilling.ru/v5.1/javadoc/bi ... nager.html)

Код:
getStatus(int cid, java.util.Date date)
          Возвращает статус договора на какую-то дату, если записи нет, статус по-умолчанию - "активен" (отсюда вернётся null).

Автор:  mikos [ 30 апр 2011, 02:08 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

skn писал(а):
может доки почитать? (http://www.bgbilling.ru/v5.1/javadoc/bi ... nager.html)

Код:
getStatus(int cid, java.util.Date date)
          Возвращает статус договора на какую-то дату, если записи нет, статус по-умолчанию - "активен" (отсюда вернётся null).

В том то и дело, что статусов у договораа хоть отбавляй и почему он их не показываает не понятноо.

Автор:  mikos [ 30 апр 2011, 02:09 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

Phricker писал(а):
http://wiki.bgbilling.ru/index.php/Добавление_группы_и_снятие_в_зависимости_от_статуса
Спасибо пожалуйста :D

Этот код не работает по крайней мере на 5.1

Автор:  skyb [ 30 апр 2011, 04:16 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

mikos писал(а):
Phricker писал(а):
http://wiki.bgbilling.ru/index.php/Добавление_группы_и_снятие_в_зависимости_от_статуса
Спасибо пожалуйста :D

Этот код не работает по крайней мере на 5.1

а что пишет? почему не работает?

Автор:  mikos [ 30 апр 2011, 10:40 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

skyb писал(а):
mikos писал(а):
Phricker писал(а):
http://wiki.bgbilling.ru/index.php/Добавление_группы_и_снятие_в_зависимости_от_статуса
Спасибо пожалуйста :D

Этот код не работает по крайней мере на 5.1

а что пишет? почему не работает?

вссе тоже самое - возвращает null на статус

Автор:  skyb [ 30 апр 2011, 10:53 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

mikos писал(а):
skyb писал(а):
mikos писал(а):
Phricker писал(а):
http://wiki.bgbilling.ru/index.php/Добавление_группы_и_снятие_в_зависимости_от_статуса
Спасибо пожалуйста :D

Этот код не работает по крайней мере на 5.1

а что пишет? почему не работает?

вссе тоже самое - возвращает null на статус

а можно логи чтоль.

Автор:  Phricker [ 30 апр 2011, 13:39 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

В оригинале
Код:
GENERATE_TIME: 30.04.11 11:28:56
EXECUTION_STOP_TIME: 30.04.11 11:28:56
PROCESS_TIME: 164

OUT:


EXCEPTIONS:
Sourced file: Function [id:38; title:смена статуса] : at Line: 19 : in file: Function [id:38; title:смена статуса] : status .getStatus ( )

Target exception: java.lang.NullPointerException: Null Pointer in Method Invocation

java.util.concurrent.ExecutionException: Sourced file: Function [id:38; title:смена статуса] : at Line: 19 : in file: Function [id:38; title:смена статуса] : status .getStatus ( )

Target exception: java.lang.NullPointerException: Null Pointer in Method Invocation

   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:371)
   at bitel.billing.server.script.bean.ScriptMachine.runScript(ScriptMachine.java:129)
   at bitel.billing.server.script.bean.event.EventProcessor.processContractEvent(EventProcessor.java:313)
   at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:231)
   at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:199)
   at bitel.billing.server.contract.bean.ContractStatusManager.changeStatus(ContractStatusManager.java:467)
   at bitel.billing.server.contract.bean.ContractStatusManager.changeStatus(ContractStatusManager.java:301)
   at bitel.billing.server.contract.status.action.ActionContractStatusChange.doAction(ActionContractStatusChange.java:46)
   at bitel.billing.server.Executer.doModule(Unknown Source)
   at bitel.billing.server.Executer.doPost(Unknown Source)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at bitel.billing.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:37)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
   at java.lang.Thread.run(Thread.java:662)
Caused by: Sourced file: Function [id:38; title:смена статуса] : at Line: 19 : in file: Function [id:38; title:смена статуса] : status .getStatus ( )

Target exception: java.lang.NullPointerException: Null Pointer in Method Invocation

   at bsh.UtilTargetError.toEvalError(UtilTargetError.java:70)
   at bsh.UtilEvalError.toEvalError(UtilEvalError.java:90)
   at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:99)
   at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)
   at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
   at bsh.BSHAssignment.eval(BSHAssignment.java:77)
   at bsh.Interpreter.eval(Interpreter.java:653)
   at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.eval(ScriptInstance.java:352)
   at bitel.billing.server.script.bean.ScriptMachine$SimpleScriptRunner.runScript(ScriptMachine.java:70)
   at bitel.billing.server.script.bean.ScriptMachine.runScriptImpl(ScriptMachine.java:190)
   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:361)
   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)
   ... 1 more


Вот так
Код:
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;
 
 
cpu = new ContractParamUtils( con );
 
cid = event.getContractID();
DateNow = new GregorianCalendar();
contract = new ContractManager(con).getContractByID(cid);
 
 
contract_status_manager  = new ContractStatusManager(con);
status = contract_status_manager.getStatus(cid, DateNow);
 
if (status != KernelConst.CONTRACT_STATUS_ACTIVE)
{
cpu.setGroup( cid, 0 );//где 0 это код группы
}
 
if (status == KernelConst.CONTRACT_STATUS_ACTIVE)
{
cpu.unsetGroup( cid, 0 );
};

Работает с парой варнингов на устаревшие методы
Код:
WARNINGS:
Function [id:38; title:смена статуса]: using deprecated method [public bitel.billing.server.contract.bean.Contract bitel.billing.server.contract.bean.ContractManager.getContractByID(int)]
Function [id:38; title:смена статуса]: using deprecated method [public bitel.billing.server.contract.bean.ContractStatus bitel.billing.server.contract.bean.ContractStatusManager.getStatus(int,java.util.Calendar)]
Function [id:38; title:смена статуса]: using deprecated method [public int bitel.billing.server.script.bean.event.Event.getContractID()]

Автор:  Phricker [ 30 апр 2011, 13:40 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

Если будет работать - добавлю в вики, как скрипт для 5.1

Автор:  mikos [ 30 апр 2011, 22:06 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

Те же грабли - всегда null возвращается статусу (все как по документации :))

Код:
   cpu = new ContractParamUtils( con );

   cid = event.getContractID();
   DateNow = new GregorianCalendar();
   contract = new ContractManager(con).getContractByID(cid);

   contract_status_manager  = new ContractStatusManager(con);
   status = contract_status_manager.getStatus(cid, DateNow);
   print("Status: "+status+"\n");

   if (status != KernelConst.CONTRACT_STATUS_ACTIVE) {
      print("В группу Недостаточно средств\n");
      cpu.setGroup( cid, 1 );//где 0 это код группы
   }

   if (status == KernelConst.CONTRACT_STATUS_ACTIVE) {
      print("Из группы Недостаточно средств\n");
      cpu.unsetGroup( cid, 1 );
   }


Смена статуса раз

Код:
GENERATE_TIME: 30.04.11 19:54:41
EXECUTION_STOP_TIME: 30.04.11 19:54:41
PROCESS_TIME: 2

OUT:
Status: null

В группу Недостаточно средств

WARNINGS:
Function [id:48; title:Изменение группы в соотетствии со статусом]: using deprecated method [public int bitel.billing.server.script.bean.event.Event.getContractID()]
Function [id:48; title:Изменение группы в соотетствии со статусом]: using deprecated method [public bitel.billing.server.contract.bean.ContractStatus bitel.billing.server.contract.bean.ContractStatusManager.getStatus(int,java.util.Calendar)]


Смена статуса два

Код:
GENERATE_TIME: 30.04.11 20:01:24
EXECUTION_STOP_TIME: 30.04.11 20:01:24
PROCESS_TIME: 3

OUT:
Status: null

В группу Недостаточно средств

WARNINGS:
Function [id:48; title:Изменение группы в соотетствии со статусом]: using deprecated method [public int bitel.billing.server.script.bean.event.Event.getContractID()]
Function [id:48; title:Изменение группы в соотетствии со статусом]: using deprecated method [public bitel.billing.server.contract.bean.ContractStatus bitel.billing.server.contract.bean.ContractStatusManager.getStatus(int,java.util.Calendar)]


Статусы есть, специально снял скриншот. Почему он null то возвращает?

Автор:  Phricker [ 01 май 2011, 03:01 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

Хмммм... Странно. У меня группа ставится, но не снимается. всегда возвращается null.
Поглядим.

Вопрос: Вам для чего это необходимо? Для того чтобы работать с должниками? Не будет ли более удобным функционал Монитор статуса??? Листать в конец

Автор:  dimOn [ 03 май 2011, 12:10 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

mikos писал(а):
skn писал(а):
может доки почитать? (http://www.bgbilling.ru/v5.1/javadoc/bi ... nager.html)

Код:
getStatus(int cid, java.util.Date date)
          Возвращает статус договора на какую-то дату, если записи нет, статус по-умолчанию - "активен" (отсюда вернётся null).

В том то и дело, что статусов у договораа хоть отбавляй и почему он их не показываает не понятноо.

Вы уверены, что правильный cid берёте?
Вот эта функция
Код:
public List<ContractStatus> getStatusList( int cid )

делает просто
Код:
"SELECT * FROM contract_status WHERE cid=? ORDER BY date1";

ну никак она не может вернуть пустой список, если в клиенте показывается список

Автор:  dimOn [ 03 май 2011, 12:18 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

переделайте вот так:
Код:
   ContractParamUtils cpu = new ContractParamUtils( con );

   int cid = event.getContractId();
   java.util.Date DateNow = new java.util.Date();
   Contract contract = new ContractManager(con).getContractById(cid);

   ContractStatusManager contract_status_manager  = new ContractStatusManager(con);
   ContractStatus status = contract_status_manager.getStatus(cid, DateNow);

   print("Status: "+status+"\n");
   print("cid: "+cid+"\n");

   if (status != KernelConst.CONTRACT_STATUS_ACTIVE) {
      print("В группу Недостаточно средств\n");
      cpu.setGroup( cid, 1 );//где 0 это код группы
   }

   if (status == KernelConst.CONTRACT_STATUS_ACTIVE) {
      print("Из группы Недостаточно средств\n");
      cpu.unsetGroup( cid, 1 );
   }

так без депрекейтов и выводит нужный cid

Автор:  dimOn [ 03 май 2011, 12:24 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

И ещё, вот это вот:
Код:
if (status != KernelConst.CONTRACT_STATUS_ACTIVE) {

совершенно бессмысленно, ибо status - это объект ContractStatus, а сравниваете вы его с целочисленной константой. Надо делать getStatus() у status, чтобы получить целый код, а потом сравнивать. Но сначала надо проверить не null ли status. А так как нулл у status означает у нас. что статуса в истории статусов нет => статус догоовра active => считать, что это тоже active. Т.е. последний код превращается во что-то такое (обратите внимание переставил два блока кода), проверкой на null мы заодно защищаемся от NPE:

Код:
   if (status == null || status.getStatus() == KernelConst.CONTRACT_STATUS_ACTIVE) {
      // если статуса не было (нулл) или у сущесвующего код active то делаем что-то:
      print("Из группы Недостаточно средств\n");
      cpu.unsetGroup( cid, 1 );
   }
   else {
      // во всех остальных случаях (статус есть и он не active)
      print("В группу Недостаточно средств\n");
      cpu.setGroup( cid, 1 );//где 0 это код группы
   }

Автор:  mikos [ 03 май 2011, 12:35 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

dimOn писал(а):
И ещё, вот это вот:
Код:
if (status != KernelConst.CONTRACT_STATUS_ACTIVE) {

совершенно бессмысленно, ибо status - это объект ContractStatus, а сравниваете вы его с целочисленной константой. Надо делать getStatus() у status, чтобы получить целый код, а потом сравнивать. Но сначала надо проверить не null ли status. А так как нулл у status означает у нас. что статуса в истории статусов нет => статус догоовра active => считать, что это тоже active. Т.е. последний код превращается во что-то такое (обратите внимание переставил два блока кода), проверкой на null мы заодно защищаемся от NPE:

Код:
   if (status == null || status.getStatus() == KernelConst.CONTRACT_STATUS_ACTIVE) {
      // если статуса не было (нулл) или у сущесвующего код active то делаем что-то:
      print("Из группы Недостаточно средств\n");
      cpu.unsetGroup( cid, 1 );
   }
   else {
      // во всех остальных случаях (статус есть и он не active)
      print("В группу Недостаточно средств\n");
      cpu.setGroup( cid, 1 );//где 0 это код группы
   }

Это все понятно. На null я проверяю (начало топика), а статусы у договора есть (несколько сообщений выше скриншоты), поэтому и не понятно откуда нам постоянно null берется.

Автор:  dimOn [ 03 май 2011, 12:43 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

Ну запрос списка то возвращает что-нибудь по этому cid? Запрос отдельного статуса работает точно так же, только проверяет date1 и date2, что они попадают периодом на переданную дату, так что тоже странно. Скорее всего вы что-то не то туда предаёте…

Автор:  mikos [ 03 май 2011, 13:06 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

dimOn писал(а):
Ну запрос списка то возвращает что-нибудь по этому cid? Запрос отдельного статуса работает точно так же, только проверяет date1 и date2, что они попадают периодом на переданную дату, так что тоже странно. Скорее всего вы что-то не то туда предаёте…

Тоже хотелось бы разобраться, что я не так делаю. Вещь нужная и нужна думаю многим.
Хотя что там можно сделать не так - ума не приложу :) На список тоже всегда выдает null - это меня и смутило.

Код:
cpu = new ContractParamUtils( con );
 
cid = event.getContractId();
DateNow = new GregorianCalendar();
now = DateNow.getTime();
 
csm  = new ContractStatusManager(con);

// определяем текущий статус договора
StatusContractList = csm.getStatusList(cid, now);
if (StatusContractList.size() == 0) {
   print("Не удалось получить ни одного статуса договора");
   return;
}
 
StatusContract = StatusContractList.get(0);
print("StatusContract.getStatus():"+StatusContract.getStatus() );

Автор:  dimOn [ 03 май 2011, 13:52 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

Код:
// определяем текущий статус договора
StatusContractList = csm.getStatusList(cid, now);
if (StatusContractList.size() == 0) {
   print("Не удалось получить ни одного статуса договора");
   return;
}

StatusContract = StatusContractList.get(0);
print("StatusContract.getStatus():"+StatusContract.getStatus() );


Нет! Попробуйте не эту getStatusList, а которая без даты, просто с cid одним.
Если у вас список выдаётся null, как вы утверждаете, то этот скрипт у вас будет падать напрочь и ничего не выводить, потому что проверка StatusContractList.size() == 0 вызовет NPE! Не путайте "вернул null" и "вернул пустой список", это совершенно разные случаи.

Автор:  dimOn [ 03 май 2011, 13:53 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

Физически методы getStatusList не могут вернуть null, ни тот ни этот, там внутри в любом случае создаётся ArrayList и возвращается, даже если туда ни одного элемента не добавлено.

Автор:  mikos [ 03 май 2011, 14:00 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

dimOn писал(а):
Физически методы getStatusList не могут вернуть null, ни тот ни этот, там внутри в любом случае создаётся ArrayList и возвращается, даже если туда ни одного элемента не добавлено.

По поводу листа не так выразился, сорри. Возвращается ноль элементов, отрабатывает блок:
Код:
if (StatusContractList.size() == 0) {

Автор:  dimOn [ 03 май 2011, 14:59 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

ну попробуйте без даты который метод
List<ContractStatus> StatusContractList = csm.getStatusList(cid);
так что возвращает?

вы понимаете зачем там параметр дата вообще? Это дата, НАЧИНАЯ С КОТОРОЙ выбираются статусы. Т.е. текущий момент если передадите, то отдастся последний открытый период, если он есть. Или все будущие периоды статусов.

Автор:  skyb [ 03 май 2011, 16:07 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

dimOn писал(а):
ну попробуйте без даты который метод
List<ContractStatus> StatusContractList = csm.getStatusList(cid);
так что возвращает?

вы понимаете зачем там параметр дата вообще? Это дата, НАЧИНАЯ С КОТОРОЙ выбираются статусы. Т.е. текущий момент если передадите, то отдастся последний открытый период, если он есть. Или все будущие периоды статусов.

вот поэтому мне нужно было и без даты....
многим нужно? Да. я не понимаю, как так не получается, просто 5.1 ставить неохото, и так дел много, но я не думаю что все так плохо, что многое изменилось в 5.1 и переделать там (возможно?) только дебрикейты, а остальное должно работать....я присоеденяюсь к мнению, что делаете что то не так.

Автор:  dimOn [ 03 май 2011, 16:30 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

Я ничо не понял, кому что нужно итд. Вы хотите одно, а пишете в коде другое, при этом приводите вообще изначально нерабочий код и не можете объяснить ни что хотите, ни что имеете :facepalm:

Автор:  mikos [ 03 май 2011, 16:49 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

dimOn писал(а):
ну попробуйте без даты который метод
List<ContractStatus> StatusContractList = csm.getStatusList(cid);
так что возвращает?

вы понимаете зачем там параметр дата вообще? Это дата, НАЧИНАЯ С КОТОРОЙ выбираются статусы. Т.е. текущий момент если передадите, то отдастся последний открытый период, если он есть. Или все будущие периоды статусов.

Без даты уже лучше - всегда статус 4 возвращается. Статус у абонента меняю ручками одним и тем же днем с приостановленного на активен и обратно.

Код:
cpu = new ContractParamUtils( con );
 
cid = event.getContractId();
DateNow = new GregorianCalendar();
now = DateNow.getTime();
 
csm  = new ContractStatusManager(con);

// определяем текущий статус договора

StatusContractList = csm.getStatusList(cid);
if (StatusContractList.size() == 0) {
   print("Не удалось получить ни одного статуса договора");
   return;
}
 
StatusContract = StatusContractList.get(0);
print("StatusContract.getStatus():"+StatusContract.getStatus() );


Код:
GENERATE_TIME: 03.05.11 14:45:25
EXECUTION_STOP_TIME: 03.05.11 14:45:25
PROCESS_TIME: 20

OUT:
StatusContract.getStatus():4


Код:
GENERATE_TIME: 03.05.11 14:45:37
EXECUTION_STOP_TIME: 03.05.11 14:45:37
PROCESS_TIME: 1

OUT:
StatusContract.getStatus():4

Автор:  skyb [ 03 май 2011, 18:02 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

dimOn писал(а):
Я ничо не понял, кому что нужно итд. Вы хотите одно, а пишете в коде другое, при этом приводите вообще изначально нерабочий код и не можете объяснить ни что хотите, ни что имеете :facepalm:

на 5.0 у меня все работает идеально :-P

Автор:  dimOn [ 04 май 2011, 11:16 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

mikos писал(а):
Без даты уже лучше - всегда статус 4 возвращается. Статус у абонента меняю ручками одним и тем же днем с приостановленного на активен и обратно.

Без даты должны вернуться все те периоды статусов, что у вас на картинке (их там по крайней мере 10), а не один статус. Или вы просто реально что-то не то делаете, например не тот cid передаёте.

Автор:  mikos [ 04 май 2011, 13:17 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

dimOn писал(а):
mikos писал(а):
Без даты уже лучше - всегда статус 4 возвращается. Статус у абонента меняю ручками одним и тем же днем с приостановленного на активен и обратно.

Без даты должны вернуться все те периоды статусов, что у вас на картинке (их там по крайней мере 10), а не один статус. Или вы просто реально что-то не то делаете, например не тот cid передаёте.

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

Автор:  dimOn [ 04 май 2011, 13:21 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

ну разумеется
Код:
StatusContract = StatusContractList.get(0);
print("StatusContract.getStatus():"+StatusContract.getStatus() );
возвращает блин один статус, потмоу что вы из списка берёте первый статус что там есть и выводите его в консоль.

Автор:  mikos [ 04 май 2011, 13:52 ]
Заголовок сообщения:  Re: Текущий статус договора в скрипте

dimOn писал(а):
ну разумеется
Код:
StatusContract = StatusContractList.get(0);
print("StatusContract.getStatus():"+StatusContract.getStatus() );
возвращает блин один статус, потмоу что вы из списка берёте первый статус что там есть и выводите его в консоль.

Я почему-то думал, что нулевой элемент - это последний. Ок, смотрите - почему не выводится последний статус с открытой датой getDateTo? Стоит же статус Приостановлен с 1.05. Почему он только предыдущий вывел?

Код:
cpu = new ContractParamUtils( con );

cid = event.getContractId();
DateNow = new GregorianCalendar();
now = DateNow.getTime();
 
csm  = new ContractStatusManager(con);

// определяем текущий статус договора
print("event.getContractId():"+cid+"\n");
StatusContractList = csm.getStatusList(cid);
if (StatusContractList.size() == 0) {
   print("Не удалось получить ни одного статуса договора");
   return;
}
 
print("StatusContractList.size():"+StatusContractList.size()+"\n");
for( Iterator it = StatusContractList.iterator(); it.hasNext(); ) {
   StatusContract = it.next();
   print("StatusContract.getId():"+StatusContract.getId() );
   print("StatusContract.getContractId():"+StatusContract.getContractId() );
   print("StatusContract.getStatus():"+StatusContract.getStatus() );
   print("StatusContract.getDateFrom():"+StatusContract.getDateFrom() );
   print("StatusContract.getDateTo():"+StatusContract.getDateTo() );
   print("StatusContract.getComment():"+StatusContract.getComment() );
   print("---");
}


Код:
GENERATE_TIME: 04.05.11 11:47:28
EXECUTION_STOP_TIME: 04.05.11 11:47:28
PROCESS_TIME: 12

OUT:
event.getContractId():609

StatusContractList.size():26

StatusContract.getId():2347
StatusContract.getContractId():609
StatusContract.getStatus():4
StatusContract.getDateFrom():2009-09-27
StatusContract.getDateTo():2009-10-21
StatusContract.getComment():
---
StatusContract.getId():3390
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2009-10-22
StatusContract.getDateTo():2009-11-21
StatusContract.getComment():установлен скриптом
---
StatusContract.getId():4592
StatusContract.getContractId():609
StatusContract.getStatus():4
StatusContract.getDateFrom():2009-11-22
StatusContract.getDateTo():2009-12-12
StatusContract.getComment():Недостаточно средств
---
StatusContract.getId():5848
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2009-12-13
StatusContract.getDateTo():2009-12-15
StatusContract.getComment():
---
StatusContract.getId():5946
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2009-12-16
StatusContract.getDateTo():2009-12-31
StatusContract.getComment():Принудительно из доп. действия
---
StatusContract.getId():9099
StatusContract.getContractId():609
StatusContract.getStatus():4
StatusContract.getDateFrom():2010-01-01
StatusContract.getDateTo():2010-01-31
StatusContract.getComment():Недостаточно средств
---
StatusContract.getId():20148
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2010-04-01
StatusContract.getDateTo():2010-09-08
StatusContract.getComment():
---
StatusContract.getId():37664
StatusContract.getContractId():609
StatusContract.getStatus():3
StatusContract.getDateFrom():2010-09-09
StatusContract.getDateTo():2010-09-22
StatusContract.getComment():Недостаточно средств
---
StatusContract.getId():38887
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2010-09-23
StatusContract.getDateTo():2010-09-24
StatusContract.getComment():
---
StatusContract.getId():38935
StatusContract.getContractId():609
StatusContract.getStatus():3
StatusContract.getDateFrom():2010-09-25
StatusContract.getDateTo():2010-12-25
StatusContract.getComment():Недостаток средств для начисления абонплаты
---
StatusContract.getId():45562
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2010-12-26
StatusContract.getDateTo():2010-12-26
StatusContract.getComment():Разблокирован модулем абонплат по достаточному платежу
---
StatusContract.getId():45563
StatusContract.getContractId():609
StatusContract.getStatus():3
StatusContract.getDateFrom():2010-12-27
StatusContract.getDateTo():2011-01-01
StatusContract.getComment():Недостаток средств для начисления абонплаты
---
StatusContract.getId():46540
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2011-01-02
StatusContract.getDateTo():2011-01-24
StatusContract.getComment():
---
StatusContract.getId():47381
StatusContract.getContractId():609
StatusContract.getStatus():3
StatusContract.getDateFrom():2011-01-25
StatusContract.getDateTo():2011-03-03
StatusContract.getComment():Недостаток средств для начисления абонплаты
---
StatusContract.getId():52046
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2011-03-04
StatusContract.getDateTo():2011-03-04
StatusContract.getComment():Разблокирован модулем абонплат по достаточному платежу
---
StatusContract.getId():52054
StatusContract.getContractId():609
StatusContract.getStatus():3
StatusContract.getDateFrom():2011-03-05
StatusContract.getDateTo():2011-03-09
StatusContract.getComment():Недостаток средств для начисления абонплаты
---
StatusContract.getId():52244
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2011-03-10
StatusContract.getDateTo():2011-03-15
StatusContract.getComment():Разблокирован модулем абонплат по достаточному платежу
---
StatusContract.getId():52390
StatusContract.getContractId():609
StatusContract.getStatus():3
StatusContract.getDateFrom():2011-03-16
StatusContract.getDateTo():2011-03-17
StatusContract.getComment():Недостаток средств для начисления абонплаты
---
StatusContract.getId():52474
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2011-03-18
StatusContract.getDateTo():2011-03-18
StatusContract.getComment():Статус изменен скриптом 'Включение должников по приходу платежа'
---
StatusContract.getId():52492
StatusContract.getContractId():609
StatusContract.getStatus():3
StatusContract.getDateFrom():2011-03-19
StatusContract.getDateTo():2011-04-11
StatusContract.getComment():Недостаток средств для начисления абонплаты
---
StatusContract.getId():54747
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2011-04-12
StatusContract.getDateTo():2011-04-12
StatusContract.getComment():Разблокирован модулем абонплат по достаточному платежу
---
StatusContract.getId():54750
StatusContract.getContractId():609
StatusContract.getStatus():3
StatusContract.getDateFrom():2011-04-13
StatusContract.getDateTo():2011-04-25
StatusContract.getComment():Недостаток средств для начисления абонплаты
---
StatusContract.getId():55110
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2011-04-26
StatusContract.getDateTo():2011-04-26
StatusContract.getComment():Статус изменен скриптом 'Включение должников по приходу платежа'
---
StatusContract.getId():55116
StatusContract.getContractId():609
StatusContract.getStatus():3
StatusContract.getDateFrom():2011-04-27
StatusContract.getDateTo():2011-04-27
StatusContract.getComment():Недостаток средств для начисления абонплаты
---
StatusContract.getId():55145
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2011-04-28
StatusContract.getDateTo():2011-04-29
StatusContract.getComment():Статус изменен скриптом 'Включение должников по приходу платежа'
---
StatusContract.getId():56840
StatusContract.getContractId():609
StatusContract.getStatus():0
StatusContract.getDateFrom():2011-04-30
StatusContract.getDateTo():2011-04-30
StatusContract.getComment():
---

Страница 1 из 2 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/