Биллинговая система Nodeny
16 Сентября 2021, 20:57:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: 1 [2] 3 4
  Печать  
Автор Тема: Клиент заблокирован, баланс идет в минус  (Прочитано 24530 раз)
smallcms
NoDeny
Старожил
*

Карма: 64
Offline Offline

Сообщений: 280



Просмотр профиля WWW
« Ответ #15 : 27 Августа 2010, 13:31:39 »

Цитировать
UPDATE `bill`.`users` SET `paket` = '1' WHERE mid = 0 && `state` = "off" && `balance`<`limit_balance`

И как это теперь периодически стартовать?

Код:
#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
passwd_root_mysql=`perl -e'require "/usr/local/nodeny/history.nod"; print $sql_root_pass;'`
mysql_cmd='/usr/local/bin/mysql'

SQL='UPDATE `bill`.`users` SET `paket` = "1" WHERE `mid` =0 && `state` = "off" && `balance`<`limit_balance`'
echo $SQL | ${mysql_cmd} -u root --password=${passwd_root_mysql} bill
Но это не панацея, т.к. не затрагиваются алиасы. Думаю написать на перле который будет "работать в лог" и алиасы записи.
Записан

stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #16 : 27 Августа 2010, 13:43:48 »

Цитировать
UPDATE `bill`.`users` SET `paket` = '1' WHERE mid = 0 && `state` = "off" && `balance`<`limit_balance`

И как это теперь периодически стартовать?

Код:
#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
passwd_root_mysql=`perl -e'require "/usr/local/nodeny/history.nod"; print $sql_root_pass;'`
mysql_cmd='/usr/local/bin/mysql'

SQL='UPDATE `bill`.`users` SET `paket` = "1" WHERE `mid` =0 && `state` = "off" && `balance`<`limit_balance`'
echo $SQL | ${mysql_cmd} -u root --password=${passwd_root_mysql} bill
Но это не панацея, т.к. не затрагиваются алиасы. Думаю написать на перле который будет "работать в лог" и алиасы записи.
можно добавить еще sql_database в скрипт Улыбающийся
Записан
Demeo
NoDeny
Постоялец
*

Карма: 6
Offline Offline

Сообщений: 204


Просмотр профиля Email
« Ответ #17 : 28 Августа 2010, 08:24:22 »

Спасибо, скрипт работает.

Цитировать
Но это не панацея, т.к. не затрагиваются алиасы. Думаю написать на перле который будет "работать в лог" и алиасы записи.
Ну, это совсем уже шикарно будет. Алиасов у меня не много, но фича, думаю, понравится многим. Особенно, если будет запоминаться предыдущий тариф и после пополнения счета будет возвращаться.
Записан
Demeo
NoDeny
Постоялец
*

Карма: 6
Offline Offline

Сообщений: 204


Просмотр профиля Email
« Ответ #18 : 09 Сентября 2010, 20:41:17 »

Кстати, алиасы затрагиваются Улыбающийся После блокирования основной учетки, система через какое-то время автоматом блокирует и алиасы, записывая в лог что-то типа "обнаружена заблокированная запись с назаблокированными алиасами, блокирую алиасы.... ", ну смысл понятен
Записан
ale-x
NoDeny
Постоялец
*

Карма: 1
Offline Offline

Сообщений: 164


Просмотр профиля
« Ответ #19 : 09 Сентября 2010, 20:50:50 »

Отличный скрипт - то что нужно!
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #20 : 18 Сентября 2010, 01:16:40 »

Строка #1085 nodeny.pl
Добавь в условие выборки: balance >= limit_balance
Получится вот так:
Код:
$sql="SELECT id FROM users WHERE balance >= limit_balance and mid=0 AND paket=$i AND id NOT IN ".
             "(SELECT u.id FROM users u LEFT JOIN pays p ON u.id=p.mid WHERE u.paket=$i and p.category=114 AND time>=$t1 AND time<=$t2)";
Все это только при условии суточной абонплаты!
Думаю, что с другими платежами тоже можно управиться без изврата в виде скрипта по крону Подмигивающий
Записан
smallcms
NoDeny
Старожил
*

Карма: 64
Offline Offline

Сообщений: 280



Просмотр профиля WWW
« Ответ #21 : 18 Сентября 2010, 17:21:56 »

Строка #1085 nodeny.pl
Добавь в условие выборки: balance >= limit_balance
Получится вот так:
Код:
$sql="SELECT id FROM users WHERE balance >= limit_balance and mid=0 AND paket=$i AND id NOT IN ".
             "(SELECT u.id FROM users u LEFT JOIN pays p ON u.id=p.mid WHERE u.paket=$i and p.category=114 AND time>=$t1 AND time<=$t2)";
Все это только при условии суточной абонплаты!
Думаю, что с другими платежами тоже можно управиться без изврата в виде скрипта по крону Подмигивающий

Весьма неплохой вариант. И даже не нужно переключать человека в заблокированные Улыбающийся
Записан

smallcms
NoDeny
Старожил
*

Карма: 64
Offline Offline

Сообщений: 280



Просмотр профиля WWW
« Ответ #22 : 18 Сентября 2010, 19:49:20 »

Похоже, что чтобы выкинуть подобный финт для месячных абонплат скрипт new_month.pl нужно подправить в ~250 строке так:
Код:
$sql="SELECT * FROM users WHERE mid=0 and balance >= limit_balance";
По крайней мере при тестовой выборке прокатывает Смеющийся
Записан

0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #23 : 19 Сентября 2010, 00:49:49 »

Похоже, что чтобы выкинуть подобный финт для месячных абонплат скрипт new_month.pl нужно подправить в ~250 строке так:
Код:
$sql="SELECT * FROM users WHERE mid=0 and balance >= limit_balance";
По крайней мере при тестовой выборке прокатывает Смеющийся
Совершено верно! в 250 строке
Записан
Eugene
NoDeny
Пользователь
*

Карма: 0
Offline Offline

Сообщений: 55


Просмотр профиля Email
« Ответ #24 : 31 Октября 2010, 23:39:31 »

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

Так как же сделать так, что бы отключённые пользователи на баллансе всегда имели не ниже 0?
« Последнее редактирование: 31 Октября 2010, 23:53:49 от Eugene » Записан
Eugene
NoDeny
Пользователь
*

Карма: 0
Offline Offline

Сообщений: 55


Просмотр профиля Email
« Ответ #25 : 01 Ноября 2010, 00:49:34 »

Разобрались, в абон. плате нужно было новому клиенту ставить -1 в лимите, там же и равняется лимит....
Записан
smallcms
NoDeny
Старожил
*

Карма: 64
Offline Offline

Сообщений: 280



Просмотр профиля WWW
« Ответ #26 : 01 Ноября 2010, 01:09:29 »

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

Так как же сделать так, что бы отключённые пользователи на баллансе всегда имели не ниже 0?

Видимо у Вас авторизатор стоит или типа того.
Доп. проверкой имхо можно избавиться от ложных съёмов баланса:
примерно в 211 строке:
Код:
$sth=&sql("SELECT DISTINCT id FROM users WHERE id IN($sql) OR mid IN ($sql) AND balance >= limit_balance");

P.S.: Не проверял лично.
Записан

smallcms
NoDeny
Старожил
*

Карма: 64
Offline Offline

Сообщений: 280



Просмотр профиля WWW
« Ответ #27 : 06 Ноября 2010, 13:53:49 »

Точнее так:
Код:
diff new_month.pl.old new_month.pl
211c211
< $sth=&sql("SELECT DISTINCT id FROM users WHERE id IN($sql) OR mid IN ($sql)");
---
> $sth=&sql("SELECT DISTINCT id FROM users WHERE (id IN($sql) OR mid IN ($sql)) AND balance >= limit_balance");
250c250,251
< $sql="SELECT * FROM users WHERE mid=0";
---
> $sql="SELECT * FROM users WHERE mid=0 AND balance >= limit_balance";

При этом первой правкой по сути не будем отнимать абонплату у тех, кто авторизовался, но исчерпал свой лимит к концу месяца.
Записан

Eugene
NoDeny
Пользователь
*

Карма: 0
Offline Offline

Сообщений: 55


Просмотр профиля Email
« Ответ #28 : 26 Ноября 2010, 12:34:31 »

Спасибо, сейчас переходим на новый месяц, попробую проверить. Первое изменеие привело к снятию денег у уже заблокированных пользователей, кто платил чётко по тарифу, поскольку после снятия денег у них было на счету 0, что равнялось лимиту. То есть человек отключён, но ещё за месяц заплатил Улыбающийся

А просто нельзя ограничить список только превышающих лимит примерно так "balance > limit_balance" без "="?

Если заработает, стоит, думаю, выложить исправленный new_month.pl
« Последнее редактирование: 26 Ноября 2010, 12:48:55 от Eugene » Записан
Demeo
NoDeny
Постоялец
*

Карма: 6
Offline Offline

Сообщений: 204


Просмотр профиля Email
« Ответ #29 : 12 Января 2011, 15:19:20 »


А просто нельзя ограничить список только превышающих лимит примерно так "balance > limit_balance" без "="?


А тут и так затрагиваются только те, у кого минус и ноль на счету
Записан
Страниц: 1 [2] 3 4
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!