From ce8c397fca1943d6091cf0041a853c51e782f046 Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 22 Aug 2023 14:33:10 +0300 Subject: [PATCH] moved RegistryManager to separate package added TradingTimeService added RegistryUnit.I --- .../service/executors/Sdf04Executor.java | 4 +- .../service/executors/Sdf06Executor.java | 27 ++---- .../service/executors/Sdf10Executor.java | 48 ++------- .../service/executors/Sdf13Executor.java | 2 +- .../service/executors/Sdf20Executor.java | 4 +- .../PaymentInstructionOutboundService.java | 4 +- .../{ => registry}/AssetTBFProcessing.java | 15 +-- .../clearing/service/registry/DmiService.java | 97 +++++++++++++++++++ .../{ => registry}/RegistryManager.java | 2 +- .../service/schedule/TradingTimeService.java | 51 ++++++++++ .../ReturnDepositValidationRule.java | 2 +- .../validation/Sdf20ValidationRule.java | 2 +- .../impl/FormingPaymentInstructionAssets.java | 2 +- ...ormingPaymentInstructionDealsFinalMkr.java | 2 +- ...ormingPaymentInstructionDepositReturn.java | 2 +- .../FormingPaymentInstructionReturnMkr.java | 2 +- .../FormingPaymentInstructionSecondaryT0.java | 2 +- .../FormingPaymentInstructionSecurities.java | 2 +- .../stage/impl/InspectionObligations.java | 2 +- .../InspectionObligationsDepositReturn.java | 2 +- .../session/stage/impl/Sdf03And12Sender.java | 2 +- .../group/RegistryLiabilitiesGroup.java | 2 +- .../enumeration/RegistryTradingParams.java | 5 + .../platform/enumeration/RegistryUnit.java | 1 + 24 files changed, 195 insertions(+), 89 deletions(-) rename clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/{ => registry}/AssetTBFProcessing.java (93%) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/DmiService.java rename clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/{ => registry}/RegistryManager.java (99%) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/schedule/TradingTimeService.java diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java index f04368c67..b15a4d044 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java @@ -11,9 +11,9 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.service.AnltSearcher; -import ru.spcex.clearing.service.AssetTBFProcessing; -import ru.spcex.clearing.service.RegistryManager; import ru.spcex.clearing.service.model.Result; +import ru.spcex.clearing.service.registry.AssetTBFProcessing; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf06Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf06Executor.java index db1f477b6..0deb0d355 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf06Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf06Executor.java @@ -6,11 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.account.Account; -import ru.clearing.classes.statics.data.account.DepoAccount; import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; -import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; -import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.sdf.SDf06; import ru.clearing.classes.statics.data.sdf.SDf07; @@ -26,6 +22,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRe import ru.spcex.clearing.platform.messaging.domain.cud.gateway.AssetOperationApprovalRequest; import ru.spcex.clearing.platform.messaging.domain.cud.gateway.SingleAssetResponse; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.clearing.service.schedule.TradingTimeService; import ru.spcex.clearing.service.validation.ValidationStored; import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; @@ -53,17 +50,12 @@ public class Sdf06Executor { private final Imdg statementImdg; private final ImdgProvider imdgProvider; - private final Imdg registryImdg; - private final Imdg fixedIncomeSecurityImdg; - private final Imdg equitySecurityImdg; - private final Imdg depoAccountImdg; - private final Imdg tradingClearingRegistryImdg; - private final Imdg companyImdg; private final Imdg sdf06Imdg; private final Imdg sdf07Imdg; private final ImdgId idGenerator; private final IMessageResolver messageResolver; private final Function sDf06Validator; + private final TradingTimeService tradingTimeService; private final KafkaSender kafkaSender; private final FilenameObtainer filenameObtainer; @@ -85,15 +77,10 @@ public class Sdf06Executor { public Sdf06Executor(ImdgProvider imdgProvider, IMessageResolver messageResolver, @Qualifier("sdf06ValidatorNew") Function sDf06Validator, - KafkaSender kafkaSender, FilenameObtainer filenameObtainer) { + TradingTimeService tradingTimeService, KafkaSender kafkaSender, FilenameObtainer filenameObtainer) { this.imdgProvider = imdgProvider; this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); - this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); - this.fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class); - this.equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); - this.depoAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class); - this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); - this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + this.tradingTimeService = tradingTimeService; this.idGenerator = imdgProvider.getImdgIdGenerator(); this.messageResolver = messageResolver; this.sDf06Validator = sDf06Validator; @@ -155,11 +142,11 @@ public class Sdf06Executor { Statement stmt = createStatementBySdf06(sDf06, company.getId(), validator.getStored(ValidationStored.Sdf06Account)); statementImdg.insert(stmt); log.debug("Statement created: {}", stmt.getId()); - if (InOutDirection.in.getKey().equals(stmt.getInOutDirection())) { + if (InOutDirection.out.getKey().equals(stmt.getInOutDirection()) && tradingTimeService.isTradingTime()) { + requests.add(requestFromStatement(stmt, company.getTradingCode(), tcr.getCode())); + } else { processedApproved(stmt, sDf06, now, sdf07GroupId); sdf07WasCreated = true; - } else { - requests.add(requestFromStatement(stmt, company.getTradingCode(), tcr.getCode())); } } if (requests.size() > 0) { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf10Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf10Executor.java index cc472ff60..f75910c53 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf10Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf10Executor.java @@ -6,10 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.account.Account; -import ru.clearing.classes.statics.data.account.DepoAccount; import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; -import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.scheduler.PlannerAllToday; @@ -28,14 +25,14 @@ import ru.spcex.clearing.platform.messaging.domain.cud.gateway.AssetOperationApp import ru.spcex.clearing.platform.messaging.domain.cud.gateway.SingleAssetResponse; 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.registry.RegistryManager; +import ru.spcex.clearing.service.schedule.TradingTimeService; import ru.spcex.clearing.service.validation.ValidationStored; import ru.spcex.clearing.session.stage.util.RegistryUtil; import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgId; import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IEnumId; @@ -46,7 +43,6 @@ import ru.spcex.platform.utils.validation.IValidator; import java.math.BigDecimal; import java.time.Instant; import java.time.LocalDate; -import java.time.LocalTime; import java.util.*; import java.util.function.Function; @@ -57,11 +53,6 @@ public class Sdf10Executor { private final Imdg statementImdg; private final ImdgProvider imdgProvider; private final Imdg registryImdg; - private final Imdg fixedIncomeSecurityImdg; - private final Imdg equitySecurityImdg; - private final Imdg depoAccountImdg; - private final Imdg tradingClearingRegistryImdg; - private final Imdg companyImdg; private final Imdg sdf10Imdg; private final Imdg sdf11Imdg; private final Imdg plannerAllTodayImdg; @@ -69,6 +60,7 @@ public class Sdf10Executor { private final ImdgId idGenerator; private final IMessageResolver messageResolver; private final Function sDf10Validator; + private final TradingTimeService tradingTimeService; private final KafkaSender kafkaSender; private final static String OK = "OK!"; @@ -90,19 +82,15 @@ public class Sdf10Executor { public Sdf10Executor(ImdgProvider imdgProvider, RegistryManager rgsMng, IMessageResolver messageResolver, @Qualifier("sdf10Validator") Function sDf10Validator, - KafkaSender kafkaSender) { + TradingTimeService tradingTimeService, KafkaSender kafkaSender) { this.imdgProvider = imdgProvider; this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); - this.fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class); - this.equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); - this.depoAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class); - this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); - this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.idGenerator = imdgProvider.getImdgIdGenerator(); this.rgsMng = rgsMng; this.messageResolver = messageResolver; this.sDf10Validator = sDf10Validator; + this.tradingTimeService = tradingTimeService; this.kafkaSender = kafkaSender; this.sdf10Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf10, SDf10.class); this.sdf11Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf11, SDf11.class); @@ -167,7 +155,7 @@ public class Sdf10Executor { account); statementImdg.insert(stmt); log.debug("Statement created: {}", stmt.getId()); - if (InOutDirection.out.getKey().equals(stmt.getInOutDirection()) && isTradingTime()) { + if (InOutDirection.out.getKey().equals(stmt.getInOutDirection()) && tradingTimeService.isTradingTime()) { requests.add(requestFromStatement(stmt, company.getTradingCode(), tcr.getCode(), sDf10.getSecurityCode())); } else { SDf11 sDf11 = processedApproved(stmt, sDf10, now, sdf11GroupId); @@ -207,30 +195,6 @@ public class Sdf10Executor { log.debug("created DS*T.id={}", rgsD.getId()); } - private boolean isTradingTime() { - ImdgPredicateBuilder pb = plannerAllTodayImdg.predicateBuilder(); - Function> plannerByTask = task -> { - ImdgPredicate plannerPrdct = pb.and( - pb.equals("task", task.getKey()), - pb.equals("taskStatus", TaskStatus.Active.getKey()) - ); - return Optional.ofNullable(plannerAllTodayImdg.getFirstObjectByPredicate(plannerPrdct)); - }; - LocalTime startTradingTime = plannerByTask.apply(Task.createRegistry_STRS) - .map(PlannerAllToday::getTaskTime) - .orElse(null); - LocalTime endTradingTime = plannerByTask.apply(Task.createRegistry_ETRS) - .map(PlannerAllToday::getTaskTime) - .orElse(null); - if (startTradingTime == null || endTradingTime == null) { - log.warn("startTradingTime or endTradingTime is null"); - return false; - } - LocalTime now = LocalTime.now(); - log.debug("now: {}, startTradingTime: {}, endTradingTime: {}", now, startTradingTime, endTradingTime); - return !now.isBefore(startTradingTime) && !now.isAfter(endTradingTime); - } - private void processedApproved(Statement stmt, SDf10 sDf10, Instant time) { processedApproved(stmt, sDf10, time, sdf11GroupId); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf13Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf13Executor.java index 0e016ae79..a85e7b83b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf13Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf13Executor.java @@ -10,8 +10,8 @@ import ru.clearing.classes.statics.data.sdf.SDf13; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; -import ru.spcex.clearing.service.RegistryManager; import ru.spcex.clearing.service.model.Result; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryInstrumentType; import ru.spcex.platform.enumeration.RegistryUnit; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java index 3972f00a6..112c41203 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java @@ -19,9 +19,9 @@ import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationListRequest; import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRequest; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; -import ru.spcex.clearing.service.AssetTBFProcessing; import ru.spcex.clearing.service.AssetTrio; -import ru.spcex.clearing.service.RegistryManager; +import ru.spcex.clearing.service.registry.AssetTBFProcessing; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.service.validation.ValidationStored; import ru.spcex.clearing.session.stage.util.RegistryUtil; import ru.spcex.platform.enumeration.*; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/payment/PaymentInstructionOutboundService.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/payment/PaymentInstructionOutboundService.java index 9797cb61d..fe8754924 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/payment/PaymentInstructionOutboundService.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/payment/PaymentInstructionOutboundService.java @@ -21,11 +21,11 @@ import ru.spcex.clearing.platform.messaging.domain.cud.payment.PIClearingOutbond import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.platform.messaging.service.Status; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; -import ru.spcex.clearing.service.AssetTBFProcessing; import ru.spcex.clearing.service.AssetTrio; -import ru.spcex.clearing.service.RegistryManager; import ru.spcex.clearing.service.Sdf54Creator; import ru.spcex.clearing.service.builder.PaymentInstructionBuilderV2; +import ru.spcex.clearing.service.registry.AssetTBFProcessing; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.service.validation.ValidationStored; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.platform.enumeration.CurrencyCode; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/AssetTBFProcessing.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/AssetTBFProcessing.java similarity index 93% rename from clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/AssetTBFProcessing.java rename to clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/AssetTBFProcessing.java index 7aad750c1..f7d623e05 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/AssetTBFProcessing.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/AssetTBFProcessing.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.service; +package ru.spcex.clearing.service.registry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -7,6 +7,7 @@ import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.service.AssetTrio; import ru.spcex.clearing.session.stage.util.RegistryUtil; import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; @@ -80,12 +81,12 @@ public class AssetTBFProcessing { } public AssetTrio createSAssets(Account acc, - String securitySymbol, - Long securityId, - String tcrType, - Long tcrId, - String tcr, - Company company) { + String securitySymbol, + Long securityId, + String tcrType, + Long tcrId, + String tcr, + Company company) { Registry ast = new Registry(); ast.setCreated(Instant.now()); ast.setSecuritySymbol(securitySymbol); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/DmiService.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/DmiService.java new file mode 100644 index 000000000..9b2a476e9 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/DmiService.java @@ -0,0 +1,97 @@ +package ru.spcex.clearing.service.registry; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.session.stage.util.RegistryUtil; +import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.enumeration.RegistryStatus; +import ru.spcex.platform.enumeration.RegistryTradingParams; +import ru.spcex.platform.enumeration.RegistryUnit; +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.ImdgPredicateBuilder; +import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.Optional; + +@Component +public class DmiService { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg rgsImdg; + private final RegistryManager rgsMng; + + public DmiService(ImdgProvider imdgProvider, RegistryManager rgsMng) { + this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.rgsMng = rgsMng; + } + + public void setProc(Long accountId, Long companyId, Long tcrId, String securitySymbol) { + findDmi(companyId, accountId, securitySymbol).ifPresentOrElse(d__i -> { + d__i.setRegistryStatus(RegistryStatus.PROC.getKey()); + d__i.setUpdated(Instant.now()); + log.trace("updating D**I status to {}", d__i.getRegistryStatus()); + rgsImdg.update(d__i); + }, () -> createDmi(companyId, tcrId, securitySymbol, BigDecimal.ZERO, "outDocument")); + } + + + public void setOk(Long accountId, Long companyId, Long tcrId, String securitySymbol) { + findDmi(companyId, accountId, securitySymbol).ifPresent(d__i -> { + d__i.setRegistryStatus(RegistryStatus.OK.getKey()); + d__i.setUpdated(Instant.now()); + log.trace("updating {} status to {}", d__i.getRegistryCode(), d__i.getRegistryStatus()); + rgsImdg.update(d__i); + }); + } + + private Optional findDmi(Long companyId, Long accountId, String securitySymbol) { + ImdgPredicateBuilder pb = rgsImdg.predicateBuilder(); + RegistryTradingParams rgsCde = RegistryTradingParams.D__I; + ImdgPredicate prdct = pb.and( + pb.sql(RegistryCodeSqlBuilder.getInstance(rgsCde).build()), + pb.equals("companyId", companyId), + pb.equals("accountId", accountId), + pb.equals("securitySymbol", securitySymbol) + ); + log.trace("searching {} by {}", rgsCde, prdct); + Registry d__i = rgsImdg.getFirstObjectByPredicate(prdct); + return Optional.ofNullable(d__i); + } + + private void createDmi(Long companyId, + Long tcrId, + String securitySymbol, + BigDecimal summ, + String outDocument) { + RegistryTradingParams rgsCde = RegistryTradingParams.AM_T; + Optional a__t = rgsMng.findRelatedAsset(tcrId, + companyId, + securitySymbol, + rgsCde); + if (a__t.isEmpty()) { + log.error("{} not found for tcr.id={} company.id={} security.symbol={}", + rgsCde, tcrId, companyId, securitySymbol); + return;// Optional.empty(); + } + Registry rgsD = a__t.get().clone(); + rgsD.setRegistryDesignation(RegistryDesignation.D.getKey()); + rgsD.setRegistryUnit(RegistryUnit.I.getKey()); + rgsD.setRegistryCode(RegistryUtil.clearingCode(rgsD)); + rgsD.setBalance(summ); + + rgsD.setDebit(BigDecimal.ZERO); + rgsD.setCredit(BigDecimal.ZERO); + rgsD.setDiffBalance(BigDecimal.ZERO); + rgsD.setCheckBalance(BigDecimal.ZERO); + rgsD.setRegistryStatus(RegistryStatus.PROC.getKey()); + rgsD.setContract(outDocument); + rgsImdg.insert(rgsD); + log.debug("created {}.id={}", rgsD.getRegistryCode(), rgsD.getId()); + } +} 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/registry/RegistryManager.java similarity index 99% rename from clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryManager.java rename to clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/RegistryManager.java index fc230848d..3e6b69530 100644 --- 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/registry/RegistryManager.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.service; +package ru.spcex.clearing.service.registry; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/schedule/TradingTimeService.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/schedule/TradingTimeService.java new file mode 100644 index 000000000..fc4b38836 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/schedule/TradingTimeService.java @@ -0,0 +1,51 @@ +package ru.spcex.clearing.service.schedule; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.scheduler.PlannerAllToday; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.platform.enumeration.Task; +import ru.spcex.platform.enumeration.TaskStatus; +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.ImdgPredicateBuilder; + +import java.time.LocalTime; +import java.util.Optional; +import java.util.function.Function; + +@Service +public class TradingTimeService { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg plannerAllTodayImdg; + + public TradingTimeService(ImdgProvider imdgProvider) { + this.plannerAllTodayImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PlannerAllToday, PlannerAllToday.class); + } + + public boolean isTradingTime() { + ImdgPredicateBuilder pb = plannerAllTodayImdg.predicateBuilder(); + Function> plannerByTask = task -> { + ImdgPredicate plannerPrdct = pb.and( + pb.equals("task", task.getKey()), + pb.equals("taskStatus", TaskStatus.Active.getKey()) + ); + return Optional.ofNullable(plannerAllTodayImdg.getFirstObjectByPredicate(plannerPrdct)); + }; + LocalTime startTradingTime = plannerByTask.apply(Task.createRegistry_STRS) + .map(PlannerAllToday::getTaskTime) + .orElse(null); + LocalTime endTradingTime = plannerByTask.apply(Task.createRegistry_ETRS) + .map(PlannerAllToday::getTaskTime) + .orElse(null); + if (startTradingTime == null || endTradingTime == null) { + log.warn("startTradingTime or endTradingTime is null"); + return false; + } + LocalTime now = LocalTime.now(); + log.debug("now: {}, startTradingTime: {}, endTradingTime: {}", now, startTradingTime, endTradingTime); + return !now.isBefore(startTradingTime) && !now.isAfter(endTradingTime); + } +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ReturnDepositValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ReturnDepositValidationRule.java index 92c4f7253..31b1c6a28 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ReturnDepositValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ReturnDepositValidationRule.java @@ -4,7 +4,7 @@ import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryReturnDepositRequest; -import ru.spcex.clearing.service.RegistryManager; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryInstrumentType; import ru.spcex.platform.enumeration.RegistryStatus; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf20ValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf20ValidationRule.java index c91e48bc6..c8b43c884 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf20ValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf20ValidationRule.java @@ -11,7 +11,7 @@ import ru.clearing.classes.statics.data.security.Security; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.service.AssetTrio; -import ru.spcex.clearing.service.RegistryManager; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.OperationCode; import ru.spcex.platform.imdg.api.Imdg; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionAssets.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionAssets.java index e8bf3cc89..388c589c5 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionAssets.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionAssets.java @@ -19,9 +19,9 @@ 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.PaymentInstructionBuilderV2; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; import ru.spcex.clearing.session.stage.Task; 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 af71cf53d..40c642dee 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,9 +19,9 @@ 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.service.registry.RegistryManager; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; import ru.spcex.clearing.session.stage.Task; 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 0d7ad5ec0..9f7754a62 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,11 +18,11 @@ 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; import ru.spcex.clearing.service.builder.PaymentInstructionBuilderFinalMkrDeals; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; import ru.spcex.clearing.session.stage.Task; 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 f31848c8e..10f800287 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,10 +19,10 @@ 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; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; import ru.spcex.clearing.session.stage.Task; 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 6c6cf7036..dfdd41500 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,9 +19,9 @@ 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.service.registry.RegistryManager; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; import ru.spcex.clearing.session.stage.Task; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecurities.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecurities.java index 850b63b06..2d190f899 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecurities.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecurities.java @@ -19,10 +19,10 @@ 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.PaymentInstructionBuilderForSecurities; import ru.spcex.clearing.service.builder.PaymentInstructionBuilderV2; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; import ru.spcex.clearing.session.stage.Task; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java index e81828029..c83bc9767 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.service.RegistryManager; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; import ru.spcex.clearing.session.stage.Task; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java index d27179b60..489b8b496 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java @@ -8,7 +8,7 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.service.RegistryManager; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; import ru.spcex.clearing.session.stage.Task; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/Sdf03And12Sender.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/Sdf03And12Sender.java index 43f57545c..2d63abeb9 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/Sdf03And12Sender.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/Sdf03And12Sender.java @@ -13,9 +13,9 @@ 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.Sdf12Creator; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.InstrumentType; import ru.spcex.platform.enumeration.SdfTable; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/payment/group/RegistryLiabilitiesGroup.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/payment/group/RegistryLiabilitiesGroup.java index 00e30b202..96a2bf069 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/payment/group/RegistryLiabilitiesGroup.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/payment/group/RegistryLiabilitiesGroup.java @@ -3,7 +3,7 @@ package ru.spcex.clearing.session.stage.payment.group; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.clearing.classes.statics.data.registry.Registry; -import ru.spcex.clearing.service.RegistryManager; +import ru.spcex.clearing.service.registry.RegistryManager; import java.math.BigDecimal; import java.util.*; diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryTradingParams.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryTradingParams.java index 173b8e2d6..a8a9f7a71 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryTradingParams.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryTradingParams.java @@ -38,6 +38,7 @@ public record RegistryTradingParams(RegistryDesignation registryDesignation, public final static RegistryTradingParams CM__; public final static RegistryTradingParams LM__; public final static RegistryTradingParams DMAU; + public final static RegistryTradingParams D__I; static { OS_T = new RegistryTradingParams(RegistryDesignation.O, @@ -137,6 +138,10 @@ public record RegistryTradingParams(RegistryDesignation registryDesignation, RegistryInstrumentType.S, null, RegistryUnit.T); + D__I = new RegistryTradingParams(RegistryDesignation.D, + null, + null, + RegistryUnit.I); } } diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryUnit.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryUnit.java index 14215bf26..0466b4367 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryUnit.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryUnit.java @@ -10,6 +10,7 @@ public enum RegistryUnit implements IEnumKey { B("B"), X("X"), U("U"), + I("I"), ; private final String key;