fix RequirementAndObligationCreationAction

This commit is contained in:
etreschenkov 2025-07-09 14:32:12 +03:00
parent 5457773174
commit 70791d8cac

View file

@ -40,6 +40,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.service.TcrSearcher; import ru.spcex.clearing.service.TcrSearcher;
import ru.spcex.clearing.session.stage.TaskType; import ru.spcex.clearing.session.stage.TaskType;
import ru.spcex.clearing.session.stage.impl.IRegistryBuilder; 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.RegistryCurrBuilder;
import ru.spcex.clearing.session.stage.impl.RegistryDepoBuilder; import ru.spcex.clearing.session.stage.impl.RegistryDepoBuilder;
import ru.spcex.clearing.session.stage.impl.RegistryFondBuilder; 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.RegistryInstrumentType;
import ru.spcex.platform.enumeration.RegistryTradingParams; import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.RegistryUnit; 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.enumeration.Side;
import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId; 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.CashV2ByIdAndString;
import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ByString; import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ByString;
import ru.spcex.platform.utils.collection.Pair; import ru.spcex.platform.utils.collection.Pair;
import ru.spcex.platform.utils.enumeration.IEnumKey;
@Service("requirementAndObligationCreationAction") @Service("requirementAndObligationCreationAction")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@ -94,6 +98,8 @@ public class RequirementAndObligationCreationAction extends AbstractSessionActio
private final Imdg<Currency> currImdg; private final Imdg<Currency> currImdg;
private final TcrSearcher tcrSearcher; private final TcrSearcher tcrSearcher;
private final SecuritySelector<Security> secSelector; private final SecuritySelector<Security> secSelector;
private SessionType sessionType;
private TradingClearingRegistry ckTcr;
@Autowired @Autowired
public RequirementAndObligationCreationAction(ImdgProvider imdgProvider) { public RequirementAndObligationCreationAction(ImdgProvider imdgProvider) {
@ -141,6 +147,7 @@ public class RequirementAndObligationCreationAction extends AbstractSessionActio
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<ExecutionCommon> list = ctx.getExtendedState().get(DataEnum.dealsPrepared, List.class); List<ExecutionCommon> list = ctx.getExtendedState().get(DataEnum.dealsPrepared, List.class);
Long sessionId = ctx.getExtendedState().get(DataEnum.sessionId, Long.class); Long sessionId = ctx.getExtendedState().get(DataEnum.sessionId, Long.class);
SessionType sessionType = ctx.getExtendedState().get(DataEnum.sessionType, SessionType.class);
createRegisters(list, sessionId, null); createRegisters(list, sessionId, null);
} finally { } finally {
doRgsSearch = null; doRgsSearch = null;
@ -148,6 +155,7 @@ public class RequirementAndObligationCreationAction extends AbstractSessionActio
} }
protected void createRegisters(List<ExecutionCommon> data, Long sessionId, Map<Long, Registry> rgsStorage) { protected void createRegisters(List<ExecutionCommon> data, Long sessionId, Map<Long, Registry> rgsStorage) {
this.ckTcr = null;
data.sort(tradeTimeComparator.thenComparing(execIdComparator).thenComparing(execMarketComparator)); data.sort(tradeTimeComparator.thenComparing(execIdComparator).thenComparing(execMarketComparator));
Map<Long, Registry> newRgss = rgsStorage != null ? rgsStorage : storageMap(data); Map<Long, Registry> newRgss = rgsStorage != null ? rgsStorage : storageMap(data);
//см. описание к #matchExecutions //см. описание к #matchExecutions
@ -221,6 +229,12 @@ public class RequirementAndObligationCreationAction extends AbstractSessionActio
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T, true); findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T, true);
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.O, 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) { if (rgsStorage == null) {
log.info("batch insert {} registries into map", newRgss.size()); 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<Long, Registry> 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) { protected boolean searchForRegisters(Long sessionId) {
if (sessionId == null) return true; if (sessionId == null) return true;