From d1b9543d35d56abe8ca6a3b090e8698b8bd04378 Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 6 Feb 2023 18:29:36 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-189 --- .../service/AccountBalanceService.java | 10 +++++++++ .../builder/PaymentInstructionCreator.java | 22 +++++++++---------- .../enumeration/ClearingCategory.java | 1 + .../platform/utils/enumeration/IEnumKey.java | 13 +++++++++++ 4 files changed, 35 insertions(+), 11 deletions(-) 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 7b96f2f26..8cdbb6d2a 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 @@ -125,9 +125,11 @@ public class AccountBalanceService { BigDecimal previousFreeBalanceAmount = safeBD(accountBalance.getFreeBalanceAmount()); BigDecimal previousChangeBalanceAmount = safeBD(accountBalance.getChangeBalanceAmount()); BigDecimal previousBalanceAmount = safeBD(accountBalance.getBalanceAmount()); + BigDecimal previousCreditAmount = safeBD(accountBalance.getCreditAmount()); accountBalance.setFreeBalanceAmount(previousFreeBalanceAmount.subtract(firstLegAmount)); accountBalance.setChangeBalanceAmount(previousChangeBalanceAmount.subtract(firstLegAmount)); accountBalance.setBalanceAmount(previousBalanceAmount.subtract(firstLegAmount)); + accountBalance.setCreditAmount(previousCreditAmount.add(firstLegAmount.abs())); accountBalance.setUpdated(Instant.now()); log.trace("updateAccountCategoryIClrn: {}", accountBalance.getId()); accountBalanceImdg.update(accountBalance); @@ -137,7 +139,9 @@ public class AccountBalanceService { AccountBalance accountBalance = loadAccountBalance(AccountType.Tran); log.trace("updating AccountBalance {} I TRAN", accountBalance.getId()); BigDecimal previousDebitAmount = safeBD(accountBalance.getDebitAmount()); + BigDecimal previousCreditAmount = safeBD(accountBalance.getCreditAmount()); accountBalance.setDebitAmount(previousDebitAmount.add(firstLegAmount.abs())); + accountBalance.setCreditAmount(previousCreditAmount.add(firstLegAmount.abs())); accountBalance.setUpdated(Instant.now()); log.trace("updateAccountCategoryITran: {}", accountBalance.getId()); accountBalanceImdg.update(accountBalance); @@ -149,9 +153,11 @@ public class AccountBalanceService { BigDecimal previousFreeBalanceAmount = safeBD(accountBalance.getFreeBalanceAmount()); BigDecimal changeBalanceAmount = safeBD(accountBalance.getChangeBalanceAmount()); BigDecimal balanceAmount = safeBD(accountBalance.getBalanceAmount()); + BigDecimal previousCreditAmount = safeBD(accountBalance.getCreditAmount()); accountBalance.setFreeBalanceAmount(previousFreeBalanceAmount.subtract(firstLegAmount)); accountBalance.setChangeBalanceAmount(changeBalanceAmount.subtract(firstLegAmount)); accountBalance.setBalanceAmount(balanceAmount.subtract(firstLegAmount)); + accountBalance.setCreditAmount(previousCreditAmount.add(firstLegAmount.abs())); accountBalance.setUpdated(Instant.now()); log.trace("updateAccountCategoryVInfo: {}", accountBalance.getId()); accountBalanceImdg.update(accountBalance); @@ -163,9 +169,11 @@ public class AccountBalanceService { BigDecimal previousFreeBalanceAmount = safeBD(accountBalance.getFreeBalanceAmount()); BigDecimal previousChangeBalanceAmount = safeBD(accountBalance.getChangeBalanceAmount()); BigDecimal previousBalanceAmount = safeBD(accountBalance.getBalanceAmount()); + BigDecimal previousCreditAmount = safeBD(accountBalance.getCreditAmount()); accountBalance.setFreeBalanceAmount(previousFreeBalanceAmount.subtract(firstLegAmount)); accountBalance.setChangeBalanceAmount(previousChangeBalanceAmount.subtract(firstLegAmount)); accountBalance.setBalanceAmount(previousBalanceAmount.subtract(firstLegAmount)); + accountBalance.setCreditAmount(previousCreditAmount.add(firstLegAmount.abs())); accountBalance.setUpdated(Instant.now()); log.trace("updateAccountCategoryVAnlt: {}", accountBalance.getId()); accountBalanceImdg.update(accountBalance); @@ -177,9 +185,11 @@ public class AccountBalanceService { BigDecimal debitAmount = safeBD(accountBalance.getDebitAmount()); BigDecimal prevFreeBalanceAmount = safeBD(accountBalance.getFreeBalanceAmount()); BigDecimal prevBalanceAmount = safeBD(accountBalance.getBalanceAmount()); + BigDecimal previousCreditAmount = safeBD(accountBalance.getCreditAmount()); accountBalance.setDebitAmount(plus(debitAmount, firstLegAmount.abs())); accountBalance.setFreeBalanceAmount(plus(prevFreeBalanceAmount, firstLegAmount)); accountBalance.setBalanceAmount(plus(prevBalanceAmount, firstLegAmount)); + accountBalance.setCreditAmount(previousCreditAmount.add(firstLegAmount.abs())); accountBalance.setUpdated(Instant.now()); log.trace("updateAccountCategoryBClrn: {}", accountBalance.getId()); accountBalanceImdg.update(accountBalance); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionCreator.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionCreator.java index 60dc70007..4e75f188b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionCreator.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionCreator.java @@ -16,6 +16,8 @@ import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgId; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.IEnumKey; +import ru.spcex.platform.utils.number.BigDecimalUtil; import ru.spcex.platform.utils.time.TimeUtil; import java.math.BigDecimal; @@ -346,7 +348,7 @@ public class PaymentInstructionCreator { payment1.setSettlementDate(liabilitiesClaimsAssets.getSettlementDate()); - Long amount = liabilitiesClaimsAssets.getLiabilitiesQuantity() == null ? null : liabilitiesClaimsAssets.getLiabilitiesQuantity().abs().longValue(); + Long amount = liabilitiesClaimsAssets.getClaimsQuantity() == null ? null : liabilitiesClaimsAssets.getClaimsQuantity().abs().longValue(); payment1.setCreditLegAmount(amount); payment1.setDebitLegAmount(amount); @@ -439,19 +441,17 @@ public class PaymentInstructionCreator { public void updateFieldLiabilitiesClaimsAssetsByPayment(LiabilitiesClaimsAssets liabilitiesClaimsAssets, List paymentInstructions, Collection clearingCategory) { - + AccountType accountType = IEnumKey.getEnumByKey(AccountType.class, liabilitiesClaimsAssets.getAccountType()); PaymentInstruction paymentIAny=paymentInstructions.iterator().next(); - if (clearingCategory.contains(ClearingCategory.I) || clearingCategory.contains(ClearingCategory.V)) { - BigDecimal amount = paymentIAny.getCreditLegAmount() == null ? BigDecimal.ZERO : new BigDecimal((Long)paymentIAny.getCreditLegAmount()); -// При обновлении (по paymentInstruction и категория I и счет CLRN):=liabilitiesClaimsAssets.liabilitiesQuantity - paymentInstruction.creditLeg_amount -// При обновлении (по paymentInstruction и категория V и счет INFO):=liabilitiesClaimsAssets.liabilitiesQuantity - paymentInstruction.creditLeg_amount - amount = liabilitiesClaimsAssets.getLiabilitiesQuantity().subtract(amount); - liabilitiesClaimsAssets.setLiabilitiesQuantity(amount); + if ((clearingCategory.contains(ClearingCategory.I) && AccountType.Clrn.equals(accountType)) + || (clearingCategory.contains(ClearingCategory.V) && AccountType.Info.equals(accountType))) { + BigDecimal amount = paymentIAny.getCreditLegAmount() == null ? BigDecimal.ZERO : new BigDecimal(paymentIAny.getCreditLegAmount()); + BigDecimal prevLQuantity = BigDecimalUtil.safeBD(liabilitiesClaimsAssets.getLiabilitiesQuantity()); + liabilitiesClaimsAssets.setLiabilitiesQuantity(prevLQuantity.subtract(amount)); } - if (clearingCategory.contains(ClearingCategory.B)) { - BigDecimal amount = paymentIAny.getCreditLegAmount() == null ? BigDecimal.ZERO : new BigDecimal((Long)paymentIAny.getCreditLegAmount()); - // При обновлении (по paymentInstruction и категория B и счет CLRN): из paymentInstruction.creditLeg_amount + if (clearingCategory.contains(ClearingCategory.B) && AccountType.Clrn.equals(accountType)) { + BigDecimal amount = paymentIAny.getCreditLegAmount() == null ? BigDecimal.ZERO : new BigDecimal(paymentIAny.getCreditLegAmount()); liabilitiesClaimsAssets.setLiabilitiesQuantity(amount); } diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ClearingCategory.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ClearingCategory.java index 6bab3d4ca..e9aa5181e 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ClearingCategory.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ClearingCategory.java @@ -6,6 +6,7 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; * CLEARING_CATEGORY_DICTIONARY */ public enum ClearingCategory implements IEnumKey { + undefined(UNDEFINED_VALUE), C("C"), // Категория «Ц» - Банк России B("B"), // Категория «Б» - Кредитная организация ДР F("F"), // Категория «Ф» - Участник рынка РЦБ diff --git a/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/enumeration/IEnumKey.java b/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/enumeration/IEnumKey.java index 1542928db..7bf725710 100644 --- a/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/enumeration/IEnumKey.java +++ b/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/enumeration/IEnumKey.java @@ -56,6 +56,19 @@ public interface IEnumKey extends Serializable { return null; } + static & IEnumKey> T getEnumByKeyOrUndefined(Class enumClass, String key) { + T enumByKey = getEnumByKey(enumClass, key); + return enumByKey == null ? getUndefined(enumClass) : enumByKey; + } + + static & IEnumKey> T getUndefined(Class enumClass) { + T enumByKey = getEnumByKey(enumClass, UNDEFINED_VALUE); + if (enumByKey == null) { + throw new IllegalArgumentException("Undefined value not found in enum " + enumClass); + } + return enumByKey; + } + static String getKeyOrNull(IEnumKey enumVal) { return enumVal == null ? null : enumVal.getKey(); }