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

Тарифные опции, раздумие
http://forum.bitel.ru/viewtopic.php?f=19&t=11671
Страница 1 из 1

Автор:  skyb [ 09 июн 2016, 07:27 ]
Заголовок сообщения:  Тарифные опции, раздумие

Собственно вопрос, а как же заставить тарифную опцию работать как мне хочется?
Мне необходимо автоматически продлять тарифную опцию следующим днем, тоесть она сегодня отработала, а завтра должна такая же навесится скриптом, есть 2 способа это сделать (я нашел только 2), но оба у меня не заработали. Итак, первый
Код:
ServerContext context = new ServerContext( setup1, connectionSet2, -1, 0 );
TariffOptionService service = context.newService(TariffOptionService.class, -1);
java.util.List<ContractTariffOption> ctol = service.contractTariffOptionHistory(cid, calendar.getTime(), false);

if (ctol.size() > 0)
{
Calendar TimeFrom = TimeUtils.convertDateToCalendar(ctol.get(ctol.size() - 1).getTimeFrom());
TimeFrom.add(Calendar.DAY_OF_MONTH, +1);
Calendar TimeTo = TimeUtils.convertDateToCalendar(ctol.get(ctol.size() - 1).getTimeTo());
TimeTo.add(Calendar.DAY_OF_MONTH, +1);
ContractTariffOptionDao ctod = new ContractTariffOptionDao(con);
ContractTariffOption cto = new ContractTariffOption();
cto.setContractId(cid);
cto.setActivatedTime(ctol.get(ctol.size() - 1).getActivatedTime());
cto.setDeactivatedTime(ctol.get(ctol.size() - 1).getDeactivatedTime());
cto.setTimeFrom(TimeFrom.getTime());
cto.setTimeTo(TimeTo.getTime());
cto.setActivatedMode(ctol.get(ctol.size() - 1).getActivatedMode());
cto.setOptionId(ctol.get(ctol.size() - 1).getOptionId());
ctod.update(cto);
EventProcessor.getInstance().publishAfterCommit(new ContractTariffOptionChangedEvent(cid, 0, 0, cto));
}

Ищем в хистри последнюю дату активации и добавляем новую опцию, все ок, опция добавляется и работает как нужно, но при этом модуль inet ничего про эту опцию не знает и работает как будто ее там и нету. Но я не унывал, сделал тарифную опцию через сервис
Код:
service.contractTariffOptionActivate(cid, ctol.get(ctol.size() - 1).getOptionId(), ctol.get(ctol.size() - 1).getActivatedMode(), false);

тут возникла другая проблема, опция добавляется только в момент отработки скрипта, но все остальное отрабатывает верно и модуль inet видит эту опцию.
ps Пока писал, пришла в голову мысль, что стоит просто бегать скриптом каждый час и если даты старой и новой опции совпадают с разницей в 1 день то все заработает. Да, костыль это, и что то мне подсказывает что должно быть другое решение?

Автор:  Phricker [ 09 июн 2016, 10:27 ]
Заголовок сообщения:  Re: Тарифные опции, раздумие

skyb писал(а):
что должно быть другое решение?

Да, оно даже описано на форуме.
Если вкратце - надо доработку пилить :)

Автор:  barguzin2 [ 09 июн 2016, 21:42 ]
Заголовок сообщения:  Re: Тарифные опции, раздумие

В модуле Subscription реализована подсистема JobScheduler (хотя на самом деле она в ядре, но явно используется вроде только для подписок), которая позволяет запланировать задачу на конкретный момент времени. В подписках задача вызывается в момент завершения активного периода, активирует новый, кидает события. В данном случае это будет время окончания опции, а задача будет активировать новую. Вот только в API на этот счёт почти ничего нет, а так задумка хорошая, надо продвигать в массы.

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