Merge remote-tracking branch 'origin/dev' into dev
# Conflicts: # clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionCreator.java
This commit is contained in:
commit
0e8ea7b595
4 changed files with 103 additions and 64 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--?xml-stylesheet type="text/xsl" href="\..\corp-reports\src\data\meta\meta.server.xslt"?-->
|
<!--?xml-stylesheet type="text/xsl" href="\..\corp-reports\src\data\meta\meta.server.xslt"?-->
|
||||||
<meta version="2.4.0.10">
|
<meta version="2.4.0.11">
|
||||||
<!-- _xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" _xsi:noNamespaceSchemaLocation="file:///E:/d/projects/meta/from/meta.xsd" -->
|
<!-- _xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" _xsi:noNamespaceSchemaLocation="file:///E:/d/projects/meta/from/meta.xsd" -->
|
||||||
<!--Здесь словари-->
|
<!--Здесь словари-->
|
||||||
<enums>
|
<enums>
|
||||||
|
|
@ -1150,8 +1150,8 @@
|
||||||
<operationStatus type="12" name="Cтатус обработки" shortname="Статус" searchable="true" sortable="true" link="operationStatus"/>
|
<operationStatus type="12" name="Cтатус обработки" shortname="Статус" searchable="true" sortable="true" link="operationStatus"/>
|
||||||
</operation>
|
</operation>
|
||||||
<paymentInstruction name="Платежные поручения" destination="payment-instructions" class="ru.clearing.classes.statics.data.payment.PaymentInstruction" table="payment_instruction">
|
<paymentInstruction name="Платежные поручения" destination="payment-instructions" class="ru.clearing.classes.statics.data.payment.PaymentInstruction" table="payment_instruction">
|
||||||
<senderId type="1" name="Наименование участника отправителя" shortname="Отправитель" searchable="true" sortable="true" link="company"/>
|
<senderId type="1" name="Наименование участника отправителя" shortname="Отправитель" searchable="true" sortable="true" link="company" linkCode="shortName"/>
|
||||||
<addresseeId type="1" name="Наименование участника получателя" shortname="Получатель" searchable="true" sortable="true" link="company"/>
|
<addresseeId type="1" name="Наименование участника получателя" shortname="Получатель" searchable="true" sortable="true" link="company" linkCode="shortName"/>
|
||||||
<adresseeBic type="2" length="255" name="Банковский идентификационный код (БИК) получателя" shortname="БИК получателя" searchable="true" sortable="true" visible="true"/>
|
<adresseeBic type="2" length="255" name="Банковский идентификационный код (БИК) получателя" shortname="БИК получателя" searchable="true" sortable="true" visible="true"/>
|
||||||
<payeeBankName type="2" length="255" name="Наименование банка отправителя" shortname="Банк отправителя" searchable="true" sortable="true" visible="true"/>
|
<payeeBankName type="2" length="255" name="Наименование банка отправителя" shortname="Банк отправителя" searchable="true" sortable="true" visible="true"/>
|
||||||
<payeeBic type="2" length="255" name="Банковский идентификационный код (БИК) отправителя" shortname="БИК отправителя" searchable="true" sortable="true" visible="true"/>
|
<payeeBic type="2" length="255" name="Банковский идентификационный код (БИК) отправителя" shortname="БИК отправителя" searchable="true" sortable="true" visible="true"/>
|
||||||
|
|
@ -1171,7 +1171,7 @@
|
||||||
<debitLeg_direction field="debitLegDirection" type="1" name="Направление получателя" shortname="Направление получателя" searchable="true" sortable="true" link="inOutDirection" ignore="true"/>
|
<debitLeg_direction field="debitLegDirection" type="1" name="Направление получателя" shortname="Направление получателя" searchable="true" sortable="true" link="inOutDirection" ignore="true"/>
|
||||||
<creditLeg_currencyCode field="creditLegCurrencyCode" type="12" name="Код валюты отправителя" shortname="Валюта отправителя" searchable="true" sortable="true" visible="true" link="currency"/>
|
<creditLeg_currencyCode field="creditLegCurrencyCode" type="12" name="Код валюты отправителя" shortname="Валюта отправителя" searchable="true" sortable="true" visible="true" link="currency"/>
|
||||||
<debitLeg_currencyCode field="debitLegCurrencyCode" type="12" name="Код валюты получателя" shortname="Валюта получателя" searchable="true" sortable="true" visible="true" link="currency"/>
|
<debitLeg_currencyCode field="debitLegCurrencyCode" type="12" name="Код валюты получателя" shortname="Валюта получателя" searchable="true" sortable="true" visible="true" link="currency"/>
|
||||||
<transactionStatus type="12" name="Cтатус транзакции" shortname="Статус" searchable="true" sortable="true" visible="true" link="transactionStatus"/>
|
<transactionStatus type="12" name="Cтатус транзакции" shortname="Статус" searchable="true" sortable="true" visible="true" link="transactionStatus" ignore="true"/>
|
||||||
<documentNumber type="2" length="255" name="Номер документа в сторонней системе" shortname="Номер РО" searchable="true" sortable="true"/>
|
<documentNumber type="2" length="255" name="Номер документа в сторонней системе" shortname="Номер РО" searchable="true" sortable="true"/>
|
||||||
<id type="1" name="Идентификатор записи" shortname="ID" searchable="true" sortable="true"/>
|
<id type="1" name="Идентификатор записи" shortname="ID" searchable="true" sortable="true"/>
|
||||||
<createdAt field="created" type="4" name="Дата и время создания записи" shortname="Создано" searchable="true" sortable="true" ignore="true"/>
|
<createdAt field="created" type="4" name="Дата и время создания записи" shortname="Создано" searchable="true" sortable="true" ignore="true"/>
|
||||||
|
|
|
||||||
|
|
@ -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 +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import org.springframework.stereotype.Service;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
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.LiabilitiesClaimsAssets;
|
||||||
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsMoney;
|
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsMoney;
|
||||||
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
|
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
|
||||||
|
|
@ -28,6 +29,8 @@ import java.util.*;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
todo использовать так:
|
todo использовать так:
|
||||||
paymentInstructionCreator.createAndSavePaymentInstructions()
|
paymentInstructionCreator.createAndSavePaymentInstructions()
|
||||||
|
|
@ -50,6 +53,7 @@ public class PaymentInstructionCreator {
|
||||||
protected final Imdg<Account> accountImdg;
|
protected final Imdg<Account> accountImdg;
|
||||||
protected final Imdg<PaymentInstruction> paymentInstructionImdg;
|
protected final Imdg<PaymentInstruction> paymentInstructionImdg;
|
||||||
protected final Imdg<LiabilitiesClaimsMoney> liabilitiesClaimsMoneyImdg;
|
protected final Imdg<LiabilitiesClaimsMoney> liabilitiesClaimsMoneyImdg;
|
||||||
|
protected final Imdg<ExecutionDeposit> executionDepositImdg;
|
||||||
|
|
||||||
protected AtomicLong documentNumberId = new AtomicLong(0L); // порядковый номер (сквозной по всем компаниям за день
|
protected AtomicLong documentNumberId = new AtomicLong(0L); // порядковый номер (сквозной по всем компаниям за день
|
||||||
protected LocalDate documentNumberResetAt;
|
protected LocalDate documentNumberResetAt;
|
||||||
|
|
@ -62,11 +66,13 @@ public class PaymentInstructionCreator {
|
||||||
this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
||||||
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
||||||
this.liabilitiesClaimsMoneyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsMoney, LiabilitiesClaimsMoney.class);
|
this.liabilitiesClaimsMoneyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsMoney, LiabilitiesClaimsMoney.class);
|
||||||
|
this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
|
||||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2.2.2. Выполнить Создание paymentInstruction по liabilitiesClaimsAssets
|
* 2.2.2. Выполнить Создание paymentInstruction по liabilitiesClaimsAssets
|
||||||
|
*
|
||||||
* @return Созданные PaymentInstruction, может быть несколько. Они уже сохранены в IMDG.
|
* @return Созданные PaymentInstruction, может быть несколько. Они уже сохранены в IMDG.
|
||||||
*/
|
*/
|
||||||
public List<PaymentInstruction> createAndSavePaymentInstructions(LiabilitiesClaimsAssets liabilitiesClaimsAssets,
|
public List<PaymentInstruction> createAndSavePaymentInstructions(LiabilitiesClaimsAssets liabilitiesClaimsAssets,
|
||||||
|
|
@ -109,13 +115,13 @@ public class PaymentInstructionCreator {
|
||||||
payment2.setSenderId(SPVB_ID); // СПВБ
|
payment2.setSenderId(SPVB_ID); // СПВБ
|
||||||
|
|
||||||
payment1.setAddresseeId(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.getSecurityId(), liabilitiesClaimsAssets.getCompanyId());
|
||||||
LiabilitiesClaimsAssets counterLiabilitiesClaimsAssets = liabilitiesClaimsAssetsImdg.getSingleObjectBySQL(sqlLCA);
|
ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA);
|
||||||
if (counterLiabilitiesClaimsAssets == null) {
|
if (counterExecutionDeposit == null) {
|
||||||
log.warn("Counter LiabilitiesClaimsAssets not found for : {}", sqlLCA);
|
log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA);
|
||||||
} else {
|
} else {
|
||||||
payment2.setAddresseeId(counterLiabilitiesClaimsAssets.getCompanyId());
|
payment2.setAddresseeId(counterExecutionDeposit.getCompanyId());
|
||||||
}
|
}
|
||||||
|
|
||||||
String symbol1 = selectSymbolValue(payment1.getAddresseeId(), CompanySymbol.BIC);
|
String symbol1 = selectSymbolValue(payment1.getAddresseeId(), CompanySymbol.BIC);
|
||||||
|
|
@ -233,13 +239,13 @@ public class PaymentInstructionCreator {
|
||||||
|
|
||||||
payment1.setSenderId(SPVB_ID); // СПВБ
|
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.getSecurityId(), liabilitiesClaimsAssets.getCompanyId());
|
||||||
LiabilitiesClaimsAssets counterLiabilitiesClaimsAssets = liabilitiesClaimsAssetsImdg.getSingleObjectBySQL(sqlLCA);
|
ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA);
|
||||||
if (counterLiabilitiesClaimsAssets == null) {
|
if (counterExecutionDeposit == null) {
|
||||||
log.warn("Counter LiabilitiesClaimsAssets not found for : {}", sqlLCA);
|
log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA);
|
||||||
} else {
|
} else {
|
||||||
payment1.setAddresseeId(counterLiabilitiesClaimsAssets.getCompanyId());
|
payment1.setAddresseeId(counterExecutionDeposit.getCompanyId());
|
||||||
}
|
}
|
||||||
|
|
||||||
String symbol1 = selectSymbolValue(payment1.getAddresseeId(), CompanySymbol.BIC);
|
String symbol1 = selectSymbolValue(payment1.getAddresseeId(), CompanySymbol.BIC);
|
||||||
|
|
@ -414,6 +420,9 @@ public class PaymentInstructionCreator {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String selectSymbolValue(Long companyId, CompanySymbol symbol) {
|
protected String selectSymbolValue(Long companyId, CompanySymbol symbol) {
|
||||||
|
if (companyId == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
CompanySymbols cSymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of(
|
CompanySymbols cSymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of(
|
||||||
"companyId", companyId,
|
"companyId", companyId,
|
||||||
"companySymbol", symbol.getKey()));
|
"companySymbol", symbol.getKey()));
|
||||||
|
|
@ -425,6 +434,9 @@ public class PaymentInstructionCreator {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Account selectAccount(Long companyId, AccountType accountType, Status accountStatus, Allowed processingSign) {
|
protected Account selectAccount(Long companyId, AccountType accountType, Status accountStatus, Allowed processingSign) {
|
||||||
|
if (companyId == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
Account account = accountImdg.getSingleObjectByFieldValues(Map.of(
|
Account account = accountImdg.getSingleObjectByFieldValues(Map.of(
|
||||||
"companyId", companyId,
|
"companyId", companyId,
|
||||||
"accountType", accountType.getKey(),
|
"accountType", accountType.getKey(),
|
||||||
|
|
@ -439,29 +451,31 @@ public class PaymentInstructionCreator {
|
||||||
* 2.2.2.1. Выполнить Изменение liabilitiesClaimsAssets по paymentInstruction.
|
* 2.2.2.1. Выполнить Изменение liabilitiesClaimsAssets по paymentInstruction.
|
||||||
*/
|
*/
|
||||||
public void updateFieldLiabilitiesClaimsAssetsByPayment(LiabilitiesClaimsAssets liabilitiesClaimsAssets,
|
public void updateFieldLiabilitiesClaimsAssetsByPayment(LiabilitiesClaimsAssets liabilitiesClaimsAssets,
|
||||||
List<PaymentInstruction> paymentInstructions,
|
List<PaymentInstruction> paymentInstructions,
|
||||||
Collection<ClearingCategory> clearingCategory) {
|
Collection<ClearingCategory> clearingCategory) {
|
||||||
AccountType accountType = IEnumKey.getEnumByKey(AccountType.class, liabilitiesClaimsAssets.getAccountType());
|
|
||||||
PaymentInstruction paymentIAny=paymentInstructions.iterator().next();
|
|
||||||
|
|
||||||
if ((clearingCategory.contains(ClearingCategory.I) && AccountType.Clrn.equals(accountType))
|
PaymentInstruction paymentIAny = paymentInstructions.iterator().next();
|
||||||
|| (clearingCategory.contains(ClearingCategory.V) && AccountType.Info.equals(accountType))) {
|
|
||||||
BigDecimal amount = paymentIAny.getCreditLegAmount() == null ? BigDecimal.ZERO : new BigDecimal(paymentIAny.getCreditLegAmount());
|
if (clearingCategory.contains(ClearingCategory.I) || clearingCategory.contains(ClearingCategory.V)) {
|
||||||
BigDecimal prevLQuantity = BigDecimalUtil.safeBD(liabilitiesClaimsAssets.getLiabilitiesQuantity());
|
BigDecimal amount = bdFromLongSafe(paymentIAny.getCreditLegAmount());
|
||||||
liabilitiesClaimsAssets.setLiabilitiesQuantity(prevLQuantity.subtract(amount));
|
// При обновлении (по 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) && AccountType.Clrn.equals(accountType)) {
|
if (clearingCategory.contains(ClearingCategory.B)) {
|
||||||
BigDecimal amount = paymentIAny.getCreditLegAmount() == null ? BigDecimal.ZERO : new BigDecimal(paymentIAny.getCreditLegAmount());
|
BigDecimal amount = bdFromLongSafe(paymentIAny.getCreditLegAmount());
|
||||||
|
// При обновлении (по paymentInstruction и категория B и счет CLRN): из paymentInstruction.creditLeg_amount
|
||||||
liabilitiesClaimsAssets.setLiabilitiesQuantity(amount);
|
liabilitiesClaimsAssets.setLiabilitiesQuantity(amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clearingCategory.contains(ClearingCategory.I) || clearingCategory.contains(ClearingCategory.V)) {
|
if (clearingCategory.contains(ClearingCategory.I) || clearingCategory.contains(ClearingCategory.V)) {
|
||||||
BigDecimal amount = new BigDecimal((Long)paymentIAny.getDebitLegAmount());
|
BigDecimal amount = bdFromLongSafe(paymentIAny.getDebitLegAmount());
|
||||||
liabilitiesClaimsAssets.setClaimsQuantity(amount);
|
liabilitiesClaimsAssets.setClaimsQuantity(amount);
|
||||||
}
|
}
|
||||||
if (clearingCategory.contains(ClearingCategory.B)) {
|
if (clearingCategory.contains(ClearingCategory.B)) {
|
||||||
BigDecimal amount = new BigDecimal((Long)paymentIAny.getDebitLegAmount());
|
BigDecimal amount = bdFromLongSafe(paymentIAny.getDebitLegAmount());
|
||||||
amount = liabilitiesClaimsAssets.getClaimsQuantity().subtract(amount);
|
amount = safeBD(liabilitiesClaimsAssets.getClaimsQuantity()).subtract(amount);
|
||||||
liabilitiesClaimsAssets.setClaimsQuantity(amount);
|
liabilitiesClaimsAssets.setClaimsQuantity(amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -478,56 +492,55 @@ 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,
|
||||||
List<PaymentInstruction> paymentInstructions,
|
boolean isFirstLeg,
|
||||||
Collection<ClearingCategory> clearingCategory) {
|
List<PaymentInstruction> paymentInstructions,
|
||||||
|
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(new BigDecimal((Long)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(new BigDecimal((Long)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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private BigDecimal bdFromLongSafe(Long l) {
|
||||||
|
if (l == null) return BigDecimal.ZERO;
|
||||||
|
return new BigDecimal(l);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue