From 2a1dfad01ba352973251678765d55c7999d2d045 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 8 Sep 2023 12:02:47 +0300 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=9C=D0=9A=D0=A0=20=D1=81=D0=B5=D1=81=D1=81?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=84=D0=B8=D0=BA=D1=81=20=D0=BF=D0=BE=20=D0=B1?= =?UTF-8?q?=D0=BB=D0=BE=D0=BA=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=D0=BC=20?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B5=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D1=81?= =?UTF-8?q?=D1=82=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/registry/AssetTBFProcessing.java | 16 ++++ .../FormingPaymentInstructionReturnMkr.java | 89 +++++++------------ .../InspectionObligationsDepositReturn.java | 8 +- 3 files changed, 57 insertions(+), 56 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/AssetTBFProcessing.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/AssetTBFProcessing.java index d4498f6b1..d6931f97c 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/AssetTBFProcessing.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/AssetTBFProcessing.java @@ -97,6 +97,22 @@ public class AssetTBFProcessing { } } + public void processByAm_f(Registry am_f, BigDecimal sum) { + Optional am_b = rgsMng.findRegByUnit(am_f.getCompanyId(), + am_f.getAccountId(), + am_f.getContract(), + am_f, + RegistryUnit.B); + Optional am_t = rgsMng.findRegByUnit(am_f.getCompanyId(), + am_f.getAccountId(), + am_f.getContract(), + am_f, + RegistryUnit.T); + if (am_b.isPresent() && am_t.isPresent()) { + process(am_b.get(), am_t.get(), am_f, sum); + } + } + public AssetTrio createSAssets(Account acc, String securitySymbol, Long securityId, diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionReturnMkr.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionReturnMkr.java index ab3c45525..435099cd9 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionReturnMkr.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionReturnMkr.java @@ -160,62 +160,41 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage { continue; } Optional dmtClnr = rgsMng.searchDmtClrnNotOk(lm_t); + Account tranAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and processingSign = '%s'" + .formatted(AccountType.Tran.getKey(), AccountStatus.ACTIVE.getKey(), Allowed.ALLOWED.getKey())); + if (tranAcc == null) { + return new StageResult<>( + new EnumMessage(ClearingError.AccountNotPresent, "accountType = " + AccountType.Tran.getKey()), + false); + } + { + //изменение активов - блокируем средства беред отправкой sdf'ов + Optional receiverAmtO = rgsMng.findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), lm_t.getSecuritySymbol(), AM_B); + log.debug("changing A* registers based on LM_T.id={} and CM_T.id={} found AM*T(receiver).id={}", + lm_t.getId(), + cm_t.getId(), + receiverAmtO.map(Registry::getId).orElse(null) + ); + receiverAmtO.ifPresent(amt -> { + // у отправителя и получателя одинаково, см. в FormingPaymentInstruction + amt.setSettledDebit(safeBD(amt.getSettledDebit()).add(safeBD(lm_t.getBalance()))); + setUpdatedStoreInImdg(amt, now); + }); + } + Pair pmts = PaymentInstructionBuilderFinalMkrDeals.builder(imdgProvider) + .lm_t(lm_t) + .cm_t(cm_t) + .tranAcc(tranAcc) + .sessionId(sessionId) + .paymentPurpose("Возврат депозита " + cm_t.getContract() + " по ТКР " + cm_t.getTradingClearingRegistry()) + .build(); + paymentInstructionImdg.insert(pmts.getFirst()); + paymentInstructionImdg.insert(pmts.getSecond()); + log.debug("LM*T#id={}, CM*T#id={} found, PaymentInstruction id={} and id={} created", + lm_t.getId(), cm_t.getId(), pmts.getFirst().getId(), pmts.getSecond().getId()); + pmtCreated.add(pmts.getFirst()); + pmtCreated.add(pmts.getSecond()); if (dmtClnr.isPresent()) { - Account tranAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and processingSign = '%s'" - .formatted(AccountType.Tran.getKey(), AccountStatus.ACTIVE.getKey(), Allowed.ALLOWED.getKey())); - if (tranAcc == null) { - return new StageResult<>( - new EnumMessage(ClearingError.AccountNotPresent, "accountType = " + AccountType.Tran.getKey()), - false); - } - { - //изменение активов - блокируем средства беред отправкой sdf'ов - Optional amfO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), lm_t.getSecuritySymbol(), AM_F); - Optional payerAmtO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), lm_t.getSecuritySymbol(), AM_T); - Optional ambO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), lm_t.getSecuritySymbol(), AM_B); - Optional receiverAmtO = rgsMng.findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), lm_t.getSecuritySymbol(), AM_B); - log.debug("changing A* registers based on LM_T.id={} and CM_T.id={} found AM*F.id={}, AM*T.id={}, AM*B.id={}, AM*B.id={}", - lm_t.getId(), - cm_t.getId(), - amfO.map(Registry::getId).orElse(null), - payerAmtO.map(Registry::getId).orElse(null), - ambO.map(Registry::getId).orElse(null), - receiverAmtO.map(Registry::getId).orElse(null) - ); - amfO.ifPresent(amf -> { - amf.setBalance(safeBD(amf.getBalance()).subtract(safeBD(lm_t.getBalance()))); - setUpdatedStoreInImdg(amf, now); - }); - payerAmtO.ifPresent(amt -> { - amt.setSettledDebit(safeBD(amt.getSettledDebit()).add(safeBD(lm_t.getBalance()))); - setUpdatedStoreInImdg(amt, now); - }); - ambO.ifPresent(amb -> { - amb.setBalance(safeBD(amb.getBalance()).add(safeBD(lm_t.getBalance()))); - setUpdatedStoreInImdg(amb, now); - }); - receiverAmtO.ifPresent(amt -> { - // у отправителя и получателя одинаково, см. в FormingPaymentInstruction - amt.setSettledDebit(safeBD(amt.getSettledDebit()).add(safeBD(lm_t.getBalance()))); - setUpdatedStoreInImdg(amt, now); - }); - if (amfO.isPresent() && ambO.isPresent() && payerAmtO.isPresent()) { - assets.process(ambO.get(), payerAmtO.get(), amfO.get(), lm_t.getBalance()); - } - } - Pair pmts = PaymentInstructionBuilderFinalMkrDeals.builder(imdgProvider) - .lm_t(lm_t) - .cm_t(cm_t) - .tranAcc(tranAcc) - .sessionId(sessionId) - .paymentPurpose("Возврат депозита " + cm_t.getContract() + " по ТКР " + cm_t.getTradingClearingRegistry()) - .build(); - paymentInstructionImdg.insert(pmts.getFirst()); - paymentInstructionImdg.insert(pmts.getSecond()); - log.debug("LM*T#id={}, CM*T#id={} found, PaymentInstruction id={} and id={} created", - lm_t.getId(), cm_t.getId(), pmts.getFirst().getId(), pmts.getSecond().getId()); - pmtCreated.add(pmts.getFirst()); - pmtCreated.add(pmts.getSecond()); dmtClnr.get().setRegistryStatus(RegistryStatus.OK.getKey()); setUpdatedStoreInImdg(dmtClnr.get(), now); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java index 90349d623..7046440e3 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.service.registry.AssetTBFProcessing; import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; @@ -38,12 +39,14 @@ public class InspectionObligationsDepositReturn implements ISessionStage { private final Imdg categoryImdg; private SessionType sessionType; private final RegistryManager rgsMng; + private final AssetTBFProcessing assets; @Autowired - public InspectionObligationsDepositReturn(ImdgProvider imdgProvider, RegistryManager rgsMng) { + public InspectionObligationsDepositReturn(ImdgProvider imdgProvider, RegistryManager rgsMng, AssetTBFProcessing assets) { this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.categoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); this.rgsMng = rgsMng; + this.assets = assets; } @Override @@ -129,6 +132,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage { ); if (dmtBalance.compareTo(omtBalance) >= 0 && amfBalance.compareTo(omtBalance) >=0) { group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK)); + assets.processByAm_f(amfAsset, omtBalance.negate()); // updateStatus(dmtInfo.get(), RegistryStatus.POOL); continue; } else if (SessionType.XDEP.equals(sessionType)) { @@ -147,6 +151,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage { ); if (dmtBalance.compareTo(omtBalance) >= 0 && amfBalance.compareTo(omtBalance) >= 0) { group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK)); + assets.processByAm_f(amfAsset, omtBalance.negate()); continue; } else if (SessionType.XDEP.equals(sessionType)) { group.forEach(rgs -> updateStatus(rgs, registryStatusFailed(rgs))); @@ -162,6 +167,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage { "FINL, initiator.category='V' and am*f > om*t: setting OK status to group", omtRgs.getId()); group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK)); + assets.processByAm_f(amfAsset, omtBalance.negate()); } else { log.info("OM*T.id={} -> no DM*X/DM*T(INFO/CLRN) registry found. setting {} status to group", omtRgs.getId(), registryStatusFailed());