clearing-service http://jira.mfd.msk:8088/browse/CLS-188 правка ExecutionDepositComponent для http://jira.mfd.msk:8088/browse/CLS-189 - оказалось S_TRADE бывают с одинаковыми tradeNum

This commit is contained in:
AKurakin 2023-02-08 10:58:26 +03:00
parent 150468f823
commit 502a343c55

View file

@ -99,9 +99,12 @@ public class ExecutionDepositComponent {
public void processNewTS() {
log.debug("Start check new S_TRADE after {}", tradingDay);
ImdgPredicateBuilder pb = sTradeImdg.predicateBuilder();
ImdgPredicate sql = pb.greatEqual("tradeDateTime", tradingDay);
Collection<STrade> sTrades = sTradeImdg.getCollectionObjectsByPredicate(sql);
Collection<STrade> sTrades;
{
ImdgPredicateBuilder pb = sTradeImdg.predicateBuilder();
ImdgPredicate sql = pb.greatEqual("tradeDateTime", tradingDay);
sTrades = sTradeImdg.getCollectionObjectsByPredicate(sql);
}
log.info("Found {} new s_trade with trade_num>{}", sTrades.size(), tradeNum);
if (sTrades.isEmpty()) {
@ -130,15 +133,31 @@ public class ExecutionDepositComponent {
}
}
// Необходимо проверять отсутствие ExecutionDeposit с exchangeExecutionId и clearingDate.
// Но при этом, во время создания новых ExecutionDeposit по STrade, TradeNum могут повторяться.
LocalDate today = LocalDate.now();
HashSet<Long> existTradeNumsOfExecutionDeposit = new HashSet<>();
{
Set<Long> tradeNums = sTrades.stream().map(STrade::getTradeNum).filter(Objects::nonNull).collect(Collectors.toSet());
log.debug("Check {} s_trade tradeNum=[{}] on date {}", sTrades.size(), tradeNums, today);
ImdgPredicateBuilder pb = executionDepositImdg.predicateBuilder();
Collection<ExecutionDeposit> existsEDeposit = executionDepositImdg.getCollectionObjectsByPredicate(
pb.and(
pb.in("exchangeExecutionId", tradeNums.toArray(new Comparable[0])),
pb.equals("clearingDate", today)
)
// Map.of("exchangeExecutionId", trade.getTradeNum(),"clearingDate", today)
);
for (ExecutionDeposit ed : existsEDeposit) {
existTradeNumsOfExecutionDeposit.add(ed.getExchangeExecutionId());
}
}
for (STrade trade : sTrades) {
log.trace("Check s_trade[{}].tradeNum={} on date {}", trade.getId(), trade.getTradeNum(), today);
Collection<ExecutionDeposit> existsEDeposit = executionDepositImdg.getCollectionObjectsByFieldValues(Map.of(
"exchangeExecutionId", trade.getTradeNum(),
"clearingDate", today
));
boolean existsEDeposit = existTradeNumsOfExecutionDeposit.contains(trade.getTradeNum());
if (existsEDeposit.isEmpty()) {
if (!existsEDeposit) {
log.trace("S_TRADE[{}] new", trade.getId());
// Проверка secCode
@ -160,8 +179,7 @@ public class ExecutionDepositComponent {
}
} else {
long[] idToLong = existsEDeposit.stream().mapToLong(SpcexObjectBase::getId).toArray();
log.trace("S_TRADE[{}] already has executionDeposit: {}", trade.getId(), Arrays.toString(idToLong));
log.trace("S_TRADE[{}] already has executionDeposit: exchangeExecutionId={} on date {}", trade.getId(), trade.getTradeNum(), today);
}
}