From 6dcba1dded06074bbf6e40ec76910249bd239535 Mon Sep 17 00:00:00 2001 From: Ivan Nikolaev-Axenov Date: Thu, 22 Aug 2024 11:34:21 +0300 Subject: [PATCH 1/2] http://jira.mfd.msk:8088/browse/CLS-731 trade-importer trading day checker fixed --- .../services/TradeImporterService.java | 92 ++++++++++++------- 1 file changed, 58 insertions(+), 34 deletions(-) diff --git a/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/services/TradeImporterService.java b/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/services/TradeImporterService.java index 54c3ac0e9..eb6a68ad4 100644 --- a/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/services/TradeImporterService.java +++ b/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/services/TradeImporterService.java @@ -1,25 +1,7 @@ package ru.spcex.clearing.trade.importer.services; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.jdbc.core.JdbcTemplate; -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.clearing.classes.statics.data.scheduler.ClearingCalendar; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.cud.utilities.STradesImportedRequest; -import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; -import ru.spcex.platform.enumeration.Side; -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 static ru.spcex.clearing.platform.messaging.domain.Consts.S_TRADES_IMPORTED; +import static ru.spcex.clearing.trade.importer.error.TradeImporterError.sTradesNotValid; import java.math.BigDecimal; import java.sql.Date; @@ -35,10 +17,27 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; import java.util.function.Supplier; - -import static ru.spcex.clearing.platform.messaging.domain.Consts.S_TRADES_IMPORTED; -import static ru.spcex.clearing.scheduler.ISchedulerChecker.isWorkDayByTradingCalendar; -import static ru.spcex.clearing.trade.importer.error.TradeImporterError.sTradesNotValid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +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.clearing.classes.statics.data.scheduler.ClearingCalendar; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.utilities.STradesImportedRequest; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.platform.enumeration.DayStatus; +import ru.spcex.platform.enumeration.Side; +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; @Service @EnableScheduling @@ -71,16 +70,8 @@ public class TradeImporterService { } public synchronized void process(boolean byCommand) { - if (!byCommand) { - LocalDate today = LocalDate.now(); - log.debug("Verify trading day {} by calendar", today); - ClearingCalendar calendar = clearingCalendarImdg.getFirstObjectByFieldValues(Map.of("clearingDate", today)); - boolean isWeekend = Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(today.getDayOfWeek()); - boolean isTradingDay = calendar == null ? !isWeekend : isWorkDayByTradingCalendar(calendar, isWeekend); - if (!isTradingDay) { - log.trace("Ignore by scheduler no trading day {}", today); - return; - } + if (!byCommand && !checkTradingDay()) { + return; } log.info("Start process import STrades from DB. byCommand={}", byCommand); if (log.isDebugEnabled()) { @@ -149,6 +140,39 @@ public class TradeImporterService { } } + private boolean checkTradingDay() { + LocalDate today = LocalDate.now(); + log.debug("Verify trading day {} by calendar", today); + + ClearingCalendar calendar = clearingCalendarImdg.getFirstObjectByFieldValues(Map.of("clearingDate", today)); + + boolean isTradingDate; + if (!Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(today.getDayOfWeek())) { + isTradingDate = true; + + if (calendar != null && calendar.getClearingDate() == today) { + if (calendar.getDayStatus().equals(DayStatus.DayOff.toString())) { + isTradingDate = false; + } + } + } else { + isTradingDate = false; + + if (calendar != null && calendar.getClearingDate() == today) { + if (calendar.getDayStatus().equals(DayStatus.Workday.toString())) { + isTradingDate = true; + } + } + } + + if (!isTradingDate) { + log.trace("Ignore by scheduler no trading day {}", today); + return false; + } + + return true; + } + /** * returns OK - everything is kk */ From 7e8b3cc13e1546b5c0273ce369643eff4f4a083f Mon Sep 17 00:00:00 2001 From: Ivan Nikolaev-Axenov Date: Thu, 22 Aug 2024 18:34:50 +0300 Subject: [PATCH 2/2] http://jira.mfd.msk:8088/browse/CLS-741 fixed --- .../services/TradeImporterService.java | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/services/TradeImporterService.java b/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/services/TradeImporterService.java index eb6a68ad4..0b918e84d 100644 --- a/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/services/TradeImporterService.java +++ b/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/services/TradeImporterService.java @@ -78,7 +78,7 @@ public class TradeImporterService { String countQuery = String.format("SELECT count(*) FROM %s.Trades", schema); log.trace("Query: {}", countQuery); Collection tradesCountFromDB = jdbcTemplate.query(countQuery, - (resultSet, i) -> resultSet.getObject(1, Long.class)); + (resultSet, i) -> resultSet.getObject(1, Long.class)); log.debug("Count of Trades in db: {}. Will be loading.", tradesCountFromDB); } @@ -123,7 +123,7 @@ public class TradeImporterService { }); log.debug("From DB {} STrades has loaded. Created {} new STrades, {} updated.", - rows.get(), created.get(), updated.get()); + rows.get(), created.get(), updated.get()); if (created.get() > 0 || (byCommand && updated.get() > 0)) { if (byCommand) { log.debug("Successfully import STrades from DB by command. Send to kafka command, topic={}", S_TRADES_IMPORTED); @@ -150,18 +150,14 @@ public class TradeImporterService { if (!Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(today.getDayOfWeek())) { isTradingDate = true; - if (calendar != null && calendar.getClearingDate() == today) { - if (calendar.getDayStatus().equals(DayStatus.DayOff.toString())) { - isTradingDate = false; - } + if (calendar != null && DayStatus.DayOff.equalsByKey(calendar.getDayStatus())) { + isTradingDate = false; } } else { isTradingDate = false; - if (calendar != null && calendar.getClearingDate() == today) { - if (calendar.getDayStatus().equals(DayStatus.Workday.toString())) { - isTradingDate = true; - } + if (calendar != null && DayStatus.Workday.equalsByKey(calendar.getDayStatus())) { + isTradingDate = true; } } @@ -204,16 +200,16 @@ public class TradeImporterService { public STrades getSTradesFromImdg(STrades tradesDb, Imdg sTradesImdg) { return sTradesImdg.getFirstObjectByFieldValues(Map.of("tradeDate", tradesDb.getTradeDate(), - "tradeNum", tradesDb.getTradeNum(), - "operation", tradesDb.getOperation(), - "classCode", tradesDb.getClassCode())); + "tradeNum", tradesDb.getTradeNum(), + "operation", tradesDb.getOperation(), + "classCode", tradesDb.getClassCode())); } private boolean isValidTrades(STrades trades) { return trades.getTradeDate() != null - && trades.getTradeNum() != null - && StringUtils.hasText(trades.getOperation()) - && trades.getTradeNum() != null; + && trades.getTradeNum() != null + && StringUtils.hasText(trades.getOperation()) + && trades.getTradeNum() != null; } public STrades readSTrades(ResultSet resultSet) throws SQLException {