forming payment instruction refactoring: common registry searches
This commit is contained in:
parent
e184c68be2
commit
2d37a2ec95
6 changed files with 118 additions and 232 deletions
|
|
@ -0,0 +1,73 @@
|
||||||
|
package ru.spcex.clearing.service;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.platform.enumeration.*;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.specific.RegistryAssetPredicate;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.specific.RegistryDm_tClrnPredicate;
|
||||||
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import static ru.spcex.platform.enumeration.RegistryTradingParams.DM_T;
|
||||||
|
import static ru.spcex.platform.enumeration.RegistryTradingParams.DM_X;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class RegistryManager {
|
||||||
|
private final Imdg<Registry> rgsImdg;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public RegistryManager(ImdgProvider imdgProvider) {
|
||||||
|
this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Optional<Registry> searchDmx(Registry rgs) {
|
||||||
|
String sqlCondition = String.format("(%s) and companyId = %d",
|
||||||
|
RegistryCodeSqlBuilder.getInstance(DM_X).build(),
|
||||||
|
rgs.getCounterPartyId());
|
||||||
|
Registry dmx = rgsImdg.getFirstObjectBySQL(sqlCondition);
|
||||||
|
return Optional.ofNullable(dmx);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Optional<Registry> searchDmtInfo(Registry rgs) {
|
||||||
|
String sqlCondition = String.format("(%s) and accountType='%s' and companyId = %d and counterPartyId = %d",
|
||||||
|
RegistryCodeSqlBuilder.getInstance(DM_T).build(),
|
||||||
|
AccountType.Info.getKey(),
|
||||||
|
rgs.getCompanyId(),
|
||||||
|
rgs.getCounterPartyId());
|
||||||
|
Registry dmt = rgsImdg.getFirstObjectBySQL(sqlCondition);
|
||||||
|
return Optional.ofNullable(dmt);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Optional<Registry> searchDmtClrn(Registry rgs) {
|
||||||
|
ImdgPredicate dmtClrnPrdct = RegistryDm_tClrnPredicate
|
||||||
|
.instance(rgs.getCompanyId(), rgs.getCounterPartyId())
|
||||||
|
.apply(rgsImdg);
|
||||||
|
Registry dmt = rgsImdg.getSingleObjectByPredicate(dmtClrnPrdct);
|
||||||
|
return Optional.ofNullable(dmt);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Optional<Registry> findRelatedAsset(Long tradingClearingRegistryId, Long companyId, RegistryTradingParams rgsCode) {
|
||||||
|
ImdgPredicate prdct = RegistryAssetPredicate
|
||||||
|
.instance(tradingClearingRegistryId, companyId, rgsCode)
|
||||||
|
.apply(rgsImdg);
|
||||||
|
return Optional.ofNullable(rgsImdg.getSingleObjectByPredicate(prdct));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean equalsByCode(RegistryTradingParams code, Registry rgs) {
|
||||||
|
return code.equalByRegistry(
|
||||||
|
IEnumKey.getEnumByKey(RegistryDesignation.class, rgs.getRegistryDesignation()),
|
||||||
|
IEnumKey.getEnumByKey(RegistryInstrumentType.class, rgs.getRegistryInstrumentType()),
|
||||||
|
IEnumKey.getEnumByKey(RegistryCapacity.class, rgs.getRegistryCapacity()),
|
||||||
|
IEnumKey.getEnumByKey(RegistryUnit.class, rgs.getRegistryUnit())
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -38,7 +38,6 @@ import ru.spcex.platform.utils.number.BigDecimalUtil;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
@ -353,7 +352,4 @@ public class FormingPaymentInstruction implements ISessionStage {
|
||||||
private BigDecimal safeBD(BigDecimal value) {
|
private BigDecimal safeBD(BigDecimal value) {
|
||||||
return value != null ? value : BigDecimal.ZERO;
|
return value != null ? value : BigDecimal.ZERO;
|
||||||
}
|
}
|
||||||
|
|
||||||
DateTimeFormatter payDateFormatter = DateTimeFormatter.ofPattern("dd.MM.yy");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
|
import ru.spcex.clearing.service.RegistryManager;
|
||||||
import ru.spcex.clearing.service.Sdf03Creator;
|
import ru.spcex.clearing.service.Sdf03Creator;
|
||||||
import ru.spcex.clearing.service.builder.PaymentInstructionBuilderFinalMkrDeals;
|
import ru.spcex.clearing.service.builder.PaymentInstructionBuilderFinalMkrDeals;
|
||||||
import ru.spcex.clearing.session.stage.ISessionStage;
|
import ru.spcex.clearing.session.stage.ISessionStage;
|
||||||
|
|
@ -31,7 +32,6 @@ 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.imdg.api.predicate.ImdgPredicate;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryAssetPredicate;
|
|
||||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||||
import ru.spcex.platform.utils.collection.Pair;
|
import ru.spcex.platform.utils.collection.Pair;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
|
|
@ -42,7 +42,6 @@ import ru.spcex.platform.utils.number.BigDecimalUtil;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
@ -68,10 +67,11 @@ public class FormingPaymentInstructionDealsFinalMkr implements ISessionStage {
|
||||||
private final Sdf03Creator sdf03Creator;
|
private final Sdf03Creator sdf03Creator;
|
||||||
private KafkaSender kafkaSender;
|
private KafkaSender kafkaSender;
|
||||||
private final IMessageResolver msgResolver = new SimpleMessageResolver();
|
private final IMessageResolver msgResolver = new SimpleMessageResolver();
|
||||||
|
private final RegistryManager rgsMng;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public FormingPaymentInstructionDealsFinalMkr(ImdgProvider imdgProvider,
|
public FormingPaymentInstructionDealsFinalMkr(ImdgProvider imdgProvider,
|
||||||
Sdf03Creator sdf03Creator, KafkaSender kafkaSender) {
|
Sdf03Creator sdf03Creator, KafkaSender kafkaSender, RegistryManager rgsMng) {
|
||||||
this.sdf03Creator = sdf03Creator;
|
this.sdf03Creator = sdf03Creator;
|
||||||
this.kafkaSender = kafkaSender;
|
this.kafkaSender = kafkaSender;
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
|
|
@ -83,6 +83,7 @@ public class FormingPaymentInstructionDealsFinalMkr implements ISessionStage {
|
||||||
this.sDf03Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf03, SDf03.class);
|
this.sDf03Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf03, SDf03.class);
|
||||||
this.sDf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
this.sDf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
||||||
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
||||||
|
this.rgsMng = rgsMng;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -145,7 +146,7 @@ public class FormingPaymentInstructionDealsFinalMkr implements ISessionStage {
|
||||||
Long groupId = group.getKey();
|
Long groupId = group.getKey();
|
||||||
Function<RegistryTradingParams, Registry> findByCode = rgsCode -> group.getValue()
|
Function<RegistryTradingParams, Registry> findByCode = rgsCode -> group.getValue()
|
||||||
.stream()
|
.stream()
|
||||||
.filter(rgs -> equalsByRegistry(rgsCode, rgs))
|
.filter(rgs -> RegistryManager.equalsByCode(rgsCode, rgs))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
//интересуют обязательства и требования по деньгам
|
//интересуют обязательства и требования по деньгам
|
||||||
|
|
@ -157,10 +158,10 @@ public class FormingPaymentInstructionDealsFinalMkr implements ISessionStage {
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
//изменение активов - блокируем средства беред отправкой sdf'ов
|
//изменение активов - блокируем средства беред отправкой sdf'ов
|
||||||
Optional<Registry> amfO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F);
|
Optional<Registry> amfO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F);
|
||||||
Optional<Registry> payerAmtO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T);
|
Optional<Registry> payerAmtO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T);
|
||||||
Optional<Registry> ambO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B);
|
Optional<Registry> ambO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B);
|
||||||
Optional<Registry> receiverAmtO = findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), AM_B);
|
Optional<Registry> receiverAmtO = rgsMng.findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), AM_B);
|
||||||
log.debug("changing A* registers based on LM_T.id={} and CM_T.id={} found AM*F.id={}, AM*T.id={}, AM*B.id={}, AM*B.id={}",
|
log.debug("changing A* registers based on LM_T.id={} and CM_T.id={} found AM*F.id={}, AM*T.id={}, AM*B.id={}, AM*B.id={}",
|
||||||
lm_t.getId(),
|
lm_t.getId(),
|
||||||
cm_t.getId(),
|
cm_t.getId(),
|
||||||
|
|
@ -230,13 +231,6 @@ public class FormingPaymentInstructionDealsFinalMkr implements ISessionStage {
|
||||||
registryImdg.update(rgs);
|
registryImdg.update(rgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<Registry> findRelatedAsset(Long tradingClearingRegistryId, Long companyId, RegistryTradingParams rgsCode) {
|
|
||||||
ImdgPredicate prdct = RegistryAssetPredicate
|
|
||||||
.instance(tradingClearingRegistryId, companyId, rgsCode)
|
|
||||||
.apply(registryImdg);
|
|
||||||
return Optional.ofNullable(registryImdg.getSingleObjectByPredicate(prdct));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sendSdfs(List<PaymentInstruction> formedPaymentInstructions) {
|
private void sendSdfs(List<PaymentInstruction> formedPaymentInstructions) {
|
||||||
List<SDf03> sDf03Created = new ArrayList<>();
|
List<SDf03> sDf03Created = new ArrayList<>();
|
||||||
List<SDf12> sDf12Created = new ArrayList<>();
|
List<SDf12> sDf12Created = new ArrayList<>();
|
||||||
|
|
@ -306,16 +300,4 @@ public class FormingPaymentInstructionDealsFinalMkr implements ISessionStage {
|
||||||
sDf12.setGenerationTime(Instant.now());
|
sDf12.setGenerationTime(Instant.now());
|
||||||
return sDf12;
|
return sDf12;
|
||||||
}
|
}
|
||||||
|
|
||||||
DateTimeFormatter payDateFormatter = DateTimeFormatter.ofPattern("dd.MM.yy");
|
|
||||||
|
|
||||||
private static boolean equalsByRegistry(RegistryTradingParams code, Registry rgs) {
|
|
||||||
return code.equalByRegistry(
|
|
||||||
IEnumKey.getEnumByKey(RegistryDesignation.class, rgs.getRegistryDesignation()),
|
|
||||||
IEnumKey.getEnumByKey(RegistryInstrumentType.class, rgs.getRegistryInstrumentType()),
|
|
||||||
IEnumKey.getEnumByKey(RegistryCapacity.class, rgs.getRegistryCapacity()),
|
|
||||||
IEnumKey.getEnumByKey(RegistryUnit.class, rgs.getRegistryUnit())
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
|
import ru.spcex.clearing.service.RegistryManager;
|
||||||
import ru.spcex.clearing.service.Sdf03Creator;
|
import ru.spcex.clearing.service.Sdf03Creator;
|
||||||
import ru.spcex.clearing.service.SpecifUtil;
|
import ru.spcex.clearing.service.SpecifUtil;
|
||||||
import ru.spcex.clearing.service.builder.PaymentInstructionBuilder;
|
import ru.spcex.clearing.service.builder.PaymentInstructionBuilder;
|
||||||
|
|
@ -26,14 +27,13 @@ import ru.spcex.clearing.session.stage.ISessionStage;
|
||||||
import ru.spcex.clearing.session.stage.StageResult;
|
import ru.spcex.clearing.session.stage.StageResult;
|
||||||
import ru.spcex.clearing.session.stage.Task;
|
import ru.spcex.clearing.session.stage.Task;
|
||||||
import ru.spcex.clearing.session.stage.task.FormingPaymentInstructionPayload;
|
import ru.spcex.clearing.session.stage.task.FormingPaymentInstructionPayload;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.AccountStatus;
|
||||||
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
|
import ru.spcex.platform.enumeration.Allowed;
|
||||||
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.imdg.api.predicate.ImdgPredicate;
|
|
||||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryAssetPredicate;
|
|
||||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryDm_tClrnPredicate;
|
|
||||||
import ru.spcex.platform.utils.collection.Pair;
|
import ru.spcex.platform.utils.collection.Pair;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
@ -45,8 +45,7 @@ import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static ru.spcex.platform.enumeration.RegistryTradingParams.AM_B;
|
import static ru.spcex.platform.enumeration.RegistryTradingParams.*;
|
||||||
import static ru.spcex.platform.enumeration.RegistryTradingParams.AM_T;
|
|
||||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
|
@ -64,75 +63,11 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
||||||
private final Imdg<SDf12> sDf12Imdg;
|
private final Imdg<SDf12> sDf12Imdg;
|
||||||
private final KafkaSender kafkaSender;
|
private final KafkaSender kafkaSender;
|
||||||
private final Sdf03Creator sdf03Creator;
|
private final Sdf03Creator sdf03Creator;
|
||||||
private final static RegistryTradingParams OS_T;
|
private final RegistryManager rgsMng;
|
||||||
private final static RegistryTradingParams OM_T;
|
|
||||||
private final static RegistryTradingParams TS_T;
|
|
||||||
private final static RegistryTradingParams TM_T;
|
|
||||||
private final static RegistryTradingParams DM_X;
|
|
||||||
private final static RegistryTradingParams DM_T;
|
|
||||||
private final static RegistryTradingParams AM_F;
|
|
||||||
private final static RegistryTradingParams CM_T;
|
|
||||||
private final static RegistryTradingParams LM_T;
|
|
||||||
private final static RegistryTradingParams CS_T;
|
|
||||||
private final static RegistryTradingParams LS_T;
|
|
||||||
static {
|
|
||||||
OS_T = new RegistryTradingParams(RegistryDesignation.O,
|
|
||||||
RegistryInstrumentType.S,
|
|
||||||
null,
|
|
||||||
RegistryUnit.T);
|
|
||||||
|
|
||||||
OM_T = new RegistryTradingParams(RegistryDesignation.O,
|
|
||||||
RegistryInstrumentType.M,
|
|
||||||
null,
|
|
||||||
RegistryUnit.T);
|
|
||||||
|
|
||||||
TS_T = new RegistryTradingParams(RegistryDesignation.T,
|
|
||||||
RegistryInstrumentType.S,
|
|
||||||
null,
|
|
||||||
RegistryUnit.T);
|
|
||||||
|
|
||||||
TM_T = new RegistryTradingParams(RegistryDesignation.T,
|
|
||||||
RegistryInstrumentType.M,
|
|
||||||
null,
|
|
||||||
RegistryUnit.T);
|
|
||||||
DM_X = new RegistryTradingParams(RegistryDesignation.D,
|
|
||||||
RegistryInstrumentType.M,
|
|
||||||
null,
|
|
||||||
RegistryUnit.X);
|
|
||||||
DM_T = new RegistryTradingParams(RegistryDesignation.D,
|
|
||||||
RegistryInstrumentType.M,
|
|
||||||
null,
|
|
||||||
RegistryUnit.T);
|
|
||||||
AM_F = new RegistryTradingParams(RegistryDesignation.A,
|
|
||||||
RegistryInstrumentType.M,
|
|
||||||
null,
|
|
||||||
RegistryUnit.F);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CM_T = new RegistryTradingParams(RegistryDesignation.C,
|
|
||||||
RegistryInstrumentType.M,
|
|
||||||
null,
|
|
||||||
RegistryUnit.T);
|
|
||||||
LM_T = new RegistryTradingParams(RegistryDesignation.L,
|
|
||||||
RegistryInstrumentType.M,
|
|
||||||
null,
|
|
||||||
RegistryUnit.T);
|
|
||||||
CS_T = new RegistryTradingParams(RegistryDesignation.C,
|
|
||||||
RegistryInstrumentType.S,
|
|
||||||
null,
|
|
||||||
RegistryUnit.T);
|
|
||||||
LS_T = new RegistryTradingParams(RegistryDesignation.L,
|
|
||||||
RegistryInstrumentType.S,
|
|
||||||
null,
|
|
||||||
RegistryUnit.T);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public FormingPaymentInstructionDepositReturn(ImdgProvider imdgProvider,
|
public FormingPaymentInstructionDepositReturn(ImdgProvider imdgProvider,
|
||||||
KafkaSender kafkaSender, Sdf03Creator sdf03Creator) {
|
KafkaSender kafkaSender, Sdf03Creator sdf03Creator, RegistryManager rgsMng) {
|
||||||
this.kafkaSender = kafkaSender;
|
this.kafkaSender = kafkaSender;
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||||
|
|
@ -144,6 +79,7 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
||||||
this.sDf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
this.sDf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
||||||
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
||||||
this.sdf03Creator = sdf03Creator;
|
this.sdf03Creator = sdf03Creator;
|
||||||
|
this.rgsMng = rgsMng;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -181,22 +117,22 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
||||||
ArrayList<PaymentInstruction> pmtCreated = new ArrayList<>();
|
ArrayList<PaymentInstruction> pmtCreated = new ArrayList<>();
|
||||||
for (Map.Entry<Long, List<Registry>> entry : registriesByGroup.entrySet()) {
|
for (Map.Entry<Long, List<Registry>> entry : registriesByGroup.entrySet()) {
|
||||||
List<Registry> groupRgs = entry.getValue();
|
List<Registry> groupRgs = entry.getValue();
|
||||||
Optional<Registry> lmtO = groupRgs.stream().filter(rgs -> equalByRgs(LM_T, rgs)).findFirst();
|
Optional<Registry> lmtO = groupRgs.stream().filter(rgs -> RegistryManager.equalsByCode(LM_T, rgs)).findFirst();
|
||||||
Optional<Registry> cmtO = groupRgs.stream().filter(rgs -> equalByRgs(CM_T, rgs)).findFirst();
|
Optional<Registry> cmtO = groupRgs.stream().filter(rgs -> RegistryManager.equalsByCode(CM_T, rgs)).findFirst();
|
||||||
if (lmtO.isEmpty() || cmtO.isEmpty()) {
|
if (lmtO.isEmpty() || cmtO.isEmpty()) {
|
||||||
log.error("LM*T or CM*T not found for group {}", entry.getKey());
|
log.error("LM*T or CM*T not found for group {}", entry.getKey());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Registry lm_t = lmtO.get(); //obligation by money
|
Registry lm_t = lmtO.get(); //obligation by money
|
||||||
Registry cm_t = cmtO.get();
|
Registry cm_t = cmtO.get();
|
||||||
Optional<Registry> dmx = searchDmx(lm_t);
|
Optional<Registry> dmx = rgsMng.searchDmx(lm_t);
|
||||||
if (dmx.isPresent()) {
|
if (dmx.isPresent()) {
|
||||||
log.debug("LM*T#id={}, DM*X#id={} found, no action needed for group {}, skipping liability",
|
log.debug("LM*T#id={}, DM*X#id={} found, no action needed for group {}, skipping liability",
|
||||||
lm_t.getId(), dmx.get().getId(), lm_t.getGroupId());
|
lm_t.getId(), dmx.get().getId(), lm_t.getGroupId());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<Registry> dmtInfo = searchDmtInfo(lm_t);
|
Optional<Registry> dmtInfo = rgsMng.searchDmtInfo(lm_t);
|
||||||
if (dmtInfo.isPresent()) {
|
if (dmtInfo.isPresent()) {
|
||||||
BigDecimal balance = safeBD(lm_t.getBalance()).add(safeBD(cm_t.getBalance())); //fixme????
|
BigDecimal balance = safeBD(lm_t.getBalance()).add(safeBD(cm_t.getBalance())); //fixme????
|
||||||
PaymentInstruction payInstr = createPaymentInstruction(List.of(lm_t, cm_t), balance, sessionId);
|
PaymentInstruction payInstr = createPaymentInstruction(List.of(lm_t, cm_t), balance, sessionId);
|
||||||
|
|
@ -206,7 +142,7 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<Registry> dmtClnr = searchDmtClrn(lm_t);
|
Optional<Registry> dmtClnr = rgsMng.searchDmtClrn(lm_t);
|
||||||
if (dmtClnr.isPresent()) {
|
if (dmtClnr.isPresent()) {
|
||||||
Account tranAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and processingSign = '%s'"
|
Account tranAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and processingSign = '%s'"
|
||||||
.formatted(AccountType.Tran.getKey(), AccountStatus.ACTIVE.getKey(), Allowed.ALLOWED.getKey()));
|
.formatted(AccountType.Tran.getKey(), AccountStatus.ACTIVE.getKey(), Allowed.ALLOWED.getKey()));
|
||||||
|
|
@ -217,10 +153,10 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
//изменение активов - блокируем средства беред отправкой sdf'ов
|
//изменение активов - блокируем средства беред отправкой sdf'ов
|
||||||
Optional<Registry> amfO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F);
|
Optional<Registry> amfO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F);
|
||||||
Optional<Registry> payerAmtO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T);
|
Optional<Registry> payerAmtO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T);
|
||||||
Optional<Registry> ambO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B);
|
Optional<Registry> ambO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B);
|
||||||
Optional<Registry> receiverAmtO = findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), AM_B);
|
Optional<Registry> receiverAmtO = rgsMng.findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), AM_B);
|
||||||
log.debug("changing A* registers based on LM_T.id={} and CM_T.id={} found AM*F.id={}, AM*T.id={}, AM*B.id={}, AM*B.id={}",
|
log.debug("changing A* registers based on LM_T.id={} and CM_T.id={} found AM*F.id={}, AM*T.id={}, AM*B.id={}, AM*B.id={}",
|
||||||
lm_t.getId(),
|
lm_t.getId(),
|
||||||
cm_t.getId(),
|
cm_t.getId(),
|
||||||
|
|
@ -270,51 +206,6 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
||||||
return stageResult;
|
return stageResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* fixme duplicate
|
|
||||||
* Если УК зачисляет средства на ТБС Инициатора
|
|
||||||
*/
|
|
||||||
private Optional<Registry> searchDmx(Registry rgs) {
|
|
||||||
String sqlCondition = String.format("(%s) and companyId = %d",
|
|
||||||
RegistryCodeSqlBuilder.getInstance(DM_X).build(),
|
|
||||||
rgs.getCounterPartyId());
|
|
||||||
Registry dmx = registryImdg.getFirstObjectBySQL(sqlCondition);
|
|
||||||
return Optional.ofNullable(dmx);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* fixme duplicate
|
|
||||||
* Если УК зачисляет средства на свой регистр на КС
|
|
||||||
*/
|
|
||||||
private Optional<Registry> searchDmtInfo(Registry rgs) {
|
|
||||||
String sqlCondition = String.format("(%s) and accountType='%s' and companyId = %d and counterPartyId = %d",
|
|
||||||
RegistryCodeSqlBuilder.getInstance(DM_T).build(),
|
|
||||||
AccountType.Info.getKey(),
|
|
||||||
rgs.getCompanyId(),
|
|
||||||
rgs.getCounterPartyId());
|
|
||||||
Registry dmt = registryImdg.getFirstObjectBySQL(sqlCondition);
|
|
||||||
return Optional.ofNullable(dmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* fixme duplicate
|
|
||||||
* Если УК зачисляет средства на свой ТБС
|
|
||||||
*/
|
|
||||||
private Optional<Registry> searchDmtClrn(Registry rgs) {
|
|
||||||
ImdgPredicate dmtClrnPrdct = RegistryDm_tClrnPredicate
|
|
||||||
.instance(rgs.getCompanyId(), rgs.getCounterPartyId())
|
|
||||||
.apply(registryImdg);
|
|
||||||
Registry dmt = registryImdg.getSingleObjectByPredicate(dmtClrnPrdct);
|
|
||||||
return Optional.ofNullable(dmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<Registry> findRelatedAsset(Long tradingClearingRegistryId, Long companyId, RegistryTradingParams rgsCode) {
|
|
||||||
ImdgPredicate prdct = RegistryAssetPredicate
|
|
||||||
.instance(tradingClearingRegistryId, companyId, rgsCode)
|
|
||||||
.apply(registryImdg);
|
|
||||||
return Optional.ofNullable(registryImdg.getSingleObjectByPredicate(prdct));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setUpdatedStoreInImdg(Registry rgs, Instant now) {
|
private void setUpdatedStoreInImdg(Registry rgs, Instant now) {
|
||||||
rgs.setUpdated(now);
|
rgs.setUpdated(now);
|
||||||
registryImdg.update(rgs);
|
registryImdg.update(rgs);
|
||||||
|
|
@ -426,14 +317,4 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
||||||
}
|
}
|
||||||
|
|
||||||
DateTimeFormatter payDateFormatter = DateTimeFormatter.ofPattern("dd.MM.yy");
|
DateTimeFormatter payDateFormatter = DateTimeFormatter.ofPattern("dd.MM.yy");
|
||||||
|
|
||||||
|
|
||||||
private static boolean equalByRgs(RegistryTradingParams rgsParams, Registry rgs) {
|
|
||||||
return rgsParams.equalByRegistry(
|
|
||||||
IEnumKey.getEnumByKey(RegistryDesignation.class, rgs.getRegistryDesignation()),
|
|
||||||
IEnumKey.getEnumByKey(RegistryInstrumentType.class, rgs.getRegistryInstrumentType()),
|
|
||||||
IEnumKey.getEnumByKey(RegistryCapacity.class, rgs.getRegistryCapacity()),
|
|
||||||
IEnumKey.getEnumByKey(RegistryUnit.class, rgs.getRegistryUnit())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
|
import ru.spcex.clearing.service.RegistryManager;
|
||||||
import ru.spcex.clearing.service.SpecifUtil;
|
import ru.spcex.clearing.service.SpecifUtil;
|
||||||
import ru.spcex.clearing.service.builder.PaymentInstructionBuilder;
|
import ru.spcex.clearing.service.builder.PaymentInstructionBuilder;
|
||||||
import ru.spcex.clearing.service.builder.PaymentInstructionBuilderFinalMkrDeals;
|
import ru.spcex.clearing.service.builder.PaymentInstructionBuilderFinalMkrDeals;
|
||||||
|
|
@ -32,9 +33,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.imdg.api.predicate.ImdgPredicate;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryAssetPredicate;
|
|
||||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryDm_tClrnPredicate;
|
|
||||||
import ru.spcex.platform.utils.collection.Pair;
|
import ru.spcex.platform.utils.collection.Pair;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
@ -64,10 +63,11 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
||||||
private Imdg<SDf03> sDf03Imdg;
|
private Imdg<SDf03> sDf03Imdg;
|
||||||
private Imdg<SDf12> sDf12Imdg;
|
private Imdg<SDf12> sDf12Imdg;
|
||||||
private KafkaSender kafkaSender;
|
private KafkaSender kafkaSender;
|
||||||
|
private final RegistryManager rgsMng;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public FormingPaymentInstructionReturnMkr(ImdgProvider imdgProvider,
|
public FormingPaymentInstructionReturnMkr(ImdgProvider imdgProvider,
|
||||||
KafkaSender kafkaSender) {
|
KafkaSender kafkaSender, RegistryManager rgsMng) {
|
||||||
this.kafkaSender = kafkaSender;
|
this.kafkaSender = kafkaSender;
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||||
|
|
@ -78,6 +78,7 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
||||||
this.sDf03Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf03, SDf03.class);
|
this.sDf03Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf03, SDf03.class);
|
||||||
this.sDf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
this.sDf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
||||||
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
||||||
|
this.rgsMng = rgsMng;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -141,13 +142,13 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
||||||
}
|
}
|
||||||
Registry lm_t = lmtO.get(); //obligation by money
|
Registry lm_t = lmtO.get(); //obligation by money
|
||||||
Registry cm_t = cmtO.get();
|
Registry cm_t = cmtO.get();
|
||||||
Optional<Registry> dmx = searchDmx(lm_t);
|
Optional<Registry> dmx = rgsMng.searchDmx(lm_t);
|
||||||
if (dmx.isPresent()) {
|
if (dmx.isPresent()) {
|
||||||
log.debug("LM*T#id={}, DM*X#id={} found, no action needed for group {}, skipping liability",
|
log.debug("LM*T#id={}, DM*X#id={} found, no action needed for group {}, skipping liability",
|
||||||
lm_t.getId(), dmx.get().getId(), lm_t.getGroupId());
|
lm_t.getId(), dmx.get().getId(), lm_t.getGroupId());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Optional<Registry> dmtClnr = searchDmtClrn(lm_t);
|
Optional<Registry> dmtClnr = rgsMng.searchDmtClrn(lm_t);
|
||||||
if (dmtClnr.isPresent()) {
|
if (dmtClnr.isPresent()) {
|
||||||
Account tranAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and processingSign = '%s'"
|
Account tranAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and processingSign = '%s'"
|
||||||
.formatted(AccountType.Tran.getKey(), AccountStatus.ACTIVE.getKey(), Allowed.ALLOWED.getKey()));
|
.formatted(AccountType.Tran.getKey(), AccountStatus.ACTIVE.getKey(), Allowed.ALLOWED.getKey()));
|
||||||
|
|
@ -158,10 +159,10 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
//изменение активов - блокируем средства беред отправкой sdf'ов
|
//изменение активов - блокируем средства беред отправкой sdf'ов
|
||||||
Optional<Registry> amfO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F);
|
Optional<Registry> amfO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F);
|
||||||
Optional<Registry> payerAmtO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T);
|
Optional<Registry> payerAmtO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T);
|
||||||
Optional<Registry> ambO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B);
|
Optional<Registry> ambO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B);
|
||||||
Optional<Registry> receiverAmtO = findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), AM_B);
|
Optional<Registry> receiverAmtO = rgsMng.findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), AM_B);
|
||||||
log.debug("changing A* registers based on LM_T.id={} and CM_T.id={} found AM*F.id={}, AM*T.id={}, AM*B.id={}, AM*B.id={}",
|
log.debug("changing A* registers based on LM_T.id={} and CM_T.id={} found AM*F.id={}, AM*T.id={}, AM*B.id={}, AM*B.id={}",
|
||||||
lm_t.getId(),
|
lm_t.getId(),
|
||||||
cm_t.getId(),
|
cm_t.getId(),
|
||||||
|
|
@ -209,32 +210,6 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
||||||
return stageResult;
|
return stageResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* fixme duplicate
|
|
||||||
*/
|
|
||||||
private Optional<Registry> searchDmx(Registry rgs) {
|
|
||||||
String sqlCondition = String.format("(%s) and companyId = %d",
|
|
||||||
RegistryCodeSqlBuilder.getInstance(DM_X).build(),
|
|
||||||
rgs.getCounterPartyId());
|
|
||||||
Registry dmx = registryImdg.getFirstObjectBySQL(sqlCondition);
|
|
||||||
return Optional.ofNullable(dmx);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<Registry> searchDmtClrn(Registry rgs) {
|
|
||||||
ImdgPredicate dmtClrnPrdct = RegistryDm_tClrnPredicate
|
|
||||||
.instance(rgs.getCompanyId(), rgs.getCounterPartyId())
|
|
||||||
.apply(registryImdg);
|
|
||||||
Registry dmt = registryImdg.getSingleObjectByPredicate(dmtClrnPrdct);
|
|
||||||
return Optional.ofNullable(dmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<Registry> findRelatedAsset(Long tradingClearingRegistryId, Long companyId, RegistryTradingParams rgsCode) {
|
|
||||||
ImdgPredicate prdct = RegistryAssetPredicate
|
|
||||||
.instance(tradingClearingRegistryId, companyId, rgsCode)
|
|
||||||
.apply(registryImdg);
|
|
||||||
return Optional.ofNullable(registryImdg.getSingleObjectByPredicate(prdct));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setUpdatedStoreInImdg(Registry rgs, Instant now) {
|
private void setUpdatedStoreInImdg(Registry rgs, Instant now) {
|
||||||
rgs.setUpdated(now);
|
rgs.setUpdated(now);
|
||||||
registryImdg.update(rgs);
|
registryImdg.update(rgs);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
|
import ru.spcex.clearing.service.RegistryManager;
|
||||||
import ru.spcex.clearing.service.Sdf03Creator;
|
import ru.spcex.clearing.service.Sdf03Creator;
|
||||||
import ru.spcex.clearing.service.builder.PaymentInstructionBuilderFinalMkrDeals;
|
import ru.spcex.clearing.service.builder.PaymentInstructionBuilderFinalMkrDeals;
|
||||||
import ru.spcex.clearing.session.stage.ISessionStage;
|
import ru.spcex.clearing.session.stage.ISessionStage;
|
||||||
|
|
@ -41,7 +42,6 @@ import ru.spcex.platform.utils.number.BigDecimalUtil;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
@ -67,10 +67,11 @@ public class FormingPaymentInstructionSecondaryT0 implements ISessionStage {
|
||||||
private KafkaSender kafkaSender;
|
private KafkaSender kafkaSender;
|
||||||
private final Sdf03Creator sdf03Creator;
|
private final Sdf03Creator sdf03Creator;
|
||||||
private final IMessageResolver msgResolver = new SimpleMessageResolver();
|
private final IMessageResolver msgResolver = new SimpleMessageResolver();
|
||||||
|
private final RegistryManager rgsMng;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public FormingPaymentInstructionSecondaryT0(ImdgProvider imdgProvider,
|
public FormingPaymentInstructionSecondaryT0(ImdgProvider imdgProvider,
|
||||||
KafkaSender kafkaSender, Sdf03Creator sdf03Creator) {
|
KafkaSender kafkaSender, Sdf03Creator sdf03Creator, RegistryManager rgsMng) {
|
||||||
this.kafkaSender = kafkaSender;
|
this.kafkaSender = kafkaSender;
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||||
|
|
@ -82,6 +83,7 @@ public class FormingPaymentInstructionSecondaryT0 implements ISessionStage {
|
||||||
this.sDf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
this.sDf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
||||||
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
||||||
this.sdf03Creator = sdf03Creator;
|
this.sdf03Creator = sdf03Creator;
|
||||||
|
this.rgsMng = rgsMng;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -142,7 +144,7 @@ public class FormingPaymentInstructionSecondaryT0 implements ISessionStage {
|
||||||
Long groupId = group.getKey();
|
Long groupId = group.getKey();
|
||||||
Function<RegistryTradingParams, Registry> findByCode = rgsCode -> group.getValue()
|
Function<RegistryTradingParams, Registry> findByCode = rgsCode -> group.getValue()
|
||||||
.stream()
|
.stream()
|
||||||
.filter(rgs -> equalsByRegistry(rgsCode, rgs))
|
.filter(rgs -> RegistryManager.equalsByCode(rgsCode, rgs))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
//интересуют обязательства и требования по деньгам
|
//интересуют обязательства и требования по деньгам
|
||||||
|
|
@ -154,10 +156,10 @@ public class FormingPaymentInstructionSecondaryT0 implements ISessionStage {
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
//изменение активов - блокируем средства беред отправкой sdf'ов
|
//изменение активов - блокируем средства беред отправкой sdf'ов
|
||||||
Optional<Registry> amfO = findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_F);
|
Optional<Registry> amfO = rgsMng.findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_F);
|
||||||
Optional<Registry> payerAmtO = findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_T);
|
Optional<Registry> payerAmtO = rgsMng.findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_T);
|
||||||
Optional<Registry> ambO = findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_B);
|
Optional<Registry> ambO = rgsMng.findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_B);
|
||||||
Optional<Registry> receiverAmtO = findRelatedAsset(cs_t.getTradingClearingRegistryId(), cs_t.getCompanyId(), AS_B);
|
Optional<Registry> receiverAmtO = rgsMng.findRelatedAsset(cs_t.getTradingClearingRegistryId(), cs_t.getCompanyId(), AS_B);
|
||||||
log.debug("changing A* registers based on LM_T.id={} and CM_T.id={} found AM*F.id={}, AM*T.id={}, AM*B.id={}, AM*B.id={}",
|
log.debug("changing A* registers based on LM_T.id={} and CM_T.id={} found AM*F.id={}, AM*T.id={}, AM*B.id={}, AM*B.id={}",
|
||||||
ls_t.getId(),
|
ls_t.getId(),
|
||||||
cs_t.getId(),
|
cs_t.getId(),
|
||||||
|
|
@ -223,17 +225,6 @@ public class FormingPaymentInstructionSecondaryT0 implements ISessionStage {
|
||||||
registryImdg.update(rgs);
|
registryImdg.update(rgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<Registry> findRelatedAsset(Long tradingClearingRegistryId, Long companyId, RegistryTradingParams rgsCode) {
|
|
||||||
ImdgPredicateBuilder rgsPrdBldr = registryImdg.predicateBuilder();
|
|
||||||
RegistryCodeSqlBuilder codeSql = RegistryCodeSqlBuilder.getInstance(rgsCode);
|
|
||||||
ImdgPredicate assetCondition = rgsPrdBldr.and(
|
|
||||||
rgsPrdBldr.equals("tradingClearingRegistryId", tradingClearingRegistryId),
|
|
||||||
rgsPrdBldr.equals("companyId", companyId),
|
|
||||||
rgsPrdBldr.sql(codeSql.build())
|
|
||||||
);
|
|
||||||
return Optional.ofNullable(registryImdg.getSingleObjectByPredicate(assetCondition));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sendSdfs(List<PaymentInstruction> formedPaymentInstructions) {
|
private void sendSdfs(List<PaymentInstruction> formedPaymentInstructions) {
|
||||||
List<SDf03> sDf03Created = new ArrayList<>();
|
List<SDf03> sDf03Created = new ArrayList<>();
|
||||||
List<SDf12> sDf12Created = new ArrayList<>();
|
List<SDf12> sDf12Created = new ArrayList<>();
|
||||||
|
|
@ -302,16 +293,4 @@ public class FormingPaymentInstructionSecondaryT0 implements ISessionStage {
|
||||||
sDf12.setGenerationTime(Instant.now());
|
sDf12.setGenerationTime(Instant.now());
|
||||||
return sDf12;
|
return sDf12;
|
||||||
}
|
}
|
||||||
|
|
||||||
DateTimeFormatter payDateFormatter = DateTimeFormatter.ofPattern("dd.MM.yy");
|
|
||||||
|
|
||||||
private static boolean equalsByRegistry(RegistryTradingParams code, Registry rgs) {
|
|
||||||
return code.equalByRegistry(
|
|
||||||
IEnumKey.getEnumByKey(RegistryDesignation.class, rgs.getRegistryDesignation()),
|
|
||||||
IEnumKey.getEnumByKey(RegistryInstrumentType.class, rgs.getRegistryInstrumentType()),
|
|
||||||
IEnumKey.getEnumByKey(RegistryCapacity.class, rgs.getRegistryCapacity()),
|
|
||||||
IEnumKey.getEnumByKey(RegistryUnit.class, rgs.getRegistryUnit())
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue