From f13bfbf9ac20d04bea529954540ac8e4c34e99af Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 6 Feb 2023 17:12:34 +0300 Subject: [PATCH] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-189=20Payme?= =?UTF-8?q?ntInstructionCreator=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?LiabilitiesClaimsMoney=20=D0=B4=D0=BB=D1=8F=202=20=D0=BD=D0=BE?= =?UTF-8?q?=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; }