forum.bitel.ru
http://forum.bitel.ru/

[BUG] Некорректное открытие кредитовых договоров (CRM)
http://forum.bitel.ru/viewtopic.php?f=22&t=10287
Страница 1 из 1

Автор:  Cromeshnic [ 16 мар 2015, 09:04 ]
Заголовок сообщения:  [BUG] Некорректное открытие кредитовых договоров

Сервер: вер. 5.2 сборка 1618 от 28.01.2015 21:38:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_22

Есть клиент с режимом "кредит", закрыт за долги в октябре 2014.
Записей баланса с октября нет.
В октябре вх остаток был -244.81, наработка=596.13 => остаток -840.94

В марте приходит оплата 500р. По-идее он не должен его открыть, т.к. сальдо -840.94+500=-340.94 <0
Но биллинг его открывает статусом.
Начал рыться в коде - в BalanceDao.getContractBalance(...) сначала берутся данные на текущий месяц. Если нет - на послений имеющийся. Но при этом входящее сальдо на требуемый месяц в обоих случаях берётся как summa1, хотя если берём данные октября, то нужно брать (summa1 + summa2 - summa3 - summa4).

Т.е. при принятии решения он взял сальдо не -840.94+500, а -244.81+500 и открыл договор.

Код:
mysql> select * from contract_balance where cid=178581 and yy>=2014;
+------+----+--------+----------+---------+--------+--------+
| yy   | mm | cid    | summa1   | summa2  | summa3 | summa4 |
+------+----+--------+----------+---------+--------+--------+
| 2014 |  4 | 178581 | -1036.68 | 2000.00 | 308.00 |   0.00 |
| 2014 |  5 | 178581 |   655.32 |    0.00 | 660.00 |   0.00 |
| 2014 |  6 | 178581 |    -4.68 |    0.00 | 660.00 |   0.00 |
| 2014 |  7 | 178581 |  -664.68 |    0.00 | 596.13 |   0.00 |
| 2014 |  9 | 178581 | -1260.81 | 1500.00 | 484.00 |   0.00 |
| 2014 | 10 | 178581 |  -244.81 |    0.00 | 596.13 |   0.00 |
| 2015 |  3 | 178581 |  -840.94 |  500.00 |  85.16 |   0.00 |
+------+----+--------+----------+---------+--------+--------+
7 rows in set (0.00 sec)

Автор:  dimOn [ 16 мар 2015, 11:39 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров

по-моему уже было что-то такое :lupa:

Автор:  Cromeshnic [ 17 мар 2015, 10:22 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров

ии?

Автор:  stark [ 17 мар 2015, 13:52 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров

Cromeshnic писал(а):
Сервер: вер. 5.2 сборка 1618 от 28.01.2015 21:38:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_22

Есть клиент с режимом "кредит", закрыт за долги в октябре 2014.
Записей баланса с октября нет.
В октябре вх остаток был -244.81, наработка=596.13 => остаток -840.94

В марте приходит оплата 500р. По-идее он не должен его открыть, т.к. сальдо -840.94+500=-340.94 <0
Но биллинг его открывает статусом.
Начал рыться в коде - в BalanceDao.getContractBalance(...) сначала берутся данные на текущий месяц. Если нет - на послений имеющийся. Но при этом входящее сальдо на требуемый месяц в обоих случаях берётся как summa1, хотя если берём данные октября, то нужно брать (summa1 + summa2 - summa3 - summa4).

Т.е. при принятии решения он взял сальдо не -840.94+500, а -244.81+500 и открыл договор.

Код:
mysql> select * from contract_balance where cid=178581 and yy>=2014;
+------+----+--------+----------+---------+--------+--------+
| yy   | mm | cid    | summa1   | summa2  | summa3 | summa4 |
+------+----+--------+----------+---------+--------+--------+
| 2014 |  4 | 178581 | -1036.68 | 2000.00 | 308.00 |   0.00 |
| 2014 |  5 | 178581 |   655.32 |    0.00 | 660.00 |   0.00 |
| 2014 |  6 | 178581 |    -4.68 |    0.00 | 660.00 |   0.00 |
| 2014 |  7 | 178581 |  -664.68 |    0.00 | 596.13 |   0.00 |
| 2014 |  9 | 178581 | -1260.81 | 1500.00 | 484.00 |   0.00 |
| 2014 | 10 | 178581 |  -244.81 |    0.00 | 596.13 |   0.00 |
| 2015 |  3 | 178581 |  -840.94 |  500.00 |  85.16 |   0.00 |
+------+----+--------+----------+---------+--------+--------+
7 rows in set (0.00 sec)



Я попробую воспроизвести вашу ситуацию, но судя по коду пока не вижу описанной вами проблемы. Там считывается строка
Цитата:
| 2014 | 10 | 178581 | -244.81 | 0.00 | 596.13 | 0.00 |


И баланс считается именно так summa1 + summa2 - summa3 - summa4.

Автор:  stark [ 17 мар 2015, 13:56 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров (CRM)

Там лимит 0 ?

Автор:  Cromeshnic [ 17 мар 2015, 14:11 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров

Лимит: -5401.00

stark писал(а):
И баланс считается именно так summa1 + summa2 - summa3 - summa4.


Это в методе BalanceDao.getBalance(...) - он там не используется.

Смотрите: в BalanceEventProcessor.activateCreditContract(...) передаётся сальдо из ConvergenceBalance.getSaldo().
Экземпляр ConvergenceBalance получается из ContractBalance, который берётся из BalanceDao.getBalance(...).
Так вот, в этой цепочке не учитывается, за какой именно месяц был отдан ContractBalance из BalanceDao.getBalance(...).

Автор:  stark [ 17 мар 2015, 14:19 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров

Cromeshnic писал(а):
Лимит: -5401.00

stark писал(а):
И баланс считается именно так summa1 + summa2 - summa3 - summa4.


Это в методе BalanceDao.getBalance(...) - он там не используется.

Смотрите: в BalanceEventProcessor.activateCreditContract(...) передаётся сальдо из ConvergenceBalance.getSaldo().
Экземпляр ConvergenceBalance получается из ContractBalance, который берётся из BalanceDao.getBalance(...).
Так вот, в этой цепочке не учитывается, за какой именно месяц был отдан ContractBalance из BalanceDao.getBalance(...).


Я, кажется, понял. Посмотрим.

Автор:  stark [ 18 мар 2015, 12:35 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров

Cromeshnic писал(а):
Сервер: вер. 5.2 сборка 1618 от 28.01.2015 21:38:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_22

Есть клиент с режимом "кредит", закрыт за долги в октябре 2014.
Записей баланса с октября нет.
В октябре вх остаток был -244.81, наработка=596.13 => остаток -840.94

В марте приходит оплата 500р. По-идее он не должен его открыть, т.к. сальдо -840.94+500=-340.94 <0
Но биллинг его открывает статусом.
Начал рыться в коде - в BalanceDao.getContractBalance(...) сначала берутся данные на текущий месяц. Если нет - на послений имеющийся. Но при этом входящее сальдо на требуемый месяц в обоих случаях берётся как summa1, хотя если берём данные октября, то нужно брать (summa1 + summa2 - summa3 - summa4).

Т.е. при принятии решения он взял сальдо не -840.94+500, а -244.81+500 и открыл договор.

Код:
mysql> select * from contract_balance where cid=178581 and yy>=2014;
+------+----+--------+----------+---------+--------+--------+
| yy   | mm | cid    | summa1   | summa2  | summa3 | summa4 |
+------+----+--------+----------+---------+--------+--------+
| 2014 |  4 | 178581 | -1036.68 | 2000.00 | 308.00 |   0.00 |
| 2014 |  5 | 178581 |   655.32 |    0.00 | 660.00 |   0.00 |
| 2014 |  6 | 178581 |    -4.68 |    0.00 | 660.00 |   0.00 |
| 2014 |  7 | 178581 |  -664.68 |    0.00 | 596.13 |   0.00 |
| 2014 |  9 | 178581 | -1260.81 | 1500.00 | 484.00 |   0.00 |
| 2014 | 10 | 178581 |  -244.81 |    0.00 | 596.13 |   0.00 |
| 2015 |  3 | 178581 |  -840.94 |  500.00 |  85.16 |   0.00 |
+------+----+--------+----------+---------+--------+--------+
7 rows in set (0.00 sec)



Тут такая ситуация. Ошибка есть, появилась в 5.2 (в 5.1 ее нет), я даже ее исправил(пока не залиливал). Но ее не просто получить. Если сделать такие же балансы на договоре как в вашем примере с помощью приходов/расходов задним числом, то ситуация не повторяется потому что :

1) Во-первых , если ваше предположение верно о том, что считывается старый месяц, то там считывает строка такая:

Код:
| 2014 | 10 | 178581 |  -244.81 |    0.00 | 596.13 |   0.00 |

сальдо будет -244.81 + 0 (платежи)= -244 < 0 . Не откроет.

2) Во-вторых, при занесении платежа в клиенте, событие об обработке баланса кидается после комита в базу поэтому там всегда уже новый баланс есть.

Код:
| 2015 |  3 | 178581 |  -840.94 |  500.00 |  85.16 |   0.00 |


И тут опять же сальдо -840.94 + 500 < 0, не откроет .

Т.е штатным образом если заносить платеж через клиента, то ошибки нет. Но в общем случае(через платежные системы например) у нас можно добавить платеж и бросить событие до комита в базу, в этом случае проявление этой ошибки возможно, но не вашем случае, у вас вот эта строка для этого бы подошла.
Цитата:
| 2014 | 9 | 178581 | -1260.81 | 1500.00 | 484.00 | 0.00 |



Тут как раз -1260.81 + 1500.00 больше > 0 . В общем теоретически ошибка есть, но не понятно как вы ее получили. Платеж как заносился ?

Автор:  stark [ 18 мар 2015, 13:49 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров (CRM)

Эту ошибку легко можно получить так . Если просто поменять лимит (просто слегка его изменить, на рубль например) и последняя запись в балансе будет :
Код:
| 2014 |  9 | 178581 | -1260.81 | 1500.00 | 484.00 |   0.00 |


Тогда его открывает. Это исправили. Но еще есть есть вероятность что у вас по другой причине не сработало - возможно вы добавляли платеж, а событие изменения баланса сработало до его добавления в базу. Хотя в этом случае с этим исправлением ошибка будет по идее наоборот - тут могут не открыть договор.

Автор:  stark [ 18 мар 2015, 14:23 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров (CRM)

Исправлено, обновление выкладывается. Будет в течении минут 10.

Автор:  Cromeshnic [ 19 мар 2015, 07:45 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров (CRM)

Платёж проводился из 1Сv8 через http-экшен, т.е. то же самое, что и руками добавлять из клиента.

Насчёт того, как получилось есть навскидку версия: до коммита платежа в базу в кэше создался ConvergenceBalance по октябрьским данным, потом в другом потоке в него упал платёж по событию (в ConvergenceBalanceManager.notify()), а потом в основном потоке мы его и взяли в getSaldo().

Автор:  stark [ 20 мар 2015, 12:14 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров (CRM)

Cromeshnic писал(а):
Платёж проводился из 1Сv8 через http-экшен, т.е. то же самое, что и руками добавлять из клиента.

Насчёт того, как получилось есть навскидку версия: до коммита платежа в базу в кэше создался ConvergenceBalance по октябрьским данным, потом в другом потоке в него упал платёж по событию (в ConvergenceBalanceManager.notify()), а потом в основном потоке мы его и взяли в getSaldo().



Не все еще поправили, еще остались ошибки - исправляем.

Автор:  stark [ 23 мар 2015, 19:03 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров (CRM)

Cromeshnic писал(а):
Платёж проводился из 1Сv8 через http-экшен, т.е. то же самое, что и руками добавлять из клиента.

Насчёт того, как получилось есть навскидку версия: до коммита платежа в базу в кэше создался ConvergenceBalance по октябрьским данным, потом в другом потоке в него упал платёж по событию (в ConvergenceBalanceManager.notify()), а потом в основном потоке мы его и взяли в getSaldo().


С ConvergenceBalance оказался косяк с момента его появления в 5.2. Исправили пока в 6.2, много изменений.

Автор:  stark [ 29 дек 2016, 20:40 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров (CRM)

Тема получила продолжение вот тут:
https://forum.bitel.ru/viewtopic.php?f=22&t=12186
UPD. Ссылку исправил(спасибо georgdts).

Автор:  georgdts [ 19 янв 2017, 22:09 ]
Заголовок сообщения:  Re: [BUG] Некорректное открытие кредитовых договоров (CRM)

https://forum.bitel.ru/viewtopic.php?f=22&t=12186

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/