diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java index 20b358cdc..c74026395 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java @@ -98,6 +98,7 @@ public class AccountBalanceService { public void updateAccountBalanceByClearing(AccountBalanceClearingRequest req) { ClearingCategory category = getClearingCategoryByCompanyId(req.getCompanyId()); + req.setFirstLegAmount(safeBD(req.getFirstLegAmount())); if (category.equals(ClearingCategory.I)) { updateAccountCategoryIClrn(req.getAccountId(), req.getCompanyId(), req.getFirstLegAmount()); updateAccountCategoryITran(req.getFirstLegAmount()); @@ -118,9 +119,10 @@ public class AccountBalanceService { private void updateAccountCategoryIClrn(Long accountId, Long companyId, BigDecimal firstLegAmount) { AccountBalance accountBalance = loadAccountBalance(accountId, companyId, AccountType.Clrn); - BigDecimal previousFreeBalanceAmount = accountBalance.getFreeBalanceAmount(); - BigDecimal previousChangeBalanceAmount = accountBalance.getChangeBalanceAmount(); - BigDecimal previousBalanceAmount = accountBalance.getBalanceAmount(); + log.trace("updating AccountBalance {} I CLRN", accountBalance.getId()); + BigDecimal previousFreeBalanceAmount = safeBD(accountBalance.getFreeBalanceAmount()); + BigDecimal previousChangeBalanceAmount = safeBD(accountBalance.getChangeBalanceAmount()); + BigDecimal previousBalanceAmount = safeBD(accountBalance.getBalanceAmount()); accountBalance.setFreeBalanceAmount(previousFreeBalanceAmount.subtract(firstLegAmount)); accountBalance.setChangeBalanceAmount(previousChangeBalanceAmount.subtract(firstLegAmount)); accountBalance.setBalanceAmount(previousBalanceAmount.subtract(firstLegAmount)); @@ -131,7 +133,8 @@ public class AccountBalanceService { private void updateAccountCategoryITran(BigDecimal firstLegAmount) { AccountBalance accountBalance = loadAccountBalance(AccountType.Tran); - BigDecimal previousDebitAmount = accountBalance.getDebitAmount(); + log.trace("updating AccountBalance {} I TRAN", accountBalance.getId()); + BigDecimal previousDebitAmount = safeBD(accountBalance.getDebitAmount()); accountBalance.setDebitAmount(previousDebitAmount.add(firstLegAmount.abs())); accountBalance.setUpdated(Instant.now()); log.trace("updateAccountCategoryITran: {}", accountBalance.getId()); @@ -140,9 +143,10 @@ public class AccountBalanceService { private void updateAccountCategoryVInfo(Long accountId, Long companyId, BigDecimal firstLegAmount) { AccountBalance accountBalance = loadAccountBalance(accountId, companyId, AccountType.Info); - BigDecimal previousFreeBalanceAmount = accountBalance.getFreeBalanceAmount(); - BigDecimal changeBalanceAmount = accountBalance.getChangeBalanceAmount(); - BigDecimal balanceAmount = accountBalance.getBalanceAmount(); + log.trace("updating AccountBalance {} V INFO", accountBalance.getId()); + BigDecimal previousFreeBalanceAmount = safeBD(accountBalance.getFreeBalanceAmount()); + BigDecimal changeBalanceAmount = safeBD(accountBalance.getChangeBalanceAmount()); + BigDecimal balanceAmount = safeBD(accountBalance.getBalanceAmount()); accountBalance.setFreeBalanceAmount(previousFreeBalanceAmount.subtract(firstLegAmount)); accountBalance.setChangeBalanceAmount(changeBalanceAmount.subtract(firstLegAmount)); accountBalance.setBalanceAmount(balanceAmount.subtract(firstLegAmount)); @@ -153,9 +157,10 @@ public class AccountBalanceService { private void updateAccountCategoryVAnlt(BigDecimal firstLegAmount) { AccountBalance accountBalance = loadAccountBalance(AccountType.Anlt); - BigDecimal previousFreeBalanceAmount = accountBalance.getFreeBalanceAmount(); - BigDecimal previousChangeBalanceAmount = accountBalance.getChangeBalanceAmount(); - BigDecimal previousBalanceAmount = accountBalance.getBalanceAmount(); + log.trace("updating AccountBalance {} V ANLT", accountBalance.getId()); + BigDecimal previousFreeBalanceAmount = safeBD(accountBalance.getFreeBalanceAmount()); + BigDecimal previousChangeBalanceAmount = safeBD(accountBalance.getChangeBalanceAmount()); + BigDecimal previousBalanceAmount = safeBD(accountBalance.getBalanceAmount()); accountBalance.setFreeBalanceAmount(previousFreeBalanceAmount.subtract(firstLegAmount)); accountBalance.setChangeBalanceAmount(previousChangeBalanceAmount.subtract(firstLegAmount)); accountBalance.setBalanceAmount(previousBalanceAmount.subtract(firstLegAmount)); @@ -166,7 +171,8 @@ public class AccountBalanceService { private void updateAccountCategoryBClrn(Long accountId, Long companyId, BigDecimal firstLegAmount) { AccountBalance accountBalance = loadAccountBalance(accountId, companyId, AccountType.Clrn); - BigDecimal debitAmount = accountBalance.getDebitAmount(); + log.trace("updating AccountBalance {} B CLRN", accountBalance.getId()); + BigDecimal debitAmount = safeBD(accountBalance.getDebitAmount()); accountBalance.setDebitAmount(plus(debitAmount, firstLegAmount.abs())); accountBalance.setUpdated(Instant.now()); log.trace("updateAccountCategoryBClrn: {}", accountBalance.getId()); @@ -186,4 +192,8 @@ public class AccountBalanceService { "accountType", type.getKey()) ); } + + private BigDecimal safeBD(BigDecimal bd) { + return bd == null ? BigDecimal.ZERO : bd; + } }