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

Главная категория => Nodeny Plus => Тема начата: Stronglan от 05 Ноября 2014, 22:01:25



Название: Выровнять баланс
Отправлено: Stronglan от 05 Ноября 2014, 22:01:25
В платежах периодически видно следующее: "расхождения суммы платежей и баланса клиента" Подскажите можно ли это как-то исправить, в 50 версии знаю можно было.


Название: Re: Выровнять баланс
Отправлено: Dolphin от 05 Ноября 2014, 22:58:12
Я вот так проверяю расхождение:
Код:
SELECT u.*, SUM(p.`cash`) AS sum_cash FROM `pays` AS p LEFT JOIN `users` AS u ON u.`id`=p.`mid` GROUP BY p.`mid` HAVING `balance`!=`sum_cash`

А так выравниваю:
Код:
INSERT INTO `tmp` SELECT `mid`, SUM(`cash`) FROM `pays` where `mid`!='0' group by `mid`
UPDATE `users` SET `users`.`balance`=(SELECT `sum` FROM `tmp` WHERE `tmp`.`mid`=`users`.`id` LIMIT 1)


Название: Re: Выровнять баланс
Отправлено: ser970 от 06 Ноября 2014, 01:09:51
А так выравниваю:
Код:
INSERT INTO `tmp` SELECT `mid`, SUM(`cash`) FROM `pays` where `mid`!='0' group by `mid`
UPDATE `users` SET `users`.`balance`=(SELECT `sum` FROM `tmp` WHERE `tmp`.`mid`=`users`.`id` LIMIT 1)
только не в данной ситуации....

UPDATE `users` SET `users`.`balance`  не катит - в данном случае задача была обратной
выровнять платежи по балансу.


Название: Re: Выровнять баланс
Отправлено: vddav от 06 Ноября 2014, 13:48:53
я делал как то так, бэкап и проверить в песочнице!!!
Код:
drop table if exists balance_help;
create table balance_help as
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 `balance`!=`sum_cash`;
# проводим платеж бонусом
insert into pays (`mid`, `cash`, `category`, `time`, `comment`, `creator`) select id, balance-chk_balance, 2 as category, UNIX_TIMESTAMP() as `time`, "auto balance repair" as comment, "kernel" as creator from balance_help;
drop table balance_help;


Название: Re: Выровнять баланс
Отправлено: vddav от 06 Ноября 2014, 13:50:51
P.S. баланс клиента остается тот же, а платежах добавляется запись бонусным платежом


Название: Re: Выровнять баланс
Отправлено: vddav от 06 Ноября 2014, 14:03:17
ошибка в строке
Код:
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 `balance`!=`sum_cash`;
поменять в конце HAVING `balance`!=`sum_cash` -> HAVING `balance`!=`chk_balance`


Название: Re: Выровнять баланс
Отправлено: ser970 от 06 Ноября 2014, 14:15:28
ошибка в строке
Код:
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 `balance`!=`sum_cash`;
поменять в конце HAVING `balance`!=`sum_cash` -> HAVING `balance`!=`chk_balance`

я скриптом решил
надо было еще дату первого события ....
+ разница была как минус так и плюс
 


Название: Re: Выровнять баланс
Отправлено: vddav от 06 Ноября 2014, 15:59:07
ошибка в строке
Код:
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 `balance`!=`sum_cash`;
поменять в конце HAVING `balance`!=`sum_cash` -> HAVING `balance`!=`chk_balance`

я скриптом решил
надо было еще дату первого события ....
+ разница была как минус так и плюс
 

ну так при инсерте вычитается же из реального баланса, баланс по платежам , так же может быть +/-, а в первом запросе если добавить условие по времени, категории.., вообще запрос думался для округления баланса от копеек, точнее после его округления))). хотя когда то давным давно, в другой галактике, оперуполномоченые  кришна просили в коробку округление)))


Название: Re: Выровнять баланс
Отправлено: ser970 от 06 Ноября 2014, 16:21:19
ну так при инсерте вычитается же из реального баланса, баланс по платежам , так же может быть +/-, а в первом запросе если добавить условие по времени, категории.., вообще запрос думался для округления баланса от копеек, точнее после его округления))). хотя когда то давным давно, в другой галактике, оперуполномоченые  кришна просили в коробку округление)))
надо было не условие по времени
а скажем первый платеж или списание было 12.12.2000
разница по по суммам -12грн
надо инсерт   11.12.200   +12грн
или абон есть по платежам нету вообще суммы а разница -15...

решать можно какими угодно путями , главное результат.


Название: Re: Выровнять баланс
Отправлено: vddav от 06 Ноября 2014, 17:44:44
Цитировать
решать можно какими угодно путями , главное результат.

абсолютно в дырочку);)


Название: Re: Выровнять баланс
Отправлено: Redmen от 05 Марта 2017, 16:46:18
может тема и устарела, но на всякий случай, вариант без вьюх и промежуточных таблиц!
запрос для выравнивания платежей к балансу:
Код:
INSERT INTO pays (`mid`, `cash`, `category`, `time`, `comment`, `creator`)
SELECT u.id AS mid, (u.balance-SUM(p.cash)) AS cash, 2 AS category,
UNIX_TIMESTAMP() AS `time`,"Перенесення балансу зі старої бази даних" AS comment,
"kernel" AS creator FROM users u LEFT JOIN pays p ON u.id=p.mid GROUP BY u.id HAVING cash <>0


Название: Re: Выровнять баланс
Отправлено: Efendy от 05 Марта 2017, 17:42:30
Добавлю в FAQ