Биллинговая система Nodeny
22 Ноября 2024, 18:22:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Запрос для обновления баланса  (Прочитано 9876 раз)
poxy.
NoDeny
Спец
*

Карма: 10
Offline Offline

Сообщений: 844



Просмотр профиля
« : 01 Июля 2013, 08:24:34 »

Доброе утро всем.
Вчера почему то упало ядро, запустил сегодня в 8 утра, соответственно поснимало за неполный месяц.
Подскажите запрос для обновления баланса, чтоб к примеру 118.80 превратилось в 120.0.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #1 : 01 Июля 2013, 09:41:00 »

Что-то у тебя странное на сервере, я специально не делал перезапускалку ядра, чтобы заставить ядро сделать надежным. На моем сервере работает месяцами и не падает.

Платежи и баланс в N+  работают абсолютно по той же схеме как и в Н49/50 - при изменение платежа необходимо править на туже величину и баланс. Т.е. делается 2  sql:

Код:
update pays set cash=cash+1.2 where id=12345 limit 1;
update users set balance=balance+1.2 where id=123 limit 1;

здесь:

1.2 - на сколько хотим изменить платеж
12345 - id  платежа
123 - id  клиента
limit 1 -  страховка, а то дрогнет рука и без условия заапдейтится вся таблица
Записан
poxy.
NoDeny
Спец
*

Карма: 10
Offline Offline

Сообщений: 844



Просмотр профиля
« Ответ #2 : 01 Июля 2013, 10:11:20 »

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

PS если руками изменяю платеж "снятие за услуги" то баланс тоже меняется, может можно как то поправить платежи "снятие за ... 118.0" на 120?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #3 : 01 Июля 2013, 10:42:18 »

У тебя тарифы в режиме "от текущего момента до 1го числа" типа как в старом нодени?

Код:
update users set balance=balance-2 where id in(select mid from pays where category=100 and cash=-118 and time>(unix_timestamp()-2*24*3600));
update pays set cash=-120 where category=100 and cash=-118;

сначала изменяется баланс клиентов, которых есть платеж "снятие за услуги" (категория 100) в размере 118грн не раньше двух дней назад (2*24*3600), затем изменяются эти платежи.

Записан
poxy.
NoDeny
Спец
*

Карма: 10
Offline Offline

Сообщений: 844



Просмотр профиля
« Ответ #4 : 01 Июля 2013, 10:57:46 »

Цитировать
У тебя тарифы в режиме "от текущего момента до 1го числа" типа как в старом нодени?
Да, стоит "конец месяца"
Записан
poxy.
NoDeny
Спец
*

Карма: 10
Offline Offline

Сообщений: 844



Просмотр профиля
« Ответ #5 : 01 Июля 2013, 12:00:51 »

спасибо
Записан
poxy.
NoDeny
Спец
*

Карма: 10
Offline Offline

Сообщений: 844



Просмотр профиля
« Ответ #6 : 01 Июля 2013, 13:55:03 »

Чтоб не создавать отдельный пост спрошу тут:

В платежах :
Цитировать
Проверка системы

Уровень проблемы   Проблема
3   Есть расхождения суммы платежей и баланса клиента

Где посмотреть что не сошлось?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #7 : 01 Июля 2013, 13:59:21 »

Код:
perl /usr/local/nodeny/nokernel.pl -m=system_check -v

где видим:

Код:
SELECT u.id, u.balance, SUM(p.cash) AS chk_balance FROM users u LEFT JOIN pays p ON u.id=p.mid GROUP BY u.id HAVING u.balance<>chk_balance
Записан
poxy.
NoDeny
Спец
*

Карма: 10
Offline Offline

Сообщений: 844



Просмотр профиля
« Ответ #8 : 01 Июля 2013, 14:04:58 »

спасибо
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #9 : 19 Августа 2015, 10:36:16 »

На всякий случай sql, который установит всем абонам, у которых несхождение баланса, правильные балансы по сумме платежей:

Код:
UPDATE users u JOIN (SELECT u.id, u.balance, SUM(p.cash) AS chk_balance FROM users u LEFT JOIN pays p ON u.id=p.mid GROUP BY u.id HAVING u.balance<>chk_balance) a ON u.id=a.id SET u.balance=a.chk_balance;

Естественно, перед выполнением (любых) sql нужно делать бекапы базы
Записан
elvin
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 48


Просмотр профиля
« Ответ #10 : 23 Октября 2020, 09:02:20 »

Код:
perl /usr/local/nodeny/nokernel.pl -m=system_check -v

где видим:

Код:
SELECT u.id, u.balance, SUM(p.cash) AS chk_balance FROM users u LEFT JOIN pays p ON u.id=p.mid GROUP BY u.id HAVING u.balance<>chk_balance

Не срабатывает если расхождение в пару копеек, но в лог пишет, как быть в этом случае?
спасибо!
Записан
k291
Старожил
****

Карма: -10
Offline Offline

Сообщений: 455


Просмотр профиля
« Ответ #11 : 19 Февраля 2024, 21:45:13 »

На всякий случай sql, который установит всем абонам, у которых несхождение баланса, правильные балансы по сумме платежей:

Код:
UPDATE users u JOIN (SELECT u.id, u.balance, SUM(p.cash) AS chk_balance FROM users u LEFT JOIN pays p ON u.id=p.mid GROUP BY u.id HAVING u.balance<>chk_balance) a ON u.id=a.id SET u.balance=a.chk_balance;

Естественно, перед выполнением (любых) sql нужно делать бекапы базы

Чтобы не искали:
Код:
mysql -u root --password='hardpass'
USE nodeny;

UPDATE users u JOIN (SELECT u.id, u.balance, SUM(p.cash) AS chk_balance FROM users u LEFT JOIN pays p ON u.id=p.mid GROUP BY u.id HAVING u.balance<>chk_balance) a ON u.id=a.id SET u.balance=a.chk_balance;

exit

perl /usr/local/nodeny/nokernel.pl -m=system_check -v
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

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