From 13be0ab47103730e93f0751323899a38e2c4a1bc Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 7 Feb 2023 18:34:27 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-189 --- .../ru/spcex/clearing/service/Clearing.java | 6 +++--- .../service/SdfCreatorBySTLDPayment.java | 10 ++++----- .../builder/PaymentInstructionCreator.java | 21 ++++++++++--------- .../ru/spcex/platform/enumeration/Side.java | 20 ++++++++++++++++++ 4 files changed, 38 insertions(+), 19 deletions(-) create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Side.java 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 922097155..9d64ba3bf 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 @@ -142,8 +142,8 @@ public class Clearing { //также необходимо установить статус DEND встречной сделке контрагента этой компании, которая выбирается из executionDeposit по ключу: //securityId И чтобы сделка была компании категории clearingMemberCategory.clearingMemberCategory ≠ той категории, сделка которой обрабатывается в настоящий момент. ExecutionDeposit matchedExecDeposit = executionDepositImdg.getSingleObjectBySQL( - "securityId = " + execDeposit.getSecurityId() - + " AND companyId != " + execDeposit.getCompanyId()); + "exchangeExecutionId = " + execDeposit.getExchangeExecutionId() + + " AND side != '" + execDeposit.getSide() + "'"); if (matchedExecDeposit != null) { matchedExecDeposit.setCoverageStatus(Allowed.DENIED.getKey()); matchedExecDeposit.setUpdated(Instant.now()); @@ -251,7 +251,7 @@ public class Clearing { liabilitiesClaimsAssetsImdg.update(lcaSecondLeg); log.trace("creating paymentInstructions"); - List paymentInstructions = paymentInstructionCreator.createAndSavePaymentInstructions(lcaFirstLeg, Collections.singleton(category)); + List paymentInstructions = paymentInstructionCreator.createAndSavePaymentInstructions(execDeposit, lcaFirstLeg, Collections.singleton(category)); paymentInstructionCreator.updateFieldLiabilitiesClaimsAssetsByPayment(lcaFirstLeg, lcmFirstLeg, paymentInstructions, Collections.singleton(category)); liabilitiesClaimsAssetsImdg.update(lcaFirstLeg); log.trace("update first leg LiabilitiesClaimsMoney by payment: {}", lcaFirstLeg); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/SdfCreatorBySTLDPayment.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/SdfCreatorBySTLDPayment.java index ebf91a6fe..8cec0b877 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/SdfCreatorBySTLDPayment.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/SdfCreatorBySTLDPayment.java @@ -22,6 +22,7 @@ import ru.spcex.platform.imdg.api.ImdgId; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.collection.Pair; import ru.spcex.platform.utils.enumeration.IEnumKey; +import ru.spcex.platform.utils.text.TextUtil; import java.util.*; import java.util.function.Function; @@ -181,12 +182,9 @@ public class SdfCreatorBySTLDPayment { ClearingCategory getClearingCategory(PaymentInstruction paymentInstruction) { ClearingMemberCategory category = clearingMemberCategoryImdg.getSingleObjectByFieldValues( Map.of("companyId", paymentInstruction.getSenderId())); - if (category == null) { - log.error("ClearingMemberCategory not found by paymentInstruction[{}].companyId={}", - paymentInstruction.getId(), paymentInstruction.getSenderId()); - return null; - } + String categoryKey = !TextUtil.isEmpty(category.getClearingMemberCategory()) + ? category.getClearingMemberCategory() : ""; return IEnumKey.getEnumByKeyOrUndefined(ClearingCategory.class, - category.getClearingMemberCategory()); + categoryKey); } } 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 0a5b9ab95..a46892ee2 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 @@ -12,22 +12,21 @@ import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsMoney; import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgId; import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.utils.enumeration.IEnumKey; -import ru.spcex.platform.utils.number.BigDecimalUtil; import ru.spcex.platform.utils.time.TimeUtil; import java.math.BigDecimal; import java.time.Instant; import java.time.LocalDate; import java.time.format.DateTimeFormatter; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicLong; -import java.util.stream.Collectors; import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; @@ -75,9 +74,9 @@ public class PaymentInstructionCreator { * * @return Созданные PaymentInstruction, может быть несколько. Они уже сохранены в IMDG. */ - public List createAndSavePaymentInstructions(LiabilitiesClaimsAssets liabilitiesClaimsAssets, + public List createAndSavePaymentInstructions(ExecutionDeposit executionDeposit, LiabilitiesClaimsAssets liabilitiesClaimsAssets, Collection clearingCategory) { - List newPaymentInstructions = createPaymentInstructions(liabilitiesClaimsAssets, clearingCategory); + List newPaymentInstructions = createPaymentInstructions(executionDeposit, liabilitiesClaimsAssets, clearingCategory); log.trace("Created {} PaymentInstruction by LiabilitiesClaimsAssets[{}]. Do save ti IMDG.", newPaymentInstructions.size(), liabilitiesClaimsAssets.getId()); for (PaymentInstruction instruction : newPaymentInstructions) { @@ -89,11 +88,13 @@ public class PaymentInstructionCreator { /** * Создаёт и сохраняет * + * + * @param executionDeposit * @param liabilitiesClaimsAssets * @param clearingCategory * @return */ - protected List createPaymentInstructions(LiabilitiesClaimsAssets liabilitiesClaimsAssets, + protected List createPaymentInstructions(ExecutionDeposit executionDeposit, LiabilitiesClaimsAssets liabilitiesClaimsAssets, Collection clearingCategory) { List newPaymentInstructions = new ArrayList<>(); Instant now = Instant.now(); @@ -116,8 +117,8 @@ public class PaymentInstructionCreator { payment1.setAddresseeId(SPVB_ID); // СПВБ { - String sqlLCA = String.format("securityId = %s and companyId != %s", - liabilitiesClaimsAssets.getSecurityId(), liabilitiesClaimsAssets.getCompanyId()); + String sqlLCA = String.format("exchangeExecutionId = %s and side != '%s'", + executionDeposit.getExchangeExecutionId(), executionDeposit.getSide()); ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA); if (counterExecutionDeposit == null) { log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA); diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Side.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Side.java new file mode 100644 index 000000000..d33888a93 --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Side.java @@ -0,0 +1,20 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +public enum Side implements IEnumKey { + BUY("B"), + SELL("S"), + ; + + private final String key; + + Side(String key) { + this.key = key; + } + + @Override + public String getKey() { + return key; + } +}