forum.bitel.ru http://forum.bitel.ru/ |
|
как поймать статус с которого происходила смена http://forum.bitel.ru/viewtopic.php?f=19&t=12721 |
Страница 1 из 1 |
Автор: | skyb [ 16 ноя 2017, 13:33 ] |
Заголовок сообщения: | как поймать статус с которого происходила смена |
собственно есть необходимость при переключении со статуса "в подключении" на "активен" менять лимит, раньше как то работало нахождение статуса с которого происходит изменение, сейчас почему то нет. События пробовал оба, как "Статус договора изменен", так и "Изменение статуса договора", результат 1, всегда определяется только тот статус на который меняется. Код: Сервер: вер. 7.0.1254 / 26.07.2017 15:23:24 os: Linux; java: Java HotSpot(TM) Server VM, v.1.8.0_152 Код: @Override public void onEvent(ContractStatusChangingEvent event, Setup setup, ConnectionSet set) throws Exception { logger.info("Поехали"); logger.info("Старый статус"); logger.info("origStatusStatus = " + event.getOriginalStatus().getStatus()); logger.info("origStatusId = " + event.getOriginalStatus().getId()); logger.info("origStatusDateFrom = " + event.getOriginalStatus().getDateFrom()); logger.info("origStatusDateTo = " + event.getOriginalStatus().getDateTo()); logger.info("origStatusComment = " + event.getOriginalStatus().getComment()); logger.info("Новый статус"); logger.info("newStatusStatus = " + event.getStatus().getStatus()); logger.info("newStatusId = " + event.getStatus().getId()); logger.info("newStatusDateFrom = " + event.getStatus().getDateFrom()); logger.info("newStatusDateTo = " + event.getStatus().getDateTo()); logger.info("newStatusComment = " + event.getStatus().getComment()); } Код: 11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - Поехали
11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - Старый статус 11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - origStatusStatus = 0 11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - origStatusId = 0 11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - origStatusDateFrom = Wed Nov 01 00:00:00 MSK 2017 11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - origStatusDateTo = null 11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - origStatusComment = Статус 01.11.2017 11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - Новый статус 11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - newStatusStatus = 0 11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - newStatusId = 0 11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - newStatusDateFrom = Wed Nov 01 00:00:00 MSK 2017 11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - newStatusDateTo = null 11-16/10:18:50 INFO [dyn-clss-evnt-lstnr-p-6-t-21] TestSkyb - newStatusComment = Статус 01.11.2017 |
Автор: | skyb [ 16 ноя 2017, 13:35 ] |
Заголовок сообщения: | Re: как поймать статус с которого происходила смена |
или так Код: import org.apache.log4j.Logger; import ru.bitel.bgbilling.kernel.container.managed.ServerContext; import ru.bitel.bgbilling.kernel.contract.limit.common.service.ContractLimitService; import ru.bitel.bgbilling.kernel.event.events.ContractStatusChangingEvent; import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.sql.ConnectionSet; import java.math.BigDecimal; import java.sql.Connection; /* *Изменение лимита при активации абонента */ public class TestSkyb extends EventScriptBase<ContractStatusChangingEvent> { private static Logger logger = Logger.getLogger(TestSkyb.class); @Override public void onEvent(ContractStatusChangingEvent event, Setup setup, ConnectionSet set) throws Exception { logger.info("Поехали"); Connection con = set.getConnection(); int contractId = event.getContractId(); ServerContext context = ServerContext.get(); ContractLimitService contractLimitService = context.getService(ContractLimitService.class, 0); logger.info("origStatus = " + event.getOriginalStatus().getStatus()); logger.info("newStatus = " + event.getStatus().getId()); if(event.getOriginalStatus().getStatus() == 5 && event.getStatus().getId() == 0 ){ logger.info("Меняем лимит"); contractLimitService.updateContractLimitPeriod(contractId, new BigDecimal(-1000), 5, "Смена лимита"); } } } новый и старый статусы одинаковые Код: Поехали
origStatus = 0 newStatus = 0 |
Автор: | dimOn [ 16 ноя 2017, 14:52 ] |
Заголовок сообщения: | Re: как поймать статус с которого происходила смена |
OriginalStatus это не "статус который был" и никогда таковым не был, это статус который был до изменения основного статуса. Написано же в явадоке Цитата: Он будет равен (не ссылочно, а значением) статусу {@link #getStatus()}, если не использовалась никакая логика смены статусов скриптом или там не менялся приходящий статус.
|
Автор: | dimOn [ 16 ноя 2017, 14:55 ] |
Заголовок сообщения: | Re: как поймать статус с которого происходила смена |
старый статус получить в событии на данный момент можно только из БД, и только в синхронном событии, очевидно (т.е. в ContractStatusChangingEvent да) |
Автор: | dimOn [ 16 ноя 2017, 15:00 ] |
Заголовок сообщения: | Re: как поймать статус с которого происходила смена |
я уже думал почему бы не передавать и "старый статус" в события, но потому что, строго говоря, нет никакого "старого статуса" т.к. эти события срабатывают и не изменения задним числом и будущим числом, когда текущий статус вообще не затрагивается даже, а срабатывает перетирание какое-то и несколько старых промежутков статуса например перетираются новым. что именно здесь будет "старым статусом"? |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |