Привет.
Обратился менеджер: кредитовый клиент не оплатил октябрь и ноябрь, был закрыт ещё в конце ноября, поэтому начислений за декабрь нет. Должен оплатить октябрь и ту часть ноября, которую он работал, чтобы открыться.
По факту оплачивает только часть - сумму за октябрь и открывается, хотя сальдо<0.
Покопался час, нашёл ошибку:
в обработке события баланса ConvergenceBalanceEvent берётся баланс из кэша:
Код:
ConvergenceBalance convergenceBalance = ConvergenceBalanceManager.getInstance().getBalance(connectionSet, Integer.valueOf(contractId), System.currentTimeMillis());
BigDecimal saldo = convergenceBalance.getSaldo();
- так вот, если движений баланса в этом месяце не было, то берётся баланс предыдущего. Соответственно, и сальдо предыдущего.
Для проверки написал такой скрипт BGBS, нашёл договор с балансом за ноябрь, но без баланса в декабре:
Вложение:
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