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/ |