From 841ad76fe80258500747a6b2f2acf68df955cc0c Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 6 Feb 2023 11:20:37 +0300 Subject: [PATCH 1/6] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-189=20f?= =?UTF-8?q?ix=20NPE=20PaymentInstructionCreator=20=D0=BA=D0=BE=D0=B3=D0=B4?= =?UTF-8?q?=D0=B0=20payment2.getAddresseeId=20=3D=3D=20null=20-=20=D0=B1?= =?UTF-8?q?=D1=83=D0=B4=D0=B5=D1=82=20warn.=20=D0=9E=D1=81=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BD=D0=B0=D1=8F=20=D0=BF=D1=80=D0=B8=D1=87=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0:=20securityId=20=3D=20%s=20and=20companyId=20<>=20%s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clearing/service/builder/PaymentInstructionCreator.java | 6 ++++++ 1 file changed, 6 insertions(+) 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..7409b8516 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 @@ -412,6 +412,9 @@ public class PaymentInstructionCreator { } protected String selectSymbolValue(Long companyId, CompanySymbol symbol) { + if (companyId == null) { + return null; + } CompanySymbols cSymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of( "companyId", companyId, "companySymbol", symbol.getKey())); @@ -423,6 +426,9 @@ public class PaymentInstructionCreator { } protected Account selectAccount(Long companyId, AccountType accountType, Status accountStatus, Allowed processingSign) { + if (companyId == null) { + return null; + } Account account = accountImdg.getSingleObjectByFieldValues(Map.of( "companyId", companyId, "accountType", accountType.getKey(), From 19222032264763a4c2e6fb10f62fa6cd2832184d Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 6 Feb 2023 12:36:45 +0300 Subject: [PATCH 2/6] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-189=20P?= =?UTF-8?q?aymentInstructionCreator=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20payment1/2.getAddresseeId=20=D0=BF=D0=BE=20executionDeposit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../builder/PaymentInstructionCreator.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) 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 7409b8516..465dbbb81 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 @@ -7,6 +7,7 @@ import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; +import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsMoney; import ru.clearing.classes.statics.data.payment.PaymentInstruction; @@ -48,6 +49,7 @@ public class PaymentInstructionCreator { protected final Imdg accountImdg; protected final Imdg paymentInstructionImdg; protected final Imdg liabilitiesClaimsMoneyImdg; + protected final Imdg executionDepositImdg; protected AtomicLong documentNumberId = new AtomicLong(0L); // порядковый номер (сквозной по всем компаниям за день protected LocalDate documentNumberResetAt; @@ -60,6 +62,7 @@ public class PaymentInstructionCreator { this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class); this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class); this.liabilitiesClaimsMoneyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsMoney, LiabilitiesClaimsMoney.class); + this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class); this.idGenerator = imdgProvider.getImdgIdGenerator(); } @@ -107,13 +110,13 @@ public class PaymentInstructionCreator { payment2.setSenderId(SPVB_ID); // СПВБ payment1.setAddresseeId(SPVB_ID); // СПВБ - String sqlLCA = String.format("securityId = %s and companyId <> %s", + String sqlLCA = String.format("securityId = %s and companyId != %s", liabilitiesClaimsAssets.getSecurityId(), liabilitiesClaimsAssets.getCompanyId()); - LiabilitiesClaimsAssets counterLiabilitiesClaimsAssets = liabilitiesClaimsAssetsImdg.getSingleObjectBySQL(sqlLCA); - if (counterLiabilitiesClaimsAssets == null) { - log.warn("Counter LiabilitiesClaimsAssets not found for : {}", sqlLCA); + ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA); + if (counterExecutionDeposit == null) { + log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA); } else { - payment2.setAddresseeId(counterLiabilitiesClaimsAssets.getCompanyId()); + payment2.setAddresseeId(counterExecutionDeposit.getCompanyId()); } String symbol1 = selectSymbolValue(payment1.getAddresseeId(), CompanySymbol.BIC); @@ -231,13 +234,13 @@ public class PaymentInstructionCreator { payment1.setSenderId(SPVB_ID); // СПВБ - String sqlLCA = String.format("securityId = %s and companyId <> %s", + String sqlLCA = String.format("securityId = %s and companyId != %s", liabilitiesClaimsAssets.getSecurityId(), liabilitiesClaimsAssets.getCompanyId()); - LiabilitiesClaimsAssets counterLiabilitiesClaimsAssets = liabilitiesClaimsAssetsImdg.getSingleObjectBySQL(sqlLCA); - if (counterLiabilitiesClaimsAssets == null) { - log.warn("Counter LiabilitiesClaimsAssets not found for : {}", sqlLCA); + ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA); + if (counterExecutionDeposit == null) { + log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA); } else { - payment1.setAddresseeId(counterLiabilitiesClaimsAssets.getCompanyId()); + payment1.setAddresseeId(counterExecutionDeposit.getCompanyId()); } String symbol1 = selectSymbolValue(payment1.getAddresseeId(), CompanySymbol.BIC); From e960fb6cb4dd11ae05f896c362833078e35d8cd6 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 6 Feb 2023 13:20:47 +0300 Subject: [PATCH 3/6] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-189=20P?= =?UTF-8?q?aymentInstructionCreator=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B8=D0=B7=20Credit/DebitLegAmount=20=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B3=D0=BE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../builder/PaymentInstructionCreator.java | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) 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 465dbbb81..7f54edb19 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 @@ -68,6 +68,7 @@ public class PaymentInstructionCreator { /** * 2.2.2. Выполнить Создание paymentInstruction по liabilitiesClaimsAssets + * * @return Созданные PaymentInstruction, может быть несколько. Они уже сохранены в IMDG. */ public List createAndSavePaymentInstructions(LiabilitiesClaimsAssets liabilitiesClaimsAssets, @@ -446,30 +447,30 @@ public class PaymentInstructionCreator { * 2.2.2.1. Выполнить Изменение liabilitiesClaimsAssets по paymentInstruction. */ public void updateFieldLiabilitiesClaimsAssetsByPayment(LiabilitiesClaimsAssets liabilitiesClaimsAssets, - List paymentInstructions, - Collection clearingCategory) { + List paymentInstructions, + Collection clearingCategory) { - PaymentInstruction paymentIAny=paymentInstructions.iterator().next(); + 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()); + BigDecimal amount = bdFromLongSafe(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.B)) { - BigDecimal amount = paymentIAny.getCreditLegAmount() == null ? BigDecimal.ZERO : new BigDecimal((Long)paymentIAny.getCreditLegAmount()); + BigDecimal amount = bdFromLongSafe(paymentIAny.getCreditLegAmount()); // При обновлении (по paymentInstruction и категория B и счет CLRN): из paymentInstruction.creditLeg_amount liabilitiesClaimsAssets.setLiabilitiesQuantity(amount); } if (clearingCategory.contains(ClearingCategory.I) || clearingCategory.contains(ClearingCategory.V)) { - BigDecimal amount = new BigDecimal((Long)paymentIAny.getDebitLegAmount()); + BigDecimal amount = bdFromLongSafe(paymentIAny.getDebitLegAmount()); liabilitiesClaimsAssets.setClaimsQuantity(amount); } if (clearingCategory.contains(ClearingCategory.B)) { - BigDecimal amount = new BigDecimal((Long)paymentIAny.getDebitLegAmount()); + BigDecimal amount = bdFromLongSafe(paymentIAny.getDebitLegAmount()); amount = liabilitiesClaimsAssets.getClaimsQuantity().subtract(amount); liabilitiesClaimsAssets.setClaimsQuantity(amount); } @@ -510,26 +511,27 @@ public class PaymentInstructionCreator { /** * Обновление liabilitiesClaimsMoney первой ноги по liabilitiesClaimsAssets + * * @param liabilitiesClaimsMoney обновить этот объект (firstLeg) * @param paymentInstructions * @param clearingCategory * @return были внесены изменения в liabilitiesClaimsMoney */ public boolean updateFieldLiabilitiesClaimsMoneyByPayment(LiabilitiesClaimsMoney liabilitiesClaimsMoney, - List paymentInstructions, - Collection clearingCategory) { + List paymentInstructions, + Collection clearingCategory) { boolean modified = false; - PaymentInstruction paymentIAny=paymentInstructions.iterator().next(); + PaymentInstruction paymentIAny = paymentInstructions.iterator().next(); if ((clearingCategory.contains(ClearingCategory.I) || clearingCategory.contains(ClearingCategory.V))) { - BigDecimal amount = liabilitiesClaimsMoney.getLiabilitiesAmount().subtract(new BigDecimal((Long)paymentIAny.getCreditLegAmount())); + BigDecimal amount = liabilitiesClaimsMoney.getLiabilitiesAmount().subtract(bdFromLongSafe(paymentIAny.getCreditLegAmount())); liabilitiesClaimsMoney.setLiabilitiesAmount(amount); modified = true; } if ((clearingCategory.contains(ClearingCategory.B))) { - BigDecimal amount = liabilitiesClaimsMoney.getClaimsAmount().subtract(new BigDecimal((Long)paymentIAny.getDebitLegAmount())); + BigDecimal amount = liabilitiesClaimsMoney.getClaimsAmount().subtract(bdFromLongSafe(paymentIAny.getDebitLegAmount())); liabilitiesClaimsMoney.setClaimsAmount(amount); modified = true; } @@ -539,4 +541,9 @@ public class PaymentInstructionCreator { } return modified; } + + private BigDecimal bdFromLongSafe(Long l) { + if (l == null) return BigDecimal.ZERO; + return new BigDecimal(l); + } } From f60bfdd3181f5af78dfc9aeed5a898202234e597 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 6 Feb 2023 13:38:34 +0300 Subject: [PATCH 4/6] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-189=20P?= =?UTF-8?q?aymentInstructionCreator=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B8=D0=B7=20Credit/DebitLegAmount=20=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B3=D0=BE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clearing/service/builder/PaymentInstructionCreator.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 7f54edb19..f69be046e 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 @@ -27,6 +27,8 @@ import java.util.*; import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; +import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; + /* todo использовать так: paymentInstructionCreator.createAndSavePaymentInstructions() @@ -471,7 +473,7 @@ public class PaymentInstructionCreator { } if (clearingCategory.contains(ClearingCategory.B)) { BigDecimal amount = bdFromLongSafe(paymentIAny.getDebitLegAmount()); - amount = liabilitiesClaimsAssets.getClaimsQuantity().subtract(amount); + amount = safeBD(liabilitiesClaimsAssets.getClaimsQuantity()).subtract(amount); liabilitiesClaimsAssets.setClaimsQuantity(amount); } From f13bfbf9ac20d04bea529954540ac8e4c34e99af Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 6 Feb 2023 17:12:34 +0300 Subject: [PATCH 5/6] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-189=20P?= =?UTF-8?q?aymentInstructionCreator=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20LiabilitiesClaimsMoney=20=D0=B4=D0=BB=D1=8F=202=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liabilities/LiabilitiesClaimsMoney.java | 19 +++++++ .../ru/spcex/clearing/service/Clearing.java | 11 +++- .../builder/PaymentInstructionCreator.java | 55 ++++++++----------- 3 files changed, 52 insertions(+), 33 deletions(-) diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/liabilities/LiabilitiesClaimsMoney.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/liabilities/LiabilitiesClaimsMoney.java index 0b45b316e..4f78f41c7 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/liabilities/LiabilitiesClaimsMoney.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/liabilities/LiabilitiesClaimsMoney.java @@ -125,4 +125,23 @@ public class LiabilitiesClaimsMoney extends BusinessObject { public void setClearingDate(LocalDate clearingDate) { this.clearingDate = clearingDate; } + + @Override + public String toString() { + return "LiabilitiesClaimsMoney{" + + "companyId=" + companyId + + ", accountId=" + accountId + + ", accountType='" + accountType + '\'' + + ", account='" + account + '\'' + + ", liabilitiesAmount=" + liabilitiesAmount + + ", claimsAmount=" + claimsAmount + + ", settlementDate=" + settlementDate + + ", tradingDate=" + tradingDate + + ", currency='" + currency + '\'' + + ", tradingCode='" + tradingCode + '\'' + + ", shortName='" + shortName + '\'' + + ", fullName='" + fullName + '\'' + + ", clearingDate=" + clearingDate + + '}'; + } } \ No newline at end of file diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/Clearing.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/Clearing.java index 6dff5866e..23d5d81a9 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/Clearing.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/Clearing.java @@ -208,6 +208,7 @@ public class Clearing { wrapperFirstLegCreated.firstLegCreated = lcmFirstLeg; }); Optional lcmSecondLegFound = lbltsClmsMoneyCreator.searchLcmByRefundDate(lca.getAccountId(), lca.getCompanyId(), lca.getRefundDate()); + var wrapperSecondLegCreated = new Object() {LiabilitiesClaimsMoney secondLegCreated;}; lcmSecondLegFound.ifPresentOrElse(lcm -> { log.trace("LiabilitiesClaimsMoney second leg {} was found", lcm.getId()); lbltsClmsMoneyCreator.updateSecondLegLcm(lcm, lca, category); @@ -216,6 +217,7 @@ public class Clearing { LiabilitiesClaimsMoney lcmSecondLeg = lbltsClmsMoneyCreator.createSecondLegLcm(lca, category); liabilitiesClaimsMoneyImdg.insert(lcmSecondLeg); log.trace("LiabilitiesClaimsMoney second leg {} was created", lcmSecondLeg.getId()); + wrapperSecondLegCreated.secondLegCreated = lcmSecondLeg; }); lbltsClmsAssetsCreator.updateLca(lca, lcmFirstLegFound.orElse(wrapperFirstLegCreated.firstLegCreated)); liabilitiesClaimsAssetsImdg.update(lca); @@ -225,10 +227,15 @@ public class Clearing { paymentInstructionCreator.updateFieldLiabilitiesClaimsAssetsByPayment(lca, paymentInstructions, Collections.singleton(category)); liabilitiesClaimsAssetsImdg.update(lca); var firstLegLiabilitiesClaimsMoney = lcmFirstLegFound.orElseGet(() -> wrapperFirstLegCreated.firstLegCreated); + var secondLegLiabilitiesClaimsMoney = lcmSecondLegFound.orElseGet(() -> wrapperSecondLegCreated.secondLegCreated); log.trace("updating LiabilitiesClaimsMoney by payment"); - paymentInstructionCreator.updateFieldLiabilitiesClaimsMoneyByPayment(firstLegLiabilitiesClaimsMoney, paymentInstructions, Collections.singleton(category)); + log.trace("firstLegLiabilitiesClaimsMoney: {}; secondLegLiabilitiesClaimsMoney: {}", firstLegLiabilitiesClaimsMoney, secondLegLiabilitiesClaimsMoney); + paymentInstructionCreator.updateFieldLiabilitiesClaimsMoneyByPayment(firstLegLiabilitiesClaimsMoney, true, paymentInstructions, Collections.singleton(category)); liabilitiesClaimsMoneyImdg.update(firstLegLiabilitiesClaimsMoney); - log.trace("LiabilitiesClaimsMoney first leg {} was updated", firstLegLiabilitiesClaimsMoney.getId()); + paymentInstructionCreator.updateFieldLiabilitiesClaimsMoneyByPayment(secondLegLiabilitiesClaimsMoney, false, paymentInstructions, Collections.singleton(category)); + liabilitiesClaimsMoneyImdg.update(secondLegLiabilitiesClaimsMoney); + log.trace("LiabilitiesClaimsMoney first leg {}, second leg {} was updated", firstLegLiabilitiesClaimsMoney.getId(), secondLegLiabilitiesClaimsMoney.getId()); + log.trace("firstLegLiabilitiesClaimsMoney: {}; secondLegLiabilitiesClaimsMoney: {}", firstLegLiabilitiesClaimsMoney, secondLegLiabilitiesClaimsMoney); execDeposit.setSessionId(clearingSessionId); execDeposit.setUpdated(Instant.now()); executionDepositImdg.update(execDeposit); 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 f69be046e..952b08100 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 @@ -490,57 +490,50 @@ public class PaymentInstructionCreator { /** * 2.2.2.2. Выполнить Изменение liabilitiesClaimsMoney по paymentInstruction. - */ - public LiabilitiesClaimsMoney updateLiabilitiesClaimsMoneyByPaymentInstruction(LiabilitiesClaimsAssets liabilitiesClaimsAssets, - List paymentInstructions, - Collection clearingCategory) { - Long lmId = liabilitiesClaimsAssets.getLiabilitiesClaimsMoneyId(); - log.debug("Update LiabilitiesClaimsMoney[{}] by paymentInstructions {}", lmId, paymentInstructions.stream().map(SpcexObjectBase::getId).collect(Collectors.toList())); - LiabilitiesClaimsMoney liabilitiesClaimsMoney = liabilitiesClaimsMoneyImdg.getSingleObjectByID(lmId); // update data for update - if (liabilitiesClaimsMoney == null) { - throw new RuntimeException("IMDG not found LiabilitiesClaimsMoney.id=" + lmId); - } - if (!Objects.equals(liabilitiesClaimsMoney.getSettlementDate(), liabilitiesClaimsAssets.getSettlementDate())) { - log.warn("Date not match: LiabilitiesClaimsMoney[{}].settlementDate={} and LiabilitiesClaimsAssets[{}].settlementDate={}. It is first leg?", - liabilitiesClaimsMoney.getId(), liabilitiesClaimsMoney.getSettlementDate(), liabilitiesClaimsAssets.getId(), liabilitiesClaimsAssets.getSettlementDate() - ); - } - updateFieldLiabilitiesClaimsMoneyByPayment(liabilitiesClaimsMoney, paymentInstructions, clearingCategory); - - liabilitiesClaimsMoneyImdg.update(liabilitiesClaimsMoney); - return liabilitiesClaimsMoney; - } - - /** - * Обновление liabilitiesClaimsMoney первой ноги по liabilitiesClaimsAssets + * Обновление liabilitiesClaimsMoney первой/второй ноги по liabilitiesClaimsAssets * * @param liabilitiesClaimsMoney обновить этот объект (firstLeg) + * @param isFirstLeg true - первая, false вторая * @param paymentInstructions * @param clearingCategory * @return были внесены изменения в liabilitiesClaimsMoney */ public boolean updateFieldLiabilitiesClaimsMoneyByPayment(LiabilitiesClaimsMoney liabilitiesClaimsMoney, + boolean isFirstLeg, List paymentInstructions, Collection clearingCategory) { + final boolean isSecondLeg = !isFirstLeg; boolean modified = false; PaymentInstruction paymentIAny = paymentInstructions.iterator().next(); - if ((clearingCategory.contains(ClearingCategory.I) || clearingCategory.contains(ClearingCategory.V))) { - BigDecimal amount = liabilitiesClaimsMoney.getLiabilitiesAmount().subtract(bdFromLongSafe(paymentIAny.getCreditLegAmount())); - liabilitiesClaimsMoney.setLiabilitiesAmount(amount); - modified = true; + if (clearingCategory.contains(ClearingCategory.I) || clearingCategory.contains(ClearingCategory.V)) { + if (isFirstLeg) { + BigDecimal amount = safeBD(liabilitiesClaimsMoney.getLiabilitiesAmount()).subtract(bdFromLongSafe(paymentIAny.getCreditLegAmount())); + liabilitiesClaimsMoney.setLiabilitiesAmount(amount); + modified = true; + } + if (isSecondLeg) { + // liabilitiesAmount не меняется + } } - if ((clearingCategory.contains(ClearingCategory.B))) { - BigDecimal amount = liabilitiesClaimsMoney.getClaimsAmount().subtract(bdFromLongSafe(paymentIAny.getDebitLegAmount())); - liabilitiesClaimsMoney.setClaimsAmount(amount); - modified = true; + if (clearingCategory.contains(ClearingCategory.B)) { + if (isFirstLeg) { + // liabilitiesAmount не меняется ; + } + if (isSecondLeg) { + BigDecimal amount = safeBD(liabilitiesClaimsMoney.getClaimsAmount()).subtract(bdFromLongSafe(paymentIAny.getDebitLegAmount())); + liabilitiesClaimsMoney.setClaimsAmount(amount); + modified = true; + } } if (modified) { liabilitiesClaimsMoney.setUpdated(Instant.now()); } + log.debug("updateFieldLiabilitiesClaimsMoneyByPayment: isFirstLeg={}, isSecondLeg={}, modified={}, LiabilitiesClaimsMoney.id={}", + isFirstLeg, isSecondLeg, modified, liabilitiesClaimsMoney.getId()); return modified; } From 52b600dbbfa108a32c90bea4d29b6ecda9057507 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Mon, 6 Feb 2023 17:46:32 +0300 Subject: [PATCH 6/6] update meta --- .../backend-api/src/main/resources/meta/meta.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.xml b/clearing-parent/backend-api/src/main/resources/meta/meta.xml index c5b7fbd9d..72ccf83f2 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.xml @@ -1,6 +1,6 @@ - + @@ -1150,8 +1150,8 @@ - - + + @@ -1171,7 +1171,7 @@ - +