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/