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.time.Instant;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
|
@ -353,7 +352,4 @@ public class FormingPaymentInstruction implements ISessionStage {
|
|||
private BigDecimal safeBD(BigDecimal value) {
|
||||
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.importexport.SwtExporterRequest;
|
||||
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.builder.PaymentInstructionBuilderFinalMkrDeals;
|
||||
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.predicate.ImdgPredicate;
|
||||
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.utils.collection.Pair;
|
||||
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.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
|
@ -68,10 +67,11 @@ public class FormingPaymentInstructionDealsFinalMkr implements ISessionStage {
|
|||
private final Sdf03Creator sdf03Creator;
|
||||
private KafkaSender kafkaSender;
|
||||
private final IMessageResolver msgResolver = new SimpleMessageResolver();
|
||||
private final RegistryManager rgsMng;
|
||||
|
||||
@Autowired
|
||||
public FormingPaymentInstructionDealsFinalMkr(ImdgProvider imdgProvider,
|
||||
Sdf03Creator sdf03Creator, KafkaSender kafkaSender) {
|
||||
Sdf03Creator sdf03Creator, KafkaSender kafkaSender, RegistryManager rgsMng) {
|
||||
this.sdf03Creator = sdf03Creator;
|
||||
this.kafkaSender = kafkaSender;
|
||||
this.imdgProvider = imdgProvider;
|
||||
|
|
@ -83,6 +83,7 @@ public class FormingPaymentInstructionDealsFinalMkr implements ISessionStage {
|
|||
this.sDf03Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf03, SDf03.class);
|
||||
this.sDf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
||||
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
||||
this.rgsMng = rgsMng;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -145,7 +146,7 @@ public class FormingPaymentInstructionDealsFinalMkr implements ISessionStage {
|
|||
Long groupId = group.getKey();
|
||||
Function<RegistryTradingParams, Registry> findByCode = rgsCode -> group.getValue()
|
||||
.stream()
|
||||
.filter(rgs -> equalsByRegistry(rgsCode, rgs))
|
||||
.filter(rgs -> RegistryManager.equalsByCode(rgsCode, rgs))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
//интересуют обязательства и требования по деньгам
|
||||
|
|
@ -157,10 +158,10 @@ public class FormingPaymentInstructionDealsFinalMkr implements ISessionStage {
|
|||
}
|
||||
{
|
||||
//изменение активов - блокируем средства беред отправкой sdf'ов
|
||||
Optional<Registry> amfO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F);
|
||||
Optional<Registry> payerAmtO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T);
|
||||
Optional<Registry> ambO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B);
|
||||
Optional<Registry> receiverAmtO = findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), AM_B);
|
||||
Optional<Registry> amfO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F);
|
||||
Optional<Registry> payerAmtO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T);
|
||||
Optional<Registry> ambO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_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={}",
|
||||
lm_t.getId(),
|
||||
cm_t.getId(),
|
||||
|
|
@ -230,13 +231,6 @@ public class FormingPaymentInstructionDealsFinalMkr implements ISessionStage {
|
|||
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) {
|
||||
List<SDf03> sDf03Created = new ArrayList<>();
|
||||
List<SDf12> sDf12Created = new ArrayList<>();
|
||||
|
|
@ -306,16 +300,4 @@ public class FormingPaymentInstructionDealsFinalMkr implements ISessionStage {
|
|||
sDf12.setGenerationTime(Instant.now());
|
||||
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.cud.balance.ExportToFileRequest;
|
||||
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.SpecifUtil;
|
||||
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.Task;
|
||||
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.ImdgId;
|
||||
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.collection.Pair;
|
||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
|
@ -45,8 +45,7 @@ import java.time.format.DateTimeFormatter;
|
|||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static ru.spcex.platform.enumeration.RegistryTradingParams.AM_B;
|
||||
import static ru.spcex.platform.enumeration.RegistryTradingParams.AM_T;
|
||||
import static ru.spcex.platform.enumeration.RegistryTradingParams.*;
|
||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||
|
||||
@Service
|
||||
|
|
@ -64,75 +63,11 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
|||
private final Imdg<SDf12> sDf12Imdg;
|
||||
private final KafkaSender kafkaSender;
|
||||
private final Sdf03Creator sdf03Creator;
|
||||
private final static RegistryTradingParams OS_T;
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
private final RegistryManager rgsMng;
|
||||
|
||||
@Autowired
|
||||
public FormingPaymentInstructionDepositReturn(ImdgProvider imdgProvider,
|
||||
KafkaSender kafkaSender, Sdf03Creator sdf03Creator) {
|
||||
KafkaSender kafkaSender, Sdf03Creator sdf03Creator, RegistryManager rgsMng) {
|
||||
this.kafkaSender = kafkaSender;
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||
|
|
@ -144,6 +79,7 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
|||
this.sDf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
||||
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
||||
this.sdf03Creator = sdf03Creator;
|
||||
this.rgsMng = rgsMng;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -181,22 +117,22 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
|||
ArrayList<PaymentInstruction> pmtCreated = new ArrayList<>();
|
||||
for (Map.Entry<Long, List<Registry>> entry : registriesByGroup.entrySet()) {
|
||||
List<Registry> groupRgs = entry.getValue();
|
||||
Optional<Registry> lmtO = groupRgs.stream().filter(rgs -> equalByRgs(LM_T, rgs)).findFirst();
|
||||
Optional<Registry> cmtO = groupRgs.stream().filter(rgs -> equalByRgs(CM_T, rgs)).findFirst();
|
||||
Optional<Registry> lmtO = groupRgs.stream().filter(rgs -> RegistryManager.equalsByCode(LM_T, rgs)).findFirst();
|
||||
Optional<Registry> cmtO = groupRgs.stream().filter(rgs -> RegistryManager.equalsByCode(CM_T, rgs)).findFirst();
|
||||
if (lmtO.isEmpty() || cmtO.isEmpty()) {
|
||||
log.error("LM*T or CM*T not found for group {}", entry.getKey());
|
||||
continue;
|
||||
}
|
||||
Registry lm_t = lmtO.get(); //obligation by money
|
||||
Registry cm_t = cmtO.get();
|
||||
Optional<Registry> dmx = searchDmx(lm_t);
|
||||
Optional<Registry> dmx = rgsMng.searchDmx(lm_t);
|
||||
if (dmx.isPresent()) {
|
||||
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());
|
||||
continue;
|
||||
}
|
||||
|
||||
Optional<Registry> dmtInfo = searchDmtInfo(lm_t);
|
||||
Optional<Registry> dmtInfo = rgsMng.searchDmtInfo(lm_t);
|
||||
if (dmtInfo.isPresent()) {
|
||||
BigDecimal balance = safeBD(lm_t.getBalance()).add(safeBD(cm_t.getBalance())); //fixme????
|
||||
PaymentInstruction payInstr = createPaymentInstruction(List.of(lm_t, cm_t), balance, sessionId);
|
||||
|
|
@ -206,7 +142,7 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
|||
continue;
|
||||
}
|
||||
|
||||
Optional<Registry> dmtClnr = searchDmtClrn(lm_t);
|
||||
Optional<Registry> dmtClnr = rgsMng.searchDmtClrn(lm_t);
|
||||
if (dmtClnr.isPresent()) {
|
||||
Account tranAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and processingSign = '%s'"
|
||||
.formatted(AccountType.Tran.getKey(), AccountStatus.ACTIVE.getKey(), Allowed.ALLOWED.getKey()));
|
||||
|
|
@ -217,10 +153,10 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
|||
}
|
||||
{
|
||||
//изменение активов - блокируем средства беред отправкой sdf'ов
|
||||
Optional<Registry> amfO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F);
|
||||
Optional<Registry> payerAmtO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T);
|
||||
Optional<Registry> ambO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B);
|
||||
Optional<Registry> receiverAmtO = findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), AM_B);
|
||||
Optional<Registry> amfO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F);
|
||||
Optional<Registry> payerAmtO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T);
|
||||
Optional<Registry> ambO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_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={}",
|
||||
lm_t.getId(),
|
||||
cm_t.getId(),
|
||||
|
|
@ -270,51 +206,6 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
|||
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) {
|
||||
rgs.setUpdated(now);
|
||||
registryImdg.update(rgs);
|
||||
|
|
@ -426,14 +317,4 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
|||
}
|
||||
|
||||
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.importexport.SwtExporterRequest;
|
||||
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.builder.PaymentInstructionBuilder;
|
||||
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.predicate.ImdgPredicate;
|
||||
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.RegistryDm_tClrnPredicate;
|
||||
import ru.spcex.platform.utils.collection.Pair;
|
||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
|
@ -64,10 +63,11 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
|||
private Imdg<SDf03> sDf03Imdg;
|
||||
private Imdg<SDf12> sDf12Imdg;
|
||||
private KafkaSender kafkaSender;
|
||||
private final RegistryManager rgsMng;
|
||||
|
||||
@Autowired
|
||||
public FormingPaymentInstructionReturnMkr(ImdgProvider imdgProvider,
|
||||
KafkaSender kafkaSender) {
|
||||
KafkaSender kafkaSender, RegistryManager rgsMng) {
|
||||
this.kafkaSender = kafkaSender;
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||
|
|
@ -78,6 +78,7 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
|||
this.sDf03Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf03, SDf03.class);
|
||||
this.sDf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
||||
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
||||
this.rgsMng = rgsMng;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -141,13 +142,13 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
|||
}
|
||||
Registry lm_t = lmtO.get(); //obligation by money
|
||||
Registry cm_t = cmtO.get();
|
||||
Optional<Registry> dmx = searchDmx(lm_t);
|
||||
Optional<Registry> dmx = rgsMng.searchDmx(lm_t);
|
||||
if (dmx.isPresent()) {
|
||||
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());
|
||||
continue;
|
||||
}
|
||||
Optional<Registry> dmtClnr = searchDmtClrn(lm_t);
|
||||
Optional<Registry> dmtClnr = rgsMng.searchDmtClrn(lm_t);
|
||||
if (dmtClnr.isPresent()) {
|
||||
Account tranAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and processingSign = '%s'"
|
||||
.formatted(AccountType.Tran.getKey(), AccountStatus.ACTIVE.getKey(), Allowed.ALLOWED.getKey()));
|
||||
|
|
@ -158,10 +159,10 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
|||
}
|
||||
{
|
||||
//изменение активов - блокируем средства беред отправкой sdf'ов
|
||||
Optional<Registry> amfO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F);
|
||||
Optional<Registry> payerAmtO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T);
|
||||
Optional<Registry> ambO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B);
|
||||
Optional<Registry> receiverAmtO = findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), AM_B);
|
||||
Optional<Registry> amfO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F);
|
||||
Optional<Registry> payerAmtO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T);
|
||||
Optional<Registry> ambO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_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={}",
|
||||
lm_t.getId(),
|
||||
cm_t.getId(),
|
||||
|
|
@ -209,32 +210,6 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
|||
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) {
|
||||
rgs.setUpdated(now);
|
||||
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.importexport.SwtExporterRequest;
|
||||
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.builder.PaymentInstructionBuilderFinalMkrDeals;
|
||||
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.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
|
@ -67,10 +67,11 @@ public class FormingPaymentInstructionSecondaryT0 implements ISessionStage {
|
|||
private KafkaSender kafkaSender;
|
||||
private final Sdf03Creator sdf03Creator;
|
||||
private final IMessageResolver msgResolver = new SimpleMessageResolver();
|
||||
private final RegistryManager rgsMng;
|
||||
|
||||
@Autowired
|
||||
public FormingPaymentInstructionSecondaryT0(ImdgProvider imdgProvider,
|
||||
KafkaSender kafkaSender, Sdf03Creator sdf03Creator) {
|
||||
KafkaSender kafkaSender, Sdf03Creator sdf03Creator, RegistryManager rgsMng) {
|
||||
this.kafkaSender = kafkaSender;
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||
|
|
@ -82,6 +83,7 @@ public class FormingPaymentInstructionSecondaryT0 implements ISessionStage {
|
|||
this.sDf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
||||
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
||||
this.sdf03Creator = sdf03Creator;
|
||||
this.rgsMng = rgsMng;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -142,7 +144,7 @@ public class FormingPaymentInstructionSecondaryT0 implements ISessionStage {
|
|||
Long groupId = group.getKey();
|
||||
Function<RegistryTradingParams, Registry> findByCode = rgsCode -> group.getValue()
|
||||
.stream()
|
||||
.filter(rgs -> equalsByRegistry(rgsCode, rgs))
|
||||
.filter(rgs -> RegistryManager.equalsByCode(rgsCode, rgs))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
//интересуют обязательства и требования по деньгам
|
||||
|
|
@ -154,10 +156,10 @@ public class FormingPaymentInstructionSecondaryT0 implements ISessionStage {
|
|||
}
|
||||
{
|
||||
//изменение активов - блокируем средства беред отправкой sdf'ов
|
||||
Optional<Registry> amfO = findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_F);
|
||||
Optional<Registry> payerAmtO = findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_T);
|
||||
Optional<Registry> ambO = findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_B);
|
||||
Optional<Registry> receiverAmtO = findRelatedAsset(cs_t.getTradingClearingRegistryId(), cs_t.getCompanyId(), AS_B);
|
||||
Optional<Registry> amfO = rgsMng.findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_F);
|
||||
Optional<Registry> payerAmtO = rgsMng.findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_T);
|
||||
Optional<Registry> ambO = rgsMng.findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_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={}",
|
||||
ls_t.getId(),
|
||||
cs_t.getId(),
|
||||
|
|
@ -223,17 +225,6 @@ public class FormingPaymentInstructionSecondaryT0 implements ISessionStage {
|
|||
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) {
|
||||
List<SDf03> sDf03Created = new ArrayList<>();
|
||||
List<SDf12> sDf12Created = new ArrayList<>();
|
||||
|
|
@ -302,16 +293,4 @@ public class FormingPaymentInstructionSecondaryT0 implements ISessionStage {
|
|||
sDf12.setGenerationTime(Instant.now());
|
||||
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