From 08867e3cb9be4820d11ad74d048b057827ddef05 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 15 Dec 2023 12:45:38 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-603 --- .../clearing/service/registry/DmiService.java | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) 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 index 58195d03d..e42eb2ce0 100644 --- 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 @@ -4,17 +4,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.registry.Registry; +import ru.clearing.classes.statics.data.sdf.SDf57; +import ru.clearing.classes.statics.data.statement.Statement; 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.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.ImdgPredicateBuilder; import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; +import ru.spcex.platform.utils.log.ExceptionUtils; import java.math.BigDecimal; import java.time.Instant; @@ -24,10 +24,14 @@ import java.util.Optional; public class DmiService { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg rgsImdg; + private final Imdg sDf57Imdg; + private final Imdg statementImdg; private final RegistryManager rgsMng; public DmiService(ImdgProvider imdgProvider, RegistryManager rgsMng) { this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.sDf57Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf57, SDf57.class); + this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); this.rgsMng = rgsMng; } @@ -86,6 +90,33 @@ public class DmiService { findDmiByComment(tcrId, securitySymbol, comment).ifPresentOrElse(d__i -> { d__i.setContract(contract); d__i.setUpdated(Instant.now()); + try { + Long dbfId = Long.valueOf(contract); + SDf57 sdf57 = sDf57Imdg.getFirstObjectBySQL("dbfId=%d".formatted(dbfId)); + if (sdf57 != null) { + ImdgPredicateBuilder pb = statementImdg.predicateBuilder(); + ImdgPredicate stmtPrdct = pb.and( + pb.equals("inSDfId", sdf57.getId()), + pb.equals("inOutSDfType", InOutSDfType.type57.getKey()) + ); + Statement stmt = statementImdg.getFirstObjectByPredicate(stmtPrdct); + if (stmt != null && OperationStatus.Executed.equalsByKey(stmt.getOperationStatus())) { + d__i.setRegistryStatus(RegistryStatus.OK.getKey()); + } else { + log.warn("tcrId={} securitySymbol={} comment={} sdf57 dbfId={} found, stmt.id={} status {}. d**i status will not be updated", + tcrId, + securitySymbol, + comment, + dbfId, + stmt != null ? stmt.getId() : null, + stmt != null ? stmt.getOperationStatus() : null); + } + } + } catch (Throwable e) { + log.error("sdf57 search by {}: error {}", + contract, + ExceptionUtils.getStackTrace(e)); + } rgsImdg.update(d__i); log.trace("set {}.id={} contract {}", d__i.getRegistryCode(), d__i.getId(), contract); }, () -> log.trace("didn't find DM*I by tcr.id={} securitySymbol={} comment={}",