From 72d9896fca3c1060e98caa8c179c7f8c8bd0ae01 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 28 Jul 2023 13:31:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B1=D0=BB=D0=BE=D0=BA=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=20=D1=81=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B2?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=B0=D1=85,?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=B0=D1=8F=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20FOND=20=D1=81=D0=B5=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stage/PrimaryAuctionB0Session.java | 1 + .../stage/PrimaryAuctionBnSession.java | 1 + .../stage/PrimaryAuctionT0Session.java | 1 + .../stage/SecondaryAuctionT0Session.java | 4 ++ .../stage/impl/InspectionObligations.java | 65 +++++++++++++++++++ .../stage/impl/RegistryFondBuilder.java | 3 +- 6 files changed, 74 insertions(+), 1 deletion(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java index 64f627535..f865d7d06 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java @@ -89,6 +89,7 @@ public class PrimaryAuctionB0Session extends AbstractSession implements Initiali dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B0.*$")); dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0]))); inclusionObligations.setSessionType(sessionType()); + inspectionObligations.setSection(section()); imdgProvider.waitAvailable(); initSessionIfPresent(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java index 0358cad35..7065a0c3d 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java @@ -89,6 +89,7 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B\\d{2}$")); dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0]))); inclusionObligations.setSessionType(sessionType()); + inspectionObligations.setSection(section()); imdgProvider.waitAvailable(); initSessionIfPresent(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java index e08fa4150..7dd110c04 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java @@ -88,6 +88,7 @@ public class PrimaryAuctionT0Session extends AbstractSession implements Initiali dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^T0.*$")); dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0]))); inclusionObligations.setSessionType(sessionType()); + inspectionObligations.setSection(section()); imdgProvider.waitAvailable(); initSessionIfPresent(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SecondaryAuctionT0Session.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SecondaryAuctionT0Session.java index 733978c7e..068495be2 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SecondaryAuctionT0Session.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SecondaryAuctionT0Session.java @@ -30,6 +30,7 @@ import java.util.List; import java.util.function.Supplier; @Service +//todo эта сессия public class SecondaryAuctionT0Session extends AbstractSession implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); private final BalanceRevise balanceRevise; @@ -90,6 +91,7 @@ public class SecondaryAuctionT0Session extends AbstractSession implements Initia dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^T0.*$")); dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0]))); inclusionObligations.setSessionType(sessionType()); + inspectionObligations.setSection(section()); imdgProvider.waitAvailable(); initSessionIfPresent(); } @@ -147,6 +149,7 @@ public class SecondaryAuctionT0Session extends AbstractSession implements Initia } //stage 5 { + //todo здесь InspectionPoolPayload companyIdPayload = new InspectionPoolPayload(); companyIdPayload.setProcessedCompanyId(currSession.getCompanyId()); runStage(TaskType.InspectionObligations, companyIdPayload, inspectionObligations); @@ -159,6 +162,7 @@ public class SecondaryAuctionT0Session extends AbstractSession implements Initia } StageResult> returnsPayment = null; { + //todo здесь FormingPaymentInstructionDealsMkrPayload payload = new FormingPaymentInstructionDealsMkrPayload(); payload.setSessionId(currSession.getId()); payload.setSendSdfs(false); 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 6c944cdcd..2e8606349 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 @@ -38,6 +38,7 @@ public class InspectionObligations implements ISessionStage { private final Imdg registryImdg; private final IMessageResolver msgResolver = new SimpleMessageResolver(); private SessionType sessionType; + private Section section; @Autowired public InspectionObligations(ImdgProvider imdgProvider) { @@ -48,6 +49,10 @@ public class InspectionObligations implements ISessionStage { this.sessionType = sessionType; } + public void setSection(Section section) { + this.section = section; + } + @Override public StageResult submit(Task task) { switch (task.getTaskType()) { @@ -102,6 +107,44 @@ public class InspectionObligations implements ISessionStage { isUncovered = false; } defineStatusAndUpdateRegistry(checkResults, group); + if (checkResults.stream().allMatch(checkResult -> checkResult.isUncovered)) { + //по каждому регистру OM*T, TM*T, OS*T, TS*T из одной группы + Optional omt_registryOpt = group.stream().filter(registry -> + IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O + && IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == RegistryInstrumentType.M) + .findFirst(); + for (Registry registry : group) { + String securityBAssetSql = searchSecurityBAssetsSql(registry); + log.debug("search security asset by registry.id={} sql {}", registry.getId(), securityBAssetSql); + Registry securityBAsset = registryImdg.getFirstObjectBySQL(securityBAssetSql); + if (IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == RegistryInstrumentType.M) { + String moneyBAssetSql = searchMoneyBAssetsSql(registry); + log.debug("search money asset by registry.id={} sql {}", registry.getId(), moneyBAssetSql); + Registry moneyBAsset = registryImdg.getFirstObjectBySQL(moneyBAssetSql); + if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O) { + moneyBAsset.setBalance(securityBAsset.getBalance().add(registry.getBalance())); + } else if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.T) { + moneyBAsset.setBalance(securityBAsset.getBalance().subtract(registry.getBalance())); + } + registryImdg.update(moneyBAsset); + } else if (section != null && section == Section.FOND && + IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == RegistryInstrumentType.S) { + if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O) { + securityBAsset.setBalance(securityBAsset.getBalance().add(registry.getBalance())); + registryImdg.update(securityBAsset); + } else if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.T) { + if (omt_registryOpt.isPresent()) { + Registry omtRegistry = omt_registryOpt.get(); + String moneyBAssetSql = searchMoneyBAssetsSql(omtRegistry); + log.debug("search money asset by registry.id={} sql {}", registry.getId(), moneyBAssetSql); + Registry moneyBAsset = registryImdg.getFirstObjectBySQL(moneyBAssetSql); + moneyBAsset.setBalance(securityBAsset.getBalance().subtract(registry.getBalance())); + registryImdg.update(moneyBAsset); + } + } + } + } + } } return new StageResult(null, true); @@ -130,6 +173,28 @@ public class InspectionObligations implements ISessionStage { return sqlCounterRegistryCondition; } + private String searchMoneyBAssetsSql(Registry obligation) { + return String.format("%s and " + + "tradingClearingRegistryId = '%s' and " + + "companyId = '%s' and " + + "accountId = %s", + RegistryCodeSqlBuilder.getInstance(AM_B).build(), + obligation.getTradingClearingRegistryId(), + obligation.getCompanyId(), + obligation.getAccountId()); + } + + private String searchSecurityBAssetsSql(Registry registry) { + return String.format("%s and " + + "tradingClearingRegistryId = '%s' and " + + "companyId = '%s' and " + + "accountId = %s", + RegistryCodeSqlBuilder.getInstance(AS_B).build(), + registry.getTradingClearingRegistryId(), + registry.getCompanyId(), + registry.getAccountId()); + } + private void defineStatusAndUpdateRegistry(List checkResults, List registries) { boolean isOneUncovered = checkResults.stream().anyMatch(checkResult -> checkResult.isUncovered); log.debug("groupId {}, uncovered: {}", registries.stream().findFirst().map(Registry::getGroupId).orElse(null), isOneUncovered); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java index 0e0a6f0be..867ca0f07 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java @@ -106,7 +106,8 @@ public class RegistryFondBuilder implements IRegistryBuilder { isMoney = false; account = accountImdg.getSingleObjectByID(tcr.getDepoAccountId()); reg.setAccountId(tcr.getDepoAccountId()); - DepoAccount depoAccount = depoAccountImdg.getSingleObjectByID(tcr.getDepoAccountId()); + DepoAccount depoAccount = depoAccountImdg.getFirstObjectByFieldValues( + Map.of("accountId", tcr.getDepoAccountId())); if (depoAccount != null) { capacityByAccount = depoAccount.getDepoAccountType(); }