BiTel

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

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: ContractStatusChangingEvent
СообщениеДобавлено: 24 май 2013, 16:19 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Добрый день!

Повесил свой обработчик на bitel.billing.server.script.bean.event.ContractStatusChangingEvent.
Вот мой код:
Код:
   @Override
   public void onEvent( Event event, Setup setup, ConnectionSet connectionSet )
      throws Exception
   {
      ContractStatusChangingEvent   evt = (ContractStatusChangingEvent)event;

      ContractStatus   oldStatus = evt.getOriginalStatus();
      ContractStatus   newStatus = evt.getStatus();

      print("We are onStatusChange");
      print("CID: " + evt.getContractId());
      print("Old Status: " + oldStatus.getStatus());
      print("New Status: " + newStatus.getStatus());
      print("Old ID: " + oldStatus.getId());
      print("New ID: " + newStatus.getId());


На выходе - во всех строчках (кроме CID) 0. Где косяк? CID правильный возвращается.

Цитата:
Клиент: вер. 5.2 сборка 1173 от 23.05.2013 18:42:55
os: Windows XP; java: Java HotSpot(TM) Client VM, v.1.6.0_37
Сервер: вер. 5.2 сборка 1502 от 23.05.2013 18:43:03
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_43

card вер. 5.2 сборка 201 от 25.03.2013 14:32:21
enaza вер. 5.2 сборка 47 от 26.12.2012 17:59:24
gorod вер. 5.2 сборка 155 от 25.03.2013 14:32:28
inet вер. 5.2 сборка 1177 от 23.05.2013 20:27:07
mps вер. 5.2 сборка 169 от 24.04.2013 11:02:52
npay вер. 5.2 сборка 202 от 22.05.2013 16:59:25
rentsoft вер. 5.2 сборка 45 от 26.12.2012 17:59:45


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ContractStatusChangingEvent
СообщениеДобавлено: 27 май 2013, 17:11 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
up


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ContractStatusChangingEvent
СообщениеДобавлено: 28 май 2013, 21:40 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Помогитеееееееееееее! :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ContractStatusChangingEvent
СообщениеДобавлено: 29 май 2013, 13:55 
Не в сети
Аватара пользователя

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

плюс, вы, походу, как-то не так понимаете что это событие из себя представляет и что такое oldStatus и newStatus
это не статусы "до" и "после". это один и тот же статус, только если произошло урезание статуса (например неперетираемый какой-то попался итд), то originalStatus будет содержать всё равно тот который пытались ставить, а status - уже порезаный, который сейчас в БД будет пытаться писаться.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ContractStatusChangingEvent
СообщениеДобавлено: 29 май 2013, 13:57 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
а строки
print("Old Status: " + oldStatus.getStatus());
print("New Status: " + newStatus.getStatus());
выводят 0 потому что походу вы ставите статус просто нулевой (активен), вот и всё.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ContractStatusChangingEvent
СообщениеДобавлено: 29 май 2013, 13:58 
Не в сети
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ContractStatusChangingEvent
СообщениеДобавлено: 29 май 2013, 15:41 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Слишком туманно для меня выразились, я ведь не настоящий программер :)
Из того что я вижу:
Цитата:
ContractStatus getOriginalStatus()
Возвращает оригинальный статус (исходный).
ContractStatus getStatus()
Возвращает устанавливаемый статус договора.


То есть (на мой взгляд) возвращается не список, а конкретная позиция. Далее я в конкретной позиции делаю:
Цитата:
int getStatus()


потому что, опять таки, не вижу никаких других методов. И нет какого-нибудь ContractStatusHistoryManager. Подскажите тогда плиз в чем я ошибаюсь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ContractStatusChangingEvent
СообщениеДобавлено: 29 май 2013, 16:12 
Не в сети
Аватара пользователя

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

Именно, возвращается конкретная позиция, только что сейчас добавляемая. getOriginalStatus отдаст то, что вы пытаетесь в клиенте установить, а getStatus то что реально сейчас будет писаться в БД (во многих случаях оно будет одно и то же).

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ContractStatusChangingEvent
СообщениеДобавлено: 29 май 2013, 16:49 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
А. Извиняюсь. Задача - отследить изменение статуса с "В подключении" на "Активен" и добавить тарифную опцию.
Т. е. я вообще не то событие смотрю. Получается мне ChangedStatus событие надо?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ContractStatusChangingEvent
СообщениеДобавлено: 29 май 2013, 16:57 
Не в сети
Аватара пользователя

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

1. читать текущий статус договора из БД, cid у вас есть. это будет "статус старый"
2. брать статус из getStatus, это будет "статус который сейчас запишется"

и сравнивать. но если ставится например завтрашним днём или ещё каким. что делать?


кстати , может, вам тут больше подойдут асинхронные события:
ContractStatusChangedEvent
ContractStatusChangedTopicEvent
они вызываются либо сиюминутно если надо сейчас менять статус, либо потом из таска. ContractStatusSetter. но там есть проблема с получением старого статуса, да)

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ContractStatusChangingEvent
СообщениеДобавлено: 29 май 2013, 17:01 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
А ведь есть еще ContractStatusModifiedEvent, и там вроде как раз те функции что нужны, но не могу найти как он по русски называется в "функциях скриптов поведения"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ContractStatusChangingEvent
СообщениеДобавлено: 31 май 2013, 02:52 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
При установке статуса новый статус может перетереть как один, так и несколько старых статусов. И текущий, бывший до установки нового статуса , к сожалению, сейчас в событие не передается.

Во время ContractStatusChangingEvent еще ничего не изменилось, поэтому текущий статус можно получить
new ContractManager( con ).getContractById( contractId ).getStatus();
или
new ContractStatusManager( con ).getStatus( contractId, newStatusDateFrom );

Во время ContractStatusChangedEvent изменения уже в базе:
new ContractStatusManager( con ).getStatus( contractId, dayBeforeNewStatusDateFrom );
или
new ContractStatusManager( con ).getStatusList( contractId );


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ContractStatusChangingEvent
СообщениеДобавлено: 31 май 2013, 08:20 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Спасибо!
А зачем тогда ContractStatusModifiedEvent? Его ни как нельзя использовать?


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

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


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

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


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

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