ivanmfan
|
|
« Ответ #120 : 24 Января 2014, 11:38:30 » |
|
Я думаю многие возрадуются наконец, узнав о новой фиче. Вот сидел до полпятого ночи и сделал вам фичу "не допускаем ухода в минус".
Зачем с самого начала разработки биллинга в тарифах нужно было привязываться к дате старта и дате окончания. Было бы замечательно, включать тариф на количество дней в месяце. Т.е. включил тариф, абоненту он дается на 30 дней. Когда абонент берет кредит (т.е. когда у него на счету уже 0 дней), то у него количество дней уходит в минус т.е. "Количество дней: каждый день уменьшается к примеру до -4", после включения нового тарифа ему включает интернет на 30 - 4 = 26дней. Алгоритм примерно таков: Раз в сутки в 00:00 скрипт обходит всех абонентов и выполняет "Количество дней = Количество дней -1", если у него уже 0й день то просто абоненту ставит "Доступ: Запрещен" и на след день он этого абонента не проверяет, когда абонент берет кредитные дни то у него становится возможность по дням уйти в минус на количество в настройках. Либо у данного абонента Статус может быть : Приостановлен, тогда скрипт так же не выполняет "Количество оставшихся дней -1".
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #121 : 24 Января 2014, 18:47:40 » |
|
Я не полностью вник в суть, но прокомментирую по поводу дней. Представим, что мы программа. Биллинг. Вот у нас есть тариф и количество дней работы тарифа. Проходит час. К вам поступает запрос: сколько дней осталось пользоваться тарифом? Для того, чтобы в любой момент времени узнать сколько осталось, нам нужно регулярно уменьшать счетчик, причем у тарифов каждого клиента. Например, каждую 1 минуту мы уменьшаем количество времени в тарифе на 1 минуту. Забудем, что мы дрочим диск, и посмотрим на другую сторону: компьютер - это не сферический конь в вакуме. Идеально с точностью в 1 секунду не сработает таймер ибо это скриптовый язык, а не модуль ядра FreeBSD. Итого, скажем погрешность в 0.5 сек. В час у нас может до полминуты дойти, а в сутки до нескольких минут, а в месяц ... Это в принципе неверный подход. Это как баланс посекундно уменьшать - в итоге такая погрешность, что мама не горюй.
|
|
|
Записан
|
|
|
|
Morozikfeo
Пользователь
Карма: 0
Offline
Сообщений: 22
|
|
« Ответ #122 : 26 Января 2014, 19:28:47 » |
|
Я думаю многие возрадуются наконец, узнав о новой фиче. Вот сидел до полпятого ночи и сделал вам фичу "не допускаем ухода в минус". Я вам предлагал несколько вариантов, но вы просили "сделай чтоб слуга отключалась если баланс меньше нуля и включалась когда счет пополнялся". Сделал. Если бабла не хватает, то клиенту не подключается услуга, как тока появляется - подключается. Кстати, работает и с несколькими подключенными услугами. Вот алгоритм:
Подключено несколько услуг. Пришло время смены услуги. Завершаем и подключаем следующую по плану. Если баланс отрицательный, то услугу удаляем. Остальные услуги завершаем. При этом услуги завершаются раньше срока, т.е. сумма снятия меньше полной стоимости. В базу пишется событие "ждем баланса" который должен быть не меньше стоимости удаленной услуги и завершенных, также в этом событии хранятся айдишники услуг, которые нужно подключить.
Еще надо разрулить случай когда событие записалось, а потом клиент вручную подключил какую-нибудь другую услугу, на которую денег хватило.
В ознакомительной версии данная фича работает?
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #123 : 27 Января 2014, 10:35:22 » |
|
Да, как закоммичу, будет и там. Но туда я реже коммичу
|
|
|
Записан
|
|
|
|
Nafanya
NoDeny
Старожил
Карма: 1
Offline
Сообщений: 459
|
|
« Ответ #124 : 29 Января 2014, 22:01:52 » |
|
Пришло время смены услуги... Если баланс отрицательный, то услугу удаляем. Необходимо как бы решить вопрос, что-бы это удаление происходило на усмотрение. Не решился этот вопрос?
|
|
|
Записан
|
Кому то Бог дал ручки, а кому то - грабельки.
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #125 : 02 Февраля 2014, 04:18:02 » |
|
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #126 : 02 Февраля 2014, 11:06:07 » |
|
В Киеве на улице Грушевского активисты Майдана установили на одной из баррикад перед кордоном бойцов Внутренних войск и "Беркута", охраняющих правительственный квартал, большой монитор. Как сообщает 5 канал, на мониторе непрерывно транслируются новости нескольких независимых телеканалов.
В ответ на это с противоположной стороны силовики подогнали громкоговоритель и пытаются глушить новости песнями украинских и российских эстрадных исполнителей.
Власть боится, что солдаты узнают правду Исполняющий обязанностей министра иностранных дел Украины Леонид Кожара в рамках Мюнхенской конференции безопасности рассказал о возможном банкротстве страны Прокуратура й міліція досі "не можуть" знайти цих садистів. Це співробітники спецпідрозділу "Ягуар" Внутрішніх військ МВС Хортюк Сергій і Костюк Максим – вони роздягали Гаврилюка. Козацького чуба відрізав майор Фірак Ігор. Серед тих, хто знущався над затриманим також Ругеніус Томас. За катуваннями спостерігав їх начальник – полковник Плахотнюк Олег Миколайович
Азаров смылся в Европу, а вы рабы живите в Украине http://std3.ru/c1/a2/1391245824-c1a210adbb6ac9a772d8909dd5acb7f5.jpgУкраина одна из самых коррумпированных стран в мире http://zn.ua/ECONOMICS/transparency-international-korrumpirovannye-oligarhicheskie-klany-ubivayut-v-ukraine-chestnyy-biznes-134155_.htmlПеревоплощение титушек в миллиционеров http://ukraine.d3.ru/comments/518911/И таких сообщений десятки. Но я уже пометал бисер перед форумчанами. Я не знал насколько людям пофик за свое будущее и приятно быть рабами. Так что не буду дискутировать по этому поводу. И ты не подсовывай агитки, пожалуйста
|
|
|
Записан
|
|
|
|
sov
|
|
« Ответ #127 : 09 Февраля 2014, 16:15:34 » |
|
Я думаю многие возрадуются наконец, узнав о новой фиче. Вот сидел до полпятого ночи и сделал вам фичу "не допускаем ухода в минус".
Хотел возрадоваться, но не получилось. Накатил через svn последние обновления, сделал install.pl -X, перезапустил процессы биллинга. Не помогло: уходит в минус, блокирует клиентов, услуга не удаляется. Что нужно подправить/настроить? В каком направлении копать?
|
|
|
Записан
|
|
|
|
Morozikfeo
Пользователь
Карма: 0
Offline
Сообщений: 22
|
|
« Ответ #128 : 18 Февраля 2014, 14:09:55 » |
|
Я думаю многие возрадуются наконец, узнав о новой фиче. Вот сидел до полпятого ночи и сделал вам фичу "не допускаем ухода в минус".
Хотел возрадоваться, но не получилось. Накатил через svn последние обновления, сделал install.pl -X, перезапустил процессы биллинга. Не помогло: уходит в минус, блокирует клиентов, услуга не удаляется. Что нужно подправить/настроить? В каком направлении копать? Тоже хотел узнать, уже закоммичили донную функцию?
|
|
|
Записан
|
|
|
|
poxy.
NoDeny
Спец
Карма: 10
Offline
Сообщений: 844
|
|
« Ответ #129 : 18 Февраля 2014, 14:18:24 » |
|
Я думаю многие возрадуются наконец, узнав о новой фиче. Вот сидел до полпятого ночи и сделал вам фичу "не допускаем ухода в минус".
Хотел возрадоваться, но не получилось. Накатил через svn последние обновления, сделал install.pl -X, перезапустил процессы биллинга. Не помогло: уходит в минус, блокирует клиентов, услуга не удаляется. Что нужно подправить/настроить? В каком направлении копать? kernel/services.cfg : # Удаляет услуги, время которых завершилось. Если автопродление - подключает новую
run => 1,
# Типы услуг, которые не будут завершаться, если баланс отрицательный # В таком случае услуга завершится и подключится следующая только после пополнения баланса # например: delay_services => 'inet_unlim' или delay_services => 'inet_unlim,basic'
delay_services => '',
# Если после завершения услуги баланс станет отрицательным, то услуги отключаются и создается # событие "подключить такие услуги когда баланс станет достаточным для их покдлючения"
wait_pos_balance => 0,
|
|
|
Записан
|
|
|
|
vadim_swg
Пользователь
Карма: 0
Offline
Сообщений: 13
|
|
« Ответ #130 : 20 Февраля 2014, 12:41:13 » |
|
Заметил одну неточность в фиче "неухода в минус" (или не нашёл правильных настроек, поэтому не обижусь, но буду благодарен, если ткнёте носом как щенка). Услуги удаляются, баланс не уходит в минус при условии, что у абонента положительный баланс. Но ежели у абонента установлена отрицательная граница отключения, то баланс не уходит в минус, остаётся как положено, но услуга удаляется и доступ в интернет блокируется, хотя должен быть. Текущие настройки в kernel/services.cfg следующие: run => 1, delay_services => 'basic', wait_pos_balance => 1.
Решение нашёл в файле kernel/services.pm строка 75, условие "... AND u.balance<0 ..." изменить на "... AND u.balance<u.limit_balance ..." Ревизия нодени - 232
|
|
|
Записан
|
|
|
|
sov
|
|
« Ответ #131 : 20 Февраля 2014, 19:41:18 » |
|
Спасибо stimels7 за пинок в нужном направлении. Фича заработала. Правда, обнаружились нюансы.
Нюанс номер 1: Услуги удаляются, но у клиента остаётся включенным статус "Доступ разрешён". Интернета-то он не получает, но в общем списке красненьким не выделяется. Неудобно.
Нюанс номер 2: Более серьёзный. Баланс теперь не отрицательный, а нулевой. А значит, клиент не может самостоятельно взять кредит.
|
|
|
Записан
|
|
|
|
Redmen
NoDeny
Ветеран
Карма: 62
Online
Сообщений: 546
Подяку в КАРМУ
|
|
« Ответ #132 : 20 Февраля 2014, 20:27:23 » |
|
Спасибо stimels7 за пинок в нужном направлении. Фича заработала. Правда, обнаружились нюансы.
Нюанс номер 1: Услуги удаляются, но у клиента остаётся включенным статус "Доступ разрешён". Интернета-то он не получает, но в общем списке красненьким не выделяется. Неудобно.
Нюанс номер 2: Более серьёзный. Баланс теперь не отрицательный, а нулевой. А значит, клиент не может самостоятельно взять кредит.
up 1; 2;
|
|
|
Записан
|
|
|
|
sov
|
|
« Ответ #133 : 22 Февраля 2014, 18:12:46 » |
|
Пришлось "допиливать" самому. Нюанс номер 1: Услуги удаляются, но у клиента остаётся включенным статус "Доступ разрешён". Интернета-то он не получает, но в общем списке красненьким не выделяется. Неудобно.
В kernel/services.pm после my $rows = Db->do( "INSERT INTO pays SET cash=0, creator_ip=0, creator='kernel', creator_id=1, time=UNIX_TIMESTAMP(), ". "mid=?, category=?, reason=?", $uid, 208, $info, ); if( $rows < 1 ) { tolog "Sql error: SET uid=$uid, category=208"; last; }
Добавил my $rows = Db->do("UPDATE users SET state='off' WHERE id=?", $uid); if( $rows < 1 ) { tolog "Sql error: SET uid=$uid, state off"; last; }
А после my $rows = Db->do("UPDATE pays SET category=209 WHERE category=208 AND id=?", $p{id}); $rows < 1 && next;
Вот это: my $rows = Db->do("UPDATE users SET state='on' WHERE id=?", $uid); $rows < 1 && next;
Нюанс номер 2: Более серьёзный. Баланс теперь не отрицательный, а нулевой. А значит, клиент не может самостоятельно взять кредит.
А вот здесь я сделал неправильно, но оно хоть как-то позволяет клиенту взять кредит: В modules/credit/create.user.credit.pl $balance >= 0 && Error $lang{pos_balance}; заменено на $balance > 0 && Error $lang{pos_balance};
|
|
|
Записан
|
|
|
|
Morozikfeo
Пользователь
Карма: 0
Offline
Сообщений: 22
|
|
« Ответ #134 : 24 Февраля 2014, 18:05:06 » |
|
Да, как закоммичу, будет и там. Но туда я реже коммичу
В демку уже коммичили?
|
|
|
Записан
|
|
|
|
|