Биллинговая система Nodeny

Главная категория => Nodeny Plus => Тема начата: poxy. от 01 Июля 2013, 08:24:34



Название: Запрос для обновления баланса
Отправлено: poxy. от 01 Июля 2013, 08:24:34
Доброе утро всем.
Вчера почему то упало ядро, запустил сегодня в 8 утра, соответственно поснимало за неполный месяц.
Подскажите запрос для обновления баланса, чтоб к примеру 118.80 превратилось в 120.0.


Название: Re: Запрос для обновления баланса
Отправлено: Efendy от 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 -  страховка, а то дрогнет рука и без условия заапдейтится вся таблица


Название: Re: Запрос для обновления баланса
Отправлено: poxy. от 01 Июля 2013, 10:11:20
по поводу id клиента, изменит тому чей id указан, а мне нужно сразу всем у кого снялось 118, у кого другой тариф не изменять

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


Название: Re: Запрос для обновления баланса
Отправлено: Efendy от 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), затем изменяются эти платежи.



Название: Re: Запрос для обновления баланса
Отправлено: poxy. от 01 Июля 2013, 10:57:46
Цитировать
У тебя тарифы в режиме "от текущего момента до 1го числа" типа как в старом нодени?
Да, стоит "конец месяца"


Название: Re: Запрос для обновления баланса
Отправлено: poxy. от 01 Июля 2013, 12:00:51
спасибо


Название: Re: Запрос для обновления баланса
Отправлено: poxy. от 01 Июля 2013, 13:55:03
Чтоб не создавать отдельный пост спрошу тут:

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

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

Где посмотреть что не сошлось?


Название: Re: Запрос для обновления баланса
Отправлено: Efendy от 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


Название: Re: Запрос для обновления баланса
Отправлено: poxy. от 01 Июля 2013, 14:04:58
спасибо


Название: Re: Запрос для обновления баланса
Отправлено: Efendy от 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 нужно делать бекапы базы


Название: Re: Запрос для обновления баланса
Отправлено: elvin от 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

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


Название: Re: Запрос для обновления баланса
Отправлено: k291 от 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