From 54c3d7c2350e833def798220835aa568510fdfae Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 19 Dec 2023 14:46:52 +0300 Subject: [PATCH] >> SDF57 D**I -> OK && session present => AxxT.planned += DxxI.balance --- .../service/executors/Sdf57Executor.java | 25 ++++++++++++++++--- .../clearing/service/registry/DmiService.java | 6 ++++- 2 files changed, 26 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 372d9b04e..3348d9a44 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 @@ -169,6 +169,9 @@ public class Sdf57Executor extends AbstractExecutor { result.setChildGenerationId(generationIdForGroup); log.info("SDF57 execution: sdf57 number={}, groupId={}", sdf.size(), sdf.stream().findFirst().map(SDf57::getGenerationId).orElse(null)); AtomicReference sessionIsNeededFlag = new AtomicReference<>(false); + boolean sessionIsPresent = sessionImdg.getFirstObjectByFieldValues(Map.of( + "workflowStatus", SessionStatus.ACTV.getKey() + )) != null; for (SDf57 sdf57 : sdf) { IValidator validator = sDf57Validator.apply(sdf57); Optional error = validator.tillFirstError(); @@ -397,10 +400,17 @@ public class Sdf57Executor extends AbstractExecutor { searchResult.getCompany().getId()); asts = createRegistryIfNeeded.apply(new StmtCmpAcc(stmt, searchResult.getCompany(), searchResult.getAccount())); if (OperationStatus.Executed.equalsByKey(stmt.getOperationStatus())) { - dmiService.setOk(searchResult.getTcr().getId(), + Optional dmiBalance = dmiService.setOk(searchResult.getTcr().getId(), CurrencyCode.RUB.getKey(), sdf57.getDbfId().toString()); - asts.ifPresent(trio -> assets.process(trio.a__b(), trio.a__t(), trio.a__f(), BigDecimal.ZERO)); + asts.ifPresent(trio -> { + if (dmiBalance.isPresent() && sessionIsPresent) { + BigDecimal planBalance = safeBD(trio.a__t().getPlanBalance()); + trio.a__t().setPlanBalance(planBalance.add(dmiBalance.get())); + registryImdg.update(trio.a__t()); + } + assets.process(trio.a__b(), trio.a__t(), trio.a__f(), BigDecimal.ZERO); + }); } } else if (InOutDirection.in.equals(IEnumKey.getEnumByKey(InOutDirection.class, stmt.getInOutDirection()))) { log.debug("stmt.id={} comment='{}' error: {}. Operating through DMAU registry", @@ -434,10 +444,17 @@ public class Sdf57Executor extends AbstractExecutor { } } else if (OperationStatus.Executed.equalsByKey(stmt.getOperationStatus())) { if (asts.isPresent()) { - dmiService.setOk(asts.get().a__t().getTradingClearingRegistryId(), + Optional dmiBalance = dmiService.setOk(asts.get().a__t().getTradingClearingRegistryId(), CurrencyCode.RUB.getKey(), sdf57.getDbfId().toString()); - asts.ifPresent(trio -> assets.process(trio.a__b(), trio.a__t(), trio.a__f(), BigDecimal.ZERO)); + asts.ifPresent(trio -> { + if (dmiBalance.isPresent() && sessionIsPresent) { + BigDecimal planBalance = safeBD(trio.a__t().getPlanBalance()); + trio.a__t().setPlanBalance(planBalance.add(dmiBalance.get())); + registryImdg.update(trio.a__t()); + } + assets.process(trio.a__b(), trio.a__t(), trio.a__f(), BigDecimal.ZERO); + }); } else { log.error("stmt.id={} operationStatus={} but couldn't extract TCR.id for DM*I update", stmt.getId(), 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 e42eb2ce0..6ff43b201 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 @@ -15,6 +15,7 @@ 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 ru.spcex.platform.utils.number.BigDecimalUtil; import java.math.BigDecimal; import java.time.Instant; @@ -128,18 +129,21 @@ public class DmiService { * ищем D**I по tcrId/security/contract * задаем статус ОК */ - public void setOk(Long tcrId, + public Optional setOk(Long tcrId, String securitySymbol, 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()); }, () -> { log.trace("didn't find DM*I by tcr.id={} securitySymbol={} contract={}", tcrId, securitySymbol, contract); }); + return Optional.ofNullable(dmiBalance[0]); } private Optional findDmiByContract(Long tcrId, String securitySymbol, String contract) {