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] Некорректное открытие кредитовых договоров |
по-моему уже было что-то такое ![]() |
Автор: | 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/ |