diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryManager.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryManager.java new file mode 100644 index 000000000..f6e4c2722 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryManager.java @@ -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 rgsImdg; + + @Autowired + public RegistryManager(ImdgProvider imdgProvider) { + this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + } + + public Optional 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 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 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 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()) + ); + + } +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java index dfaed30f8..312b0baef 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java @@ -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"); - } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionDealsFinalMkr.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionDealsFinalMkr.java index d8a23d455..ed4f08125 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionDealsFinalMkr.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionDealsFinalMkr.java @@ -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 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 amfO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F); - Optional payerAmtO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T); - Optional ambO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B); - Optional receiverAmtO = findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), AM_B); + Optional amfO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F); + Optional payerAmtO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T); + Optional ambO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B); + Optional 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 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 formedPaymentInstructions) { List sDf03Created = new ArrayList<>(); List 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()) - ); - - } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionDepositReturn.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionDepositReturn.java index 712c2e695..1cf219faf 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionDepositReturn.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionDepositReturn.java @@ -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 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 pmtCreated = new ArrayList<>(); for (Map.Entry> entry : registriesByGroup.entrySet()) { List groupRgs = entry.getValue(); - Optional lmtO = groupRgs.stream().filter(rgs -> equalByRgs(LM_T, rgs)).findFirst(); - Optional cmtO = groupRgs.stream().filter(rgs -> equalByRgs(CM_T, rgs)).findFirst(); + Optional lmtO = groupRgs.stream().filter(rgs -> RegistryManager.equalsByCode(LM_T, rgs)).findFirst(); + Optional 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 dmx = searchDmx(lm_t); + Optional 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 dmtInfo = searchDmtInfo(lm_t); + Optional 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 dmtClnr = searchDmtClrn(lm_t); + Optional 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 amfO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F); - Optional payerAmtO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T); - Optional ambO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B); - Optional receiverAmtO = findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), AM_B); + Optional amfO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F); + Optional payerAmtO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T); + Optional ambO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B); + Optional 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 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 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 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 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()) - ); - } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionReturnMkr.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionReturnMkr.java index cc627b1de..9d8930645 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionReturnMkr.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionReturnMkr.java @@ -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 sDf03Imdg; private Imdg 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 dmx = searchDmx(lm_t); + Optional 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 dmtClnr = searchDmtClrn(lm_t); + Optional 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 amfO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F); - Optional payerAmtO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T); - Optional ambO = findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B); - Optional receiverAmtO = findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), AM_B); + Optional amfO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_F); + Optional payerAmtO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_T); + Optional ambO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), AM_B); + Optional 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 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 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 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); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecondaryT0.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecondaryT0.java index 12f2c62d3..cc964686d 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecondaryT0.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecondaryT0.java @@ -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 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 amfO = findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_F); - Optional payerAmtO = findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_T); - Optional ambO = findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_B); - Optional receiverAmtO = findRelatedAsset(cs_t.getTradingClearingRegistryId(), cs_t.getCompanyId(), AS_B); + Optional amfO = rgsMng.findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_F); + Optional payerAmtO = rgsMng.findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_T); + Optional ambO = rgsMng.findRelatedAsset(ls_t.getTradingClearingRegistryId(), ls_t.getCompanyId(), AS_B); + Optional 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 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 formedPaymentInstructions) { List sDf03Created = new ArrayList<>(); List 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()) - ); - - } }