BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 29 мар 2024, 20:03

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
СообщениеДобавлено: 26 дек 2016, 14:20 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Привет.

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

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

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

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

      BigDecimal saldo = convergenceBalance.getSaldo();


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

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

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


Код:
   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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 дек 2016, 15:00 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
У меня дежавю. Была ваша тема от 2015 года вроде по этой же проблеме, найти не могу. Я тогда сделал комит :
"Ошибка при вычислении сальдо при принятии решении об отрытии кредитного договора (изменение затрагивает многие модули)" на 6.2 и выше.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 дек 2016, 15:01 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
когда уже с 5.2 то обновитесь ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 дек 2016, 17:39 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Нашел тему. Вот она :
https://forum.bitel.ru/viewtopic.php?f=22&t=10287


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 дек 2016, 17:48 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Кажется, я не стал накатывать на 5.2, так как тогда оказалось что ошибка эта не проявляется вроде как. Надо заново изучить вопрос.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 дек 2016, 20:17 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
stark писал(а):
когда уже с 5.2 то обновитесь ?


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 дек 2016, 18:23 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Вы не могли бы тему в helpdesk создать (бесплатная будет она ) по этому вопросу ?

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 31 дек 2016, 03:16 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Исправили все во всех версиях 5.2 и младше. Выложим после новогодних праздников.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 янв 2017, 17:19 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Выложили обновление.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 янв 2017, 13:43 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Обновился, посмотрим.
Задачу в HD всё ещё нужно делать?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 янв 2017, 15:04 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Cromeshnic писал(а):
Обновился, посмотрим.
Задачу в HD всё ещё нужно делать?


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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.101s | 42 Queries | GZIP : On ]