fix RequirementAndObligationCreationAction
This commit is contained in:
parent
5457773174
commit
70791d8cac
1 changed files with 55 additions and 0 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue