forum.bitel.ru http://forum.bitel.ru/ |
|
Сброс сервисов при блокировке договоров http://forum.bitel.ru/viewtopic.php?f=19&t=12431 |
Страница 1 из 1 |
Автор: | spectrum [ 07 май 2017, 23:58 ] |
Заголовок сообщения: | Сброс сервисов при блокировке договоров |
Добрый день! Вопрос следующий. При блокировке договоров: Код: ContractStatus status = new ContractStatus(); status.setContractId(contractId); status.setStatus(3); status.setComment("Недостаточно средств для начисления абонплаты"); status.setDateFrom(new Date()); status.setDateTo(null); ContractStatusManager contractStatusManager = new ContractStatusManager(con); contractStatusManager.changeStatus(status, 0); con.commit(); Не происходит сразу сброс состояний сервисов выделенных линий и текущих подключений абонентов. Т.е. договор блокируется. Статус договора становится соответствующий, но при этом абонент подключен и продолжает работать. Т.е. сессия не сбрасывается. Так продолжается до тех пор, пока не закончит работу API-скрипт. Дело в том, что мы пытаемся реализовать плавное отключение абонентов по балансу 1-го числа месяца. Т.е. не всех сразу, а постепенно. Таким образом предполагается работа скрипта несколько часов. Блокировка договоров и начисление абонплат работает как положено. Но, как написал выше, не происходит сброс сессий абонентов и абонент остается активным. Каким образом можно принудительно установить соответствующее состояние сервиса "Отключен" и, соответственно, сбросить сессии? |
Автор: | Phricker [ 08 май 2017, 10:47 ] |
Заголовок сообщения: | Re: Сброс сервисов при блокировке договоров |
Либо воспользоваться в ContractStatusManager Код: changeStatus(ContractStatus newStatus, java.lang.Integer userId, boolean processEvent) Смена статуса договора. и boolean ProcessEvent выставить в true, чтобы бросилось событие либо вручную после смены статуса бросить событие Код: EventProcessor eventProcessor = EventProcessor.getInstance();
EventProcessor.getInstance().publish( new ContractStatusChangedEvent(status, 0) ); EventProcessor.getInstance().publish( new ContractStatusChangedTopicEvent(status, 0) ); |
Автор: | Phricker [ 08 май 2017, 11:39 ] |
Заголовок сообщения: | Re: Сброс сервисов при блокировке договоров |
Третий вариант - воспользоваться ContractStatusService Код: ServerContext context = ServerContext.get(); ContractStatusService contractStatusService = context.getService(ContractStatusService.class, 0); contractStatusService.contractStatusChange(cid, status, false); Единственное НО, в ContractStatusService нельзя указывать пользователя. Статус будет сменен под тем пользователем под которым запускался скрипт (если через планировщик - значит User.USER_SERVER) |
Автор: | spectrum [ 08 май 2017, 12:02 ] |
Заголовок сообщения: | Re: Сброс сервисов при блокировке договоров |
Спасибо большое! Еще вопрос. Предположим выбрал вариант Код: changeStatus(ContractStatus newStatus, java.lang.Integer userId, boolean processEvent) Не получится ли такой ситуации, произошла блокировка абонента, соответствующее состояние сервиса установилось, сессия сбросилась. После этого абонент производит оплату, договор открывается. Абонент переподключается и работает. При этом скрипт еще не закончил свою работу. При окончании работы скрипта не получится ли такой ситуации, что сервис переключится в состояние "Отключен"? Т.е. не будет ли заново запущено событие отключения на сервисе? |
Автор: | Phricker [ 08 май 2017, 23:33 ] |
Заголовок сообщения: | Re: Сброс сервисов при блокировке договоров |
Не должно. Конечно если только у вас скрипт не выбрал кучу договоров на отключение, в цикле начал перебирать договора и у вас в цикле же стоит задержка. В таком случае абонент может оплатить, а потом до него в цикле дойдет задание на приостановку и его выключит. |
Автор: | spectrum [ 09 май 2017, 17:28 ] |
Заголовок сообщения: | Re: Сброс сервисов при блокировке договоров |
Нет, Там оценка текущего баланса, блокировка договора и начисление абонплаты идут друг за другом без задержки. Задержка вставляется между договорами. Кстати, получается 2-ой и 3-ий наверно не подходят. Потому как статус на данный момент ты установишь вручную, но потом, по окончании работы скрипта, состояние сервисов опять установится в "отключен", даже если абонент уже оплатил. |
Автор: | spectrum [ 15 май 2017, 09:51 ] |
Заголовок сообщения: | Re: Сброс сервисов при блокировке договоров |
К сожалению все 3 способа оказались не рабочие. 1 способ. Там true - означает посылать событие, а false означает не посылать его вовсе. Т.е. при false даже после окончания работы скрипта не происходит отключения абонентской сессии. 2 способ. Он как будто вообще ни на что не влияет. Если в методе changeStatus выставишь processEvent в true, то отключение срабатывает после окончания работы скрипта. Если false, то отключение абонента не происходит вовсе. 3 способ. Блокировка также происходит только после окончания работы скрипта. Уважаемые разработчики, посоветуйте что-нибудь. |
Автор: | spectrum [ 16 май 2017, 12:43 ] |
Заголовок сообщения: | Re: Сброс сервисов при блокировке договоров |
Уважаемые разработчики, прокомментируйте, плиз, ситуацию. Можно ли как-то принудительно отправить событие или может по-другому решить проблему? Почему она вообще возникает? |
Автор: | stark [ 21 июл 2017, 18:01 ] |
Заголовок сообщения: | Re: Сброс сервисов при блокировке договоров |
Вам нужно делать 3-м способом и взывать commit у context-а,а не у connection. Тогда скорее всего будет работать. События отправляются после commit-а context-а. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |