forum.bitel.ru http://forum.bitel.ru/ |
|
4.6 Тарификация 1-го часа месяца. http://forum.bitel.ru/viewtopic.php?f=7&t=4501 |
Страница 1 из 1 |
Автор: | Yagoda [ 01 сен 2010, 07:29 ] |
Заголовок сообщения: | 4.6 Тарификация 1-го часа месяца. |
Сервер: 4.6-675. IPN: 4.6-246. Ситуация. Модуль работает почти "в реальном времени" - NetFlow лог каждые 2 минуты; обсчет логов (планировщик) - каждые 2 минуты. Задержка обсчета получается до 10 минут. Терпимо. Проблема. Первый час каждого месяца много клиентов уходят в "большой минус". Оказалось, что в течении этого часа задача "Обсчет логов IPN" трафик за этот час (первый в месяце) не обсчитывает. При этом, сам трафик считается. Просто не тарифицируется. Тарифицируется этот первый час только позже. В результате клиент "в большом минусе". В описании следующее: "При выполнении задачи начисления задача берет предыдущий минуте выполнения час и обсчитывает логи за этот месяц. Сделано это для того, чтобы можно было реализовать "Последний обсчёт" трафика за месяц, после обработки логов за последний час месяца." Перезапуск БГБ сервера на первых минутах месяца ничего не дает. Бог с ним, пусть пересчитывает предыдущие часы/дни/месяцы. Но текущий час надо обсчитать! И вот как этого добиться?.. Хелп плиз... |
Автор: | Yagoda [ 02 сен 2010, 11:58 ] |
Заголовок сообщения: | Re: 4.6 Тарификация 1-го часа месяца. |
Ау! Так все-же, как обсчитать трафик за первый час месяца, если этот час еще не кончился? Хоть скриптом, ей-богу. |
Автор: | Yagoda [ 03 сен 2010, 10:57 ] |
Заголовок сообщения: | Re: 4.6 Тарификация 1-го часа месяца. |
ОК, если такое поведение заложено в модуль IPN, то как скриптом получить наработку в МБ и занести нужную наработку в рублях? Пусть стоимость фиксированная. ОК, так и буду делать наверное. Трафик считается исправно, можно взять прямо из базы. Пример: SELECT sum(`amount`) AS `bates` FROM `ipn_contract_data_1_201009` WHERE `cid` =3106 AND `sid` =1 Не могу понять, как зачислить наработку по определенной услуге... Упс... Разобрался. BalanceUtils.setContractAccount(int cid, java.util.Date time, int sid, float summa) - мне вполне подойдет. Идея такая: 1. В первый час месяца наработку стандартной задачей "Обсчет логов IPN" не делать. Т.е. задать часы выполнения 1-23. 2. Добавить задачу "Обсчет логов IPN" каждый месяц, 1 число, 0 час, 58 минута. 3. Добавить скрипт на договоры. Выполнение по расписанию: 1 число, 0 часов, 2-4-6-8-....56 минуты. Логика работы скрипта: Если тариф с фиксированной оплатой (эти данные есть в общей библиотеке у меня), то - на выход. Берем наработку в байтах из нужной таблицы ipn_contract_data_***. Считаем наработку в рублях. Цена зависит от тарифа - опять в общей библиотеке. Устанавливаем наработку по нужной услуге. Хм... А если "ушел в минус"? Еще и лимит учитывать... Просто обновление баланса закроет шлюз если надо? Или этим занимается задача "Проверка шлюзов IPN"? |
Автор: | stark [ 21 сен 2010, 19:49 ] |
Заголовок сообщения: | Re: 4.6 Тарификация 1-го часа месяца. |
Yagoda писал(а): ОК, если такое поведение заложено в модуль IPN, то как скриптом получить наработку в МБ и занести нужную наработку в рублях? Пусть стоимость фиксированная. Да такое поведение заложено в модуль IPN. Наверное надо на границе месяца считать оба часа - и предыдущий и текущий . Добавил в TODO Yagoda писал(а): ОК, так и буду делать наверное. Трафик считается исправно, можно взять прямо из базы. Пример: SELECT sum(`amount`) AS `bates` FROM `ipn_contract_data_1_201009` WHERE `cid` =3106 AND `sid` =1 Не могу понять, как зачислить наработку по определенной услуге... Упс... Разобрался. BalanceUtils.setContractAccount(int cid, java.util.Date time, int sid, float summa) - мне вполне подойдет. Идея такая: 1. В первый час месяца наработку стандартной задачей "Обсчет логов IPN" не делать. Т.е. задать часы выполнения 1-23. 2. Добавить задачу "Обсчет логов IPN" каждый месяц, 1 число, 0 час, 58 минута. 3. Добавить скрипт на договоры. Выполнение по расписанию: 1 число, 0 часов, 2-4-6-8-....56 минуты. Логика работы скрипта: Если тариф с фиксированной оплатой (эти данные есть в общей библиотеке у меня), то - на выход. Берем наработку в байтах из нужной таблицы ipn_contract_data_***. Считаем наработку в рублях. Цена зависит от тарифа - опять в общей библиотеке. Устанавливаем наработку по нужной услуге. Хм... А если "ушел в минус"? Еще и лимит учитывать... Просто обновление баланса закроет шлюз если надо? Или этим занимается задача "Проверка шлюзов IPN"? Уход в минус проверяет задача "Проверка шлюзов IPN" по балансу и лимиту. |
Автор: | stark [ 21 сен 2010, 20:02 ] |
Заголовок сообщения: | Re: 4.6 Тарификация 1-го часа месяца. |
а код получения стоимости IPN не такой уж простой, его сложно вот так вот выдрать , надо время ,в рамках форума я этого делать не буду . там нужно правильно проинициализировать тарифное дерево а потом сделать к нему запрос . Мы наверное все-таки подумаем над проблемой границы часа и исправим. А в новом модуле inet, где все будет оперативно не будет такой проблемы . |
Автор: | stark [ 01 окт 2010, 17:49 ] |
Заголовок сообщения: | Re: 4.6 Тарификация 1-го часа месяца. |
Добавлен параметр hour.minus для задачи обсчета логов. Чтобы на брало предыдущий час , нужно поставить Код: hour.minus=0 Нужно создать еще одну задачу с таким параметром и запускать ее в первый час каждого месяца |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |