fixed 'section' field for strades uploading into clearing

This commit is contained in:
ialbert 2023-05-26 14:15:07 +03:00
parent ec55bd90cb
commit fe18b289a3

View file

@ -8,6 +8,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import ru.clearing.classes.statics.data.misc.Market;
import ru.clearing.classes.statics.data.misc.STrades;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.STradesImportedRequest;
@ -16,6 +17,7 @@ import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.log.ExceptionUtils;
import java.math.BigDecimal;
import java.sql.Date;
@ -26,6 +28,7 @@ import java.time.Instant;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Supplier;
import static ru.spcex.clearing.platform.messaging.domain.Consts.S_TRADES_IMPORTED;
@ -36,6 +39,7 @@ import static ru.spcex.clearing.trade.importer.error.TradeImporterError.sTradesN
public class TradeImporterService {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<STrades> sTradesImdg;
private final Imdg<Market> marketImdg;
private final JdbcTemplate jdbcTemplate;
private final Supplier<KafkaSender> kafka;
private final IMessageResolver messageResolver;
@ -47,6 +51,7 @@ public class TradeImporterService {
public TradeImporterService(ImdgProvider imdgProvider, JdbcTemplate jdbcTemplate, Supplier<KafkaSender> kafka, IMessageResolver messageResolver) {
imdgProvider.waitAvailable();
this.sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
this.marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class);
this.jdbcTemplate = jdbcTemplate;
this.kafka = kafka;
this.messageResolver = messageResolver;
@ -66,7 +71,7 @@ public class TradeImporterService {
int created = 0;
int updated = 0;
for (STrades tradesDb : tradesFromDB) {
if (isValidTrades(tradesDb)) {
if (isValidTrades(tradesDb) && fillNessessaryFields(tradesDb)) {
STrades sTrades = getSTradesFromImdg(tradesDb, sTradesImdg);
if (sTrades != null) {
// Обновление всех полей объекта из БД
@ -97,6 +102,25 @@ public class TradeImporterService {
kafka.get().sendRequestToQueue(S_TRADES_IMPORTED, sTradesImportedRequest);
}
/**
* returns OK - everything is kk
*/
private boolean fillNessessaryFields(STrades tradesDb) {
Consumer<String> logErr = (st) -> log.error("strades {} {} {}", tradesDb.getTradeDate(), tradesDb.getTradeNum(), st);
try {
Market market = marketImdg.getSingleObjectBySQL("code = '%s'".formatted(tradesDb.getClassCode()));
if (market == null) {
logErr.accept("couldn't find market.section for classCode " + tradesDb.getClassCode());
return false;
}
tradesDb.setSection(market.getSection());
return true;
} catch (Exception e) {
logErr.accept(ExceptionUtils.getStackTrace(e));
return false;
}
}
public STrades getSTradesFromImdg(STrades tradesDb, Imdg<STrades> sTradesImdg) {
return sTradesImdg.getSingleObjectByFieldValues(Map.of("tradeDate", tradesDb.getTradeDate(),
"tradeNum", tradesDb.getTradeNum(),