From 7174024333ce029eaf793043d1abf7cc7494b754 Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 2 Aug 2023 19:17:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20=D1=80=D0=B0=D1=81=D1=81=D1=87=D0=B5=D1=82=20=D0=B1?= =?UTF-8?q?=D0=BB=D0=BE=D0=BA=D0=B8=D1=80=D0=BE=D0=B2=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clearing/service/AssetTBFProcessing.java | 66 +++++++++++++++++++ .../clearing/service/RegistryManager.java | 1 + .../service/executors/Sdf04Executor.java | 7 +- 3 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/AssetTBFProcessing.java 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/AssetTBFProcessing.java new file mode 100644 index 000000000..62019aed7 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/AssetTBFProcessing.java @@ -0,0 +1,66 @@ +package ru.spcex.clearing.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.platform.enumeration.RegistryUnit; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.number.BigDecimalUtil; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.Optional; +import java.util.function.Consumer; +import java.util.function.Supplier; + +@Service +public class AssetTBFProcessing { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg registryImdg; + private final RegistryManager rgsMng; + + public AssetTBFProcessing(ImdgProvider imdgProvider, RegistryManager rgsMng) { + this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.rgsMng = rgsMng; + } + + public void process(Registry am_b, Registry am_t, Registry am_f, BigDecimal sum) { + safeWrapField(am_t::getBalance, am_t::setBalance); + safeWrapField(am_b::getBalance, am_b::setBalance); + safeWrapField(am_f::getBalance, am_f::setBalance); + Instant now = Instant.now(); + + am_b.setBalance(am_b.getBalance().subtract(sum)); + am_f.setBalance(am_t.getBalance().subtract(am_b.getBalance())); + am_b.setUpdated(now); + am_f.setUpdated(now); + + registryImdg.update(am_b); + registryImdg.update(am_f); + } + + public void processByAm_b(Registry am_b, BigDecimal sum) { + Optional am_f = rgsMng.findRegByUnit(am_b.getCompanyId(), + am_b.getAccountId(), + am_b.getContract(), + am_b, + RegistryUnit.F); + Optional am_t = rgsMng.findRegByUnit(am_b.getCompanyId(), + am_b.getAccountId(), + am_b.getContract(), + am_b, + RegistryUnit.T); + if (am_f.isPresent() && am_t.isPresent()) { + process(am_b, am_t.get(), am_f.get(), sum); + } + } + + //точно будет аналогично и с другими полями + private void safeWrapField(Supplier getter, Consumer setter) { + BigDecimal fieldValue = getter.get(); + setter.accept(BigDecimalUtil.safeBD(fieldValue)); + } +} 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/RegistryManager.java index ad9c56abc..7b023bf4d 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/RegistryManager.java @@ -99,6 +99,7 @@ public class RegistryManager { ); } + //todo refactor public Optional findRegByUnit(Long companyId, Long accountId, String contract, Registry registry, RegistryUnit unit) { RegistryTradingParams p = new RegistryTradingParams( IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()), 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 c302f05c5..55fa37554 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,6 +11,7 @@ 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.platform.enumeration.*; @@ -39,8 +40,9 @@ public class Sdf04Executor extends AbstractExecutor { private final IMessageResolver msgRslv; protected final Imdg sessionImdg; private RegistryManager registryManager; + private final AssetTBFProcessing assets; - public Sdf04Executor(ImdgProvider imdgProvider, AnltSearcher anltSearcher, IMessageResolver msgRslv, RegistryManager registryManager) { + public Sdf04Executor(ImdgProvider imdgProvider, AnltSearcher anltSearcher, IMessageResolver msgRslv, RegistryManager registryManager, AssetTBFProcessing assets) { this.imdgProvider = imdgProvider; this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class); @@ -48,6 +50,7 @@ public class Sdf04Executor extends AbstractExecutor { this.anltSearcher = anltSearcher; this.msgRslv = msgRslv; this.registryManager = registryManager; + this.assets = assets; } @Override @@ -96,7 +99,7 @@ public class Sdf04Executor extends AbstractExecutor { registries = selectRegistryForSDF04(anltSearch.getAccount().getAccount()); } } - registries.forEach(registry -> unlockRegistry(registry, parseString(sdf04.getSum_deb()))); + registries.forEach(am_b -> assets.processByAm_b(am_b, parseString(sdf04.getSum_deb()))); } //todo переписать логику поиска на аналогичную по счетам(TRAN) Session activeSession = sessionImdg.getSingleObjectByFieldValues(Map.of("workflowStatus", Status.Active.getKey()));