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) {
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;
});
Optional<LiabilitiesClaimsMoney> 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);

View file

@ -490,57 +490,50 @@ public class PaymentInstructionCreator {
/**
* 2.2.2.2. Выполнить Изменение liabilitiesClaimsMoney по paymentInstruction.
*/
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
* Обновление liabilitiesClaimsMoney первой/второй ноги по liabilitiesClaimsAssets
*
* @param liabilitiesClaimsMoney обновить этот объект (firstLeg)
* @param isFirstLeg true - первая, false вторая
* @param paymentInstructions
* @param clearingCategory
* @return были внесены изменения в liabilitiesClaimsMoney
*/
public boolean updateFieldLiabilitiesClaimsMoneyByPayment(LiabilitiesClaimsMoney liabilitiesClaimsMoney,
boolean isFirstLeg,
List<PaymentInstruction> paymentInstructions,
Collection<ClearingCategory> 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;
}