http://jira.mfd.msk:8088/browse/CLS-189 PaymentInstructionCreator правка заполнения LiabilitiesClaimsMoney для 2 ног

This commit is contained in:
AKurakin 2023-02-06 17:12:34 +03:00
parent f60bfdd318
commit f13bfbf9ac
3 changed files with 52 additions and 33 deletions

View file

@ -125,4 +125,23 @@ public class LiabilitiesClaimsMoney extends BusinessObject {
public void setClearingDate(LocalDate clearingDate) { public void setClearingDate(LocalDate clearingDate) {
this.clearingDate = 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 +
'}';
}
} }

View file

@ -208,6 +208,7 @@ public class Clearing {
wrapperFirstLegCreated.firstLegCreated = lcmFirstLeg; wrapperFirstLegCreated.firstLegCreated = lcmFirstLeg;
}); });
Optional<LiabilitiesClaimsMoney> lcmSecondLegFound = lbltsClmsMoneyCreator.searchLcmByRefundDate(lca.getAccountId(), lca.getCompanyId(), lca.getRefundDate()); Optional<LiabilitiesClaimsMoney> lcmSecondLegFound = lbltsClmsMoneyCreator.searchLcmByRefundDate(lca.getAccountId(), lca.getCompanyId(), lca.getRefundDate());
var wrapperSecondLegCreated = new Object() {LiabilitiesClaimsMoney secondLegCreated;};
lcmSecondLegFound.ifPresentOrElse(lcm -> { lcmSecondLegFound.ifPresentOrElse(lcm -> {
log.trace("LiabilitiesClaimsMoney second leg {} was found", lcm.getId()); log.trace("LiabilitiesClaimsMoney second leg {} was found", lcm.getId());
lbltsClmsMoneyCreator.updateSecondLegLcm(lcm, lca, category); lbltsClmsMoneyCreator.updateSecondLegLcm(lcm, lca, category);
@ -216,6 +217,7 @@ public class Clearing {
LiabilitiesClaimsMoney lcmSecondLeg = lbltsClmsMoneyCreator.createSecondLegLcm(lca, category); LiabilitiesClaimsMoney lcmSecondLeg = lbltsClmsMoneyCreator.createSecondLegLcm(lca, category);
liabilitiesClaimsMoneyImdg.insert(lcmSecondLeg); liabilitiesClaimsMoneyImdg.insert(lcmSecondLeg);
log.trace("LiabilitiesClaimsMoney second leg {} was created", lcmSecondLeg.getId()); log.trace("LiabilitiesClaimsMoney second leg {} was created", lcmSecondLeg.getId());
wrapperSecondLegCreated.secondLegCreated = lcmSecondLeg;
}); });
lbltsClmsAssetsCreator.updateLca(lca, lcmFirstLegFound.orElse(wrapperFirstLegCreated.firstLegCreated)); lbltsClmsAssetsCreator.updateLca(lca, lcmFirstLegFound.orElse(wrapperFirstLegCreated.firstLegCreated));
liabilitiesClaimsAssetsImdg.update(lca); liabilitiesClaimsAssetsImdg.update(lca);
@ -225,10 +227,15 @@ public class Clearing {
paymentInstructionCreator.updateFieldLiabilitiesClaimsAssetsByPayment(lca, paymentInstructions, Collections.singleton(category)); paymentInstructionCreator.updateFieldLiabilitiesClaimsAssetsByPayment(lca, paymentInstructions, Collections.singleton(category));
liabilitiesClaimsAssetsImdg.update(lca); liabilitiesClaimsAssetsImdg.update(lca);
var firstLegLiabilitiesClaimsMoney = lcmFirstLegFound.orElseGet(() -> wrapperFirstLegCreated.firstLegCreated); var firstLegLiabilitiesClaimsMoney = lcmFirstLegFound.orElseGet(() -> wrapperFirstLegCreated.firstLegCreated);
var secondLegLiabilitiesClaimsMoney = lcmSecondLegFound.orElseGet(() -> wrapperSecondLegCreated.secondLegCreated);
log.trace("updating LiabilitiesClaimsMoney by payment"); 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); 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.setSessionId(clearingSessionId);
execDeposit.setUpdated(Instant.now()); execDeposit.setUpdated(Instant.now());
executionDepositImdg.update(execDeposit); executionDepositImdg.update(execDeposit);

View file

@ -490,57 +490,50 @@ public class PaymentInstructionCreator {
/** /**
* 2.2.2.2. Выполнить Изменение liabilitiesClaimsMoney по paymentInstruction. * 2.2.2.2. Выполнить Изменение liabilitiesClaimsMoney по paymentInstruction.
*/ * Обновление liabilitiesClaimsMoney первой/второй ноги по liabilitiesClaimsAssets
public LiabilitiesClaimsMoney updateLiabilitiesClaimsMoneyByPaymentInstruction(LiabilitiesClaimsAssets liabilitiesClaimsAssets,
List<PaymentInstruction> paymentInstructions,
Collection<ClearingCategory> 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
* *
* @param liabilitiesClaimsMoney обновить этот объект (firstLeg) * @param liabilitiesClaimsMoney обновить этот объект (firstLeg)
* @param isFirstLeg true - первая, false вторая
* @param paymentInstructions * @param paymentInstructions
* @param clearingCategory * @param clearingCategory
* @return были внесены изменения в liabilitiesClaimsMoney * @return были внесены изменения в liabilitiesClaimsMoney
*/ */
public boolean updateFieldLiabilitiesClaimsMoneyByPayment(LiabilitiesClaimsMoney liabilitiesClaimsMoney, public boolean updateFieldLiabilitiesClaimsMoneyByPayment(LiabilitiesClaimsMoney liabilitiesClaimsMoney,
boolean isFirstLeg,
List<PaymentInstruction> paymentInstructions, List<PaymentInstruction> paymentInstructions,
Collection<ClearingCategory> clearingCategory) { Collection<ClearingCategory> clearingCategory) {
final boolean isSecondLeg = !isFirstLeg;
boolean modified = false; boolean modified = false;
PaymentInstruction paymentIAny = paymentInstructions.iterator().next(); PaymentInstruction paymentIAny = paymentInstructions.iterator().next();
if ((clearingCategory.contains(ClearingCategory.I) || clearingCategory.contains(ClearingCategory.V))) { if (clearingCategory.contains(ClearingCategory.I) || clearingCategory.contains(ClearingCategory.V)) {
BigDecimal amount = liabilitiesClaimsMoney.getLiabilitiesAmount().subtract(bdFromLongSafe(paymentIAny.getCreditLegAmount())); if (isFirstLeg) {
liabilitiesClaimsMoney.setLiabilitiesAmount(amount); BigDecimal amount = safeBD(liabilitiesClaimsMoney.getLiabilitiesAmount()).subtract(bdFromLongSafe(paymentIAny.getCreditLegAmount()));
modified = true; liabilitiesClaimsMoney.setLiabilitiesAmount(amount);
modified = true;
}
if (isSecondLeg) {
// liabilitiesAmount не меняется
}
} }
if ((clearingCategory.contains(ClearingCategory.B))) { if (clearingCategory.contains(ClearingCategory.B)) {
BigDecimal amount = liabilitiesClaimsMoney.getClaimsAmount().subtract(bdFromLongSafe(paymentIAny.getDebitLegAmount())); if (isFirstLeg) {
liabilitiesClaimsMoney.setClaimsAmount(amount); // liabilitiesAmount не меняется ;
modified = true; }
if (isSecondLeg) {
BigDecimal amount = safeBD(liabilitiesClaimsMoney.getClaimsAmount()).subtract(bdFromLongSafe(paymentIAny.getDebitLegAmount()));
liabilitiesClaimsMoney.setClaimsAmount(amount);
modified = true;
}
} }
if (modified) { if (modified) {
liabilitiesClaimsMoney.setUpdated(Instant.now()); liabilitiesClaimsMoney.setUpdated(Instant.now());
} }
log.debug("updateFieldLiabilitiesClaimsMoneyByPayment: isFirstLeg={}, isSecondLeg={}, modified={}, LiabilitiesClaimsMoney.id={}",
isFirstLeg, isSecondLeg, modified, liabilitiesClaimsMoney.getId());
return modified; return modified;
} }