Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
ialbert 2023-02-08 11:21:38 +03:00
commit 8ae1c18344
3 changed files with 37 additions and 15 deletions

View file

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

View file

@ -181,9 +181,13 @@ public class SdfCreatorBySTLDPayment {
ClearingCategory getClearingCategory(PaymentInstruction paymentInstruction) { ClearingCategory getClearingCategory(PaymentInstruction paymentInstruction) {
ClearingMemberCategory category = clearingMemberCategoryImdg.getSingleObjectByFieldValues( ClearingMemberCategory category = clearingMemberCategoryImdg.getSingleObjectByFieldValues(
Map.of("companyId", paymentInstruction.getSenderId())); Map.of("companyId", paymentInstruction.getSenderId()));
String categoryKey = !TextUtil.isEmpty(category.getClearingMemberCategory()) if (category == null) {
? category.getClearingMemberCategory() : ""; log.trace("ClearingMemberCategory not found by paymentInstruction[{}].companyId={}",
paymentInstruction.getId(), paymentInstruction.getSenderId());
}
String categoryKey = category != null
? category.getClearingMemberCategory() : "";
return IEnumKey.getEnumByKeyOrUndefined(ClearingCategory.class, return IEnumKey.getEnumByKeyOrUndefined(ClearingCategory.class,
categoryKey); categoryKey);
} }

View file

@ -245,8 +245,8 @@ public class PaymentInstructionCreator {
payment1.setSenderId(SPVB_ID); // СПВБ payment1.setSenderId(SPVB_ID); // СПВБ
{ {
String sqlLCA = String.format("securityId = %s and companyId != %s", String sqlLCA = String.format("exchangeExecutionId = %s and side != '%s'",
liabilitiesClaimsAssets.getSecurityId(), liabilitiesClaimsAssets.getCompanyId()); executionDeposit.getExchangeExecutionId(), executionDeposit.getSide());
ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA); ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA);
if (counterExecutionDeposit == null) { if (counterExecutionDeposit == null) {
log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA); log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA);