mmarkelov 2026-05-25 13:52:23 +03:00
parent f7c774d4f1
commit 29d62c68cb

View file

@ -120,58 +120,56 @@ public class Application extends MessageCracker implements quickfix.Application,
OrdStatus ordStatus = executionReport.getOrdStatus(); OrdStatus ordStatus = executionReport.getOrdStatus();
ClOrdID clOrdID = executionReport.getClOrdID(); ClOrdID clOrdID = executionReport.getClOrdID();
Pattern orderIdPattern = Pattern.compile("(\\d{6})-([A-Z]+)-(\\d+)"); Long orderNum = null;
// Matcher matcher = orderIdPattern.matcher(orderId.getValue()); try {
// if (matcher.matches()) { orderNum = Long.parseLong(clOrdID.getValue());
// LocalDate tradeDate = LocalDate.parse(matcher.group(1), DateTimeFormatter.ofPattern("yyMMdd")); } catch (NumberFormatException ignore) {}
// String classCode = matcher.group(2);
Long orderNum = Long.parseLong(clOrdID.getValue());
Imdg<SOrders> sOrdersImdg = transaction.getImdg(IMDGDistributedNames.Map_SOrders, SOrders.class); Imdg<SOrders> sOrdersImdg = transaction.getImdg(IMDGDistributedNames.Map_SOrders, SOrders.class);
SOrders sOrders = sOrdersImdg.getSingleObjectByPredicate(sOrdersImdg.predicateBuilder().and( SOrders sOrders = sOrdersImdg.getSingleObjectByPredicate(sOrdersImdg.predicateBuilder().and(
sOrdersImdg.predicateBuilder().equals("orderNum", orderNum), sOrdersImdg.predicateBuilder().equals("orderNum", orderNum),
sOrdersImdg.predicateBuilder().equals("classCode", exDestination.getValue()), sOrdersImdg.predicateBuilder().equals("classCode", exDestination.getValue()),
sOrdersImdg.predicateBuilder().equals("tradeDate", transactTime.getValue().toLocalDate()))); sOrdersImdg.predicateBuilder().equals("tradeDate", transactTime.getValue().toLocalDate())));
if (sOrders == null) { if (sOrders == null) {
sOrders = new SOrders(); sOrders = new SOrders();
sOrders.setId(imdgProvider.getImdgIdGenerator().nextId()); sOrders.setId(imdgProvider.getImdgIdGenerator().nextId());
sOrders.setOrderNum(orderNum); sOrders.setOrderNum(orderNum);
sOrders.setExchangeOrderNum(orderId.getValue()); sOrders.setExchangeOrderNum(orderId.getValue());
sOrders.setClassCode(exDestination.getValue()); sOrders.setClassCode(exDestination.getValue());
sOrders.setTradeDate(transactTime.getValue().toLocalDate()); sOrders.setTradeDate(transactTime.getValue().toLocalDate());
if (executionReport.isSetSecurityID()) if (executionReport.isSetSecurityID())
sOrders.setSecCode(executionReport.getSecurityID().getValue()); sOrders.setSecCode(executionReport.getSecurityID().getValue());
if (executionReport.isSetPrice()) if (executionReport.isSetPrice())
sOrders.setPrice(BigDecimal.valueOf(executionReport.getPrice().getValue())); sOrders.setPrice(BigDecimal.valueOf(executionReport.getPrice().getValue()));
if (executionReport.isSetOrderQty()) if (executionReport.isSetOrderQty())
sOrders.setQty(BigDecimal.valueOf(executionReport.getOrderQty().getValue())); sOrders.setQty(BigDecimal.valueOf(executionReport.getOrderQty().getValue()));
if (executionReport.isSetAccount()) if (executionReport.isSetAccount())
sOrders.setAccount(executionReport.getAccount().getValue()); sOrders.setAccount(executionReport.getAccount().getValue());
if (executionReport.isSetSettlType()) if (executionReport.isSetSettlType())
sOrders.setSettleCode(executionReport.getSettlType().getValue()); sOrders.setSettleCode(executionReport.getSettlType().getValue());
if (executionReport.isSetCurrency()) if (executionReport.isSetCurrency())
sOrders.setPriceCurrency(executionReport.getCurrency().getValue()); sOrders.setPriceCurrency(executionReport.getCurrency().getValue());
sOrders.setState(String.valueOf(ordStatus.getValue())); sOrders.setState(String.valueOf(ordStatus.getValue()));
if (ordStatus.valueEquals(OrdStatus.NEW)) { if (ordStatus.valueEquals(OrdStatus.NEW)) {
sOrders.setOrderDateTime(transactTime.getValue().toInstant(ZoneOffset.UTC)); sOrders.setOrderDateTime(transactTime.getValue().toInstant(ZoneOffset.UTC));
} else if (ordStatus.valueEquals(OrdStatus.CANCELED)) { } else if (ordStatus.valueEquals(OrdStatus.CANCELED)) {
sOrders.setWithdrawDateTime(transactTime.getValue().toInstant(ZoneOffset.UTC)); sOrders.setWithdrawDateTime(transactTime.getValue().toInstant(ZoneOffset.UTC));
}
sOrders.setCreated(Instant.now());
sOrdersImdg.insert(sOrders);
} else {
sOrders.setState(String.valueOf(ordStatus.getValue()));
if (ordStatus.valueEquals(OrdStatus.NEW)) {
sOrders.setOrderDateTime(transactTime.getValue().toInstant(ZoneOffset.UTC));
} else if (ordStatus.valueEquals(OrdStatus.CANCELED)) {
sOrders.setWithdrawDateTime(transactTime.getValue().toInstant(ZoneOffset.UTC));
}
sOrders.setUpdated(Instant.now());
sOrdersImdg.update(sOrders);
} }
sOrders.setCreated(Instant.now());
sOrdersImdg.insert(sOrders);
} else {
sOrders.setState(String.valueOf(ordStatus.getValue()));
if (ordStatus.valueEquals(OrdStatus.NEW)) {
sOrders.setOrderDateTime(transactTime.getValue().toInstant(ZoneOffset.UTC));
} else if (ordStatus.valueEquals(OrdStatus.CANCELED)) {
sOrders.setWithdrawDateTime(transactTime.getValue().toInstant(ZoneOffset.UTC));
}
sOrders.setUpdated(Instant.now());
sOrdersImdg.update(sOrders);
}
//send message to df for update orderCurrency status //send message to df for update orderCurrency status
OrderCurrencyStatusUpdateRequest updateRequest = new OrderCurrencyStatusUpdateRequest(); OrderCurrencyStatusUpdateRequest updateRequest = new OrderCurrencyStatusUpdateRequest();