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 по ключу:
//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<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));
liabilitiesClaimsAssetsImdg.update(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.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);
}
}

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.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<PaymentInstruction> createAndSavePaymentInstructions(LiabilitiesClaimsAssets liabilitiesClaimsAssets,
public List<PaymentInstruction> createAndSavePaymentInstructions(ExecutionDeposit executionDeposit, LiabilitiesClaimsAssets liabilitiesClaimsAssets,
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.",
newPaymentInstructions.size(), liabilitiesClaimsAssets.getId());
for (PaymentInstruction instruction : newPaymentInstructions) {
@ -89,11 +88,13 @@ public class PaymentInstructionCreator {
/**
* Создаёт и сохраняет
*
*
* @param executionDeposit
* @param liabilitiesClaimsAssets
* @param clearingCategory
* @return
*/
protected List<PaymentInstruction> createPaymentInstructions(LiabilitiesClaimsAssets liabilitiesClaimsAssets,
protected List<PaymentInstruction> createPaymentInstructions(ExecutionDeposit executionDeposit, LiabilitiesClaimsAssets liabilitiesClaimsAssets,
Collection<ClearingCategory> clearingCategory) {
List<PaymentInstruction> 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);

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