diff --git a/clearing-parent/fix-service/src/main/java/ru/spcex/clearing/fix/quickfix/Application.java b/clearing-parent/fix-service/src/main/java/ru/spcex/clearing/fix/quickfix/Application.java index 9a94fcf19..c86009742 100644 --- a/clearing-parent/fix-service/src/main/java/ru/spcex/clearing/fix/quickfix/Application.java +++ b/clearing-parent/fix-service/src/main/java/ru/spcex/clearing/fix/quickfix/Application.java @@ -24,7 +24,6 @@ import ru.spcex.platform.imdg.api.ImdgTransaction; import java.math.BigDecimal; import java.time.Instant; import java.time.ZoneOffset; -import java.util.regex.Pattern; @Service public class Application extends MessageCracker implements quickfix.Application, InitializingBean, DisposableBean { @@ -114,7 +113,6 @@ public class Application extends MessageCracker implements quickfix.Application, transaction.beginTransaction(); try { if (executionReport.isSetField(ClOrdID.FIELD) && executionReport.isSetField(ExDestination.FIELD) && executionReport.isSetField(TransactTime.FIELD) && executionReport.isSetField(OrdStatus.FIELD)) { - OrderID orderId = executionReport.getOrderID(); ExDestination exDestination = (ExDestination) executionReport.getField(new ExDestination()); TransactTime transactTime = executionReport.getTransactTime(); OrdStatus ordStatus = executionReport.getOrdStatus(); @@ -123,60 +121,64 @@ public class Application extends MessageCracker implements quickfix.Application, Long orderNum = null; try { orderNum = Long.parseLong(clOrdID.getValue()); - } catch (NumberFormatException ignore) {} - - Imdg sOrdersImdg = transaction.getImdg(IMDGDistributedNames.Map_SOrders, SOrders.class); - SOrders sOrders = sOrdersImdg.getSingleObjectByPredicate(sOrdersImdg.predicateBuilder().and( - sOrdersImdg.predicateBuilder().equals("orderNum", orderNum), - sOrdersImdg.predicateBuilder().equals("classCode", exDestination.getValue()), - sOrdersImdg.predicateBuilder().equals("tradeDate", transactTime.getValue().toLocalDate()))); - if (sOrders == null) { - sOrders = new SOrders(); - sOrders.setId(imdgProvider.getImdgIdGenerator().nextId()); - sOrders.setOrderNum(orderNum); - sOrders.setExchangeOrderNum(orderId.getValue()); - sOrders.setClassCode(exDestination.getValue()); - sOrders.setTradeDate(transactTime.getValue().toLocalDate()); - - if (executionReport.isSetSecurityID()) - sOrders.setSecCode(executionReport.getSecurityID().getValue()); - if (executionReport.isSetPrice()) - sOrders.setPrice(BigDecimal.valueOf(executionReport.getPrice().getValue())); - if (executionReport.isSetOrderQty()) - sOrders.setQty(BigDecimal.valueOf(executionReport.getOrderQty().getValue())); - if (executionReport.isSetAccount()) - sOrders.setAccount(executionReport.getAccount().getValue()); - if (executionReport.isSetSettlType()) - sOrders.setSettleCode(executionReport.getSettlType().getValue()); - if (executionReport.isSetCurrency()) - sOrders.setPriceCurrency(executionReport.getCurrency().getValue()); - - 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.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); + } catch (NumberFormatException e) { + log.warn("failed to parse ClOrdID=" + clOrdID.getValue(), e); } + if (orderNum != null) { + Imdg sOrdersImdg = transaction.getImdg(IMDGDistributedNames.Map_SOrders, SOrders.class); + SOrders sOrders = sOrdersImdg.getSingleObjectByPredicate(sOrdersImdg.predicateBuilder().and( + sOrdersImdg.predicateBuilder().equals("orderNum", orderNum), + sOrdersImdg.predicateBuilder().equals("classCode", exDestination.getValue()), + sOrdersImdg.predicateBuilder().equals("tradeDate", transactTime.getValue().toLocalDate()))); + if (sOrders == null) { + sOrders = new SOrders(); + sOrders.setId(imdgProvider.getImdgIdGenerator().nextId()); + sOrders.setOrderNum(orderNum); + sOrders.setClassCode(exDestination.getValue()); + sOrders.setTradeDate(transactTime.getValue().toLocalDate()); + + if (executionReport.isSetOrderID()) + sOrders.setExchangeOrderNum(executionReport.getOrderID().getValue()); + if (executionReport.isSetSecurityID()) + sOrders.setSecCode(executionReport.getSecurityID().getValue()); + if (executionReport.isSetPrice()) + sOrders.setPrice(BigDecimal.valueOf(executionReport.getPrice().getValue())); + if (executionReport.isSetOrderQty()) + sOrders.setQty(BigDecimal.valueOf(executionReport.getOrderQty().getValue())); + if (executionReport.isSetAccount()) + sOrders.setAccount(executionReport.getAccount().getValue()); + if (executionReport.isSetSettlType()) + sOrders.setSettleCode(executionReport.getSettlType().getValue()); + if (executionReport.isSetCurrency()) + sOrders.setPriceCurrency(executionReport.getCurrency().getValue()); + + 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.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 OrderCurrencyStatusUpdateRequest updateRequest = new OrderCurrencyStatusUpdateRequest(); updateRequest.addId(orderNum); kafkaSender.sendRequestToQueue(Consts.ORDER_CURRENCY_STATUS_UPDATE_FIX, updateRequest); } -// } + } transaction.commitTransaction(); } catch (Exception e) { log.error(executionReport.toString(), e);