ialbert 2023-02-07 18:34:27 +03:00
parent 8a41f93e19
commit 13be0ab471
4 changed files with 38 additions and 19 deletions

View file

@ -142,8 +142,8 @@ public class Clearing {
//также необходимо установить статус DEND встречной сделке контрагента этой компании, которая выбирается из executionDeposit по ключу: //также необходимо установить статус DEND встречной сделке контрагента этой компании, которая выбирается из executionDeposit по ключу:
//securityId И чтобы сделка была компании категории clearingMemberCategory.clearingMemberCategory ≠ той категории, сделка которой обрабатывается в настоящий момент. //securityId И чтобы сделка была компании категории clearingMemberCategory.clearingMemberCategory ≠ той категории, сделка которой обрабатывается в настоящий момент.
ExecutionDeposit matchedExecDeposit = executionDepositImdg.getSingleObjectBySQL( ExecutionDeposit matchedExecDeposit = executionDepositImdg.getSingleObjectBySQL(
"securityId = " + execDeposit.getSecurityId() "exchangeExecutionId = " + execDeposit.getExchangeExecutionId()
+ " AND companyId != " + execDeposit.getCompanyId()); + " AND side != '" + execDeposit.getSide() + "'");
if (matchedExecDeposit != null) { if (matchedExecDeposit != null) {
matchedExecDeposit.setCoverageStatus(Allowed.DENIED.getKey()); matchedExecDeposit.setCoverageStatus(Allowed.DENIED.getKey());
matchedExecDeposit.setUpdated(Instant.now()); matchedExecDeposit.setUpdated(Instant.now());
@ -251,7 +251,7 @@ public class Clearing {
liabilitiesClaimsAssetsImdg.update(lcaSecondLeg); liabilitiesClaimsAssetsImdg.update(lcaSecondLeg);
log.trace("creating paymentInstructions"); log.trace("creating paymentInstructions");
List<PaymentInstruction> paymentInstructions = paymentInstructionCreator.createAndSavePaymentInstructions(lcaFirstLeg, Collections.singleton(category)); List<PaymentInstruction> paymentInstructions = paymentInstructionCreator.createAndSavePaymentInstructions(execDeposit, lcaFirstLeg, Collections.singleton(category));
paymentInstructionCreator.updateFieldLiabilitiesClaimsAssetsByPayment(lcaFirstLeg, lcmFirstLeg, paymentInstructions, Collections.singleton(category)); paymentInstructionCreator.updateFieldLiabilitiesClaimsAssetsByPayment(lcaFirstLeg, lcmFirstLeg, paymentInstructions, Collections.singleton(category));
liabilitiesClaimsAssetsImdg.update(lcaFirstLeg); liabilitiesClaimsAssetsImdg.update(lcaFirstLeg);
log.trace("update first leg LiabilitiesClaimsMoney by payment: {}", lcaFirstLeg); log.trace("update first leg LiabilitiesClaimsMoney by payment: {}", lcaFirstLeg);

View file

@ -22,6 +22,7 @@ import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.collection.Pair; import ru.spcex.platform.utils.collection.Pair;
import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.text.TextUtil;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
@ -181,12 +182,9 @@ public class SdfCreatorBySTLDPayment {
ClearingCategory getClearingCategory(PaymentInstruction paymentInstruction) { ClearingCategory getClearingCategory(PaymentInstruction paymentInstruction) {
ClearingMemberCategory category = clearingMemberCategoryImdg.getSingleObjectByFieldValues( ClearingMemberCategory category = clearingMemberCategoryImdg.getSingleObjectByFieldValues(
Map.of("companyId", paymentInstruction.getSenderId())); Map.of("companyId", paymentInstruction.getSenderId()));
if (category == null) { String categoryKey = !TextUtil.isEmpty(category.getClearingMemberCategory())
log.error("ClearingMemberCategory not found by paymentInstruction[{}].companyId={}", ? category.getClearingMemberCategory() : "";
paymentInstruction.getId(), paymentInstruction.getSenderId());
return null;
}
return IEnumKey.getEnumByKeyOrUndefined(ClearingCategory.class, return IEnumKey.getEnumByKeyOrUndefined(ClearingCategory.class,
category.getClearingMemberCategory()); categoryKey);
} }
} }

View file

@ -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.liabilities.LiabilitiesClaimsMoney;
import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import ru.spcex.platform.enumeration.*; import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId; import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider; 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 ru.spcex.platform.utils.time.TimeUtil;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; 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.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
@ -75,9 +74,9 @@ public class PaymentInstructionCreator {
* *
* @return Созданные PaymentInstruction, может быть несколько. Они уже сохранены в IMDG. * @return Созданные PaymentInstruction, может быть несколько. Они уже сохранены в IMDG.
*/ */
public List<PaymentInstruction> createAndSavePaymentInstructions(LiabilitiesClaimsAssets liabilitiesClaimsAssets, public List<PaymentInstruction> createAndSavePaymentInstructions(ExecutionDeposit executionDeposit, LiabilitiesClaimsAssets liabilitiesClaimsAssets,
Collection<ClearingCategory> clearingCategory) { Collection<ClearingCategory> clearingCategory) {
List<PaymentInstruction> newPaymentInstructions = createPaymentInstructions(liabilitiesClaimsAssets, clearingCategory); List<PaymentInstruction> newPaymentInstructions = createPaymentInstructions(executionDeposit, liabilitiesClaimsAssets, clearingCategory);
log.trace("Created {} PaymentInstruction by LiabilitiesClaimsAssets[{}]. Do save ti IMDG.", log.trace("Created {} PaymentInstruction by LiabilitiesClaimsAssets[{}]. Do save ti IMDG.",
newPaymentInstructions.size(), liabilitiesClaimsAssets.getId()); newPaymentInstructions.size(), liabilitiesClaimsAssets.getId());
for (PaymentInstruction instruction : newPaymentInstructions) { for (PaymentInstruction instruction : newPaymentInstructions) {
@ -89,11 +88,13 @@ public class PaymentInstructionCreator {
/** /**
* Создаёт и сохраняет * Создаёт и сохраняет
* *
*
* @param executionDeposit
* @param liabilitiesClaimsAssets * @param liabilitiesClaimsAssets
* @param clearingCategory * @param clearingCategory
* @return * @return
*/ */
protected List<PaymentInstruction> createPaymentInstructions(LiabilitiesClaimsAssets liabilitiesClaimsAssets, protected List<PaymentInstruction> createPaymentInstructions(ExecutionDeposit executionDeposit, LiabilitiesClaimsAssets liabilitiesClaimsAssets,
Collection<ClearingCategory> clearingCategory) { Collection<ClearingCategory> clearingCategory) {
List<PaymentInstruction> newPaymentInstructions = new ArrayList<>(); List<PaymentInstruction> newPaymentInstructions = new ArrayList<>();
Instant now = Instant.now(); Instant now = Instant.now();
@ -116,8 +117,8 @@ public class PaymentInstructionCreator {
payment1.setAddresseeId(SPVB_ID); // СПВБ payment1.setAddresseeId(SPVB_ID); // СПВБ
{ {
String sqlLCA = String.format("securityId = %s and companyId != %s", String sqlLCA = String.format("exchangeExecutionId = %s and side != '%s'",
liabilitiesClaimsAssets.getSecurityId(), liabilitiesClaimsAssets.getCompanyId()); executionDeposit.getExchangeExecutionId(), executionDeposit.getSide());
ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA); ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA);
if (counterExecutionDeposit == null) { if (counterExecutionDeposit == null) {
log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA); log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA);

View file

@ -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;
}
}