From 19184c3a4ab7bbbefd18dcdb1ddcfc1994cb2b97 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 30 Jun 2023 15:45:12 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D0=BE=20=D1=84=D0=B8=D0=BD=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE=D0=B9=20=D0=9C=D0=9A=D0=A0=20=D1=81=D0=B5?= =?UTF-8?q?=D1=81=D1=81=D0=B8=D0=B8:=201.=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D1=81=D0=B5=D0=BD=20=D1=88=D0=B0=D0=B3=205=20=D0=B8?= =?UTF-8?q?=D0=B7=20=D1=81=D0=B5=D1=81=D1=81=D0=B8=D0=B8=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=82=D1=83=20=D0=B4=D0=B5?= =?UTF-8?q?=D0=BF=D0=BE=D0=B7=D0=B8=D1=82=D0=BE=D0=B2.=20(=D0=BE=D1=82?= =?UTF-8?q?=D0=BB=D0=B8=D1=87=D0=B8=D0=B5:=20=D0=BF=D1=80=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B5=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B8=20=D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D1=8F=20=D0=BD?= =?UTF-8?q?=D0=B0=20DM*X=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=20FAIL=20?= =?UTF-8?q?=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20MNG)=202.=20=D1=88=D0=B0?= =?UTF-8?q?=D0=B3=207=20=D1=84=D0=BE=D1=80=D0=BC.=20PaymentInstruction:=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=BF=D0=B8=D0=BB=D0=B8=D0=BB=20=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BE=D0=B2=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D0=B0=D0=BC=20LM*T=203.=20=D1=88=D0=B0=D0=B3?= =?UTF-8?q?=207=20=D1=84=D0=BE=D1=80=D0=BC.=20PaymentInstruction:=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=BF=D1=83=D1=81=D0=BA=D0=B0=D0=B5=D0=BC=20=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BD=D0=B0=D0=B9=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=20DM*X=20=D0=BF=D0=BE=20=D0=BE=D0=B1=D1=8F=D0=B7?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D1=81=D1=82=D0=B2=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../session/stage/FinalMkrSession.java | 4 +- .../FormingPaymentInstructionReturnMkr.java | 73 ++++++++++++------- .../InspectionObligationsDepositReturn.java | 15 +++- 3 files changed, 63 insertions(+), 29 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/FinalMkrSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/FinalMkrSession.java index 48b5f3e9e..1a396e0a2 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/FinalMkrSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/FinalMkrSession.java @@ -38,7 +38,7 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean private final ObligationAdmission obligationsAdmission; private final InclusionObligations inclusionObligations; - private final InspectionObligations inspectionObligations; + private final InspectionObligationsDepositReturn inspectionObligations; private final FormingRegistersOnOS formingRegistersOnOS; private final FormingPaymentInstructionReturnMkr formingPaymentInstructionReturn; private final FormingPaymentInstructionDealsFinalMkr formingPaymentInstructionDeals; @@ -64,7 +64,7 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean FinishingSession finishingSession, EndStageNotification endStageNotification, IMessageResolver messageResolver, - InspectionObligations inspectionObligations, + InspectionObligationsDepositReturn inspectionObligations, @Qualifier("marketCodesForBn") Supplier> marketCodes) { super(imdgProvider, messageResolver); this.balanceRevise = balanceRevise; 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 c7e4acbf6..7a28cf4ea 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 @@ -99,32 +99,32 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage { .toList(); log.debug("LM*T and CM*T size = {}", rgsAll.size()); - List obligationsByMoney = rgsAll.stream() - .filter(registry -> equalsByRegistry(LM_T, registry)) - .toList(); - - log.debug("changing assets by LM*T"); +// List obligationsByMoney = rgsAll.stream() +// .filter(registry -> equalsByRegistry(LM_T, registry)) +// .toList(); +// +// log.debug("changing assets by LM*T"); //изменяем активы по обязательствам по деньгам (LM_T) - for (Registry obligationByMoney : obligationsByMoney) { - String sql = String.format("tradingClearingRegistryId = %s and companyId = %s", - obligationByMoney.getTradingClearingRegistryId(), obligationByMoney.getCompanyId()); - Collection relatedRegistries = registryImdg.getCollectionObjectsBySQL(sql); - log.trace("found {} related registries (by tcrId&companyId) for LM*T.id={}", - relatedRegistries.size(), - obligationByMoney.getId()); - - for (Registry relatedRegistry : relatedRegistries) { - if (equalsByRegistry(AM_F, relatedRegistry)) { - relatedRegistry.setBalance(safeBD(relatedRegistry.getBalance()).subtract(safeBD(obligationByMoney.getBalance()))); - } else if (equalsByRegistry(AM_T, relatedRegistry)) { - relatedRegistry.setSettledDebit(safeBD(relatedRegistry.getSettledDebit()).add(safeBD(obligationByMoney.getBalance()))); - } else if (equalsByRegistry(AM_B, relatedRegistry)) { - relatedRegistry.setBalance(safeBD(relatedRegistry.getBalance()).add(safeBD(obligationByMoney.getBalance()))); - } - log.trace("updated related registry.id={} for LM*T.id={}", relatedRegistry.getId(), obligationByMoney.getId()); - registryImdg.update(relatedRegistry); - } - } +// for (Registry obligationByMoney : obligationsByMoney) { +// String sql = String.format("tradingClearingRegistryId = %s and companyId = %s", +// obligationByMoney.getTradingClearingRegistryId(), obligationByMoney.getCompanyId()); +// Collection relatedRegistries = registryImdg.getCollectionObjectsBySQL(sql); +// log.trace("found {} related registries (by tcrId&companyId) for LM*T.id={}", +// relatedRegistries.size(), +// obligationByMoney.getId()); +// +// for (Registry relatedRegistry : relatedRegistries) { +// if (equalsByRegistry(AM_F, relatedRegistry)) { +// relatedRegistry.setBalance(safeBD(relatedRegistry.getBalance()).subtract(safeBD(obligationByMoney.getBalance()))); +// } else if (equalsByRegistry(AM_T, relatedRegistry)) { +// relatedRegistry.setSettledDebit(safeBD(relatedRegistry.getSettledDebit()).add(safeBD(obligationByMoney.getBalance()))); +// } else if (equalsByRegistry(AM_B, relatedRegistry)) { +// relatedRegistry.setBalance(safeBD(relatedRegistry.getBalance()).add(safeBD(obligationByMoney.getBalance()))); +// } +// log.trace("updated related registry.id={} for LM*T.id={}", relatedRegistry.getId(), obligationByMoney.getId()); +// registryImdg.update(relatedRegistry); +// } +// } log.debug("changing assets by CM*T"); List requirementsByMoney = rgsAll.stream() .filter(registry -> equalsByRegistry(CM_T, registry)) @@ -149,9 +149,19 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage { List allLiabilities = rgsAll .stream() .filter(registry -> RegistryDesignation.L.equalsByKey(registry.getRegistryDesignation())) + .filter(obligation -> { + Optional dmx = searchDmx(obligation); + if (dmx.isPresent()) { + log.debug("LM*T#id={}, DM*X#id={} found, no action needed for group {}, skipping liability", + obligation.getId(), + obligation.getId(), + obligation.getGroupId()); + } + return dmx.isEmpty(); + }) .toList(); - //todo сортировка if needed for (int i = 0; i < allLiabilities.size(); i++) { + //сортировка чтобы найти сделки с одинаковыми направлениями и адресатами и схлопнуть в одну Registry lm_t = allLiabilities.get(i); if (lm_t == null) continue; LinkedList relatedRegistries = new LinkedList<>(); @@ -194,6 +204,17 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage { return stageResult; } + /** + * fixme duplicate + */ + private Optional searchDmx(Registry rgs) { + String sqlCondition = String.format("(%s) and companyId = %d", + RegistryCodeSqlBuilder.getInstance(DM_X).build(), + rgs.getCounterPartyId()); + Registry dmx = registryImdg.getSingleObjectBySQL(sqlCondition); + return Optional.ofNullable(dmx); + } + private void sendSdfs(List formedPaymentInstructions) { List sDf03Created = new ArrayList<>(); List sDf12Created = new ArrayList<>(); 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 46fe736ae..409bb7b11 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 @@ -29,6 +29,7 @@ import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; public class InspectionObligationsDepositReturn implements ISessionStage { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg registryImdg; + private SessionType sessionType; private final static RegistryTradingParams OS_T; private final static RegistryTradingParams OM_T; @@ -122,7 +123,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage { if (dmxBalance.compareTo(omtBalance) >= 0) { group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK)); } else { - group.forEach(rgs -> updateStatus(rgs, RegistryStatus.MNG)); + group.forEach(rgs -> updateStatus(rgs, registryStatusForDmxCheckFailed())); } continue; } @@ -236,4 +237,16 @@ public class InspectionObligationsDepositReturn implements ISessionStage { IEnumKey.getEnumByKey(RegistryUnit.class, rgs.getRegistryUnit()) ); } + + private RegistryStatus registryStatusForDmxCheckFailed() { + if (SessionType.FINL.equals(sessionType)) { + return RegistryStatus.FAIL; + } else { + return RegistryStatus.MNG; + } + } + + public void setSessionType(SessionType sessionType) { + this.sessionType = sessionType; + } }