From 6dcba1dded06074bbf6e40ec76910249bd239535 Mon Sep 17 00:00:00 2001 From: Ivan Nikolaev-Axenov Date: Thu, 22 Aug 2024 11:34:21 +0300 Subject: [PATCH] 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 */