fix: send message after commit

This commit is contained in:
etreschenkov 2026-05-25 17:50:16 +03:00
parent 724527f00d
commit c1db1714ef

View file

@ -1,13 +1,47 @@
package ru.spcex.clearing.fix.quickfix; package ru.spcex.clearing.fix.quickfix;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.ZoneOffset;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import quickfix.*; import quickfix.ConfigError;
import quickfix.field.*; import quickfix.DecimalField;
import quickfix.DoNotSend;
import quickfix.FieldNotFound;
import quickfix.IncorrectDataFormat;
import quickfix.IncorrectTagValue;
import quickfix.LogFactory;
import quickfix.Message;
import quickfix.MessageFactory;
import quickfix.MessageStoreFactory;
import quickfix.RejectLogon;
import quickfix.Session;
import quickfix.SessionID;
import quickfix.SessionNotFound;
import quickfix.SessionSettings;
import quickfix.SocketInitiator;
import quickfix.StringField;
import quickfix.UnsupportedMessageType;
import quickfix.field.Account;
import quickfix.field.ClOrdID;
import quickfix.field.ContraBroker;
import quickfix.field.ExDestination;
import quickfix.field.HandlInst;
import quickfix.field.OrdStatus;
import quickfix.field.OrdType;
import quickfix.field.OrderQty;
import quickfix.field.Price;
import quickfix.field.SecurityID;
import quickfix.field.SecurityIDSource;
import quickfix.field.SettlType;
import quickfix.field.Side;
import quickfix.field.Text;
import quickfix.field.TransactTime;
import quickfix.fix44.ExecutionReport; import quickfix.fix44.ExecutionReport;
import quickfix.fix44.MessageCracker; import quickfix.fix44.MessageCracker;
import quickfix.fix44.NewOrderSingle; import quickfix.fix44.NewOrderSingle;
@ -21,10 +55,6 @@ import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.ImdgTransaction; import ru.spcex.platform.imdg.api.ImdgTransaction;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.ZoneOffset;
@Service @Service
public class Application extends MessageCracker implements quickfix.Application, InitializingBean, DisposableBean { public class Application extends MessageCracker implements quickfix.Application, InitializingBean, DisposableBean {
private static final Logger log = LoggerFactory.getLogger(Application.class); private static final Logger log = LoggerFactory.getLogger(Application.class);
@ -112,13 +142,13 @@ public class Application extends MessageCracker implements quickfix.Application,
ImdgTransaction transaction = imdgProvider.newTransaction(); ImdgTransaction transaction = imdgProvider.newTransaction();
transaction.beginTransaction(); transaction.beginTransaction();
try { try {
Long orderNum = null;
if (executionReport.isSetField(ClOrdID.FIELD) && executionReport.isSetField(ExDestination.FIELD) && executionReport.isSetField(TransactTime.FIELD) && executionReport.isSetField(OrdStatus.FIELD)) { if (executionReport.isSetField(ClOrdID.FIELD) && executionReport.isSetField(ExDestination.FIELD) && executionReport.isSetField(TransactTime.FIELD) && executionReport.isSetField(OrdStatus.FIELD)) {
ExDestination exDestination = (ExDestination) executionReport.getField(new ExDestination()); ExDestination exDestination = (ExDestination) executionReport.getField(new ExDestination());
TransactTime transactTime = executionReport.getTransactTime(); TransactTime transactTime = executionReport.getTransactTime();
OrdStatus ordStatus = executionReport.getOrdStatus(); OrdStatus ordStatus = executionReport.getOrdStatus();
ClOrdID clOrdID = executionReport.getClOrdID(); ClOrdID clOrdID = executionReport.getClOrdID();
Long orderNum = null;
try { try {
orderNum = Long.parseLong(clOrdID.getValue()); orderNum = Long.parseLong(clOrdID.getValue());
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
@ -172,14 +202,16 @@ public class Application extends MessageCracker implements quickfix.Application,
sOrders.setUpdated(Instant.now()); sOrders.setUpdated(Instant.now());
sOrdersImdg.update(sOrders); sOrdersImdg.update(sOrders);
} }
}
}
transaction.commitTransaction();
if (orderNum != null) {
//send message to df for update orderCurrency status //send message to df for update orderCurrency status
OrderCurrencyStatusUpdateRequest updateRequest = new OrderCurrencyStatusUpdateRequest(); OrderCurrencyStatusUpdateRequest updateRequest = new OrderCurrencyStatusUpdateRequest();
updateRequest.addId(orderNum); updateRequest.addId(orderNum);
kafkaSender.sendRequestToQueue(Consts.ORDER_CURRENCY_STATUS_UPDATE_FIX, updateRequest); kafkaSender.sendRequestToQueue(Consts.ORDER_CURRENCY_STATUS_UPDATE_FIX, updateRequest);
} }
}
transaction.commitTransaction();
} catch (Exception e) { } catch (Exception e) {
log.error(executionReport.toString(), e); log.error(executionReport.toString(), e);
transaction.rollbackTransaction(); transaction.rollbackTransaction();