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

[6.2] Периоды подписки
http://forum.bitel.ru/viewtopic.php?f=60&t=10454
Страница 1 из 1

Автор:  borisk [ 23 апр 2015, 13:41 ]
Заголовок сообщения:  [6.2] Периоды подписки

Добрый день!

Создаю подписку (дневную):
Продолжительность 1 DAY
Задержка 0 SEC
Округление 1 DAY

Смысл - нужна подписка которая активироваться в 00:00 суток и заканчиваться в 23:59. Но, когда я смотрю в периоды подписки, то вижу начало 23.04.2015 00:00:00, окончание 24.04.2015 00:00:00. Это правильно? Я пытаюсь с этой подпиской работать в скрипте, и окончание в следующих сутках напрягает. Может я просто неправильно задал параметры подписки?

Автор:  skn [ 23 апр 2015, 15:14 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

если активироваться должна с 00 часов следующего дня, то задержка нужно поставить 1 DAY
алгоритм такой к моменту активации прибавляется Задержка и обнуляются все поля меньше поля Округление

окончание нормальное, период действует до указанного значения...

Автор:  borisk [ 23 апр 2015, 19:02 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

Нет, активироваться должна мгновенно, в момент добавления. Но при этом должна действовать до конца дня. При повторной автоактивации - с 00:00 по 23:59.

И самый главный вопрос - моему скрипту надо знать когда закончится текущий период и начнется новый. И как мне тогда правильно сделать эту проверку? Думал через TimeUtils.dateBefore, но, получается, это неправильно?

Автор:  skn [ 23 апр 2015, 19:16 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

borisk писал(а):
Нет, активироваться должна мгновенно, в момент добавления. Но при этом должна действовать до конца дня. При повторной автоактивации - с 00:00 по 23:59

такой режим не предусмотрен...
глупо как то выходит...
например если я активирую за пять минут до полночи, будет списано за пять минут как за целый день...
если вам надо дневной режим то проще использовать простые дневные абонплаты, этот модуль был как раз орентирован на те случаи когда период не привязан к календарным суткам и не равен им.

borisk писал(а):
И самый главный вопрос - моему скрипту надо знать когда закончится текущий период и начнется новый. И как мне тогда правильно сделать эту проверку? Думал через TimeUtils.dateBefore, но, получается, это неправильно?


когда закончиться текущий, это есть в учетном периоде, а когда начнется новый заранее не кто сказать не сможет (в идеале он начнется со следующей секунды, после окончания предыдущего...)

Автор:  borisk [ 24 апр 2015, 00:40 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

Вот почему для тарифной опции это не глупо, а для подписки глупо? :)
Да на самом деле я привел дневную подписку для примера. Идея - я как раз делаю замену модулю абонплат. Потому что учетные периоды в npay вы упорно не хотите реализовывать. Но смысл остается тем же, два дня, неделя, месяц - не важно. Возьмем идеальную ситуацию - у клиента всегда есть деньги на счету. Получается что подписка каждый раз будет сдвигаться на секунду? Или как?

Автор:  skn [ 24 апр 2015, 00:52 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

borisk писал(а):
Вот почему для тарифной опции это не глупо, а для подписки глупо? :)
Да на самом деле я привел дневную подписку для примера. Идея - я как раз делаю замену модулю абонплат. Потому что учетные периоды в npay вы упорно не хотите реализовывать. Но смысл остается тем же, два дня, неделя, месяц - не важно. Возьмем идеальную ситуацию - у клиента всегда есть деньги на счету. Получается что подписка каждый раз будет сдвигаться на секунду? Или как?


для меня подписка и опция отличаются... ( подписка - периодическая сущность, а опция - разовая )

по поводу сдвига, можете задать продолжительность подписки в секундах (например, количество секунд в сутках минус одна)
а начало периода сдвинуть на 1 MIN и округлить до суток

Автор:  borisk [ 24 апр 2015, 00:56 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

Хорошо, вопрос - окончание подписки в этом случае будет каким? 23:59:59 или все же 00:00:00 следующих суток?

Автор:  skn [ 24 апр 2015, 04:10 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

borisk писал(а):
Хорошо, вопрос - окончание подписки в этом случае будет каким? 23:59:59 или все же 00:00:00 следующих суток?


сколько секунд укажите столько и будет

Автор:  skn [ 24 апр 2015, 04:16 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

borisk писал(а):
Добрый день!

Создаю подписку (дневную):
Продолжительность 1 DAY
Задержка 0 SEC
Округление 1 DAY

Смысл - нужна подписка которая активироваться в 00:00 суток и заканчиваться в 23:59. Но, когда я смотрю в периоды подписки, то вижу начало 23.04.2015 00:00:00, окончание 24.04.2015 00:00:00. Это правильно? Я пытаюсь с этой подпиской работать в скрипте, и окончание в следующих сутках напрягает. Может я просто неправильно задал параметры подписки?


правильно,
если продолжительность задана в днях то 23+1=24
если хотите 23:59, то продолжительность задаете или в минутах 23*60+59=1439 или в секундах (23*60+59)*60=86340

Автор:  borisk [ 25 май 2015, 10:12 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

Вот опять возник вопрос по этой теме. Я все же пока решил оставить подписку как и было в топике:
Цитата:
Создаю подписку (дневную):
Продолжительность 1 DAY
Задержка 0 SEC
Округление 1 DAY


Если у подписки стоит автопродление, то она замечательно сама активируется дальше (см. картинку).
Отключаем автопродление и пытаемся активировать подписку вручную в 00:00 следующих суток (например пробовал сегодня, 25.05 в 00:00), получаем exception:
Цитата:
05-25/07:03:57 ERROR [event-proc-p-2-t-1] ScriptEventListener - java.util.concu
rrent.ExecutionException: java.lang.Exception: ru.bitel.bgbilling.common.BGExce
ption: Активация не возможна, так как на заданое время уже есть активный период
.

Код для ручной активации:
Цитата:
// Активируем все подписки
SubscriptionDao subDao = new SubscriptionDao(connection, SUBSCRIPTION_MID, User.USER_SERVER);
for(Subscription s : subs) {
su.subscriptionActivate(s, activationDate, SUBSCRIPTION_MID, User.USER_SERVER, subDao);
}


activationDate, естественно было 25.05.2015 00:00.
Как же так? Почему автоматически система активирует, а вручную не дает?

Автор:  skn [ 25 май 2015, 12:00 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

конец предыдущего и начало нового периода совпадают, поэтому и не дает

Автор:  borisk [ 25 май 2015, 15:01 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

Ключевой вопрос был - почему автоматически система продляет, а вручную не дает :) Какой такой хитрый код у системы? Как же она обходит эту ситуацию.

Автор:  borisk [ 25 май 2015, 15:10 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

Не говоря уже о том, что subscriptionActivate требует в качестве параметра java.util.Date, у которой все методы уже deprecated.

Автор:  skn [ 25 май 2015, 15:12 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

borisk писал(а):
Ключевой вопрос был - почему автоматически система продляет, а вручную не дает :) Какой такой хитрый код у системы? Как же она обходит эту ситуацию.


автоматическая подписка создает новую подписку со следующей секунды, а не с той с которой закончилась предыдущая как вы при ручном способе.

Автор:  skn [ 25 май 2015, 15:22 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

borisk писал(а):
Не говоря уже о том, что subscriptionActivate требует в качестве параметра java.util.Date, у которой все методы уже deprecated.


не все, а только те которые работали не корректно, без учета часовых поясов и других особенностей локального времени

Автор:  borisk [ 25 май 2015, 21:04 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

Может я не туда смотрю, но в JDK 1.7 остались:
Цитата:
Date()
Date(long)
after()
before()
clone()
compareTo()
equals()


Мне кажется для пользования классом этих функций маловато. То есть класс оставлен чисто как контейнер для совместимости. Все остальное deprecated, use Calendar or DateFormat.

Автор:  dimOn [ 25 май 2015, 22:26 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

Цитата:
но в JDK 1.7 остались:
Мне кажется для пользования классом этих функций маловато. То есть класс оставлен чисто как контейнер для совместимости.
Это примерно с JDK 1.1 т.е. с начала 90-х так. Date это по сути оболочка для численного timestamp, для этого оно и используется там где используется.

Автор:  borisk [ 26 май 2015, 10:54 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

Все-таки мне не совсем понятно. Параметр initDate, передаваемый в subscriptionActivate - что это? Дата начала нового периода или просто дата возникновения события? Потому что опять у меня ночной скрипт не отработал без каких-либо явных причин. Запустил вручную - период создался 26.05.2015 00:00:00 - 27.05.2015 00:00:00, а вот дата создания 26.05.2015 00:00:01.

Автор:  skn [ 26 май 2015, 17:57 ]
Заголовок сообщения:  Re: [6.2] Периоды подписки

initDate - дата от которой рассчитывается начало подписки

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