From 70791d8cac67bc336e4c6c0540dcf07a462b74d3 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 9 Jul 2025 14:32:12 +0300 Subject: [PATCH] fix RequirementAndObligationCreationAction --- ...equirementAndObligationCreationAction.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/RequirementAndObligationCreationAction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/RequirementAndObligationCreationAction.java index 1efe76aa7..2c339fa04 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/RequirementAndObligationCreationAction.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/RequirementAndObligationCreationAction.java @@ -40,6 +40,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.service.TcrSearcher; import ru.spcex.clearing.session.stage.TaskType; import ru.spcex.clearing.session.stage.impl.IRegistryBuilder; +import ru.spcex.clearing.session.stage.impl.RegistryCkBuilder; import ru.spcex.clearing.session.stage.impl.RegistryCurrBuilder; import ru.spcex.clearing.session.stage.impl.RegistryDepoBuilder; import ru.spcex.clearing.session.stage.impl.RegistryFondBuilder; @@ -55,6 +56,8 @@ import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryInstrumentType; import ru.spcex.platform.enumeration.RegistryTradingParams; import ru.spcex.platform.enumeration.RegistryUnit; +import ru.spcex.platform.enumeration.Sender; +import ru.spcex.platform.enumeration.SessionType; import ru.spcex.platform.enumeration.Side; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgId; @@ -69,6 +72,7 @@ import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ById; import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ByIdAndString; import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ByString; import ru.spcex.platform.utils.collection.Pair; +import ru.spcex.platform.utils.enumeration.IEnumKey; @Service("requirementAndObligationCreationAction") @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @@ -94,6 +98,8 @@ public class RequirementAndObligationCreationAction extends AbstractSessionActio private final Imdg currImdg; private final TcrSearcher tcrSearcher; private final SecuritySelector secSelector; + private SessionType sessionType; + private TradingClearingRegistry ckTcr; @Autowired public RequirementAndObligationCreationAction(ImdgProvider imdgProvider) { @@ -141,6 +147,7 @@ public class RequirementAndObligationCreationAction extends AbstractSessionActio @SuppressWarnings("unchecked") List list = ctx.getExtendedState().get(DataEnum.dealsPrepared, List.class); Long sessionId = ctx.getExtendedState().get(DataEnum.sessionId, Long.class); + SessionType sessionType = ctx.getExtendedState().get(DataEnum.sessionType, SessionType.class); createRegisters(list, sessionId, null); } finally { doRgsSearch = null; @@ -148,6 +155,7 @@ public class RequirementAndObligationCreationAction extends AbstractSessionActio } protected void createRegisters(List data, Long sessionId, Map rgsStorage) { + this.ckTcr = null; data.sort(tradeTimeComparator.thenComparing(execIdComparator).thenComparing(execMarketComparator)); Map newRgss = rgsStorage != null ? rgsStorage : storageMap(data); //см. описание к #matchExecutions @@ -221,6 +229,12 @@ public class RequirementAndObligationCreationAction extends AbstractSessionActio findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T, true); findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.O, true); } + if (isCk()) { + createRegistryForCK(partyExec, RegistryDesignation.O, newRgss); + createRegistryForCK(partyExec, RegistryDesignation.T, newRgss); + createRegistryForCK(counterExec, RegistryDesignation.O, newRgss); + createRegistryForCK(counterExec, RegistryDesignation.T, newRgss); + } } if (rgsStorage == null) { log.info("batch insert {} registries into map", newRgss.size()); @@ -228,7 +242,48 @@ public class RequirementAndObligationCreationAction extends AbstractSessionActio } } + private boolean isCk() { + return IEnumKey.contains(sessionType, SessionType.PREP, SessionType.PAYM); + } + private void createRegistryForCK( + ExecutionCommon exec, + RegistryDesignation rgsDsgn, + Map newRgss + ) { + if (this.ckTcr == null) { + this.ckTcr = tcrImdg.getSingleObjectByPredicate( + tcrImdg.predicateBuilder().equals("companyId", Sender.CK.getId()) + ); + } + IRegistryBuilder registryBuilder = RegistryCkBuilder.builder(); + Registry newRegister = registryBuilder + //cashes + .dpAccCash(cash.dpAccCash) + .currCash(cash.currCash) + .clrAccCash(cash.clrAccCash) + //imdg + .cmpImdg(cmpImdg) + .tcrImdg(tcrImdg) + .accImdg(accImdg) + .ssnImdg(ssnImdg) + .clAccImdg(clAccImdg) + .dpAccImdg(dpAccImdg) + .currPairSecImdg(currPairSecImdg) + .currPairDictImdg(currPairDictImdg) + .currImdg(currImdg) + .tcrSearcher(tcrSearcher) + .secSelector(secSelector) + .imdg(imdgProvider) + .ckTcr(ckTcr) + .exec(exec) + .registryDesignation(rgsDsgn) + .returnDeposit(false) + .build(); + newRegister.setId(idGen.nextId()); + newRgss.put(newRegister.getId(), newRegister); + log.debug("execution id {}: created rgs.id={}", exec, newRegister.getId()); + } protected boolean searchForRegisters(Long sessionId) { if (sessionId == null) return true;