Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/Clearing.java
This commit is contained in:
ialbert 2023-02-07 16:46:19 +03:00
commit 37e7ee1f2e
2 changed files with 106 additions and 59 deletions

View file

@ -226,4 +226,33 @@ public class LiabilitiesClaimsAssets extends BusinessObject {
this.refundPaymentId = value; this.refundPaymentId = value;
} }
@Override
public String toString() {
return "LiabilitiesClaimsAssets{" +
"companyId=" + companyId +
", clearingDate=" + clearingDate +
", accountId=" + accountId +
", accountType='" + accountType + '\'' +
", account='" + account + '\'' +
", liabilitiesQuantity=" + liabilitiesQuantity +
", claimsQuantity=" + claimsQuantity +
", currency='" + currency + '\'' +
", settlementDate=" + settlementDate +
", tradingDate=" + tradingDate +
", refundDate=" + refundDate +
", price=" + price +
", securityId=" + securityId +
", tradingCode='" + tradingCode + '\'' +
", clearingCode='" + clearingCode + '\'' +
", shortName='" + shortName + '\'' +
", contract='" + contract + '\'' +
", comment='" + comment + '\'' +
", fullName='" + fullName + '\'' +
", parentId=" + parentId +
", liabilitiesClaimsMoneyId=" + liabilitiesClaimsMoneyId +
", clearingStatus=" + clearingStatus +
", paymentId=" + paymentId +
", refundPaymentId=" + refundPaymentId +
'}';
}
} }

View file

@ -100,7 +100,7 @@ public class PaymentInstructionCreator {
// I // I
if (clearingCategory.contains(ClearingCategory.I)) { if (clearingCategory.contains(ClearingCategory.I)) {
log.debug("By liabilitiesClaimsAssets[{}] create for category I 1 record", liabilitiesClaimsAssets.getId()); log.debug("By liabilitiesClaimsAssets[{}] create for category I 2 PaymentInstruction record", liabilitiesClaimsAssets.getId());
PaymentInstruction payment1 = new PaymentInstruction(); PaymentInstruction payment1 = new PaymentInstruction();
PaymentInstruction payment2 = new PaymentInstruction(); PaymentInstruction payment2 = new PaymentInstruction();
@ -115,13 +115,16 @@ 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", {
liabilitiesClaimsAssets.getSecurityId(), liabilitiesClaimsAssets.getCompanyId()); String sqlLCA = String.format("securityId = %s and companyId != %s",
ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA); liabilitiesClaimsAssets.getSecurityId(), liabilitiesClaimsAssets.getCompanyId());
if (counterExecutionDeposit == null) { ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA);
log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA); if (counterExecutionDeposit == null) {
} else { log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA);
payment2.setAddresseeId(counterExecutionDeposit.getCompanyId()); } else {
payment2.setAddresseeId(counterExecutionDeposit.getCompanyId());
log.trace("payment2.AddresseeId={} found by: {}", payment2.getAddresseeId(), sqlLCA);
}
} }
String symbol1 = selectSymbolValue(payment1.getAddresseeId(), CompanySymbol.BIC); String symbol1 = selectSymbolValue(payment1.getAddresseeId(), CompanySymbol.BIC);
@ -140,7 +143,7 @@ public class PaymentInstructionCreator {
Company companyPRC = companyImdg.getSingleObjectByID(PRC_ID); // 2 "НКО АО ПРЦ" Company companyPRC = companyImdg.getSingleObjectByID(PRC_ID); // 2 "НКО АО ПРЦ"
String companyPRCName = null; String companyPRCName = null;
if (companyPRC == null) { if (companyPRC == null) {
log.warn("Company.id=2 not found"); log.warn("Company.id={} not found", PRC_ID);
} else { } else {
companyPRCName = companyPRC.getShortName(); companyPRCName = companyPRC.getShortName();
} }
@ -170,13 +173,14 @@ public class PaymentInstructionCreator {
payment2.setDebitLegAmount(amount); payment2.setDebitLegAmount(amount);
payment1.setCreditLegAccountId(liabilitiesClaimsAssets.getAccountId()); payment1.setCreditLegAccountId(liabilitiesClaimsAssets.getAccountId());
String accSql = String.format("companyId = %s AND accountType=TRAN AND accountStatus=ACTV AND processingSign=ALWD", {
payment2.getSenderId()); Account anotherAcc = selectAccount(payment2.getSenderId(), AccountType.Tran, Status.Active, Allowed.ALLOWED);
Account anotherAcc = accountImdg.getSingleObjectBySQL(accSql); if (anotherAcc == null) {
if (anotherAcc == null) { log.warn("Account not found: companyId = {} AND accountType={} AND accountStatus={} AND processingSign={}",
log.warn("Account not found: {}", accSql); payment2.getSenderId(), AccountType.Tran, Status.Active, Allowed.ALLOWED);
} else { } else {
payment2.setCreditLegAccountId(anotherAcc.getId()); payment2.setCreditLegAccountId(anotherAcc.getId());
}
} }
payment1.setCreditCsAccount(null); payment1.setCreditCsAccount(null);
@ -189,7 +193,7 @@ public class PaymentInstructionCreator {
} }
Account acc2 = accountImdg.getSingleObjectByID(payment2.getCreditLegAccountId()); Account acc2 = accountImdg.getSingleObjectByID(payment2.getCreditLegAccountId());
if (acc2 != null) { if (acc2 != null) {
payment1.setCreditLegAccount(acc2.getAccount()); payment2.setCreditLegAccount(acc2.getAccount());
} }
} }
@ -231,7 +235,7 @@ public class PaymentInstructionCreator {
} else { } else {
// V / B // V / B
if (clearingCategory.contains(ClearingCategory.V)) { if (clearingCategory.contains(ClearingCategory.V)) {
log.debug("By liabilitiesClaimsAssets[{}] create for category V 1 record", liabilitiesClaimsAssets.getId()); log.debug("By liabilitiesClaimsAssets[{}] create for category V 1 PaymentInstruction record", liabilitiesClaimsAssets.getId());
PaymentInstruction payment1 = new PaymentInstruction(); PaymentInstruction payment1 = new PaymentInstruction();
payment1.setId(idGenerator.nextId()); payment1.setId(idGenerator.nextId());
payment1.setCreated(now); payment1.setCreated(now);
@ -239,13 +243,16 @@ public class PaymentInstructionCreator {
payment1.setSenderId(SPVB_ID); // СПВБ payment1.setSenderId(SPVB_ID); // СПВБ
String sqlLCA = String.format("securityId = %s and companyId != %s", {
liabilitiesClaimsAssets.getSecurityId(), liabilitiesClaimsAssets.getCompanyId()); String sqlLCA = String.format("securityId = %s and companyId != %s",
ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA); liabilitiesClaimsAssets.getSecurityId(), liabilitiesClaimsAssets.getCompanyId());
if (counterExecutionDeposit == null) { ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA);
log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA); if (counterExecutionDeposit == null) {
} else { log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA);
payment1.setAddresseeId(counterExecutionDeposit.getCompanyId()); } else {
payment1.setAddresseeId(counterExecutionDeposit.getCompanyId());
log.trace("payment1.AddresseeId={} found by: {}", payment1.getAddresseeId(), sqlLCA);
}
} }
String symbol1 = selectSymbolValue(payment1.getAddresseeId(), CompanySymbol.BIC); String symbol1 = selectSymbolValue(payment1.getAddresseeId(), CompanySymbol.BIC);
@ -258,7 +265,7 @@ public class PaymentInstructionCreator {
Company companyPRC = companyImdg.getSingleObjectByID(PRC_ID); // 2 "НКО АО ПРЦ" Company companyPRC = companyImdg.getSingleObjectByID(PRC_ID); // 2 "НКО АО ПРЦ"
String companyPRCName = null; String companyPRCName = null;
if (companyPRC == null) { if (companyPRC == null) {
log.warn("Company.id=2 not found"); log.warn("Company.id={} not found", PRC_ID);
} else { } else {
companyPRCName = companyPRC.getShortName(); companyPRCName = companyPRC.getShortName();
} }
@ -280,11 +287,10 @@ public class PaymentInstructionCreator {
payment1.setDebitLegAmount(amount); payment1.setDebitLegAmount(amount);
{ {
String accSql = String.format("companyId = %s AND accountType=ANLT AND accountStatus=ACTV AND processingSign=ALWD", Account acc1 = selectAccount(payment1.getSenderId(), AccountType.Anlt, Status.Active, Allowed.ALLOWED);
payment1.getSenderId());
Account acc1 = accountImdg.getSingleObjectBySQL(accSql);
if (acc1 == null) { if (acc1 == null) {
log.warn("Account not found: {}", accSql); log.warn("Account not found: companyId = {} AND accountType={} AND accountStatus={} AND processingSign={}",
payment1.getSenderId(), AccountType.Anlt, Status.Active, Allowed.ALLOWED);
} else { } else {
payment1.setCreditLegAccountId(acc1.getId()); payment1.setCreditLegAccountId(acc1.getId());
payment1.setCreditLegAccount(acc1.getAccount()); payment1.setCreditLegAccount(acc1.getAccount());
@ -317,7 +323,7 @@ public class PaymentInstructionCreator {
newPaymentInstructions.add(payment1); newPaymentInstructions.add(payment1);
} else // Для V,B только 1 PaymentInstruction } else // Для V,B только 1 PaymentInstruction
if (clearingCategory.contains(ClearingCategory.B)) { if (clearingCategory.contains(ClearingCategory.B)) {
log.debug("By liabilitiesClaimsAssets[{}] create for category B 1 record", liabilitiesClaimsAssets.getId()); log.debug("By liabilitiesClaimsAssets[{}] create for category B 1 PaymentInstruction record", liabilitiesClaimsAssets.getId());
PaymentInstruction payment1 = new PaymentInstruction(); PaymentInstruction payment1 = new PaymentInstruction();
payment1.setId(idGenerator.nextId()); payment1.setId(idGenerator.nextId());
payment1.setCreated(now); payment1.setCreated(now);
@ -337,7 +343,7 @@ public class PaymentInstructionCreator {
Company companyPRC = companyImdg.getSingleObjectByID(PRC_ID); // 2 "НКО АО ПРЦ" Company companyPRC = companyImdg.getSingleObjectByID(PRC_ID); // 2 "НКО АО ПРЦ"
String companyPRCName = null; String companyPRCName = null;
if (companyPRC == null) { if (companyPRC == null) {
log.warn("Company.id=2 not found"); log.warn("Company.id={} not found", PRC_ID);
} else { } else {
companyPRCName = companyPRC.getShortName(); companyPRCName = companyPRC.getShortName();
} }
@ -359,11 +365,10 @@ public class PaymentInstructionCreator {
payment1.setDebitLegAmount(amount); payment1.setDebitLegAmount(amount);
{ {
String accSql = String.format("companyId = %s AND accountType=ANLT AND accountStatus=ACTV AND processingSign=ALWD", Long accountId = liabilitiesClaimsAssets.getAccountId();
payment1.getSenderId()); Account acc1 = accountImdg.getSingleObjectByID(accountId);
Account acc1 = accountImdg.getSingleObjectBySQL(accSql);
if (acc1 == null) { if (acc1 == null) {
log.warn("Account not found: {}", accSql); log.warn("Account not found: {}", accountId);
} else { } else {
payment1.setCreditLegAccountId(acc1.getId()); payment1.setCreditLegAccountId(acc1.getId());
payment1.setCreditLegAccount(acc1.getAccount()); payment1.setCreditLegAccount(acc1.getAccount());
@ -443,6 +448,15 @@ public class PaymentInstructionCreator {
"accountStatus", accountStatus.getKey(), "accountStatus", accountStatus.getKey(),
"processingSign", processingSign.getKey() "processingSign", processingSign.getKey()
)); ));
if (account == null) {
log.trace("Account not found by: companyId={} accountType={} accountStatus={} processingSign={}",
companyId, accountType.getKey(), accountStatus.getKey(), processingSign.getKey()
);
} else {
log.trace("Found Account.id={} by: companyId={} accountType={} accountStatus={} processingSign={}", account.getId(),
companyId, accountType.getKey(), accountStatus.getKey(), processingSign.getKey()
);
}
return account; return account;
} }
@ -451,33 +465,35 @@ 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,
LiabilitiesClaimsMoney liabilitiesClaimsMoney,
List<PaymentInstruction> paymentInstructions, List<PaymentInstruction> paymentInstructions,
Collection<ClearingCategory> clearingCategory) { Collection<ClearingCategory> clearingCategory) {
final boolean isFirstLeg = true;
final boolean isSecondLeg = !isFirstLeg;
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 = bdFromLongSafe(paymentIAny.getCreditLegAmount()); // BigDecimal amount = bdFromLongSafe(paymentIAny.getCreditLegAmount());
// При обновлении (по paymentInstruction и категория I и счет CLRN):=liabilitiesClaimsAssets.liabilitiesQuantity - paymentInstruction.creditLeg_amount //// При обновлении (по paymentInstruction и категория I и счет CLRN):=liabilitiesClaimsAssets.liabilitiesQuantity - paymentInstruction.creditLeg_amount
// При обновлении (по paymentInstruction и категория V и счет INFO):=liabilitiesClaimsAssets.liabilitiesQuantity - paymentInstruction.creditLeg_amount //// При обновлении (по paymentInstruction и категория V и счет INFO):=liabilitiesClaimsAssets.liabilitiesQuantity - paymentInstruction.creditLeg_amount
amount = liabilitiesClaimsAssets.getLiabilitiesQuantity().subtract(amount); // amount = liabilitiesClaimsAssets.getLiabilitiesQuantity().subtract(amount);
liabilitiesClaimsAssets.setLiabilitiesQuantity(amount); // liabilitiesClaimsAssets.setLiabilitiesQuantity(amount);
} // }
if (clearingCategory.contains(ClearingCategory.B)) { // if (clearingCategory.contains(ClearingCategory.B)) {
BigDecimal amount = bdFromLongSafe(paymentIAny.getCreditLegAmount()); // BigDecimal amount = bdFromLongSafe(paymentIAny.getCreditLegAmount());
// При обновлении (по paymentInstruction и категория B и счет CLRN): из paymentInstruction.creditLeg_amount // // При обновлении (по 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 = bdFromLongSafe(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 = bdFromLongSafe(paymentIAny.getDebitLegAmount()); // BigDecimal amount = bdFromLongSafe(paymentIAny.getDebitLegAmount());
amount = safeBD(liabilitiesClaimsAssets.getClaimsQuantity()).subtract(amount); // amount = safeBD(liabilitiesClaimsAssets.getClaimsQuantity()).subtract(amount);
liabilitiesClaimsAssets.setClaimsQuantity(amount); // liabilitiesClaimsAssets.setClaimsQuantity(amount);
} // }
// //на базе успешного/неуспешного изменения по paymentInstruction // //на базе успешного/неуспешного изменения по paymentInstruction
// if (TransactionStatus.fail.equalsByKey(paymentIAny.getTransactionStatus())) { // if (TransactionStatus.fail.equalsByKey(paymentIAny.getTransactionStatus())) {
@ -486,6 +502,8 @@ public class PaymentInstructionCreator {
// liabilitiesClaimsAssets.setClearingStatus(ClearingStatus.OK.getKey()); // liabilitiesClaimsAssets.setClearingStatus(ClearingStatus.OK.getKey());
// } // }
liabilitiesClaimsAssets.setLiabilitiesClaimsMoneyId(liabilitiesClaimsMoney.getId());
liabilitiesClaimsAssets.setPaymentId(paymentIAny.getId());
liabilitiesClaimsAssets.setUpdated(Instant.now()); liabilitiesClaimsAssets.setUpdated(Instant.now());
} }
@ -495,7 +513,7 @@ public class PaymentInstructionCreator {
* Обновление liabilitiesClaimsMoney первой/второй ноги по liabilitiesClaimsAssets * Обновление liabilitiesClaimsMoney первой/второй ноги по liabilitiesClaimsAssets
* *
* @param liabilitiesClaimsMoney обновить этот объект (firstLeg) * @param liabilitiesClaimsMoney обновить этот объект (firstLeg)
* @param isFirstLeg true - первая, false вторая * @param isFirstLeg true - первая, false вторая
* @param paymentInstructions * @param paymentInstructions
* @param clearingCategory * @param clearingCategory
* @return были внесены изменения в liabilitiesClaimsMoney * @return были внесены изменения в liabilitiesClaimsMoney