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

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

Автор:  Cromeshnic [ 26 дек 2016, 14:20 ]
Заголовок сообщения:  [BUG] Открытие кредитовых договоров и ConvergenceBalance

Привет.

Обратился менеджер: кредитовый клиент не оплатил октябрь и ноябрь, был закрыт ещё в конце ноября, поэтому начислений за декабрь нет. Должен оплатить октябрь и ту часть ноября, которую он работал, чтобы открыться.

По факту оплачивает только часть - сумму за октябрь и открывается, хотя сальдо<0.

Покопался час, нашёл ошибку:
в обработке события баланса ConvergenceBalanceEvent берётся баланс из кэша:

Код:
 ConvergenceBalance convergenceBalance = ConvergenceBalanceManager.getInstance().getBalance(connectionSet, Integer.valueOf(contractId), System.currentTimeMillis());

      BigDecimal saldo = convergenceBalance.getSaldo();


- так вот, если движений баланса в этом месяце не было, то берётся баланс предыдущего. Соответственно, и сальдо предыдущего.

Для проверки написал такой скрипт BGBS, нашёл договор с балансом за ноябрь, но без баланса в декабре:

Вложение:
saldo.png
saldo.png [ 5.17 КБ | Просмотров: 5458 ]


Код:
   int contractId=259389;

ConvergenceBalance convergenceBalance = ConvergenceBalanceManager.getInstance().getBalance(ConnectionSet.newInstance(setup,con, true), contractId, System.currentTimeMillis());
BigDecimal saldo = convergenceBalance.getSaldo();
print(saldo);
print(convergenceBalance);

    ContractManager contractManager = new ContractManager(con);
      Contract contract = contractManager.getContractById(contractId);
      contractManager.recycle();

      Calendar calendar = new GregorianCalendar();
      BalanceDao balanceDao = new BalanceDao(con);

      int yy = calendar.get(1);
      int mm = calendar.get(2) + 1;
      ContractBalance balance;
      if (contract.isDependSub())
      {
        balance = balanceDao.getContractBalance(contract.getSuperId(), yy, mm);
      }
      else
      {
        balance = balanceDao.getContractBalance(contractId, yy, mm);
      }

      balanceDao.recycle();

      BigDecimal saldoValue = balance.toSaldo();

      if ((balance.getYear() != yy) || (balance.getMonth() != mm))
      {
        saldoValue = balance.toBalance();
      }

      BigDecimal balanceValue = saldoValue.subtract(balance.getAccounts()).subtract(balance.getCharges());
print(balanceValue);
print(saldoValue);


Код:
GENERATE_TIME: 26.12.16 15:47:02
EXECUTION_STOP_TIME: 26.12.16 15:47:03
PROCESS_TIME: 65

OUT:
0.00
-233324.74 [-99999999.99]
-466649.48
-233324.74


- видим, что тем же кодом, который используется при проверке на приход платежа, берётся баланс на начало ноября, а не декабря.
Код:
  Сервер: вер. 5.2 сборка 1645 от 16.08.2016 17:11:56
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_26

Автор:  stark [ 26 дек 2016, 15:00 ]
Заголовок сообщения:  Re: [BUG] Открытие кредитовых договоров и ConvergenceBalance

У меня дежавю. Была ваша тема от 2015 года вроде по этой же проблеме, найти не могу. Я тогда сделал комит :
"Ошибка при вычислении сальдо при принятии решении об отрытии кредитного договора (изменение затрагивает многие модули)" на 6.2 и выше.

Но на 5.2 его не накатил, не помню почему , но кажется написал почему на форуме.

Автор:  stark [ 26 дек 2016, 15:01 ]
Заголовок сообщения:  Re: [BUG] Открытие кредитовых договоров и ConvergenceBalance

когда уже с 5.2 то обновитесь ?

Автор:  stark [ 26 дек 2016, 17:39 ]
Заголовок сообщения:  Re: [BUG] Открытие кредитовых договоров и ConvergenceBalance

Нашел тему. Вот она :
https://forum.bitel.ru/viewtopic.php?f=22&t=10287

Автор:  stark [ 26 дек 2016, 17:48 ]
Заголовок сообщения:  Re: [BUG] Открытие кредитовых договоров и ConvergenceBalance

Кажется, я не стал накатывать на 5.2, так как тогда оказалось что ошибка эта не проявляется вроде как. Надо заново изучить вопрос.

Автор:  Cromeshnic [ 26 дек 2016, 20:17 ]
Заголовок сообщения:  Re: [BUG] Открытие кредитовых договоров и ConvergenceBalance

stark писал(а):
когда уже с 5.2 то обновитесь ?


Когда по M&A закончатся развлечения, потом причешем телефонию (с MVNO), мб будет время на BG.
Т.е. никогда :(
Среди всех костылей наш BGBilling на 5.2 самый стабильный просто, нет смысла трогать :)

Автор:  stark [ 29 дек 2016, 18:23 ]
Заголовок сообщения:  Re: [BUG] Открытие кредитовых договоров и ConvergenceBalance

Вы не могли бы тему в helpdesk создать (бесплатная будет она ) по этому вопросу ?

Или нужны хотя бы ответы на вопросы : режим договора - кредитный ? Лимит - очень большой ? Расходов нет( только наработка )? . Хотелось бы посмотреть на договор.

Как бы ошибка есть, сейчас ее исправил в более младших версиях(пока не заливали и не выкладывали). С 5.2 там ситуация вообще еще хуже, там кроме этой ошибки была еще другая- там расходы в принципе объедены с приходами в кэше(в бине ConvergenceBalance нет в принципе поля отдельного для расходов, там от приходов расходы отнимают) . И когда мы берем из кэша баланс, то при наличии расходов мы в принципе не можем сальдо вычислить правильно, оно по факту получается всегда меньше(но не больше, если только конечно расход не отрицательная цифра) . Эту проблему исправили в версиях >= 6.2 еще тогда в 2015. В 5.2 не стали. Но на данную ситуация она не влияет вроде как, так как из кеша там берут баланс редко, при приходе платежа вначале срабатывает код, который берут баланс из базы, т.е тот, который вы показали как ошибочный.У меня конечно нет 100% уверенности, там все упирается в порядок обработки событий (он недерминирован), но тут более позднее 2-о событие должно успеть обработаться вторым слушателем раньше и успеть отправить еще одно событие, которое попадает на 1-ый слушатель раньше чем -1-ое событие. Я могу исправить эту ошибку в кеше в 5.2, но не уверено что поможет.

Теперь что касается того кода который тут представлен, где берут баланс не из кеша, а из базы. Ошибка есть - действительно, но опять же сальдо тут по факту получилось меньше (если у вас не отрицательная наработка и расходы). Т.е берут сальдо как баланс исходящий остаток ноября в вашем случае( -233324.74 ) И он никак не может быть положительным. Т..е сальдо будет отрицательным в любом случае. Потом от него отнимают еще расходы и наработку и получают неправильный баланс(-466649.48), но опять же он меньше получается. Т.е клиента никак не должно открыть. Эта проблему сейчас я исправлю в 5.2 тоже. Но опять же не уверен что поможет. Поэтому хотел бы на всякий случай посмотреть договор на месте, может быть там есть что-то еще(скрипты на приход платежа и т.п).

Автор:  stark [ 31 дек 2016, 03:16 ]
Заголовок сообщения:  Re: [BUG] Открытие кредитовых договоров и ConvergenceBalance

Исправили все во всех версиях 5.2 и младше. Выложим после новогодних праздников.

Автор:  stark [ 08 янв 2017, 17:19 ]
Заголовок сообщения:  Re: [BUG] Открытие кредитовых договоров и ConvergenceBalance

Выложили обновление.

Автор:  Cromeshnic [ 20 янв 2017, 13:43 ]
Заголовок сообщения:  Re: [BUG] Открытие кредитовых договоров и ConvergenceBalance

Обновился, посмотрим.
Задачу в HD всё ещё нужно делать?

Автор:  stark [ 20 янв 2017, 15:04 ]
Заголовок сообщения:  Re: [BUG] Открытие кредитовых договоров и ConvergenceBalance

Cromeshnic писал(а):
Обновился, посмотрим.
Задачу в HD всё ещё нужно делать?


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

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