From 672a463cad81f8d78219f261cae09916fde7c7e0 Mon Sep 17 00:00:00 2001 From: ialbert Date: Thu, 30 Apr 2026 18:14:23 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-981 --- .../service/executors/Sdf57Executor.java | 18 ++++++++++++++++++ .../clearing/service/registry/DmiService.java | 14 +++++++++----- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java index f62f6e24c..7f8d82a25 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java @@ -504,6 +504,24 @@ public class Sdf57Executor extends AbstractExecutor { registryImdg.insert(newDmau); log.debug("stmt.id={} created DMAU.id={}", stmt.getId(), newDmau.getId()); }); + Optional dmai = RegistrySearch.builder(registryImdg) + .rgsCode(RegistryTradingParams.DMAI) + .companyId(cmp.getId()) + .accountId(acc.getId()) + .accountType(AccountType.Anlt) + .find(); + dmai.ifPresentOrElse( + r -> log.debug("stmt.id={} DMAI.id={} found", stmt.getId(), r.getId()), + () -> log.debug("stmt.id={} DMAI not found", stmt.getId())); + Optional dmaiBalanceO = dmai.map(dmiService::setOk); + if (dmaiBalanceO.isPresent() && asts.isPresent()) { + AssetTrio trio = asts.get(); + BigDecimal dmiBalance = dmaiBalanceO.get(); + BigDecimal planBalance = safeBD(trio.a__t().getPlanBalance()); + trio.a__t().setPlanBalance(planBalance.add(dmiBalance)); + registryImdg.update(trio.a__t()); + assets.process(trio.a__b(), trio.a__t(), trio.a__f(), BigDecimal.ZERO); + } //DMAU подразумевает увеличение остатка поля balance и credit registry.code=DMAU String genTime = formatInstant(sdf57.getGenerationTime(), readableDateTime); String ntfMsg = dmauNotificationText(direction, genTime, sdf57); 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 16daa75ab..7acd3e0df 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 @@ -151,11 +151,7 @@ public class DmiService { String contract) { BigDecimal[] dmiBalance = {null}; findDmiByContract(tcrId, securitySymbol, contract).ifPresentOrElse(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); - dmiBalance[0] = BigDecimalUtil.safeBD(d__i.getBalance()); + dmiBalance[0] = setOk(d__i); }, () -> { log.trace("didn't find DM*I by tcr.id={} securitySymbol={} contract={}", tcrId, securitySymbol, contract); @@ -163,6 +159,14 @@ public class DmiService { return Optional.ofNullable(dmiBalance[0]); } + public BigDecimal setOk(Registry 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); + return BigDecimalUtil.safeBD(d__i.getBalance()); + } + private Optional findDmiByContract(Long tcrId, String securitySymbol, String contract) { ImdgPredicateBuilder pb = rgsImdg.predicateBuilder(); RegistryTradingParams rgsCde = RegistryTradingParams.D__I;